Browse code

aes: Avoid illegal read and don't generate more key than we use.

Alex Converse authored on 2011/11/04 10:13:57
Showing 1 changed files
... ...
@@ -222,11 +222,9 @@ int av_aes_init(AVAES *a, const uint8_t *key, int key_bits, int decrypt)
222 222
     a->rounds = rounds;
223 223
 
224 224
     memcpy(tk, key, KC * 4);
225
+    memcpy(a->round_key[0].u8, key, KC * 4);
225 226
 
226
-    for (t = 0; t < (rounds + 1) * 16;) {
227
-        memcpy(a->round_key[0].u8 + t, tk, KC * 4);
228
-        t += KC * 4;
229
-
227
+    for (t = KC * 4; t < (rounds + 1) * 16; t += KC * 4) {
230 228
         for (i = 0; i < 4; i++)
231 229
             tk[0][i] ^= sbox[tk[KC - 1][(i + 1) & 3]];
232 230
         tk[0][0] ^= rcon[rconpointer++];
... ...
@@ -239,6 +237,8 @@ int av_aes_init(AVAES *a, const uint8_t *key, int key_bits, int decrypt)
239 239
                 for (i = 0; i < 4; i++)
240 240
                     tk[j][i] ^= sbox[tk[j - 1][i]];
241 241
         }
242
+
243
+        memcpy(a->round_key[0].u8 + t, tk, KC * 4);
242 244
     }
243 245
 
244 246
     if (decrypt) {