]>
Commit | Line | Data |
---|---|---|
bfa4b218 | 1 | /** |
ed37dee6 | 2 | * @file hasher_test.h |
bfa4b218 | 3 | * |
ed37dee6 | 4 | * @brief Tests for the hasher_t classes. |
bfa4b218 MW |
5 | * |
6 | */ | |
7 | ||
8 | /* | |
9 | * Copyright (C) 2005 Jan Hutter, Martin Willi | |
10 | * Hochschule fuer Technik Rapperswil | |
11 | * | |
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>. | |
16 | * | |
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 | |
20 | * for more details. | |
21 | */ | |
22 | ||
23 | #include <string.h> | |
bfa4b218 | 24 | |
5113680f | 25 | #include "hasher_test.h" |
bfa4b218 MW |
26 | |
27 | ||
28 | /* | |
29 | * described in Header-File | |
30 | */ | |
51d56047 | 31 | void test_md5_hasher(protected_tester_t *tester) |
bfa4b218 MW |
32 | { |
33 | /* | |
34 | * Test vectors from RFC1321: | |
35 | * MD5 ("") = d41d8cd98f00b204e9800998ecf8427e | |
36 | * MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661 | |
37 | * MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72 | |
38 | * MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0 | |
39 | * MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b | |
40 | * | |
41 | * currently testing "", "abc", "abcdefghijklmnopqrstuvwxyz" | |
42 | */ | |
43 | hasher_t *hasher = hasher_create(HASH_MD5); | |
44 | u_int8_t hash_buffer[16]; | |
45 | chunk_t empty, abc, abcd, hash_chunk; | |
46 | ||
47 | u_int8_t hash_empty[] = { | |
48 | 0xd4,0x1d,0x8c,0xd9, | |
49 | 0x8f,0x00,0xb2,0x04, | |
50 | 0xe9,0x80,0x09,0x98, | |
51 | 0xec,0xf8,0x42,0x7e | |
52 | }; | |
53 | ||
54 | u_int8_t hash_abc[] = { | |
55 | 0x90,0x01,0x50,0x98, | |
56 | 0x3c,0xd2,0x4f,0xb0, | |
57 | 0xd6,0x96,0x3f,0x7d, | |
58 | 0x28,0xe1,0x7f,0x72 | |
59 | }; | |
60 | ||
61 | u_int8_t hash_abcd[] = { | |
62 | 0xc3,0xfc,0xd3,0xd7, | |
63 | 0x61,0x92,0xe4,0x00, | |
64 | 0x7d,0xfb,0x49,0x6c, | |
65 | 0xca,0x67,0xe1,0x3b | |
66 | }; | |
67 | ||
68 | empty.ptr = ""; | |
69 | empty.len = 0; | |
70 | abc.ptr = "abc"; | |
71 | abc.len = 3; | |
72 | abcd.ptr = "abcdefghijklmnopqrstuvwxyz"; | |
73 | abcd.len = strlen(abcd.ptr); | |
74 | ||
52923c9a | 75 | tester->assert_true(tester, hasher->get_hash_size(hasher) == 16, "block size"); |
bfa4b218 MW |
76 | |
77 | /* simple hashing, using empty */ | |
78 | hasher->get_hash(hasher, empty, hash_buffer); | |
79 | tester->assert_false(tester, memcmp(hash_buffer, hash_empty, 16), "hash for empty"); | |
80 | ||
81 | /* simple hashing, using "abc" */ | |
82 | hasher->get_hash(hasher, abc, hash_buffer); | |
83 | tester->assert_false(tester, memcmp(hash_buffer, hash_abc, 16), "hash for abc"); | |
84 | ||
85 | /* with allocation, using "abcdb..." */ | |
86 | hasher->reset(hasher); | |
87 | hasher->allocate_hash(hasher, abcd, &hash_chunk); | |
88 | tester->assert_true(tester, hash_chunk.len == 16, "hash len"); | |
89 | tester->assert_false(tester, memcmp(hash_chunk.ptr, hash_abcd, hash_chunk.len), "hash for abcd..."); | |
5113680f | 90 | free(hash_chunk.ptr); |
d048df5c | 91 | hasher->destroy(hasher); |
bfa4b218 | 92 | } |
b2410480 MW |
93 | |
94 | /* | |
95 | * described in Header-File | |
96 | */ | |
51d56047 | 97 | void test_sha1_hasher(protected_tester_t *tester) |
b2410480 MW |
98 | { |
99 | /* | |
100 | * Test Vectors (from FIPS PUB 180-1) | |
101 | * "abc" | |
102 | * A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D | |
103 | * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" | |
104 | * 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1 | |
105 | * A million repetitions of "a" | |
106 | * 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F | |
107 | */ | |
108 | hasher_t *hasher = hasher_create(HASH_SHA1); | |
109 | u_int8_t hash_buffer[20]; | |
110 | chunk_t abc, abcdb, aaa, hash_chunk; | |
111 | u_int32_t i; | |
112 | u_int8_t hash_abc[] = { | |
113 | 0xA9,0x99,0x3E,0x36, | |
114 | 0x47,0x06,0x81,0x6A, | |
115 | 0xBA,0x3E,0x25,0x71, | |
116 | 0x78,0x50,0xC2,0x6C, | |
117 | 0x9C,0xD0,0xD8,0x9D | |
118 | }; | |
119 | u_int8_t hash_abcdb[] = { | |
120 | 0x84,0x98,0x3E,0x44, | |
121 | 0x1C,0x3B,0xD2,0x6E, | |
122 | 0xBA,0xAE,0x4A,0xA1, | |
123 | 0xF9,0x51,0x29,0xE5, | |
124 | 0xE5,0x46,0x70,0xF1 | |
125 | }; | |
126 | u_int8_t hash_aaa[] = { | |
127 | 0x34,0xAA,0x97,0x3C, | |
128 | 0xD4,0xC4,0xDA,0xA4, | |
129 | 0xF6,0x1E,0xEB,0x2B, | |
130 | 0xDB,0xAD,0x27,0x31, | |
131 | 0x65,0x34,0x01,0x6F | |
132 | }; | |
133 | abc.ptr = "abc"; | |
134 | abc.len = 3; | |
135 | abcdb.ptr = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"; | |
136 | abcdb.len = strlen(abcdb.ptr); | |
137 | aaa.ptr = "aaaaaaaaaa"; /* 10 a's */ | |
138 | aaa.len = 10; | |
139 | ||
52923c9a | 140 | tester->assert_true(tester, hasher->get_hash_size(hasher) == 20, "block size"); |
b2410480 MW |
141 | |
142 | /* simple hashing, using "abc" */ | |
143 | hasher->get_hash(hasher, abc, hash_buffer); | |
144 | tester->assert_false(tester, memcmp(hash_buffer, hash_abc, 20), "hash for abc"); | |
145 | ||
146 | /* with allocation, using "abcdb..." */ | |
147 | hasher->reset(hasher); | |
148 | hasher->allocate_hash(hasher, abcdb, &hash_chunk); | |
149 | tester->assert_true(tester, hash_chunk.len == 20, "chunk len"); | |
150 | tester->assert_false(tester, memcmp(hash_chunk.ptr, hash_abcdb, hash_chunk.len), "hash for abcdb..."); | |
5113680f | 151 | free(hash_chunk.ptr); |
b2410480 MW |
152 | |
153 | /* updating, using "aaaaaaa..." */ | |
154 | hasher->reset(hasher); | |
155 | for(i=0; i<100000; i++) | |
156 | { | |
157 | if (i != 99999) | |
158 | { | |
159 | hasher->get_hash(hasher, aaa, NULL); | |
160 | } | |
161 | else | |
162 | { | |
163 | hasher->get_hash(hasher, aaa, hash_buffer); | |
164 | } | |
165 | } | |
166 | tester->assert_false(tester, memcmp(hash_buffer, hash_aaa, 20), "hash for aaa..."); | |
167 | ||
168 | ||
d048df5c | 169 | hasher->destroy(hasher); |
b2410480 | 170 | } |