]> git.cryptolib.org Git - avr-crypto-lib.git/blobdiff - twister.c
twister now in ASM
[avr-crypto-lib.git] / twister.c
index f57ca328fcd596a7a33c62f6a8936d42c8d699b5..af82c139fd2ba9517e13e564df71eafb60ae7552 100644 (file)
--- a/twister.c
+++ b/twister.c
@@ -72,43 +72,47 @@ void shiftrow(void* row, uint8_t shift){
        *((uint64_t*)row) = *((uint64_t*)row)>>(8*shift) | *((uint64_t*)row)<<(64-8*shift);
 }
 
-#define MDS(a,b)  pgm_read_byte(&(twister_mds[a][b]))
+#define MDS(a,b)  pgm_read_byte(&(twister_mds[(a)][(b)]))
 
 #ifdef TWISTER_MUL_TABLE
 # define MULT(a,b) pgm_read_byte(&(twister_multab[a][b]))
 #else
-# define MULT(a,b) gf256mul(a,b, 0x4D)
+# define MULT(a,b) gf256mul((a),(b), 0x4D)
 #endif
 void twister_blank_round(twister_state_t* ctx){
-       uint8_t i,j;
+       uint8_t i,j,k=0;
        uint8_t tmp[8][8];
        DEBUG_PRINT(ctx, "blank init");
        /* add twist counter */
-       for(i=0; i<8; ++i)
+       for(i=0; i<8; ++i){
                ctx->s[i][1] ^= ((uint8_t*)&(ctx->counter))[7-i];
+       }
        ctx->counter--;
 //     DEBUG_PRINT(ctx, "counter added");
        /* sub bytes */
-       for(i=0; i<8; ++i)
-               for(j=0;j<8;++j)
+       for(i=0; i<8; ++i){
+               for(j=0;j<8;++j){
                        tmp[i][j] = pgm_read_byte(twister_sbox+ctx->s[i][j]);
-       /* shift rows */
-       for(i=1;i<8; ++i){
-               shiftrow(&(tmp[i][0]), i);
+               }
        }
+       /* shift rows */
+//     for(i=1;i<8; ++i){
+//             shiftrow(&(tmp[i][0]), i);
+//     }
        /* mix columns */
        for( i=0; i<8; i++ ){
                // multiply with mds matrix
                for( j=0; j<8; j++ ){
+                       k=(i+1)&7;
                        ctx->s[j][i] =
                                MULT( MDS(j,0), tmp[0][i] ) ^
-                               MULT( MDS(j,1), tmp[1][i] ) ^
-                               MULT( MDS(j,2), tmp[2][i] ) ^
-                               MULT( MDS(j,3), tmp[3][i] ) ^
-                               MULT( MDS(j,4), tmp[4][i] ) ^
-                               MULT( MDS(j,5), tmp[5][i] ) ^
-                               MULT( MDS(j,6), tmp[6][i] ) ^
-                               MULT( MDS(j,7), tmp[7][i] ) ;
+                               MULT( MDS(j,1), tmp[1][k] ) ^
+                               MULT( MDS(j,2), tmp[2][(++k)&7] ) ^
+                               MULT( MDS(j,3), tmp[3][(++k)&7] ) ^
+                               MULT( MDS(j,4), tmp[4][(++k)&7] ) ^
+                               MULT( MDS(j,5), tmp[5][(++k)&7] ) ^
+                               MULT( MDS(j,6), tmp[6][(++k)&7] ) ^
+                               MULT( MDS(j,7), tmp[7][(++k)&7] ) ;
                                
                }       
        }