@@ -54,6 +54,8 @@ static uint32_t enc_multbl[4][256];
54
54
static uint32_t dec_multbl [4 ][256 ];
55
55
#endif
56
56
57
+ #define ROT (x , s ) ((x << s) | (x >> (32-s)))
58
+
57
59
static inline void addkey (av_aes_block * dst , const av_aes_block * src ,
58
60
const av_aes_block * round_key )
59
61
{
@@ -86,7 +88,6 @@ static void subshift(av_aes_block s0[2], int s, const uint8_t *box)
86
88
87
89
static inline int mix_core (uint32_t multbl [][256 ], int a , int b , int c , int d ){
88
90
#if CONFIG_SMALL
89
- #define ROT (x ,s ) ((x<<s)|(x>>(32-s)))
90
91
return multbl [0 ][a ] ^ ROT (multbl [0 ][b ], 8 ) ^ ROT (multbl [0 ][c ], 16 ) ^ ROT (multbl [0 ][d ], 24 );
91
92
#else
92
93
return multbl [0 ][a ] ^ multbl [1 ][b ] ^ multbl [2 ][c ] ^ multbl [3 ][d ];
@@ -143,22 +144,29 @@ void av_aes_crypt(AVAES *a, uint8_t *dst_, const uint8_t *src_,
143
144
}
144
145
}
145
146
146
- static void init_multbl2 (uint8_t tbl [1024 ], const int c [4 ],
147
+ static void init_multbl2 (uint32_t tbl [][ 256 ], const int c [4 ],
147
148
const uint8_t * log8 , const uint8_t * alog8 ,
148
149
const uint8_t * sbox )
149
150
{
150
- int i , j ;
151
-
152
- for (i = 0 ; i < 1024 ; i ++ ) {
153
- int x = sbox [i >> 2 ];
154
- if (x )
155
- tbl [i ] = alog8 [log8 [x ] + log8 [c [i & 3 ]]];
156
- }
151
+ int i ;
152
+
153
+ for (i = 0 ; i < 256 ; i ++ ) {
154
+ int x = sbox [i ];
155
+ if (x ) {
156
+ int k , l , m , n ;
157
+ x = log8 [x ];
158
+ k = alog8 [x + log8 [c [0 ]]];
159
+ l = alog8 [x + log8 [c [1 ]]];
160
+ m = alog8 [x + log8 [c [2 ]]];
161
+ n = alog8 [x + log8 [c [3 ]]];
162
+ tbl [0 ][i ] = AV_NE (MKBETAG (k ,l ,m ,n ), MKTAG (k ,l ,m ,n ));
157
163
#if !CONFIG_SMALL
158
- for ( j = 256 ; j < 1024 ; j ++ )
159
- for ( i = 0 ; i < 4 ; i ++ )
160
- tbl [4 * j + i ] = tbl [4 * j + (( i - 1 ) & 3 ) - 1024 ] ;
164
+ tbl [ 1 ][ i ] = ROT ( tbl [ 0 ][ i ], 8 );
165
+ tbl [ 2 ][ i ] = ROT ( tbl [ 0 ][ i ], 16 );
166
+ tbl [3 ][ i ] = ROT ( tbl [0 ][ i ], 24 ) ;
161
167
#endif
168
+ }
169
+ }
162
170
}
163
171
164
172
// this is based on the reference AES code by Paulo Barreto and Vincent Rijmen
@@ -187,9 +195,9 @@ int av_aes_init(AVAES *a, const uint8_t *key, int key_bits, int decrypt)
187
195
inv_sbox [j ] = i ;
188
196
sbox [i ] = j ;
189
197
}
190
- init_multbl2 (dec_multbl [ 0 ] , (const int [4 ]) { 0xe , 0x9 , 0xd , 0xb },
198
+ init_multbl2 (dec_multbl , (const int [4 ]) { 0xe , 0x9 , 0xd , 0xb },
191
199
log8 , alog8 , inv_sbox );
192
- init_multbl2 (enc_multbl [ 0 ] , (const int [4 ]) { 0x2 , 0x1 , 0x1 , 0x3 },
200
+ init_multbl2 (enc_multbl , (const int [4 ]) { 0x2 , 0x1 , 0x1 , 0x3 },
193
201
log8 , alog8 , sbox );
194
202
}
195
203
0 commit comments