]> git.cryptolib.org Git - avr-crypto-lib.git/blobdiff - aes_keyschedule.c
aes_keyschdule speed up
[avr-crypto-lib.git] / aes_keyschedule.c
index 59b7bf43704bba261f8e492bec5f4cd4f2a81f40..429cef639fed0c295313e4aabbeae65da09cfbd4 100644 (file)
@@ -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;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]