From 6718048fd9038c98523eae722545bb0279e0bc21 Mon Sep 17 00:00:00 2001 From: bg Date: Sun, 4 Jan 2009 21:51:46 +0000 Subject: [PATCH] aes_keyschdule speed up --- aes_enc.c | 2 - aes_keyschedule.c | 21 +++------- test_src/main-aes-test.c | 90 +++++++++++++++++++++++++++++++++++++++- 3 files changed, 95 insertions(+), 18 deletions(-) diff --git a/aes_enc.c b/aes_enc.c index 39be410..7932e52 100644 --- a/aes_enc.c +++ b/aes_enc.c @@ -47,8 +47,6 @@ void aes_shiftrow(void* data, uint8_t shift){ #define GF256MUL_2(a) (gf256mul(2, (a), 0x1b)) #define GF256MUL_3(a) (gf256mul(3, (a), 0x1b)) - - static void aes_enc_round(aes_cipher_state_t* state, const aes_roundkey_t* k){ uint8_t tmp[16]; diff --git a/aes_keyschedule.c b/aes_keyschedule.c index 59b7bf4..429cef6 100644 --- a/aes_keyschedule.c +++ b/aes_keyschedule.c @@ -46,39 +46,30 @@ void aes_rotword(void* a){ #include "uart.h" void aes_init(const void* key, uint16_t keysize_b, aes_genctx_t* ctx){ - uint8_t hi,i,nk; + uint8_t hi,i,nk, next_nk; uint8_t rc=1; uint8_t tmp[4]; - nk=keysize_b/32; + nk=keysize_b>>5; /* 4, 6, 8 */ hi=4*(nk+6+1); memcpy(ctx, key, keysize_b/8); - i=keysize_b/32; + next_nk = nk; for(i=nk;ikey[0].ks))[i-1]; - // uart_putstr_P(PSTR("\r\nDBG: tmp = ")); - // uart_hexdump(tmp, 4); - if(i%nk){ - if(nk>6 && i%nk==4){ + if(i!=next_nk){ + if(nk==8 && i%8==4){ tmp[0] = pgm_read_byte(aes_sbox+tmp[0]); tmp[1] = pgm_read_byte(aes_sbox+tmp[1]); tmp[2] = pgm_read_byte(aes_sbox+tmp[2]); tmp[3] = pgm_read_byte(aes_sbox+tmp[3]); - // uart_putstr_P(PSTR("\r\nDBG: after sub = ")); - // uart_hexdump(tmp, 4); } } else { + next_nk += nk; aes_rotword(tmp); - // uart_putstr_P(PSTR("\r\nDBG: after rot = ")); - // uart_hexdump(tmp, 4); tmp[0] = pgm_read_byte(aes_sbox+tmp[0]); tmp[1] = pgm_read_byte(aes_sbox+tmp[1]); tmp[2] = pgm_read_byte(aes_sbox+tmp[2]); tmp[3] = pgm_read_byte(aes_sbox+tmp[3]); - // uart_putstr_P(PSTR("\r\nDBG: after sub = ")); - // uart_hexdump(tmp, 4); tmp[0] ^= rc; - // uart_putstr_P(PSTR("\r\nDBG: after xor RC = ")); - // uart_hexdump(tmp, 4); rc = gf256mul(2,rc,0x1b); } ((uint32_t*)(ctx->key[0].ks))[i] = ((uint32_t*)(ctx->key[0].ks))[i-nk] diff --git a/test_src/main-aes-test.c b/test_src/main-aes-test.c index ef42626..a051ce8 100644 --- a/test_src/main-aes-test.c +++ b/test_src/main-aes-test.c @@ -113,7 +113,7 @@ void testrun_testkey_aes(void){ } } -void testrun_performance_aes(void){ +void testrun_performance_aes128(void){ uint64_t t; char str[16]; uint8_t key[32], data[16]; @@ -150,6 +150,94 @@ void testrun_performance_aes(void){ uart_putstr_P(PSTR("\r\n")); } + + +void testrun_performance_aes192(void){ + uint64_t t; + char str[16]; + uint8_t key[32], data[16]; + aes192_ctx_t ctx; + + calibrateTimer(); + print_overhead(); + + memset(key, 0, 32); + memset(data, 0, 16); + + startTimer(1); + aes192_init(key, &ctx); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tctx-gen time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + + startTimer(1); + aes192_enc(data, &ctx); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tencrypt time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + + startTimer(1); + aes192_dec(data, &ctx); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tdecrypt time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + uart_putstr_P(PSTR("\r\n")); +} + + +void testrun_performance_aes256(void){ + uint64_t t; + char str[16]; + uint8_t key[32], data[16]; + aes256_ctx_t ctx; + + calibrateTimer(); + print_overhead(); + + memset(key, 0, 32); + memset(data, 0, 16); + + startTimer(1); + aes256_init(key, &ctx); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tctx-gen time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + + startTimer(1); + aes256_enc(data, &ctx); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tencrypt time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + + startTimer(1); + aes256_dec(data, &ctx); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tdecrypt time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + uart_putstr_P(PSTR("\r\n")); +} + +void testrun_performance_aes(void){ + uart_putstr_P(PSTR("\r\n -=AES Performance Test=-\r\n")); + uart_putstr_P(PSTR("\r\n AES-128\r\n")); + testrun_performance_aes128(); + uart_putstr_P(PSTR("\r\n AES-192\r\n")); + testrun_performance_aes192(); + uart_putstr_P(PSTR("\r\n AES-256\r\n")); + testrun_performance_aes256(); +} /***************************************************************************** * main * *****************************************************************************/