1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis 2 * 3 * LibTomCrypt is a library that provides various cryptographic 4 * algorithms in a highly modular and flexible manner. 5 * 6 * The library is free for all purposes without any express 7 * guarantee it works. 8 * 9 * Tom St Denis, tomstdenis (at) gmail.com, http://libtomcrypt.com 10 */ 11 #include "tomcrypt.h" 12 13 /** 14 @file pelican_test.c 15 Pelican MAC, test, by Tom St Denis 16 */ 17 18 #ifdef PELICAN 19 20 int pelican_test(void) 21 { 22 #ifndef LTC_TEST 23 return CRYPT_NOP; 24 #else 25 static const struct { 26 unsigned char K[32], MSG[64], T[16]; 27 int keylen, ptlen; 28 } tests[] = { 29 /* K=16, M=0 */ 30 { 31 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 32 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }, 33 { 0 }, 34 { 0xeb, 0x58, 0x37, 0x15, 0xf8, 0x34, 0xde, 0xe5, 35 0xa4, 0xd1, 0x6e, 0xe4, 0xb9, 0xd7, 0x76, 0x0e, }, 36 16, 0 37 }, 38 39 /* K=16, M=3 */ 40 { 41 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 42 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }, 43 { 0x00, 0x01, 0x02 }, 44 { 0x1c, 0x97, 0x40, 0x60, 0x6c, 0x58, 0x17, 0x2d, 45 0x03, 0x94, 0x19, 0x70, 0x81, 0xc4, 0x38, 0x54, }, 46 16, 3 47 }, 48 49 /* K=16, M=16 */ 50 { 51 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 52 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }, 53 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 54 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }, 55 { 0x03, 0xcc, 0x46, 0xb8, 0xac, 0xa7, 0x9c, 0x36, 56 0x1e, 0x8c, 0x6e, 0xa6, 0x7b, 0x89, 0x32, 0x49, }, 57 16, 16 58 }, 59 60 /* K=16, M=32 */ 61 { 62 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 63 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }, 64 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 65 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 66 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 67 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F }, 68 { 0x89, 0xcc, 0x36, 0x58, 0x1b, 0xdd, 0x4d, 0xb5, 69 0x78, 0xbb, 0xac, 0xf0, 0xff, 0x8b, 0x08, 0x15, }, 70 16, 32 71 }, 72 73 /* K=16, M=35 */ 74 { 75 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 76 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }, 77 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 78 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 79 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 80 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 81 0x20, 0x21, 0x23 }, 82 { 0x4a, 0x7d, 0x45, 0x4d, 0xcd, 0xb5, 0xda, 0x8d, 83 0x48, 0x78, 0x16, 0x48, 0x5d, 0x45, 0x95, 0x99, }, 84 16, 35 85 }, 86 }; 87 int x, err; 88 unsigned char out[16]; 89 pelican_state pel; 90 91 for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { 92 if ((err = pelican_init(&pel, tests[x].K, tests[x].keylen)) != CRYPT_OK) { 93 return err; 94 } 95 if ((err = pelican_process(&pel, tests[x].MSG, tests[x].ptlen)) != CRYPT_OK) { 96 return err; 97 } 98 if ((err = pelican_done(&pel, out)) != CRYPT_OK) { 99 return err; 100 } 101 102 if (XMEMCMP(out, tests[x].T, 16)) { 103 #if 0 104 int y; 105 printf("\nFailed test %d\n", x); 106 printf("{ "); for (y = 0; y < 16; ) { printf("0x%02x, ", out[y]); if (!(++y & 7)) printf("\n"); } printf(" }\n"); 107 #endif 108 return CRYPT_FAIL_TESTVECTOR; 109 } 110 } 111 return CRYPT_OK; 112 #endif 113 } 114 115 116 #endif 117 118 /* $Source: /cvs/libtom/libtomcrypt/src/mac/pelican/pelican_test.c,v $ */ 119 /* $Revision: 1.12 $ */ 120 /* $Date: 2006/11/21 00:18:23 $ */ 121