comparison libtomcrypt/src/encauth/gcm/gcm_test.c @ 382:0cbe8f6dbf9e

propagate from branch 'au.asn.ucc.matt.ltc.dropbear' (head 2af22fb4e878750b88f80f90d439b316d229796f) to branch 'au.asn.ucc.matt.dropbear' (head 02c413252c90e9de8e03d91e9939dde3029f5c0a)
author Matt Johnston <matt@ucc.asn.au>
date Thu, 11 Jan 2007 02:41:05 +0000
parents 1b9e69c058d2
children f849a5ca2efc
comparison
equal deleted inserted replaced
379:b66a00272a90 382:0cbe8f6dbf9e
4 * algorithms in a highly modular and flexible manner. 4 * algorithms in a highly modular and flexible manner.
5 * 5 *
6 * The library is free for all purposes without any express 6 * The library is free for all purposes without any express
7 * guarantee it works. 7 * guarantee it works.
8 * 8 *
9 * Tom St Denis, [email protected], http://libtomcrypt.org 9 * Tom St Denis, [email protected], http://libtomcrypt.com
10 */ 10 */
11 11
12 /** 12 /**
13 @file gcm_test.c 13 @file gcm_test.c
14 GCM implementation, testing, by Tom St Denis 14 GCM implementation, testing, by Tom St Denis
27 return CRYPT_NOP; 27 return CRYPT_NOP;
28 #else 28 #else
29 static const struct { 29 static const struct {
30 unsigned char K[32]; 30 unsigned char K[32];
31 int keylen; 31 int keylen;
32 unsigned char P[64]; 32 unsigned char P[128];
33 unsigned long ptlen; 33 unsigned long ptlen;
34 unsigned char A[64]; 34 unsigned char A[128];
35 unsigned long alen; 35 unsigned long alen;
36 unsigned char IV[64]; 36 unsigned char IV[128];
37 unsigned long IVlen; 37 unsigned long IVlen;
38 unsigned char C[64]; 38 unsigned char C[128];
39 unsigned char T[16]; 39 unsigned char T[16];
40 } tests[] = { 40 } tests[] = {
41 41
42 /* test case #1 */ 42 /* test case #1 */
43 { 43 {
273 0x4c, 0x34, 0xae, 0xe5, }, 273 0x4c, 0x34, 0xae, 0xe5, },
274 274
275 /* TAG */ 275 /* TAG */
276 { 0x61, 0x9c, 0xc5, 0xae, 0xff, 0xfe, 0x0b, 0xfa, 276 { 0x61, 0x9c, 0xc5, 0xae, 0xff, 0xfe, 0x0b, 0xfa,
277 0x46, 0x2a, 0xf4, 0x3c, 0x16, 0x99, 0xd0, 0x50, } 277 0x46, 0x2a, 0xf4, 0x3c, 0x16, 0x99, 0xd0, 0x50, }
278 },
279
280 /* test case #46 from BG (catches the LTC bug of v1.15) */
281 {
282 /* key */
283 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
284 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
285 16,
286
287 /* PT */
288 { 0xa2, 0xaa, 0xb3, 0xad, 0x8b, 0x17, 0xac, 0xdd,
289 0xa2, 0x88, 0x42, 0x6c, 0xd7, 0xc4, 0x29, 0xb7,
290 0xca, 0x86, 0xb7, 0xac, 0xa0, 0x58, 0x09, 0xc7,
291 0x0c, 0xe8, 0x2d, 0xb2, 0x57, 0x11, 0xcb, 0x53,
292 0x02, 0xeb, 0x27, 0x43, 0xb0, 0x36, 0xf3, 0xd7,
293 0x50, 0xd6, 0xcf, 0x0d, 0xc0, 0xac, 0xb9, 0x29,
294 0x50, 0xd5, 0x46, 0xdb, 0x30, 0x8f, 0x93, 0xb4,
295 0xff, 0x24, 0x4a, 0xfa, 0x9d, 0xc7, 0x2b, 0xcd,
296 0x75, 0x8d, 0x2c },
297 67,
298
299 /* ADATA */
300 { 0x68, 0x8e, 0x1a, 0xa9, 0x84, 0xde, 0x92, 0x6d,
301 0xc7, 0xb4, 0xc4, 0x7f, 0x44 },
302 13,
303
304 /* IV */
305 { 0xb7, 0x21, 0x38, 0xb5, 0xa0, 0x5f, 0xf5, 0x07,
306 0x0e, 0x8c, 0xd9, 0x41, 0x83, 0xf7, 0x61, 0xd8 },
307 16,
308
309 /* CT */
310 { 0xcb, 0xc8, 0xd2, 0xf1, 0x54, 0x81, 0xa4, 0xcc,
311 0x7d, 0xd1, 0xe1, 0x9a, 0xaa, 0x83, 0xde, 0x56,
312 0x78, 0x48, 0x3e, 0xc3, 0x59, 0xae, 0x7d, 0xec,
313 0x2a, 0xb8, 0xd5, 0x34, 0xe0, 0x90, 0x6f, 0x4b,
314 0x46, 0x63, 0xfa, 0xff, 0x58, 0xa8, 0xb2, 0xd7,
315 0x33, 0xb8, 0x45, 0xee, 0xf7, 0xc9, 0xb3, 0x31,
316 0xe9, 0xe1, 0x0e, 0xb2, 0x61, 0x2c, 0x99, 0x5f,
317 0xeb, 0x1a, 0xc1, 0x5a, 0x62, 0x86, 0xcc, 0xe8,
318 0xb2, 0x97, 0xa8 },
319
320 /* TAG */
321 { 0x8d, 0x2d, 0x2a, 0x93, 0x72, 0x62, 0x6f, 0x6b,
322 0xee, 0x85, 0x80, 0x27, 0x6a, 0x63, 0x66, 0xbf }
278 } 323 }
279 324
280 /* rest of test cases are the same except AES key size changes... ignored... */ 325 /* rest of test cases are the same except AES key size changes... ignored... */
281 }; 326 };
282 int idx, err; 327 int idx, err;
283 unsigned long x, y; 328 unsigned long x, y;
284 unsigned char out[2][64], T[2][16]; 329 unsigned char out[2][128], T[2][16];
285 330
286 /* find aes */ 331 /* find aes */
287 idx = find_cipher("aes"); 332 idx = find_cipher("aes");
288 if (idx == -1) { 333 if (idx == -1) {
289 idx = find_cipher("rijndael"); 334 idx = find_cipher("rijndael");
300 (unsigned char*)tests[x].P, tests[x].ptlen, 345 (unsigned char*)tests[x].P, tests[x].ptlen,
301 out[0], T[0], &y, GCM_ENCRYPT)) != CRYPT_OK) { 346 out[0], T[0], &y, GCM_ENCRYPT)) != CRYPT_OK) {
302 return err; 347 return err;
303 } 348 }
304 349
305 if (memcmp(out[0], tests[x].C, tests[x].ptlen)) { 350 if (XMEMCMP(out[0], tests[x].C, tests[x].ptlen)) {
306 #if 0 351 #if 0
307 printf("\nCiphertext wrong %lu\n", x); 352 printf("\nCiphertext wrong %lu\n", x);
308 for (y = 0; y < tests[x].ptlen; y++) { 353 for (y = 0; y < tests[x].ptlen; y++) {
309 printf("%02x", out[0][y] & 255); 354 printf("%02x", out[0][y] & 255);
310 } 355 }
311 printf("\n"); 356 printf("\n");
312 #endif 357 #endif
313 return CRYPT_FAIL_TESTVECTOR; 358 return CRYPT_FAIL_TESTVECTOR;
314 } 359 }
315 360
316 if (memcmp(T[0], tests[x].T, 16)) { 361 if (XMEMCMP(T[0], tests[x].T, 16)) {
317 #if 0 362 #if 0
318 printf("\nTag on plaintext wrong %lu\n", x); 363 printf("\nTag on plaintext wrong %lu\n", x);
319 for (y = 0; y < 16; y++) { 364 for (y = 0; y < 16; y++) {
320 printf("%02x", T[0][y] & 255); 365 printf("%02x", T[0][y] & 255);
321 } 366 }
331 out[1], tests[x].ptlen, 376 out[1], tests[x].ptlen,
332 out[0], T[1], &y, GCM_DECRYPT)) != CRYPT_OK) { 377 out[0], T[1], &y, GCM_DECRYPT)) != CRYPT_OK) {
333 return err; 378 return err;
334 } 379 }
335 380
336 if (memcmp(out[1], tests[x].P, tests[x].ptlen)) { 381 if (XMEMCMP(out[1], tests[x].P, tests[x].ptlen)) {
337 #if 0 382 #if 0
338 printf("\nplaintext wrong %lu\n", x); 383 printf("\nplaintext wrong %lu\n", x);
339 for (y = 0; y < tests[x].ptlen; y++) { 384 for (y = 0; y < tests[x].ptlen; y++) {
340 printf("%02x", out[0][y] & 255); 385 printf("%02x", out[0][y] & 255);
341 } 386 }
342 printf("\n"); 387 printf("\n");
343 #endif 388 #endif
344 return CRYPT_FAIL_TESTVECTOR; 389 return CRYPT_FAIL_TESTVECTOR;
345 } 390 }
346 391
347 if (memcmp(T[1], tests[x].T, 16)) { 392 if (XMEMCMP(T[1], tests[x].T, 16)) {
348 #if 0 393 #if 0
349 printf("\nTag on ciphertext wrong %lu\n", x); 394 printf("\nTag on ciphertext wrong %lu\n", x);
350 for (y = 0; y < 16; y++) { 395 for (y = 0; y < 16; y++) {
351 printf("%02x", T[1][y] & 255); 396 printf("%02x", T[1][y] & 255);
352 } 397 }
362 407
363 #endif 408 #endif
364 409
365 410
366 /* $Source: /cvs/libtom/libtomcrypt/src/encauth/gcm/gcm_test.c,v $ */ 411 /* $Source: /cvs/libtom/libtomcrypt/src/encauth/gcm/gcm_test.c,v $ */
367 /* $Revision: 1.15 $ */ 412 /* $Revision: 1.20 $ */
368 /* $Date: 2005/05/05 14:35:58 $ */ 413 /* $Date: 2006/12/03 17:25:44 $ */