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