Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 /* Prototypes of the functions defined in the assembler file. */
6 void intel_aes_encrypt_init_128(const unsigned char *key, PRUint32 *expanded);
7 void intel_aes_encrypt_init_192(const unsigned char *key, PRUint32 *expanded);
8 void intel_aes_encrypt_init_256(const unsigned char *key, PRUint32 *expanded);
9 void intel_aes_decrypt_init_128(const unsigned char *key, PRUint32 *expanded);
10 void intel_aes_decrypt_init_192(const unsigned char *key, PRUint32 *expanded);
11 void intel_aes_decrypt_init_256(const unsigned char *key, PRUint32 *expanded);
12 SECStatus intel_aes_encrypt_ecb_128(AESContext *cx, unsigned char *output,
13 unsigned int *outputLen,
14 unsigned int maxOutputLen,
15 const unsigned char *input,
16 unsigned int inputLen,
17 unsigned int blocksize);
18 SECStatus intel_aes_decrypt_ecb_128(AESContext *cx, unsigned char *output,
19 unsigned int *outputLen,
20 unsigned int maxOutputLen,
21 const unsigned char *input,
22 unsigned int inputLen,
23 unsigned int blocksize);
24 SECStatus intel_aes_encrypt_cbc_128(AESContext *cx, unsigned char *output,
25 unsigned int *outputLen,
26 unsigned int maxOutputLen,
27 const unsigned char *input,
28 unsigned int inputLen,
29 unsigned int blocksize);
30 SECStatus intel_aes_decrypt_cbc_128(AESContext *cx, unsigned char *output,
31 unsigned int *outputLen,
32 unsigned int maxOutputLen,
33 const unsigned char *input,
34 unsigned int inputLen,
35 unsigned int blocksize);
36 SECStatus intel_aes_encrypt_ctr_128(CTRContext *cx, unsigned char *output,
37 unsigned int *outputLen,
38 unsigned int maxOutputLen,
39 const unsigned char *input,
40 unsigned int inputLen,
41 unsigned int blocksize);
42 SECStatus intel_aes_encrypt_ecb_192(AESContext *cx, unsigned char *output,
43 unsigned int *outputLen,
44 unsigned int maxOutputLen,
45 const unsigned char *input,
46 unsigned int inputLen,
47 unsigned int blocksize);
48 SECStatus intel_aes_decrypt_ecb_192(AESContext *cx, unsigned char *output,
49 unsigned int *outputLen,
50 unsigned int maxOutputLen,
51 const unsigned char *input,
52 unsigned int inputLen,
53 unsigned int blocksize);
54 SECStatus intel_aes_encrypt_cbc_192(AESContext *cx, unsigned char *output,
55 unsigned int *outputLen,
56 unsigned int maxOutputLen,
57 const unsigned char *input,
58 unsigned int inputLen,
59 unsigned int blocksize);
60 SECStatus intel_aes_decrypt_cbc_192(AESContext *cx, unsigned char *output,
61 unsigned int *outputLen,
62 unsigned int maxOutputLen,
63 const unsigned char *input,
64 unsigned int inputLen,
65 unsigned int blocksize);
66 SECStatus intel_aes_encrypt_ctr_192(CTRContext *cx, unsigned char *output,
67 unsigned int *outputLen,
68 unsigned int maxOutputLen,
69 const unsigned char *input,
70 unsigned int inputLen,
71 unsigned int blocksize);
72 SECStatus intel_aes_encrypt_ecb_256(AESContext *cx, unsigned char *output,
73 unsigned int *outputLen,
74 unsigned int maxOutputLen,
75 const unsigned char *input,
76 unsigned int inputLen,
77 unsigned int blocksize);
78 SECStatus intel_aes_decrypt_ecb_256(AESContext *cx, unsigned char *output,
79 unsigned int *outputLen,
80 unsigned int maxOutputLen,
81 const unsigned char *input,
82 unsigned int inputLen,
83 unsigned int blocksize);
84 SECStatus intel_aes_encrypt_cbc_256(AESContext *cx, unsigned char *output,
85 unsigned int *outputLen,
86 unsigned int maxOutputLen,
87 const unsigned char *input,
88 unsigned int inputLen,
89 unsigned int blocksize);
90 SECStatus intel_aes_decrypt_cbc_256(AESContext *cx, unsigned char *output,
91 unsigned int *outputLen,
92 unsigned int maxOutputLen,
93 const unsigned char *input,
94 unsigned int inputLen,
95 unsigned int blocksize);
96 SECStatus intel_aes_encrypt_ctr_256(CTRContext *cx, unsigned char *output,
97 unsigned int *outputLen,
98 unsigned int maxOutputLen,
99 const unsigned char *input,
100 unsigned int inputLen,
101 unsigned int blocksize);
104 #define intel_aes_ecb_worker(encrypt, keysize) \
105 ((encrypt) \
106 ? ((keysize) == 16 ? intel_aes_encrypt_ecb_128 : \
107 (keysize) == 24 ? intel_aes_encrypt_ecb_192 : \
108 intel_aes_encrypt_ecb_256) \
109 : ((keysize) == 16 ? intel_aes_decrypt_ecb_128 : \
110 (keysize) == 24 ? intel_aes_decrypt_ecb_192 : \
111 intel_aes_decrypt_ecb_256))
114 #define intel_aes_cbc_worker(encrypt, keysize) \
115 ((encrypt) \
116 ? ((keysize) == 16 ? intel_aes_encrypt_cbc_128 : \
117 (keysize) == 24 ? intel_aes_encrypt_cbc_192 : \
118 intel_aes_encrypt_cbc_256) \
119 : ((keysize) == 16 ? intel_aes_decrypt_cbc_128 : \
120 (keysize) == 24 ? intel_aes_decrypt_cbc_192 : \
121 intel_aes_decrypt_cbc_256))
123 #define intel_aes_ctr_worker(nr) \
124 ((nr) == 10 ? intel_aes_encrypt_ctr_128 : \
125 (nr) == 12 ? intel_aes_encrypt_ctr_192 : \
126 intel_aes_encrypt_ctr_256)
129 #define intel_aes_init(encrypt, keysize) \
130 do { \
131 if (encrypt) { \
132 if (keysize == 16) \
133 intel_aes_encrypt_init_128(key, cx->expandedKey); \
134 else if (keysize == 24) \
135 intel_aes_encrypt_init_192(key, cx->expandedKey); \
136 else \
137 intel_aes_encrypt_init_256(key, cx->expandedKey); \
138 } else { \
139 if (keysize == 16) \
140 intel_aes_decrypt_init_128(key, cx->expandedKey); \
141 else if (keysize == 24) \
142 intel_aes_decrypt_init_192(key, cx->expandedKey); \
143 else \
144 intel_aes_decrypt_init_256(key, cx->expandedKey); \
145 } \
146 } while (0)