1 | /* Copyright (c) (2010-2013,2015-2019,2021-2023) Apple Inc. All rights reserved. |
2 | * |
3 | * corecrypto is licensed under Apple Inc.’s Internal Use License Agreement (which |
4 | * is contained in the License.txt file distributed with corecrypto) and only to |
5 | * people who accept that license. IMPORTANT: Any license rights granted to you by |
6 | * Apple Inc. (if any) are limited to internal use within your organization only on |
7 | * devices and computers you own or control, for the sole purpose of verifying the |
8 | * security characteristics and correct functioning of the Apple Software. You may |
9 | * not, directly or indirectly, redistribute the Apple Software or any portions thereof. |
10 | */ |
11 | |
12 | #ifndef _CORECRYPTO_CCAES_H_ |
13 | #define _CORECRYPTO_CCAES_H_ |
14 | |
15 | #include <corecrypto/cc_config.h> |
16 | #include <corecrypto/ccmode.h> |
17 | |
18 | CC_PTRCHECK_CAPABLE_HEADER() |
19 | |
20 | #define CCAES_BLOCK_SIZE 16 |
21 | #define CCAES_KEY_SIZE_128 16 |
22 | #define CCAES_KEY_SIZE_192 24 |
23 | #define CCAES_KEY_SIZE_256 32 |
24 | |
25 | #define CCAES_CTR_MAX_PARALLEL_NBLOCKS 8 |
26 | |
27 | extern const struct ccmode_ecb ccaes_ltc_ecb_decrypt_mode; |
28 | extern const struct ccmode_ecb ccaes_ltc_ecb_encrypt_mode; |
29 | |
30 | extern const struct ccmode_cbc ccaes_gladman_cbc_encrypt_mode; |
31 | extern const struct ccmode_cbc ccaes_gladman_cbc_decrypt_mode; |
32 | |
33 | #if CCAES_ARM_ASM |
34 | extern const struct ccmode_ecb ccaes_arm_ecb_encrypt_mode; |
35 | extern const struct ccmode_ecb ccaes_arm_ecb_decrypt_mode; |
36 | |
37 | extern const struct ccmode_cbc ccaes_arm_cbc_encrypt_mode; |
38 | extern const struct ccmode_cbc ccaes_arm_cbc_decrypt_mode; |
39 | |
40 | extern const struct ccmode_xts ccaes_arm_xts_encrypt_mode; |
41 | extern const struct ccmode_xts ccaes_arm_xts_decrypt_mode; |
42 | |
43 | extern const struct ccmode_cfb ccaes_arm_cfb_encrypt_mode; |
44 | extern const struct ccmode_cfb ccaes_arm_cfb_decrypt_mode; |
45 | |
46 | extern const struct ccmode_ofb ccaes_arm_ofb_crypt_mode; |
47 | |
48 | #endif |
49 | |
50 | #if CCAES_INTEL_ASM |
51 | extern const struct ccmode_ecb ccaes_intel_ecb_encrypt_opt_mode; |
52 | extern const struct ccmode_ecb ccaes_intel_ecb_encrypt_aesni_mode; |
53 | |
54 | extern const struct ccmode_ecb ccaes_intel_ecb_decrypt_opt_mode; |
55 | extern const struct ccmode_ecb ccaes_intel_ecb_decrypt_aesni_mode; |
56 | |
57 | extern const struct ccmode_cbc ccaes_intel_cbc_encrypt_opt_mode; |
58 | extern const struct ccmode_cbc ccaes_intel_cbc_encrypt_aesni_mode; |
59 | |
60 | extern const struct ccmode_cbc ccaes_intel_cbc_decrypt_opt_mode; |
61 | extern const struct ccmode_cbc ccaes_intel_cbc_decrypt_aesni_mode; |
62 | |
63 | extern const struct ccmode_xts ccaes_intel_xts_encrypt_opt_mode; |
64 | extern const struct ccmode_xts ccaes_intel_xts_encrypt_aesni_mode; |
65 | |
66 | extern const struct ccmode_xts ccaes_intel_xts_decrypt_opt_mode; |
67 | extern const struct ccmode_xts ccaes_intel_xts_decrypt_aesni_mode; |
68 | #endif |
69 | |
70 | #if CC_USE_L4 |
71 | extern const struct ccmode_cbc ccaes_skg_cbc_encrypt_mode; |
72 | extern const struct ccmode_cbc ccaes_skg_cbc_decrypt_mode; |
73 | |
74 | extern const struct ccmode_ecb ccaes_skg_ecb_encrypt_mode; |
75 | extern const struct ccmode_ecb ccaes_skg_ecb_decrypt_mode; |
76 | |
77 | extern const struct ccmode_ecb ccaes_trng_ecb_encrypt_mode; |
78 | #endif |
79 | |
80 | /* Implementation Selectors: */ |
81 | const struct ccmode_ecb *ccaes_ecb_encrypt_mode(void); |
82 | const struct ccmode_cbc *ccaes_cbc_encrypt_mode(void); |
83 | const struct ccmode_cfb *ccaes_cfb_encrypt_mode(void); |
84 | const struct ccmode_cfb8 *ccaes_cfb8_encrypt_mode(void); |
85 | const struct ccmode_xts *ccaes_xts_encrypt_mode(void); |
86 | const struct ccmode_gcm *ccaes_gcm_encrypt_mode(void); |
87 | const struct ccmode_ccm *ccaes_ccm_encrypt_mode(void); |
88 | |
89 | const struct ccmode_ecb *ccaes_ecb_decrypt_mode(void); |
90 | const struct ccmode_cbc *ccaes_cbc_decrypt_mode(void); |
91 | const struct ccmode_cfb *ccaes_cfb_decrypt_mode(void); |
92 | const struct ccmode_cfb8 *ccaes_cfb8_decrypt_mode(void); |
93 | const struct ccmode_xts *ccaes_xts_decrypt_mode(void); |
94 | const struct ccmode_gcm *ccaes_gcm_decrypt_mode(void); |
95 | const struct ccmode_ccm *ccaes_ccm_decrypt_mode(void); |
96 | |
97 | const struct ccmode_ctr *ccaes_ctr_crypt_mode(void); |
98 | const struct ccmode_ofb *ccaes_ofb_crypt_mode(void); |
99 | |
100 | const struct ccmode_siv *ccaes_siv_encrypt_mode(void); |
101 | const struct ccmode_siv *ccaes_siv_decrypt_mode(void); |
102 | |
103 | const struct ccmode_siv_hmac *ccaes_siv_hmac_sha256_encrypt_mode(void); |
104 | const struct ccmode_siv_hmac *ccaes_siv_hmac_sha256_decrypt_mode(void); |
105 | |
106 | /*! |
107 | @function ccaes_unwind |
108 | @abstract "Unwind" an AES encryption key to the equivalent decryption key. |
109 | |
110 | @param key_nbytes Length in bytes of both the input and output keys |
111 | @param key The input AES encryption key |
112 | @param out The output AES decryption key |
113 | |
114 | @result @p CCERR_OK iff successful. |
115 | @discussion Only AES256 (i.e. 32-byte) keys are supported. This function is not necessary in typical AES usage; consult the maintainers before using it. |
116 | */ |
117 | int ccaes_unwind(size_t key_nbytes, const void *cc_sized_by(key_nbytes) key, void *cc_sized_by(key_nbytes) out); |
118 | |
119 | #endif /* _CORECRYPTO_CCAES_H_ */ |
120 | |