2 * @file hmac_signer_test.c
4 * @brief Tests for the hmac_signer_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
26 #include "hmac_signer_test.h"
28 #include <crypto/signers/signer.h>
33 * Described in header.
35 void test_hmac_md5_signer(protected_tester_t
*tester
)
37 /* Test cases from RFC2202
40 * key = 0x0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
42 * data = "Test With Truncation"
44 * digest = 0x56461ef2342edc00f9bab995690efd4c
45 * digest-96 0x56461ef2342edc00f9bab995
47 * currently only this test 5 gets performed!
53 chunk_t wrong_reference
[4];
58 logger
= logger_manager
->get_logger(logger_manager
, TESTER
);
60 signer_t
*signer
= (signer_t
*) signer_create(AUTH_HMAC_MD5_96
);
61 tester
->assert_true(tester
, (signer
!= NULL
), "signer create call check");
74 keys
[0].len
= sizeof(key1
);
75 data
[0].ptr
= "Test With Truncation";
77 u_int8_t reference1
[] = {
78 0x56,0x46,0x1e,0xf2,0x34,0x2e,
79 0xdc,0x00,0xf9,0xba,0xb9,0x95
81 reference
[0].ptr
= reference1
;
82 reference
[0].len
= sizeof(reference1
);
84 u_int8_t wrong_reference1
[] = {
85 0x56,0x46,0x1e,0xa2,0x34,0x2e,
86 0xdc,0x00,0xf9,0xba,0xb9,0x95
89 wrong_reference
[0].ptr
= wrong_reference1
;
90 wrong_reference
[0].len
= sizeof(wrong_reference1
);
94 signer
->set_key(signer
, keys
[i
]);
95 signer
->allocate_signature(signer
, data
[i
], &signature
[i
]);
96 tester
->assert_true(tester
, signature
[i
].len
== 12, "chunk len");
97 tester
->assert_true(tester
, (memcmp(signature
[i
].ptr
, reference
[i
].ptr
, 12) == 0), "hmac value");
98 logger
->log_chunk(logger
,RAW
,"expected signature:",reference
[i
]);
99 logger
->log_chunk(logger
,RAW
,"signature:",signature
[i
]);
100 free(signature
[i
].ptr
);
101 valid
= signer
->verify_signature(signer
, data
[i
],reference
[i
]);
102 tester
->assert_true(tester
, (valid
== TRUE
), "Signature valid check");
104 valid
= signer
->verify_signature(signer
, data
[i
],wrong_reference
[i
]);
105 tester
->assert_true(tester
, (valid
== FALSE
), "Signature not valid check");
107 signer
->destroy(signer
);
112 * Described in header.
114 void test_hmac_sha1_signer(protected_tester_t
*tester
)
118 * key = 0xaa repeated 80 times
120 * data = "Test Using Larger Than Block-Size Key and Larger
121 * Than One Block-Size Data"
123 * digest = 0x4c1a03424b55e07fe7f27be1d58bb9324a9a5a04
124 * digest-96 = 0x4c1a03424b55e07fe7f27be1
129 chunk_t signature
[4];
130 chunk_t reference
[4];
131 chunk_t wrong_reference
[4];
136 logger
= logger_manager
->get_logger(logger_manager
, TESTER
);
138 signer_t
*signer
= (signer_t
*) signer_create(AUTH_HMAC_SHA1_96
);
139 tester
->assert_true(tester
, (signer
!= NULL
), "signer create call check");
168 keys
[0].len
= sizeof(key1
);
169 data
[0].ptr
= "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data";
171 u_int8_t reference1
[] = {
172 0xe8,0xe9,0x9d,0x0f,0x45,0x23,
173 0x7d,0x78,0x6d,0x6b,0xba,0xa7
175 reference
[0].ptr
= reference1
;
176 reference
[0].len
= sizeof(reference1
);
178 u_int8_t wrong_reference1
[] = {
179 0xe8,0xe9,0x9d,0x0f,0x46,0x23,
180 0x7d,0x71,0x6d,0x6b,0xba,0xa7
183 wrong_reference
[0].ptr
= wrong_reference1
;
184 wrong_reference
[0].len
= sizeof(wrong_reference1
);
188 signer
->set_key(signer
, keys
[i
]);
189 signer
->allocate_signature(signer
, data
[i
], &signature
[i
]);
190 tester
->assert_true(tester
, signature
[i
].len
== 12, "chunk len");
191 tester
->assert_true(tester
, (memcmp(signature
[i
].ptr
, reference
[i
].ptr
, 12) == 0), "hmac value");
192 logger
->log_chunk(logger
,RAW
,"expected signature:",reference
[i
]);
193 logger
->log_chunk(logger
,RAW
,"signature:",signature
[i
]);
194 free(signature
[i
].ptr
);
195 valid
= signer
->verify_signature(signer
, data
[i
],reference
[i
]);
196 tester
->assert_true(tester
, (valid
== TRUE
), "Signature valid check");
198 valid
= signer
->verify_signature(signer
, data
[i
],wrong_reference
[i
]);
199 tester
->assert_true(tester
, (valid
== FALSE
), "Signature not valid check");
202 signer
->destroy(signer
);