33 #include <platform/romem.h>
36 void aes_rotword(
void *a)
39 t = ((uint8_t*) a)[0];
40 ((uint8_t*) a)[0] = ((uint8_t*) a)[1];
41 ((uint8_t*) a)[1] = ((uint8_t*) a)[2];
42 ((uint8_t*) a)[2] = ((uint8_t*) a)[3];
43 ((uint8_t*) a)[3] = t;
46 #define aes_rc_T_p ROMEM_TABLE_P(rc_tab)
48 const uint8_t rc_tab[] ROMEM = { 0x01, 0x02, 0x04, 0x08,
49 0x10, 0x20, 0x40, 0x80,
54 uint8_t hi, i, nk, next_nk;
61 hi = 4 * (nk + 6 + 1);
62 memcpy(ctx, key, keysize_b / 8);
64 for (i = nk; i < hi; ++i) {
65 tmp.v32 = ((uint32_t*)(
void *)(ctx->key[0].ks))[i - 1];
67 if (nk == 8 && i % 8 == 4) {
68 tmp.v8[0] = ROMEM_READ_BYTE(aes_sbox_T_p + tmp.v8[0]);
69 tmp.v8[1] = ROMEM_READ_BYTE(aes_sbox_T_p + tmp.v8[1]);
70 tmp.v8[2] = ROMEM_READ_BYTE(aes_sbox_T_p + tmp.v8[2]);
71 tmp.v8[3] = ROMEM_READ_BYTE(aes_sbox_T_p + tmp.v8[3]);
75 aes_rotword(&(tmp.v32));
76 tmp.v8[0] = ROMEM_READ_BYTE(aes_sbox_T_p + tmp.v8[0]);
77 tmp.v8[1] = ROMEM_READ_BYTE(aes_sbox_T_p + tmp.v8[1]);
78 tmp.v8[2] = ROMEM_READ_BYTE(aes_sbox_T_p + tmp.v8[2]);
79 tmp.v8[3] = ROMEM_READ_BYTE(aes_sbox_T_p + tmp.v8[3]);
80 tmp.v8[0] ^= ROMEM_READ_BYTE(aes_rc_T_p + rc);
83 ((uint32_t*)(
void *)(ctx->key[0].ks))[i] =
84 ((uint32_t*)(
void *)(ctx->key[0].ks))[i - nk] ^ tmp.v32;
void aes_init(const void *key, uint16_t keysize_b, aes_genctx_t *ctx)
initialize the keyschedule
void aes192_init(const void *key, aes192_ctx_t *ctx)
initialize the keyschedule for 192 bit key
void aes256_init(const void *key, aes256_ctx_t *ctx)
initialize the keyschedule for 256 bit key
void aes128_init(const void *key, aes128_ctx_t *ctx)
initialize the keyschedule for 128 bit key