]>
git.ipfire.org Git - thirdparty/strongswan.git/blob - programs/charon/testing/hmac_test.c
4 * @brief Tests for the hmac_t class.
9 * Copyright (C) 2005 Jan Hutter, Martin Willi
10 * Hochschule fuer Technik Rapperswil
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the
14 * Free Software Foundation; either version 2 of the License, or (at your
15 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
19 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
25 #include "hmac_test.h"
27 #include <crypto/hmac.h>
31 * described in Header-File
33 void test_hmac_sha1(protected_tester_t
*tester
)
36 * Test cases from RFC2202
39 * key = 0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
43 * digest = 0xb617318655057264e28bc0b6fb378c8ef146be00
48 * data = "what do ya want for nothing?"
50 * digest = 0xeffcdf6ae5eb2fa2d27416d5f184df9c259a7c79
53 * key = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
55 * data = 0xdd repeated 50 times
57 * digest = 0x125d7342b9ac11cd91a39af48aa17b4f63f175d3
60 * key = 0x0102030405060708090a0b0c0d0e0f10111213141516171819
62 * data = 0xcd repeated 50 times
64 * digest = 0x4c9007f4026250c6bc8414f9bf50c86c2d7235da
67 * key = 0x0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
69 * data = "Test With Truncation"
71 * digest = 0x4c1a03424b55e07fe7f27be1d58bb9324a9a5a04
72 * digest-96 = 0x4c1a03424b55e07fe7f27be1
75 * key = 0xaa repeated 80 times
77 * data = "Test Using Larger Than Block-Size Key - Hash Key First"
79 * digest = 0xaa4ae5e15272d00e95705637ce8a3b55ed402112
82 * key = 0xaa repeated 80 times
84 * data = "Test Using Larger Than Block-Size Key and Larger
85 * Than One Block-Size Data"
87 * digest = 0xe8e99d0f45237d786d6bbaa7965c7808bbff1a91
89 * currently performing test 1, 2, 4 and 7
109 keys
[0].len
= sizeof(key1
);
110 data
[0].ptr
= "Hi There";
112 u_int8_t reference1
[] = {
119 reference
[0].ptr
= reference1
;
120 reference
[0].len
= sizeof(reference1
);
125 u_int8_t reference2
[] = {
132 keys
[1].ptr
= "Jefe";
134 data
[1].ptr
= "what do ya want for nothing?";
136 reference
[1].ptr
= reference2
;
137 reference
[1].len
= sizeof(reference2
);
143 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
144 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
145 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
146 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
147 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
148 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
149 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
150 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
151 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
152 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
154 u_int8_t reference7
[] = {
162 keys
[2].len
= sizeof(key7
);
163 data
[2].ptr
= "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data";
165 reference
[2].ptr
= reference7
;
166 reference
[2].len
= sizeof(reference7
);
171 hmac_t
*hmac
= hmac_create(HASH_SHA1
);
172 hmac
->set_key(hmac
, keys
[i
]);
173 hmac
->allocate_mac(hmac
, data
[i
], &digest
[i
]);
176 tester
->assert_true(tester
, digest
[i
].len
== 20, "chunk len");
177 tester
->assert_false(tester
, memcmp(digest
[i
].ptr
, reference
[i
].ptr
, 20), "hmac value");
182 * test 4 is donne in append mode
191 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19
194 keys
[3].len
= sizeof(key4
);
195 u_int8_t reference4
[] = {
202 reference
[3].ptr
= reference4
;
203 reference
[3].len
= sizeof(reference4
);
205 hmac_t
*hmac
= hmac_create(HASH_SHA1
);
206 hmac
->set_key(hmac
, keys
[3]);
211 hmac
->get_mac(hmac
, data
[3], NULL
);
213 hmac
->allocate_mac(hmac
, data
[3], &digest
[3]);
216 tester
->assert_true(tester
, digest
[3].len
== 20, "chunk len append mode");
217 tester
->assert_false(tester
, memcmp(digest
[3].ptr
, reference
[3].ptr
, 20), "hmac value append mode");
222 * described in Header-File
224 void test_hmac_md5(protected_tester_t
*tester
)
227 * Test cases from RFC2202
230 * key = 0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
234 * digest = 0x9294727a3638bb1c13f48ef8158bfc9d
239 * data = "what do ya want for nothing?"
241 * digest = 0x750c783e6ab0b503eaa86e310a5db738
244 * key = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
246 * data = 0xdd repeated 50 times
248 * digest = 0x56be34521d144c88dbb8c733f0e8b3f6
251 * key = 0x0102030405060708090a0b0c0d0e0f10111213141516171819
253 * data = 0xcd repeated 50 times
255 * digest = 0x697eaf0aca3a3aea3a75164746ffaa79
258 * key = 0x0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
260 * data = "Test With Truncation"
262 * digest = 0x56461ef2342edc00f9bab995690efd4c
263 * digest-96 0x56461ef2342edc00f9bab995
266 * key = 0xaa repeated 80 times
268 * data = "Test Using Larger Than Block-Size Key - Hash Key First"
270 * digest = 0x6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd
273 * key = 0xaa repeated 80 times
275 * data = "Test Using Larger Than Block-Size Key and Larger
276 * Than One Block-Size Data"
278 * digest = 0x6f630fad67cda0ee1fb1f562db3aa53e
282 * currently performing test 1, 2, 4 and 7
288 chunk_t reference
[4];
301 keys
[0].len
= sizeof(key1
);
302 data
[0].ptr
= "Hi There";
304 u_int8_t reference1
[] = {
310 reference
[0].ptr
= reference1
;
311 reference
[0].len
= sizeof(reference1
);
316 u_int8_t reference2
[] = {
322 keys
[1].ptr
= "Jefe";
324 data
[1].ptr
= "what do ya want for nothing?";
326 reference
[1].ptr
= reference2
;
327 reference
[1].len
= sizeof(reference2
);
333 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
334 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
335 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
336 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
337 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
338 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
339 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
340 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
341 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
342 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
344 u_int8_t reference7
[] = {
351 keys
[2].len
= sizeof(key7
);
352 data
[2].ptr
= "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data";
354 reference
[2].ptr
= reference7
;
355 reference
[2].len
= sizeof(reference7
);
360 hmac_t
*hmac
= hmac_create(HASH_MD5
);
361 hmac
->set_key(hmac
, keys
[i
]);
362 hmac
->allocate_mac(hmac
, data
[i
], &digest
[i
]);
364 tester
->assert_true(tester
, digest
[i
].len
== 16, "chunk len");
365 tester
->assert_false(tester
, memcmp(digest
[i
].ptr
, reference
[i
].ptr
, 16), "hmac value");
370 * test 4 is donne in append mode
384 keys
[3].len
= sizeof(key4
);
385 u_int8_t reference4
[] = {
391 reference
[3].ptr
= reference4
;
392 reference
[3].len
= sizeof(reference4
);
394 hmac_t
*hmac
= hmac_create(HASH_MD5
);
395 hmac
->set_key(hmac
, keys
[3]);
400 hmac
->get_mac(hmac
, data
[3], NULL
);
402 hmac
->allocate_mac(hmac
, data
[3], &digest
[3]);
405 tester
->assert_true(tester
, digest
[3].len
== 16, "chunk len append mode");
406 tester
->assert_false(tester
, memcmp(digest
[3].ptr
, reference
[3].ptr
, 16), "hmac value append mode");