]>
Commit | Line | Data |
---|---|---|
e4d4fe3c FB |
1 | #ifndef QEMU_AES_H |
2 | #define QEMU_AES_H | |
3 | ||
4 | #define AES_MAXNR 14 | |
5 | #define AES_BLOCK_SIZE 16 | |
6 | ||
7 | struct aes_key_st { | |
8 | uint32_t rd_key[4 *(AES_MAXNR + 1)]; | |
9 | int rounds; | |
10 | }; | |
11 | typedef struct aes_key_st AES_KEY; | |
12 | ||
9f6f7f1a SB |
13 | /* FreeBSD has its own AES_set_decrypt_key in -lcrypto, avoid conflicts */ |
14 | #ifdef __FreeBSD__ | |
15 | #define AES_set_encrypt_key QEMU_AES_set_encrypt_key | |
16 | #define AES_set_decrypt_key QEMU_AES_set_decrypt_key | |
17 | #define AES_encrypt QEMU_AES_encrypt | |
18 | #define AES_decrypt QEMU_AES_decrypt | |
19 | #define AES_cbc_encrypt QEMU_AES_cbc_encrypt | |
20 | #endif | |
21 | ||
e4d4fe3c FB |
22 | int AES_set_encrypt_key(const unsigned char *userKey, const int bits, |
23 | AES_KEY *key); | |
24 | int AES_set_decrypt_key(const unsigned char *userKey, const int bits, | |
25 | AES_KEY *key); | |
26 | ||
27 | void AES_encrypt(const unsigned char *in, unsigned char *out, | |
28 | const AES_KEY *key); | |
29 | void AES_decrypt(const unsigned char *in, unsigned char *out, | |
30 | const AES_KEY *key); | |
31 | void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, | |
32 | const unsigned long length, const AES_KEY *key, | |
33 | unsigned char *ivec, const int enc); | |
34 | ||
40c84b54 TM |
35 | extern const uint8_t AES_sbox[256]; |
36 | extern const uint8_t AES_isbox[256]; | |
37 | ||
1c1a6d20 TM |
38 | /* AES ShiftRows and InvShiftRows */ |
39 | extern const uint8_t AES_shifts[16]; | |
40 | extern const uint8_t AES_ishifts[16]; | |
41 | ||
bfd8f5b7 TM |
42 | /* AES InvMixColumns */ |
43 | /* AES_imc[x][0] = [x].[0e, 09, 0d, 0b]; */ | |
44 | /* AES_imc[x][1] = [x].[0b, 0e, 09, 0d]; */ | |
45 | /* AES_imc[x][2] = [x].[0d, 0b, 0e, 09]; */ | |
46 | /* AES_imc[x][3] = [x].[09, 0d, 0b, 0e]; */ | |
47 | extern const uint32_t AES_imc[256][4]; | |
48 | ||
5d6f5cdd AJ |
49 | /* |
50 | AES_Te0[x] = S [x].[02, 01, 01, 03]; | |
51 | AES_Te1[x] = S [x].[03, 02, 01, 01]; | |
52 | AES_Te2[x] = S [x].[01, 03, 02, 01]; | |
53 | AES_Te3[x] = S [x].[01, 01, 03, 02]; | |
54 | AES_Te4[x] = S [x].[01, 01, 01, 01]; | |
55 | ||
56 | AES_Td0[x] = Si[x].[0e, 09, 0d, 0b]; | |
57 | AES_Td1[x] = Si[x].[0b, 0e, 09, 0d]; | |
58 | AES_Td2[x] = Si[x].[0d, 0b, 0e, 09]; | |
59 | AES_Td3[x] = Si[x].[09, 0d, 0b, 0e]; | |
60 | AES_Td4[x] = Si[x].[01, 01, 01, 01]; | |
61 | */ | |
62 | ||
63 | extern const uint32_t AES_Te0[256], AES_Te1[256], AES_Te2[256], | |
64 | AES_Te3[256], AES_Te4[256]; | |
65 | extern const uint32_t AES_Td0[256], AES_Td1[256], AES_Td2[256], | |
66 | AES_Td3[256], AES_Td4[256]; | |
67 | ||
e4d4fe3c | 68 | #endif |