#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;i<hi;++i){
*((uint32_t*)tmp) = ((uint32_t*)(ctx->key[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]
}
}
-void testrun_performance_aes(void){
+void testrun_performance_aes128(void){
uint64_t t;
char str[16];
uint8_t key[32], data[16];
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 *
*****************************************************************************/