9e052883 |
1 | /* Aes.h -- AES encryption / decryption\r |
2 | 2018-04-28 : Igor Pavlov : Public domain */\r |
3 | \r |
4 | #ifndef __AES_H\r |
5 | #define __AES_H\r |
6 | \r |
7 | #include "7zTypes.h"\r |
8 | \r |
9 | EXTERN_C_BEGIN\r |
10 | \r |
11 | #define AES_BLOCK_SIZE 16\r |
12 | \r |
13 | /* Call AesGenTables one time before other AES functions */\r |
14 | void AesGenTables(void);\r |
15 | \r |
16 | /* UInt32 pointers must be 16-byte aligned */\r |
17 | \r |
18 | /* 16-byte (4 * 32-bit words) blocks: 1 (IV) + 1 (keyMode) + 15 (AES-256 roundKeys) */\r |
19 | #define AES_NUM_IVMRK_WORDS ((1 + 1 + 15) * 4)\r |
20 | \r |
21 | /* aes - 16-byte aligned pointer to keyMode+roundKeys sequence */\r |
22 | /* keySize = 16 or 24 or 32 (bytes) */\r |
23 | typedef void (MY_FAST_CALL *AES_SET_KEY_FUNC)(UInt32 *aes, const Byte *key, unsigned keySize);\r |
24 | void MY_FAST_CALL Aes_SetKey_Enc(UInt32 *aes, const Byte *key, unsigned keySize);\r |
25 | void MY_FAST_CALL Aes_SetKey_Dec(UInt32 *aes, const Byte *key, unsigned keySize);\r |
26 | \r |
27 | /* ivAes - 16-byte aligned pointer to iv+keyMode+roundKeys sequence: UInt32[AES_NUM_IVMRK_WORDS] */\r |
28 | void AesCbc_Init(UInt32 *ivAes, const Byte *iv); /* iv size is AES_BLOCK_SIZE */\r |
29 | \r |
30 | /* data - 16-byte aligned pointer to data */\r |
31 | /* numBlocks - the number of 16-byte blocks in data array */\r |
32 | typedef void (MY_FAST_CALL *AES_CODE_FUNC)(UInt32 *ivAes, Byte *data, size_t numBlocks);\r |
33 | \r |
34 | extern AES_CODE_FUNC g_AesCbc_Decode;\r |
35 | #ifndef _SFX\r |
36 | extern AES_CODE_FUNC g_AesCbc_Encode;\r |
37 | extern AES_CODE_FUNC g_AesCtr_Code;\r |
38 | #define k_Aes_SupportedFunctions_HW (1 << 2)\r |
39 | #define k_Aes_SupportedFunctions_HW_256 (1 << 3)\r |
40 | extern UInt32 g_Aes_SupportedFunctions_Flags;\r |
41 | #endif\r |
42 | \r |
43 | \r |
44 | #define DECLARE__AES_CODE_FUNC(funcName) \\r |
45 | void MY_FAST_CALL funcName(UInt32 *ivAes, Byte *data, size_t numBlocks);\r |
46 | \r |
47 | DECLARE__AES_CODE_FUNC (AesCbc_Encode)\r |
48 | DECLARE__AES_CODE_FUNC (AesCbc_Decode)\r |
49 | DECLARE__AES_CODE_FUNC (AesCtr_Code)\r |
50 | \r |
51 | DECLARE__AES_CODE_FUNC (AesCbc_Encode_HW)\r |
52 | DECLARE__AES_CODE_FUNC (AesCbc_Decode_HW)\r |
53 | DECLARE__AES_CODE_FUNC (AesCtr_Code_HW)\r |
54 | \r |
55 | DECLARE__AES_CODE_FUNC (AesCbc_Decode_HW_256)\r |
56 | DECLARE__AES_CODE_FUNC (AesCtr_Code_HW_256)\r |
57 | \r |
58 | EXTERN_C_END\r |
59 | \r |
60 | #endif\r |