diff options
-rw-r--r-- | src/lib/libcrypto/aes/aes.h | 4 | ||||
-rw-r--r-- | src/lib/libcrypto/aes/aes_ige.c | 112 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/aes/aes.h | 4 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/aes/aes_ige.c | 112 | ||||
-rw-r--r-- | src/regress/lib/libcrypto/ige/igetest.c | 134 |
5 files changed, 0 insertions, 366 deletions
diff --git a/src/lib/libcrypto/aes/aes.h b/src/lib/libcrypto/aes/aes.h index d05f803494..0b3db6420b 100644 --- a/src/lib/libcrypto/aes/aes.h +++ b/src/lib/libcrypto/aes/aes.h | |||
@@ -117,10 +117,6 @@ void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out, | |||
117 | /* NB: the IV is _two_ blocks long */ | 117 | /* NB: the IV is _two_ blocks long */ |
118 | void AES_ige_encrypt(const unsigned char *in, unsigned char *out, | 118 | void AES_ige_encrypt(const unsigned char *in, unsigned char *out, |
119 | size_t length, const AES_KEY *key, unsigned char *ivec, const int enc); | 119 | size_t length, const AES_KEY *key, unsigned char *ivec, const int enc); |
120 | /* NB: the IV is _four_ blocks long */ | ||
121 | void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out, | ||
122 | size_t length, const AES_KEY *key, const AES_KEY *key2, | ||
123 | const unsigned char *ivec, const int enc); | ||
124 | 120 | ||
125 | int AES_wrap_key(AES_KEY *key, const unsigned char *iv, unsigned char *out, | 121 | int AES_wrap_key(AES_KEY *key, const unsigned char *iv, unsigned char *out, |
126 | const unsigned char *in, unsigned int inlen); | 122 | const unsigned char *in, unsigned int inlen); |
diff --git a/src/lib/libcrypto/aes/aes_ige.c b/src/lib/libcrypto/aes/aes_ige.c index 0882a3d853..883dff7d29 100644 --- a/src/lib/libcrypto/aes/aes_ige.c +++ b/src/lib/libcrypto/aes/aes_ige.c | |||
@@ -194,115 +194,3 @@ AES_ige_encrypt(const unsigned char *in, unsigned char *out, size_t length, | |||
194 | } | 194 | } |
195 | } | 195 | } |
196 | } | 196 | } |
197 | |||
198 | /* | ||
199 | * Note that its effectively impossible to do biIGE in anything other | ||
200 | * than a single pass, so no provision is made for chaining. | ||
201 | */ | ||
202 | |||
203 | /* N.B. The IV for this mode is _four times_ the block size */ | ||
204 | |||
205 | void | ||
206 | AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out, size_t length, | ||
207 | const AES_KEY *key, const AES_KEY *key2, const unsigned char *ivec, | ||
208 | const int enc) | ||
209 | { | ||
210 | size_t n; | ||
211 | size_t len = length; | ||
212 | unsigned char tmp[AES_BLOCK_SIZE]; | ||
213 | unsigned char tmp2[AES_BLOCK_SIZE]; | ||
214 | unsigned char tmp3[AES_BLOCK_SIZE]; | ||
215 | unsigned char prev[AES_BLOCK_SIZE]; | ||
216 | const unsigned char *iv; | ||
217 | const unsigned char *iv2; | ||
218 | |||
219 | OPENSSL_assert(in && out && key && ivec); | ||
220 | OPENSSL_assert((AES_ENCRYPT == enc) || (AES_DECRYPT == enc)); | ||
221 | OPENSSL_assert((length % AES_BLOCK_SIZE) == 0); | ||
222 | |||
223 | if (AES_ENCRYPT == enc) { | ||
224 | /* XXX: Do a separate case for when in != out (strictly should | ||
225 | check for overlap, too) */ | ||
226 | |||
227 | /* First the forward pass */ | ||
228 | iv = ivec; | ||
229 | iv2 = ivec + AES_BLOCK_SIZE; | ||
230 | while (len >= AES_BLOCK_SIZE) { | ||
231 | for (n = 0; n < AES_BLOCK_SIZE; ++n) | ||
232 | out[n] = in[n] ^ iv[n]; | ||
233 | AES_encrypt(out, out, key); | ||
234 | for (n = 0; n < AES_BLOCK_SIZE; ++n) | ||
235 | out[n] ^= iv2[n]; | ||
236 | iv = out; | ||
237 | memcpy(prev, in, AES_BLOCK_SIZE); | ||
238 | iv2 = prev; | ||
239 | len -= AES_BLOCK_SIZE; | ||
240 | in += AES_BLOCK_SIZE; | ||
241 | out += AES_BLOCK_SIZE; | ||
242 | } | ||
243 | |||
244 | /* And now backwards */ | ||
245 | iv = ivec + AES_BLOCK_SIZE*2; | ||
246 | iv2 = ivec + AES_BLOCK_SIZE*3; | ||
247 | len = length; | ||
248 | while (len >= AES_BLOCK_SIZE) { | ||
249 | out -= AES_BLOCK_SIZE; | ||
250 | /* XXX: reduce copies by alternating between buffers */ | ||
251 | memcpy(tmp, out, AES_BLOCK_SIZE); | ||
252 | for (n = 0; n < AES_BLOCK_SIZE; ++n) | ||
253 | out[n] ^= iv[n]; | ||
254 | /* hexdump(stdout, "out ^ iv", out, AES_BLOCK_SIZE); */ | ||
255 | AES_encrypt(out, out, key); | ||
256 | /* hexdump(stdout,"enc", out, AES_BLOCK_SIZE); */ | ||
257 | /* hexdump(stdout,"iv2", iv2, AES_BLOCK_SIZE); */ | ||
258 | for (n = 0; n < AES_BLOCK_SIZE; ++n) | ||
259 | out[n] ^= iv2[n]; | ||
260 | /* hexdump(stdout,"out", out, AES_BLOCK_SIZE); */ | ||
261 | iv = out; | ||
262 | memcpy(prev, tmp, AES_BLOCK_SIZE); | ||
263 | iv2 = prev; | ||
264 | len -= AES_BLOCK_SIZE; | ||
265 | } | ||
266 | } else { | ||
267 | /* First backwards */ | ||
268 | iv = ivec + AES_BLOCK_SIZE*2; | ||
269 | iv2 = ivec + AES_BLOCK_SIZE*3; | ||
270 | in += length; | ||
271 | out += length; | ||
272 | while (len >= AES_BLOCK_SIZE) { | ||
273 | in -= AES_BLOCK_SIZE; | ||
274 | out -= AES_BLOCK_SIZE; | ||
275 | memcpy(tmp, in, AES_BLOCK_SIZE); | ||
276 | memcpy(tmp2, in, AES_BLOCK_SIZE); | ||
277 | for (n = 0; n < AES_BLOCK_SIZE; ++n) | ||
278 | tmp[n] ^= iv2[n]; | ||
279 | AES_decrypt(tmp, out, key); | ||
280 | for (n = 0; n < AES_BLOCK_SIZE; ++n) | ||
281 | out[n] ^= iv[n]; | ||
282 | memcpy(tmp3, tmp2, AES_BLOCK_SIZE); | ||
283 | iv = tmp3; | ||
284 | iv2 = out; | ||
285 | len -= AES_BLOCK_SIZE; | ||
286 | } | ||
287 | |||
288 | /* And now forwards */ | ||
289 | iv = ivec; | ||
290 | iv2 = ivec + AES_BLOCK_SIZE; | ||
291 | len = length; | ||
292 | while (len >= AES_BLOCK_SIZE) { | ||
293 | memcpy(tmp, out, AES_BLOCK_SIZE); | ||
294 | memcpy(tmp2, out, AES_BLOCK_SIZE); | ||
295 | for (n = 0; n < AES_BLOCK_SIZE; ++n) | ||
296 | tmp[n] ^= iv2[n]; | ||
297 | AES_decrypt(tmp, out, key); | ||
298 | for (n = 0; n < AES_BLOCK_SIZE; ++n) | ||
299 | out[n] ^= iv[n]; | ||
300 | memcpy(tmp3, tmp2, AES_BLOCK_SIZE); | ||
301 | iv = tmp3; | ||
302 | iv2 = out; | ||
303 | len -= AES_BLOCK_SIZE; | ||
304 | in += AES_BLOCK_SIZE; | ||
305 | out += AES_BLOCK_SIZE; | ||
306 | } | ||
307 | } | ||
308 | } | ||
diff --git a/src/lib/libssl/src/crypto/aes/aes.h b/src/lib/libssl/src/crypto/aes/aes.h index d05f803494..0b3db6420b 100644 --- a/src/lib/libssl/src/crypto/aes/aes.h +++ b/src/lib/libssl/src/crypto/aes/aes.h | |||
@@ -117,10 +117,6 @@ void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out, | |||
117 | /* NB: the IV is _two_ blocks long */ | 117 | /* NB: the IV is _two_ blocks long */ |
118 | void AES_ige_encrypt(const unsigned char *in, unsigned char *out, | 118 | void AES_ige_encrypt(const unsigned char *in, unsigned char *out, |
119 | size_t length, const AES_KEY *key, unsigned char *ivec, const int enc); | 119 | size_t length, const AES_KEY *key, unsigned char *ivec, const int enc); |
120 | /* NB: the IV is _four_ blocks long */ | ||
121 | void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out, | ||
122 | size_t length, const AES_KEY *key, const AES_KEY *key2, | ||
123 | const unsigned char *ivec, const int enc); | ||
124 | 120 | ||
125 | int AES_wrap_key(AES_KEY *key, const unsigned char *iv, unsigned char *out, | 121 | int AES_wrap_key(AES_KEY *key, const unsigned char *iv, unsigned char *out, |
126 | const unsigned char *in, unsigned int inlen); | 122 | const unsigned char *in, unsigned int inlen); |
diff --git a/src/lib/libssl/src/crypto/aes/aes_ige.c b/src/lib/libssl/src/crypto/aes/aes_ige.c index 0882a3d853..883dff7d29 100644 --- a/src/lib/libssl/src/crypto/aes/aes_ige.c +++ b/src/lib/libssl/src/crypto/aes/aes_ige.c | |||
@@ -194,115 +194,3 @@ AES_ige_encrypt(const unsigned char *in, unsigned char *out, size_t length, | |||
194 | } | 194 | } |
195 | } | 195 | } |
196 | } | 196 | } |
197 | |||
198 | /* | ||
199 | * Note that its effectively impossible to do biIGE in anything other | ||
200 | * than a single pass, so no provision is made for chaining. | ||
201 | */ | ||
202 | |||
203 | /* N.B. The IV for this mode is _four times_ the block size */ | ||
204 | |||
205 | void | ||
206 | AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out, size_t length, | ||
207 | const AES_KEY *key, const AES_KEY *key2, const unsigned char *ivec, | ||
208 | const int enc) | ||
209 | { | ||
210 | size_t n; | ||
211 | size_t len = length; | ||
212 | unsigned char tmp[AES_BLOCK_SIZE]; | ||
213 | unsigned char tmp2[AES_BLOCK_SIZE]; | ||
214 | unsigned char tmp3[AES_BLOCK_SIZE]; | ||
215 | unsigned char prev[AES_BLOCK_SIZE]; | ||
216 | const unsigned char *iv; | ||
217 | const unsigned char *iv2; | ||
218 | |||
219 | OPENSSL_assert(in && out && key && ivec); | ||
220 | OPENSSL_assert((AES_ENCRYPT == enc) || (AES_DECRYPT == enc)); | ||
221 | OPENSSL_assert((length % AES_BLOCK_SIZE) == 0); | ||
222 | |||
223 | if (AES_ENCRYPT == enc) { | ||
224 | /* XXX: Do a separate case for when in != out (strictly should | ||
225 | check for overlap, too) */ | ||
226 | |||
227 | /* First the forward pass */ | ||
228 | iv = ivec; | ||
229 | iv2 = ivec + AES_BLOCK_SIZE; | ||
230 | while (len >= AES_BLOCK_SIZE) { | ||
231 | for (n = 0; n < AES_BLOCK_SIZE; ++n) | ||
232 | out[n] = in[n] ^ iv[n]; | ||
233 | AES_encrypt(out, out, key); | ||
234 | for (n = 0; n < AES_BLOCK_SIZE; ++n) | ||
235 | out[n] ^= iv2[n]; | ||
236 | iv = out; | ||
237 | memcpy(prev, in, AES_BLOCK_SIZE); | ||
238 | iv2 = prev; | ||
239 | len -= AES_BLOCK_SIZE; | ||
240 | in += AES_BLOCK_SIZE; | ||
241 | out += AES_BLOCK_SIZE; | ||
242 | } | ||
243 | |||
244 | /* And now backwards */ | ||
245 | iv = ivec + AES_BLOCK_SIZE*2; | ||
246 | iv2 = ivec + AES_BLOCK_SIZE*3; | ||
247 | len = length; | ||
248 | while (len >= AES_BLOCK_SIZE) { | ||
249 | out -= AES_BLOCK_SIZE; | ||
250 | /* XXX: reduce copies by alternating between buffers */ | ||
251 | memcpy(tmp, out, AES_BLOCK_SIZE); | ||
252 | for (n = 0; n < AES_BLOCK_SIZE; ++n) | ||
253 | out[n] ^= iv[n]; | ||
254 | /* hexdump(stdout, "out ^ iv", out, AES_BLOCK_SIZE); */ | ||
255 | AES_encrypt(out, out, key); | ||
256 | /* hexdump(stdout,"enc", out, AES_BLOCK_SIZE); */ | ||
257 | /* hexdump(stdout,"iv2", iv2, AES_BLOCK_SIZE); */ | ||
258 | for (n = 0; n < AES_BLOCK_SIZE; ++n) | ||
259 | out[n] ^= iv2[n]; | ||
260 | /* hexdump(stdout,"out", out, AES_BLOCK_SIZE); */ | ||
261 | iv = out; | ||
262 | memcpy(prev, tmp, AES_BLOCK_SIZE); | ||
263 | iv2 = prev; | ||
264 | len -= AES_BLOCK_SIZE; | ||
265 | } | ||
266 | } else { | ||
267 | /* First backwards */ | ||
268 | iv = ivec + AES_BLOCK_SIZE*2; | ||
269 | iv2 = ivec + AES_BLOCK_SIZE*3; | ||
270 | in += length; | ||
271 | out += length; | ||
272 | while (len >= AES_BLOCK_SIZE) { | ||
273 | in -= AES_BLOCK_SIZE; | ||
274 | out -= AES_BLOCK_SIZE; | ||
275 | memcpy(tmp, in, AES_BLOCK_SIZE); | ||
276 | memcpy(tmp2, in, AES_BLOCK_SIZE); | ||
277 | for (n = 0; n < AES_BLOCK_SIZE; ++n) | ||
278 | tmp[n] ^= iv2[n]; | ||
279 | AES_decrypt(tmp, out, key); | ||
280 | for (n = 0; n < AES_BLOCK_SIZE; ++n) | ||
281 | out[n] ^= iv[n]; | ||
282 | memcpy(tmp3, tmp2, AES_BLOCK_SIZE); | ||
283 | iv = tmp3; | ||
284 | iv2 = out; | ||
285 | len -= AES_BLOCK_SIZE; | ||
286 | } | ||
287 | |||
288 | /* And now forwards */ | ||
289 | iv = ivec; | ||
290 | iv2 = ivec + AES_BLOCK_SIZE; | ||
291 | len = length; | ||
292 | while (len >= AES_BLOCK_SIZE) { | ||
293 | memcpy(tmp, out, AES_BLOCK_SIZE); | ||
294 | memcpy(tmp2, out, AES_BLOCK_SIZE); | ||
295 | for (n = 0; n < AES_BLOCK_SIZE; ++n) | ||
296 | tmp[n] ^= iv2[n]; | ||
297 | AES_decrypt(tmp, out, key); | ||
298 | for (n = 0; n < AES_BLOCK_SIZE; ++n) | ||
299 | out[n] ^= iv[n]; | ||
300 | memcpy(tmp3, tmp2, AES_BLOCK_SIZE); | ||
301 | iv = tmp3; | ||
302 | iv2 = out; | ||
303 | len -= AES_BLOCK_SIZE; | ||
304 | in += AES_BLOCK_SIZE; | ||
305 | out += AES_BLOCK_SIZE; | ||
306 | } | ||
307 | } | ||
308 | } | ||
diff --git a/src/regress/lib/libcrypto/ige/igetest.c b/src/regress/lib/libcrypto/ige/igetest.c index 1ba900244d..b3e7280bbd 100644 --- a/src/regress/lib/libcrypto/ige/igetest.c +++ b/src/regress/lib/libcrypto/ige/igetest.c | |||
@@ -118,76 +118,6 @@ static struct ige_test const ige_test_vectors[] = { | |||
118 | 32, AES_DECRYPT }, /* test vector 1 */ | 118 | 32, AES_DECRYPT }, /* test vector 1 */ |
119 | }; | 119 | }; |
120 | 120 | ||
121 | struct bi_ige_test | ||
122 | { | ||
123 | const unsigned char key1[32]; | ||
124 | const unsigned char key2[32]; | ||
125 | const unsigned char iv[64]; | ||
126 | const unsigned char in[MAX_VECTOR_SIZE]; | ||
127 | const unsigned char out[MAX_VECTOR_SIZE]; | ||
128 | const size_t keysize; | ||
129 | const size_t length; | ||
130 | const int encrypt; | ||
131 | }; | ||
132 | |||
133 | static struct bi_ige_test const bi_ige_test_vectors[] = { | ||
134 | { { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, | ||
135 | 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, /* key1 */ | ||
136 | { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, | ||
137 | 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }, /* key2 */ | ||
138 | { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, | ||
139 | 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, | ||
140 | 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, | ||
141 | 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, | ||
142 | 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, | ||
143 | 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, | ||
144 | 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, | ||
145 | 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f }, /* iv */ | ||
146 | { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
147 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
148 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
149 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* in */ | ||
150 | { 0x14, 0x40, 0x6f, 0xae, 0xa2, 0x79, 0xf2, 0x56, | ||
151 | 0x1f, 0x86, 0xeb, 0x3b, 0x7d, 0xff, 0x53, 0xdc, | ||
152 | 0x4e, 0x27, 0x0c, 0x03, 0xde, 0x7c, 0xe5, 0x16, | ||
153 | 0x6a, 0x9c, 0x20, 0x33, 0x9d, 0x33, 0xfe, 0x12 }, /* out */ | ||
154 | 16, 32, AES_ENCRYPT }, /* test vector 0 */ | ||
155 | { { 0x58, 0x0a, 0x06, 0xe9, 0x97, 0x07, 0x59, 0x5c, | ||
156 | 0x9e, 0x19, 0xd2, 0xa7, 0xbb, 0x40, 0x2b, 0x7a, | ||
157 | 0xc7, 0xd8, 0x11, 0x9e, 0x4c, 0x51, 0x35, 0x75, | ||
158 | 0x64, 0x28, 0x0f, 0x23, 0xad, 0x74, 0xac, 0x37 }, /* key1 */ | ||
159 | { 0xd1, 0x80, 0xa0, 0x31, 0x47, 0xa3, 0x11, 0x13, | ||
160 | 0x86, 0x26, 0x9e, 0x6d, 0xff, 0xaf, 0x72, 0x74, | ||
161 | 0x5b, 0xa2, 0x35, 0x81, 0xd2, 0xa6, 0x3d, 0x21, | ||
162 | 0x67, 0x7b, 0x58, 0xa8, 0x18, 0xf9, 0x72, 0xe4 }, /* key2 */ | ||
163 | { 0x80, 0x3d, 0xbd, 0x4c, 0xe6, 0x7b, 0x06, 0xa9, | ||
164 | 0x53, 0x35, 0xd5, 0x7e, 0x71, 0xc1, 0x70, 0x70, | ||
165 | 0x74, 0x9a, 0x00, 0x28, 0x0c, 0xbf, 0x6c, 0x42, | ||
166 | 0x9b, 0xa4, 0xdd, 0x65, 0x11, 0x77, 0x7c, 0x67, | ||
167 | 0xfe, 0x76, 0x0a, 0xf0, 0xd5, 0xc6, 0x6e, 0x6a, | ||
168 | 0xe7, 0x5e, 0x4c, 0xf2, 0x7e, 0x9e, 0xf9, 0x20, | ||
169 | 0x0e, 0x54, 0x6f, 0x2d, 0x8a, 0x8d, 0x7e, 0xbd, | ||
170 | 0x48, 0x79, 0x37, 0x99, 0xff, 0x27, 0x93, 0xa3 }, /* iv */ | ||
171 | { 0xf1, 0x54, 0x3d, 0xca, 0xfe, 0xb5, 0xef, 0x1c, | ||
172 | 0x4f, 0xa6, 0x43, 0xf6, 0xe6, 0x48, 0x57, 0xf0, | ||
173 | 0xee, 0x15, 0x7f, 0xe3, 0xe7, 0x2f, 0xd0, 0x2f, | ||
174 | 0x11, 0x95, 0x7a, 0x17, 0x00, 0xab, 0xa7, 0x0b, | ||
175 | 0xbe, 0x44, 0x09, 0x9c, 0xcd, 0xac, 0xa8, 0x52, | ||
176 | 0xa1, 0x8e, 0x7b, 0x75, 0xbc, 0xa4, 0x92, 0x5a, | ||
177 | 0xab, 0x46, 0xd3, 0x3a, 0xa0, 0xd5, 0x35, 0x1c, | ||
178 | 0x55, 0xa4, 0xb3, 0xa8, 0x40, 0x81, 0xa5, 0x0b}, /* in */ | ||
179 | { 0x42, 0xe5, 0x28, 0x30, 0x31, 0xc2, 0xa0, 0x23, | ||
180 | 0x68, 0x49, 0x4e, 0xb3, 0x24, 0x59, 0x92, 0x79, | ||
181 | 0xc1, 0xa5, 0xcc, 0xe6, 0x76, 0x53, 0xb1, 0xcf, | ||
182 | 0x20, 0x86, 0x23, 0xe8, 0x72, 0x55, 0x99, 0x92, | ||
183 | 0x0d, 0x16, 0x1c, 0x5a, 0x2f, 0xce, 0xcb, 0x51, | ||
184 | 0xe2, 0x67, 0xfa, 0x10, 0xec, 0xcd, 0x3d, 0x67, | ||
185 | 0xa5, 0xe6, 0xf7, 0x31, 0x26, 0xb0, 0x0d, 0x76, | ||
186 | 0x5e, 0x28, 0xdc, 0x7f, 0x01, 0xc5, 0xa5, 0x4c}, /* out */ | ||
187 | 32, 64, AES_ENCRYPT }, /* test vector 1 */ | ||
188 | |||
189 | }; | ||
190 | |||
191 | static int run_test_vectors(void) | 121 | static int run_test_vectors(void) |
192 | { | 122 | { |
193 | unsigned int n; | 123 | unsigned int n; |
@@ -239,44 +169,6 @@ static int run_test_vectors(void) | |||
239 | } | 169 | } |
240 | } | 170 | } |
241 | 171 | ||
242 | for(n=0 ; n < sizeof(bi_ige_test_vectors)/sizeof(bi_ige_test_vectors[0]) | ||
243 | ; ++n) | ||
244 | { | ||
245 | const struct bi_ige_test * const v = &bi_ige_test_vectors[n]; | ||
246 | AES_KEY key1; | ||
247 | AES_KEY key2; | ||
248 | unsigned char buf[MAX_VECTOR_SIZE]; | ||
249 | |||
250 | assert(v->length <= MAX_VECTOR_SIZE); | ||
251 | |||
252 | if(v->encrypt == AES_ENCRYPT) | ||
253 | { | ||
254 | AES_set_encrypt_key(v->key1, 8*v->keysize, &key1); | ||
255 | AES_set_encrypt_key(v->key2, 8*v->keysize, &key2); | ||
256 | } | ||
257 | else | ||
258 | { | ||
259 | AES_set_decrypt_key(v->key1, 8*v->keysize, &key1); | ||
260 | AES_set_decrypt_key(v->key2, 8*v->keysize, &key2); | ||
261 | } | ||
262 | |||
263 | AES_bi_ige_encrypt(v->in, buf, v->length, &key1, &key2, v->iv, | ||
264 | v->encrypt); | ||
265 | |||
266 | if(memcmp(v->out, buf, v->length)) | ||
267 | { | ||
268 | printf("Bidirectional IGE test vector %d failed\n", n); | ||
269 | hexdump(stdout, "key 1", v->key1, sizeof v->key1); | ||
270 | hexdump(stdout, "key 2", v->key2, sizeof v->key2); | ||
271 | hexdump(stdout, "iv", v->iv, sizeof v->iv); | ||
272 | hexdump(stdout, "in", v->in, v->length); | ||
273 | hexdump(stdout, "expected", v->out, v->length); | ||
274 | hexdump(stdout, "got", buf, v->length); | ||
275 | |||
276 | ++errs; | ||
277 | } | ||
278 | } | ||
279 | |||
280 | return errs; | 172 | return errs; |
281 | } | 173 | } |
282 | 174 | ||
@@ -399,32 +291,6 @@ int main(int argc, char **argv) | |||
399 | ++err; | 291 | ++err; |
400 | } | 292 | } |
401 | 293 | ||
402 | /* Bi-directional IGE */ | ||
403 | |||
404 | /* Note that we don't have to recover the IV, because chaining isn't */ | ||
405 | /* possible with biIGE, so the IV is not updated. */ | ||
406 | |||
407 | RAND_pseudo_bytes(rkey2, sizeof rkey2); | ||
408 | |||
409 | /* Straight encrypt/decrypt */ | ||
410 | AES_set_encrypt_key(rkey, 8*sizeof rkey, &key); | ||
411 | AES_set_encrypt_key(rkey2, 8*sizeof rkey2, &key2); | ||
412 | AES_bi_ige_encrypt(plaintext, ciphertext, TEST_SIZE, &key, &key2, iv, | ||
413 | AES_ENCRYPT); | ||
414 | |||
415 | AES_set_decrypt_key(rkey, 8*sizeof rkey, &key); | ||
416 | AES_set_decrypt_key(rkey2, 8*sizeof rkey2, &key2); | ||
417 | AES_bi_ige_encrypt(ciphertext, checktext, TEST_SIZE, &key, &key2, iv, | ||
418 | AES_DECRYPT); | ||
419 | |||
420 | if(memcmp(checktext, plaintext, TEST_SIZE)) | ||
421 | { | ||
422 | printf("Encrypt+decrypt doesn't match\n"); | ||
423 | hexdump(stdout, "Plaintext", plaintext, TEST_SIZE); | ||
424 | hexdump(stdout, "Checktext", checktext, TEST_SIZE); | ||
425 | ++err; | ||
426 | } | ||
427 | |||
428 | /* make sure garble extends both ways */ | 294 | /* make sure garble extends both ways */ |
429 | AES_set_encrypt_key(rkey, 8*sizeof rkey, &key); | 295 | AES_set_encrypt_key(rkey, 8*sizeof rkey, &key); |
430 | AES_set_encrypt_key(rkey2, 8*sizeof rkey2, &key2); | 296 | AES_set_encrypt_key(rkey2, 8*sizeof rkey2, &key2); |