comparison src/mac/pelican/pelican_test.c @ 191:1c15b283127b libtomcrypt-orig

Import of libtomcrypt 1.02 with manual path rename rearrangement etc
author Matt Johnston <matt@ucc.asn.au>
date Fri, 06 May 2005 13:23:02 +0000
parents
children 39d5d58461d6
comparison
equal deleted inserted replaced
143:5d99163f7e32 191:1c15b283127b
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, [email protected], http://libtomcrypt.org
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 (memcmp(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