2 #include <sec/mac/omac.h>
3 #include <sec/cipher/aes.h>
8 int omac_testSetup(void)
14 int omac_testTearDown(void)
28 static const struct OmacTest tests1_aes128[] =
31 "2b7e151628aed2a6abf7158809cf4f3c", 16,
33 "bb1d6929e95937287fa37d129b756746",
36 "2b7e151628aed2a6abf7158809cf4f3c", 16,
37 "6bc1bee22e409f96e93d7e117393172a", 16,
38 "070a16b46b4d4144f79bdd9dd04a287c",
41 "2b7e151628aed2a6abf7158809cf4f3c", 16,
42 "6bc1bee22e409f96e93d7e117393172a"
43 "ae2d8a571e03ac9c9eb76fac45af8e51"
44 "30c81c46a35ce411e5fbc1191a0a52ef"
45 "f69f2445df4f9b17ad2b417be66c3710", 64,
46 "51f0bebf7e3b9d92fc49741779363cfe",
50 static const struct OmacTest tests1_aes192[] =
53 "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
55 "d17ddf46adaacde531cac483de7a9367",
58 "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
59 "6bc1bee22e409f96e93d7e117393172a", 16,
60 "9e99a7bf31e710900662f65e617c5184",
63 "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
64 "6bc1bee22e409f96e93d7e117393172a"
65 "ae2d8a571e03ac9c9eb76fac45af8e51"
66 "30c81c46a35ce411", 40,
67 "8a1de5be2eb31aad089a82e6ee908b0e",
70 "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
71 "6bc1bee22e409f96e93d7e117393172a"
72 "ae2d8a571e03ac9c9eb76fac45af8e51"
73 "30c81c46a35ce411e5fbc1191a0a52ef"
74 "f69f2445df4f9b17ad2b417be66c3710", 64,
75 "a1d5df0eed790f794d77589659f39a11",
79 static const struct OmacTest tests1_aes256[] =
82 "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
84 "028962f61b7bf89efc6b551f4667d983",
87 "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
88 "6bc1bee22e409f96e93d7e117393172a", 16,
89 "28a7023f452e8f82bd4bf28d8c37c35c",
92 "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
93 "6bc1bee22e409f96e93d7e117393172a"
94 "ae2d8a571e03ac9c9eb76fac45af8e51"
95 "30c81c46a35ce411", 40,
96 "aaf3d8f1de5640c232f5b169b9c911e6",
99 "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
100 "6bc1bee22e409f96e93d7e117393172a"
101 "ae2d8a571e03ac9c9eb76fac45af8e51"
102 "30c81c46a35ce411e5fbc1191a0a52ef"
103 "f69f2445df4f9b17ad2b417be66c3710", 64,
104 "e1992190549f6ed5696a2c056c315410",
108 static const struct OmacTest tests2_aes128[] =
111 "2b7e151628aed2a6abf7158809cf4f3c", 16,
113 "f6bc6a41f4f84593809e59b719299cfe",
116 "2b7e151628aed2a6abf7158809cf4f3c", 16,
117 "6bc1bee22e409f96e93d7e117393172a", 16,
118 "070a16b46b4d4144f79bdd9dd04a287c",
121 "2b7e151628aed2a6abf7158809cf4f3c", 16,
122 "6bc1bee22e409f96e93d7e117393172a"
123 "ae2d8a571e03ac9c9eb76fac45af8e51"
124 "30c81c46a35ce411", 40,
125 "23fdaa0831cd314491ce4b25acb6023b",
128 "2b7e151628aed2a6abf7158809cf4f3c", 16,
129 "6bc1bee22e409f96e93d7e117393172a"
130 "ae2d8a571e03ac9c9eb76fac45af8e51"
131 "30c81c46a35ce411e5fbc1191a0a52ef"
132 "f69f2445df4f9b17ad2b417be66c3710", 64,
133 "51f0bebf7e3b9d92fc49741779363cfe",
137 static const struct OmacTest tests2_aes192[] =
140 "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
142 "149f579df2129d45a69266898f55aeb2",
145 "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
146 "6bc1bee22e409f96e93d7e117393172a", 16,
147 "9e99a7bf31e710900662f65e617c5184",
150 "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
151 "6bc1bee22e409f96e93d7e117393172a"
152 "ae2d8a571e03ac9c9eb76fac45af8e51"
153 "30c81c46a35ce411", 40,
154 "b35e2d1b73aed49b78bdbdfe61f646df",
157 "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
158 "6bc1bee22e409f96e93d7e117393172a"
159 "ae2d8a571e03ac9c9eb76fac45af8e51"
160 "30c81c46a35ce411e5fbc1191a0a52ef"
161 "f69f2445df4f9b17ad2b417be66c3710", 64,
162 "a1d5df0eed790f794d77589659f39a11",
166 static const struct OmacTest tests2_aes256[] =
169 "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
171 "47fbde71866eae6080355b5fc7ff704c",
174 "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
175 "6bc1bee22e409f96e93d7e117393172a", 16,
176 "28a7023f452e8f82bd4bf28d8c37c35c",
179 "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
180 "6bc1bee22e409f96e93d7e117393172a"
181 "ae2d8a571e03ac9c9eb76fac45af8e51"
182 "30c81c46a35ce411", 40,
183 "f018e6053611b34bc872d6b7ff24749f",
186 "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
187 "6bc1bee22e409f96e93d7e117393172a"
188 "ae2d8a571e03ac9c9eb76fac45af8e51"
189 "30c81c46a35ce411e5fbc1191a0a52ef"
190 "f69f2445df4f9b17ad2b417be66c3710", 64,
191 "e1992190549f6ed5696a2c056c315410",
195 static void hexunlify(uint8_t *out, const uint8_t *in, size_t len)
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)
202 *out++ = TO_DEC(in[0])*16 + TO_DEC(in[1]);
207 static void runTest(Mac *m, const struct OmacTest *t, size_t num)
209 for (size_t i=0; i<num; ++i, ++t)
211 uint8_t key[t->klen];
212 hexunlify(key, t->key, t->klen);
214 uint8_t msg[t->mlen];
215 hexunlify(msg, t->msg, t->mlen);
218 hexunlify(digest, t->digest, 16);
220 mac_set_key(m, key, t->klen);
222 mac_update(m, msg, t->mlen);
223 uint8_t *result = mac_final(m);
225 ASSERT(memcmp(result, digest, 16) == 0);
229 int omac_testRun(void)
233 Mac *m = omac1_stackinit(AES128_stackinit());
234 runTest(m, tests1_aes128, countof(tests1_aes128));
239 Mac *m = omac1_stackinit(AES192_stackinit());
240 runTest(m, tests1_aes192, countof(tests1_aes192));
245 Mac *m = omac1_stackinit(AES256_stackinit());
246 runTest(m, tests1_aes256, countof(tests1_aes256));
251 Mac *m = omac2_stackinit(AES128_stackinit());
252 runTest(m, tests2_aes128, countof(tests2_aes128));
257 Mac *m = omac2_stackinit(AES192_stackinit());
258 runTest(m, tests2_aes192, countof(tests2_aes192));
263 Mac *m = omac2_stackinit(AES256_stackinit());
264 runTest(m, tests2_aes256, countof(tests2_aes256));