40b81d7238c061603356cd4913d2695bd6773477
[bertos.git] / bertos / sec / mac / omac_test.c
1
2 #include <sec/mac/omac.h>
3 #include <sec/cipher/aes.h>
4 #include <cfg/test.h>
5 #include <cfg/debug.h>
6 #include <string.h>
7
8 int omac_testSetup(void)
9 {
10         kdbg_init();
11         return 0;
12 }
13
14 int omac_testTearDown(void)
15 {
16         return 0;
17 }
18
19 struct OmacTest
20 {
21         void *key;
22         size_t klen;
23         uint8_t *msg;
24         size_t mlen;
25         uint8_t digest[16*2];
26 };
27
28 static const struct OmacTest tests1_aes128[] =
29 {
30         {
31                 "2b7e151628aed2a6abf7158809cf4f3c", 16,
32                 "", 0,
33                 "bb1d6929e95937287fa37d129b756746",
34         },
35         {
36                 "2b7e151628aed2a6abf7158809cf4f3c", 16,
37                 "6bc1bee22e409f96e93d7e117393172a", 16,
38                 "070a16b46b4d4144f79bdd9dd04a287c",
39         },
40         {
41                 "2b7e151628aed2a6abf7158809cf4f3c", 16,
42                 "6bc1bee22e409f96e93d7e117393172a"
43                 "ae2d8a571e03ac9c9eb76fac45af8e51"
44                 "30c81c46a35ce411e5fbc1191a0a52ef"
45                 "f69f2445df4f9b17ad2b417be66c3710", 64,
46                 "51f0bebf7e3b9d92fc49741779363cfe",
47         },
48 };
49
50 static const struct OmacTest tests1_aes192[] =
51 {
52         {
53                 "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
54                 "", 0,
55                 "d17ddf46adaacde531cac483de7a9367",
56         },
57         {
58                 "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
59                 "6bc1bee22e409f96e93d7e117393172a", 16,
60                 "9e99a7bf31e710900662f65e617c5184",
61         },
62         {
63                 "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
64                 "6bc1bee22e409f96e93d7e117393172a"
65                 "ae2d8a571e03ac9c9eb76fac45af8e51"
66                 "30c81c46a35ce411", 40,
67                 "8a1de5be2eb31aad089a82e6ee908b0e",
68         },
69         {
70                 "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
71                 "6bc1bee22e409f96e93d7e117393172a"
72                 "ae2d8a571e03ac9c9eb76fac45af8e51"
73                 "30c81c46a35ce411e5fbc1191a0a52ef"
74                 "f69f2445df4f9b17ad2b417be66c3710", 64,
75                 "a1d5df0eed790f794d77589659f39a11",
76         },
77 };
78
79 static const struct OmacTest tests1_aes256[] =
80 {
81         {
82                 "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
83                 "", 0,
84                 "028962f61b7bf89efc6b551f4667d983",
85         },
86         {
87                 "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
88                 "6bc1bee22e409f96e93d7e117393172a", 16,
89                 "28a7023f452e8f82bd4bf28d8c37c35c",
90         },
91         {
92                 "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
93                 "6bc1bee22e409f96e93d7e117393172a"
94                 "ae2d8a571e03ac9c9eb76fac45af8e51"
95                 "30c81c46a35ce411", 40,
96                 "aaf3d8f1de5640c232f5b169b9c911e6",
97         },
98         {
99                 "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
100                 "6bc1bee22e409f96e93d7e117393172a"
101                 "ae2d8a571e03ac9c9eb76fac45af8e51"
102                 "30c81c46a35ce411e5fbc1191a0a52ef"
103                 "f69f2445df4f9b17ad2b417be66c3710", 64,
104                 "e1992190549f6ed5696a2c056c315410",
105         },
106 };
107
108 static const struct OmacTest tests2_aes128[] =
109 {
110         {
111                 "2b7e151628aed2a6abf7158809cf4f3c", 16,
112                 "", 0,
113                 "f6bc6a41f4f84593809e59b719299cfe",
114         },
115         {
116                 "2b7e151628aed2a6abf7158809cf4f3c", 16,
117                 "6bc1bee22e409f96e93d7e117393172a", 16,
118                 "070a16b46b4d4144f79bdd9dd04a287c",
119         },
120         {
121                 "2b7e151628aed2a6abf7158809cf4f3c", 16,
122                 "6bc1bee22e409f96e93d7e117393172a"
123                 "ae2d8a571e03ac9c9eb76fac45af8e51"
124                 "30c81c46a35ce411", 40,
125                 "23fdaa0831cd314491ce4b25acb6023b",
126         },
127         {
128                 "2b7e151628aed2a6abf7158809cf4f3c", 16,
129                 "6bc1bee22e409f96e93d7e117393172a"
130                 "ae2d8a571e03ac9c9eb76fac45af8e51"
131                 "30c81c46a35ce411e5fbc1191a0a52ef"
132                 "f69f2445df4f9b17ad2b417be66c3710", 64,
133                 "51f0bebf7e3b9d92fc49741779363cfe",
134         },
135 };
136
137 static const struct OmacTest tests2_aes192[] =
138 {
139         {
140                 "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
141                 "", 0,
142                 "149f579df2129d45a69266898f55aeb2",
143         },
144         {
145                 "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
146                 "6bc1bee22e409f96e93d7e117393172a", 16,
147                 "9e99a7bf31e710900662f65e617c5184",
148         },
149         {
150                 "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
151                 "6bc1bee22e409f96e93d7e117393172a"
152                 "ae2d8a571e03ac9c9eb76fac45af8e51"
153                 "30c81c46a35ce411", 40,
154                 "b35e2d1b73aed49b78bdbdfe61f646df",
155         },
156         {
157                 "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
158                 "6bc1bee22e409f96e93d7e117393172a"
159                 "ae2d8a571e03ac9c9eb76fac45af8e51"
160                 "30c81c46a35ce411e5fbc1191a0a52ef"
161                 "f69f2445df4f9b17ad2b417be66c3710", 64,
162                 "a1d5df0eed790f794d77589659f39a11",
163         },
164 };
165
166 static const struct OmacTest tests2_aes256[] =
167 {
168         {
169                 "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
170                 "", 0,
171                 "47fbde71866eae6080355b5fc7ff704c",
172         },
173         {
174                 "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
175                 "6bc1bee22e409f96e93d7e117393172a", 16,
176                 "28a7023f452e8f82bd4bf28d8c37c35c",
177         },
178         {
179                 "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
180                 "6bc1bee22e409f96e93d7e117393172a"
181                 "ae2d8a571e03ac9c9eb76fac45af8e51"
182                 "30c81c46a35ce411", 40,
183                 "f018e6053611b34bc872d6b7ff24749f",
184         },
185         {
186                 "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
187                 "6bc1bee22e409f96e93d7e117393172a"
188                 "ae2d8a571e03ac9c9eb76fac45af8e51"
189                 "30c81c46a35ce411e5fbc1191a0a52ef"
190                 "f69f2445df4f9b17ad2b417be66c3710", 64,
191                 "e1992190549f6ed5696a2c056c315410",
192         },
193 };
194
195 static void hexunlify(uint8_t *out, const uint8_t *in, size_t len)
196 {
197         #define TO_DEC(x) ((x >= '0' && x <= '9') ? x-'0' : \
198                                            (x >= 'a' && x <= 'f') ? x-'a'+10 : \
199                                            (x >= 'A' && x <= 'F') ? x-'A'+10 : 0)
200         while (len--)
201         {
202                 *out++ = TO_DEC(in[0])*16 + TO_DEC(in[1]);
203                 in += 2;
204         }
205 }
206
207 static void runTest(Mac *m, const struct OmacTest *t, size_t num)
208 {
209         for (size_t i=0; i<num; ++i, ++t)
210         {
211                 uint8_t key[t->klen];
212                 hexunlify(key, t->key, t->klen);
213
214                 uint8_t msg[t->mlen];
215                 hexunlify(msg, t->msg, t->mlen);
216
217                 uint8_t digest[16];
218                 hexunlify(digest, t->digest, 16);
219
220                 mac_set_key(m, key, t->klen);
221                 mac_begin(m);
222                 mac_update(m, msg, t->mlen);
223                 uint8_t *result = mac_final(m);
224
225                 ASSERT(memcmp(result, digest, 16) == 0);
226         }
227 }
228
229 int omac_testRun(void)
230 {
231         if (1)
232         {
233                 Mac *m = omac1_stackinit(AES128_stackinit());
234                 runTest(m, tests1_aes128, countof(tests1_aes128));
235         }
236
237         if (1)
238         {
239                 Mac *m = omac1_stackinit(AES192_stackinit());
240                 runTest(m, tests1_aes192, countof(tests1_aes192));
241         }
242
243         if (1)
244         {
245                 Mac *m = omac1_stackinit(AES256_stackinit());
246                 runTest(m, tests1_aes256, countof(tests1_aes256));
247         }
248
249         if (1)
250         {
251                 Mac *m = omac2_stackinit(AES128_stackinit());
252                 runTest(m, tests2_aes128, countof(tests2_aes128));
253         }
254
255         if (1)
256         {
257                 Mac *m = omac2_stackinit(AES192_stackinit());
258                 runTest(m, tests2_aes192, countof(tests2_aes192));
259         }
260
261         if (1)
262         {
263                 Mac *m = omac2_stackinit(AES256_stackinit());
264                 runTest(m, tests2_aes256, countof(tests2_aes256));
265         }
266
267         return 0;
268 }
269
270 TEST_MAIN(omac);