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@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 20int 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