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 xcbc_test.c 15 XCBC Support, Test XCBC-MAC mode 16 */ 17 18 #ifdef LTC_XCBC 19 20 /** Test XCBC-MAC mode 21 Return CRYPT_OK on succes 22 */ 23 int xcbc_test(void) 24 { 25 #ifdef LTC_NO_TEST 26 return CRYPT_NOP; 27 #else 28 static const struct { 29 int msglen; 30 unsigned char K[16], M[34], T[16]; 31 } tests[] = { 32 { 33 0, 34 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 35 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, 36 37 { 0 }, 38 39 { 0x75, 0xf0, 0x25, 0x1d, 0x52, 0x8a, 0xc0, 0x1c, 40 0x45, 0x73, 0xdf, 0xd5, 0x84, 0xd7, 0x9f, 0x29 } 41 }, 42 43 { 44 3, 45 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 46 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, 47 48 { 0x00, 0x01, 0x02 }, 49 50 { 0x5b, 0x37, 0x65, 0x80, 0xae, 0x2f, 0x19, 0xaf, 51 0xe7, 0x21, 0x9c, 0xee, 0xf1, 0x72, 0x75, 0x6f } 52 }, 53 54 { 55 16, 56 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 57 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, 58 59 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 60 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, 61 62 { 0xd2, 0xa2, 0x46, 0xfa, 0x34, 0x9b, 0x68, 0xa7, 63 0x99, 0x98, 0xa4, 0x39, 0x4f, 0xf7, 0xa2, 0x63 } 64 }, 65 66 { 67 32, 68 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 69 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, 70 71 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 72 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 73 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 74 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }, 75 76 { 0xf5, 0x4f, 0x0e, 0xc8, 0xd2, 0xb9, 0xf3, 0xd3, 77 0x68, 0x07, 0x73, 0x4b, 0xd5, 0x28, 0x3f, 0xd4 } 78 }, 79 80 { 81 34, 82 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 83 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, 84 85 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 86 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 87 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 88 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 89 0x20, 0x21 }, 90 91 { 0xbe, 0xcb, 0xb3, 0xbc, 0xcd, 0xb5, 0x18, 0xa3, 92 0x06, 0x77, 0xd5, 0x48, 0x1f, 0xb6, 0xb4, 0xd8 }, 93 }, 94 95 96 97 }; 98 unsigned char T[16]; 99 unsigned long taglen; 100 int err, x, idx; 101 102 /* AES can be under rijndael or aes... try to find it */ 103 if ((idx = find_cipher("aes")) == -1) { 104 if ((idx = find_cipher("rijndael")) == -1) { 105 return CRYPT_NOP; 106 } 107 } 108 109 for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { 110 taglen = 16; 111 if ((err = xcbc_memory(idx, tests[x].K, 16, tests[x].M, tests[x].msglen, T, &taglen)) != CRYPT_OK) { 112 return err; 113 } 114 if (taglen != 16 || XMEMCMP(T, tests[x].T, 16)) { 115 return CRYPT_FAIL_TESTVECTOR; 116 } 117 } 118 119 return CRYPT_OK; 120 #endif 121 } 122 123 #endif 124 125 /* $Source: /cvs/libtom/libtomcrypt/src/mac/xcbc/xcbc_test.c,v $ */ 126 /* $Revision: 1.5 $ */ 127 /* $Date: 2006/11/21 23:02:42 $ */ 128 129