5#ifndef OPENTITAN_HW_IP_AES_MODEL_AES_H_
6#define OPENTITAN_HW_IP_AES_MODEL_AES_H_
17int aes_encrypt_block(
const unsigned char *plain_text,
const unsigned char *key,
18 const int key_len,
unsigned char *cipher_text);
29int aes_decrypt_block(
const unsigned char *cipher_text,
30 const unsigned char *key,
const int key_len,
31 unsigned char *plain_text);
38void aes_print_block(
const unsigned char *data,
const int num_bytes);
46int aes_get_num_rounds(
const int key_len);
54void aes_add_round_key(
unsigned char *state,
const unsigned char *round_key);
61void aes_sub_bytes(
unsigned char *state);
68void aes_inv_sub_bytes(
unsigned char *state);
75void aes_shift_rows(
unsigned char *state);
82void aes_inv_shift_rows(
unsigned char *state);
89void aes_mix_columns(
unsigned char *state);
96void aes_inv_mix_columns(
unsigned char *state);
107void aes_key_expand(
unsigned char *round_key,
unsigned char *key,
108 const int key_len,
unsigned char *rcon,
const int rnd);
119void aes_inv_key_expand(
unsigned char *round_key,
unsigned char *key,
120 const int key_len,
unsigned char *rcon,
const int rnd);
128void aes_rcon_next(
unsigned char *rcon);
138void aes_rcon_prev(
unsigned char *rcon,
int key_len);
140static const unsigned char sbox[256] = {
141 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5,
142 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
144 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0,
145 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
147 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC,
148 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
150 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A,
151 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
153 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0,
154 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
156 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B,
157 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
159 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85,
160 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
162 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5,
163 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
165 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17,
166 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
168 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88,
169 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
171 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C,
172 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
174 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9,
175 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
177 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6,
178 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
180 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E,
181 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
183 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94,
184 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
186 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68,
187 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16};
189static const unsigned char inv_sbox[256] = {
190 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38,
191 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
193 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
194 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
196 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d,
197 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
199 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2,
200 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
202 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
203 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
205 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda,
206 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
208 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a,
209 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
211 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
212 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
214 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea,
215 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
217 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85,
218 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
220 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
221 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
223 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20,
224 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
226 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31,
227 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
229 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
230 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
232 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0,
233 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
235 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26,
236 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d};