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