libpurple/tests/test_cipher.c

changeset 37597
c92c6f818320
parent 37596
950e390d9d42
child 37598
13e5ff40475c
equal deleted inserted replaced
37596:950e390d9d42 37597:c92c6f818320
1 #include <glib.h>
2 #include <check.h>
3 #include <stdlib.h>
4 #include <string.h>
5
6 #undef HAVE_DBUS
7
8 #include "tests.h"
9
10 #include "../ciphers/des3cipher.h"
11 #include "../ciphers/descipher.h"
12 #include "../ciphers/hmaccipher.h"
13 #include "../ciphers/md4hash.h"
14 #include "../ciphers/md5hash.h"
15 #include "../ciphers/sha1hash.h"
16 #include "../ciphers/sha256hash.h"
17
18 /******************************************************************************
19 * DES Tests
20 *****************************************************************************/
21 #define DES_TEST(in, keyz, out, len) { \
22 PurpleCipher *cipher = NULL; \
23 guchar answer[len+1]; \
24 gint ret = 0; \
25 guchar decrypt[len+1] = in; \
26 guchar key[8+1] = keyz;\
27 guchar encrypt[len+1] = out;\
28 \
29 cipher = purple_des_cipher_new(); \
30 purple_cipher_set_key(cipher, key, 8); \
31 \
32 ret = purple_cipher_encrypt(cipher, decrypt, len, answer, len); \
33 fail_unless(ret == len, NULL); \
34 fail_unless(memcmp(encrypt, answer, len) == 0, NULL); \
35 \
36 ret = purple_cipher_decrypt(cipher, encrypt, len, answer, len); \
37 fail_unless(ret == len, NULL); \
38 fail_unless(memcmp(decrypt, answer, len) == 0, NULL); \
39 \
40 g_object_unref(cipher); \
41 }
42
43 START_TEST(test_des_12345678) {
44 DES_TEST("12345678",
45 "\x3b\x38\x98\x37\x15\x20\xf7\x5e",
46 "\x06\x22\x05\xac\x6a\x0d\x55\xdd",
47 8);
48 }
49 END_TEST
50
51 START_TEST(test_des_abcdefgh) {
52 DES_TEST("abcdefgh",
53 "\x3b\x38\x98\x37\x15\x20\xf7\x5e",
54 "\x62\xe0\xc6\x8c\x48\xe4\x75\xed",
55 8);
56 }
57 END_TEST
58
59 /******************************************************************************
60 * DES3 Tests
61 * See http://csrc.nist.gov/groups/ST/toolkit/examples.html
62 * and some NULL things I made up
63 *****************************************************************************/
64
65 #define DES3_TEST(in, key, iv, out, len, mode) { \
66 PurpleCipher *cipher = NULL; \
67 guchar answer[len+1]; \
68 guchar decrypt[len+1] = in; \
69 guchar encrypt[len+1] = out; \
70 gint ret = 0; \
71 \
72 cipher = purple_des3_cipher_new(); \
73 purple_cipher_set_key(cipher, (guchar *)key, 24); \
74 purple_cipher_set_batch_mode(cipher, (mode)); \
75 purple_cipher_set_iv(cipher, (guchar *)iv, 8); \
76 \
77 ret = purple_cipher_encrypt(cipher, decrypt, len, answer, len); \
78 fail_unless(ret == len, NULL); \
79 fail_unless(memcmp(encrypt, answer, len) == 0, NULL); \
80 \
81 ret = purple_cipher_decrypt(cipher, encrypt, len, answer, len); \
82 fail_unless(ret == len, NULL); \
83 fail_unless(memcmp(decrypt, answer, len) == 0, NULL); \
84 \
85 g_object_unref(cipher); \
86 }
87
88 START_TEST(test_des3_ecb_nist1) {
89 DES3_TEST(
90 "\x6B\xC1\xBE\xE2\x2E\x40\x9F\x96\xE9\x3D\x7E\x11\x73\x93\x17\x2A"
91 "\xAE\x2D\x8A\x57\x1E\x03\xAC\x9C\x9E\xB7\x6F\xAC\x45\xAF\x8E\x51",
92 "\x01\x23\x45\x67\x89\xAB\xCD\xEF"
93 "\x23\x45\x67\x89\xAB\xCD\xEF\x01"
94 "\x45\x67\x89\xAB\xCD\xEF\x01\x23",
95 "00000000", /* ignored */
96 "\x71\x47\x72\xF3\x39\x84\x1D\x34\x26\x7F\xCC\x4B\xD2\x94\x9C\xC3"
97 "\xEE\x11\xC2\x2A\x57\x6A\x30\x38\x76\x18\x3F\x99\xC0\xB6\xDE\x87",
98 32,
99 PURPLE_CIPHER_BATCH_MODE_ECB);
100 }
101 END_TEST
102
103 START_TEST(test_des3_ecb_nist2) {
104 DES3_TEST(
105 "\x6B\xC1\xBE\xE2\x2E\x40\x9F\x96\xE9\x3D\x7E\x11\x73\x93\x17\x2A"
106 "\xAE\x2D\x8A\x57\x1E\x03\xAC\x9C\x9E\xB7\x6F\xAC\x45\xAF\x8E\x51",
107 "\x01\x23\x45\x67\x89\xAB\xCD\xEF"
108 "\x23\x45\x67\x89\xAB\xCD\xEF\x01"
109 "\x01\x23\x45\x67\x89\xAB\xCD\xEF",
110 "00000000", /* ignored */
111 "\x06\xED\xE3\xD8\x28\x84\x09\x0A\xFF\x32\x2C\x19\xF0\x51\x84\x86"
112 "\x73\x05\x76\x97\x2A\x66\x6E\x58\xB6\xC8\x8C\xF1\x07\x34\x0D\x3D",
113 32,
114 PURPLE_CIPHER_BATCH_MODE_ECB);
115 }
116 END_TEST
117
118 START_TEST(test_des3_ecb_null_key) {
119 DES3_TEST(
120 "\x16\xf4\xb3\x77\xfd\x4b\x9e\xca",
121 "\x38\x00\x88\x6a\xef\xcb\x00\xad"
122 "\x5d\xe5\x29\x00\x7d\x98\x64\x4c"
123 "\x86\x00\x7b\xd3\xc7\x00\x7b\x32",
124 "00000000", /* ignored */
125 "\xc0\x60\x30\xa1\xb7\x25\x42\x44",
126 8,
127 PURPLE_CIPHER_BATCH_MODE_ECB);
128 }
129 END_TEST
130
131 START_TEST(test_des3_ecb_null_text) {
132 DES3_TEST(
133 "\x65\x73\x34\xc1\x19\x00\x79\x65",
134 "\x32\x64\xda\x10\x13\x6a\xfe\x1e"
135 "\x37\x54\xd1\x2c\x41\x04\x10\x40"
136 "\xaf\x1c\x75\x2b\x51\x3a\x03\xf5",
137 "00000000", /* ignored */
138 "\xe5\x80\xf6\x12\xf8\x4e\xd9\x6c",
139 8,
140 PURPLE_CIPHER_BATCH_MODE_ECB);
141 }
142 END_TEST
143
144 START_TEST(test_des3_ecb_null_key_and_text) {
145 DES3_TEST(
146 "\xdf\x7f\x00\x92\xe7\xc1\x49\xd2",
147 "\x0e\x41\x00\xc4\x8b\xf0\x6e\xa1"
148 "\x66\x49\x42\x63\x22\x00\xf0\x99"
149 "\x6b\x22\xc1\x37\x9c\x00\xe4\x8f",
150 "00000000", /* ignored */
151 "\x73\xd8\x1f\x1f\x50\x01\xe4\x79",
152 8,
153 PURPLE_CIPHER_BATCH_MODE_ECB);
154 }
155 END_TEST
156
157 START_TEST(test_des3_cbc_nist1) {
158 DES3_TEST(
159 "\x6B\xC1\xBE\xE2\x2E\x40\x9F\x96\xE9\x3D\x7E\x11\x73\x93\x17\x2A"
160 "\xAE\x2D\x8A\x57\x1E\x03\xAC\x9C\x9E\xB7\x6F\xAC\x45\xAF\x8E\x51",
161 "\x01\x23\x45\x67\x89\xAB\xCD\xEF"
162 "\x23\x45\x67\x89\xAB\xCD\xEF\x01"
163 "\x45\x67\x89\xAB\xCD\xEF\x01\x23",
164 "\xF6\x9F\x24\x45\xDF\x4F\x9B\x17",
165 "\x20\x79\xC3\xD5\x3A\xA7\x63\xE1\x93\xB7\x9E\x25\x69\xAB\x52\x62"
166 "\x51\x65\x70\x48\x1F\x25\xB5\x0F\x73\xC0\xBD\xA8\x5C\x8E\x0D\xA7",
167 32,
168 PURPLE_CIPHER_BATCH_MODE_CBC);
169 }
170 END_TEST
171
172 START_TEST(test_des3_cbc_nist2) {
173 DES3_TEST(
174 "\x6B\xC1\xBE\xE2\x2E\x40\x9F\x96\xE9\x3D\x7E\x11\x73\x93\x17\x2A"
175 "\xAE\x2D\x8A\x57\x1E\x03\xAC\x9C\x9E\xB7\x6F\xAC\x45\xAF\x8E\x51",
176 "\x01\x23\x45\x67\x89\xAB\xCD\xEF"
177 "\x23\x45\x67\x89\xAB\xCD\xEF\x01"
178 "\x01\x23\x45\x67\x89\xAB\xCD\xEF",
179 "\xF6\x9F\x24\x45\xDF\x4F\x9B\x17",
180 "\x74\x01\xCE\x1E\xAB\x6D\x00\x3C\xAF\xF8\x4B\xF4\x7B\x36\xCC\x21"
181 "\x54\xF0\x23\x8F\x9F\xFE\xCD\x8F\x6A\xCF\x11\x83\x92\xB4\x55\x81",
182 32,
183 PURPLE_CIPHER_BATCH_MODE_CBC);
184 }
185 END_TEST
186
187 START_TEST(test_des3_cbc_null_key) {
188 DES3_TEST(
189 "\x16\xf4\xb3\x77\xfd\x4b\x9e\xca",
190 "\x38\x00\x88\x6a\xef\xcb\x00\xad"
191 "\x5d\xe5\x29\x00\x7d\x98\x64\x4c"
192 "\x86\x00\x7b\xd3\xc7\x00\x7b\x32",
193 "\x31\x32\x33\x34\x35\x36\x37\x38",
194 "\x52\xe7\xde\x96\x39\x87\x87\xdb",
195 8,
196 PURPLE_CIPHER_BATCH_MODE_CBC);
197 }
198 END_TEST
199
200 START_TEST(test_des3_cbc_null_text) {
201 DES3_TEST(
202 "\x65\x73\x34\xc1\x19\x00\x79\x65",
203 "\x32\x64\xda\x10\x13\x6a\xfe\x1e"
204 "\x37\x54\xd1\x2c\x41\x04\x10\x40"
205 "\xaf\x1c\x75\x2b\x51\x3a\x03\xf5",
206 "\x7C\xAF\x0D\x57\x1E\x57\x10\xDA",
207 "\x40\x12\x0e\x00\x85\xff\x6c\xc2",
208 8,
209 PURPLE_CIPHER_BATCH_MODE_CBC);
210 }
211 END_TEST
212
213 START_TEST(test_des3_cbc_null_key_and_text) {
214 DES3_TEST(
215 "\xdf\x7f\x00\x92\xe7\xc1\x49\xd2",
216 "\x0e\x41\x00\xc4\x8b\xf0\x6e\xa1"
217 "\x66\x49\x42\x63\x22\x00\xf0\x99"
218 "\x6b\x22\xc1\x37\x9c\x00\xe4\x8f",
219 "\x01\x19\x0D\x2c\x40\x67\x89\x67",
220 "\xa7\xc1\x10\xbe\x9b\xd5\x8a\x67",
221 8,
222 PURPLE_CIPHER_BATCH_MODE_CBC);
223 }
224 END_TEST
225
226 /******************************************************************************
227 * HMAC Tests
228 * See RFC2202 and some other NULL tests I made up
229 *****************************************************************************/
230
231 #define HMAC_TEST(data, data_len, key, key_len, type, digest) { \
232 PurpleCipher *cipher = NULL; \
233 PurpleHash *hash = NULL; \
234 gchar cdigest[41]; \
235 gboolean ret = FALSE; \
236 \
237 hash = purple_##type##_hash_new(); \
238 cipher = purple_hmac_cipher_new(hash); \
239 purple_cipher_set_key(cipher, (guchar *)key, (key_len)); \
240 \
241 purple_cipher_append(cipher, (guchar *)(data), (data_len)); \
242 ret = purple_cipher_digest_to_str(cipher, cdigest, sizeof(cdigest)); \
243 \
244 fail_unless(ret == TRUE, NULL); \
245 fail_unless(strcmp((digest), cdigest) == 0, NULL); \
246 \
247 g_object_unref(cipher); \
248 g_object_unref(hash); \
249 }
250
251 /* HMAC MD5 */
252
253 START_TEST(test_hmac_md5_Hi) {
254 HMAC_TEST("Hi There",
255 8,
256 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
257 16,
258 md5,
259 "9294727a3638bb1c13f48ef8158bfc9d");
260 }
261 END_TEST
262
263 START_TEST(test_hmac_md5_what) {
264 HMAC_TEST("what do ya want for nothing?",
265 28,
266 "Jefe",
267 4,
268 md5,
269 "750c783e6ab0b503eaa86e310a5db738");
270 }
271 END_TEST
272
273 START_TEST(test_hmac_md5_dd) {
274 HMAC_TEST("\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
275 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
276 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
277 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
278 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
279 50,
280 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
281 16,
282 md5,
283 "56be34521d144c88dbb8c733f0e8b3f6");
284 }
285 END_TEST
286
287 START_TEST(test_hmac_md5_cd) {
288 HMAC_TEST("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
289 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
290 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
291 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
292 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
293 50,
294 "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"
295 "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14"
296 "\x15\x16\x17\x18\x19",
297 25,
298 md5,
299 "697eaf0aca3a3aea3a75164746ffaa79");
300 }
301 END_TEST
302
303 START_TEST(test_hmac_md5_truncation) {
304 HMAC_TEST("Test With Truncation",
305 20,
306 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
307 16,
308 md5,
309 "56461ef2342edc00f9bab995690efd4c");
310 }
311 END_TEST
312
313 START_TEST(test_hmac_md5_large_key) {
314 HMAC_TEST("Test Using Larger Than Block-Size Key - Hash Key First",
315 54,
316 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
317 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
318 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
319 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
320 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
321 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
322 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
323 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
324 80,
325 md5,
326 "6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd");
327 }
328 END_TEST
329
330 START_TEST(test_hmac_md5_large_key_and_data) {
331 HMAC_TEST("Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data",
332 73,
333 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
334 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
335 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
336 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
337 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
338 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
339 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
340 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
341 80,
342 md5,
343 "6f630fad67cda0ee1fb1f562db3aa53e");
344 }
345 END_TEST
346
347 START_TEST(test_hmac_md5_null_key) {
348 HMAC_TEST("Hi There",
349 8,
350 "\x0a\x0b\x00\x0d\x0e\x0f\x1a\x2f\x0b\x0b"
351 "\x0b\x00\x00\x0b\x0b\x49\x5f\x6e\x0b\x0b",
352 20,
353 md5,
354 "597bfd644b797a985561eeb03a169e59");
355 }
356 END_TEST
357
358 START_TEST(test_hmac_md5_null_text) {
359 HMAC_TEST("Hi\x00There",
360 8,
361 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
362 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
363 20,
364 md5,
365 "70be8e1b7b50dfcc335d6cd7992c564f");
366 }
367 END_TEST
368
369 START_TEST(test_hmac_md5_null_key_and_text) {
370 HMAC_TEST("Hi\x00Th\x00re",
371 8,
372 "\x0c\x0d\x00\x0f\x10\x1a\x3a\x3a\xe6\x34"
373 "\x0b\x00\x00\x0b\x0b\x49\x5f\x6e\x0b\x0b",
374 20,
375 md5,
376 "b31bcbba35a33a067cbba9131cba4889");
377 }
378 END_TEST
379
380 /* HMAC SHA1 */
381
382 START_TEST(test_hmac_sha1_Hi) {
383 HMAC_TEST("Hi There",
384 8,
385 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
386 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
387 20,
388 sha1,
389 "b617318655057264e28bc0b6fb378c8ef146be00");
390 }
391 END_TEST
392
393 START_TEST(test_hmac_sha1_what) {
394 HMAC_TEST("what do ya want for nothing?",
395 28,
396 "Jefe",
397 4,
398 sha1,
399 "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79");
400 }
401 END_TEST
402
403 START_TEST(test_hmac_sha1_dd) {
404 HMAC_TEST("\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
405 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
406 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
407 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
408 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
409 50,
410 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
411 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
412 20,
413 sha1,
414 "125d7342b9ac11cd91a39af48aa17b4f63f175d3");
415 }
416 END_TEST
417
418 START_TEST(test_hmac_sha1_cd) {
419 HMAC_TEST("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
420 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
421 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
422 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
423 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
424 50,
425 "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"
426 "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14"
427 "\x15\x16\x17\x18\x19",
428 25,
429 sha1,
430 "4c9007f4026250c6bc8414f9bf50c86c2d7235da");
431 }
432 END_TEST
433
434 START_TEST(test_hmac_sha1_truncation) {
435 HMAC_TEST("Test With Truncation",
436 20,
437 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
438 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
439 20,
440 sha1,
441 "4c1a03424b55e07fe7f27be1d58bb9324a9a5a04");
442 }
443 END_TEST
444
445 START_TEST(test_hmac_sha1_large_key) {
446 HMAC_TEST("Test Using Larger Than Block-Size Key - Hash Key First",
447 54,
448 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
449 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
450 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
451 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
452 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
453 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
454 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
455 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
456 80,
457 sha1,
458 "aa4ae5e15272d00e95705637ce8a3b55ed402112");
459 }
460 END_TEST
461
462 START_TEST(test_hmac_sha1_large_key_and_data) {
463 HMAC_TEST("Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data",
464 73,
465 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
466 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
467 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
468 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
469 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
470 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
471 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
472 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
473 80,
474 sha1,
475 "e8e99d0f45237d786d6bbaa7965c7808bbff1a91");
476 }
477 END_TEST
478
479 START_TEST(test_hmac_sha1_null_key) {
480 HMAC_TEST("Hi There",
481 8,
482 "\x0a\x0b\x00\x0d\x0e\x0f\x1a\x2f\x0b\x0b"
483 "\x0b\x00\x00\x0b\x0b\x49\x5f\x6e\x0b\x0b",
484 20,
485 sha1,
486 "eb62a2e0e33d300be669c52aab3f591bc960aac5");
487 }
488 END_TEST
489
490 START_TEST(test_hmac_sha1_null_text) {
491 HMAC_TEST("Hi\x00There",
492 8,
493 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
494 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
495 20,
496 sha1,
497 "31ca58d849e971e418e3439de2c6f83144b6abb7");
498 }
499 END_TEST
500
501 START_TEST(test_hmac_sha1_null_key_and_text) {
502 HMAC_TEST("Hi\x00Th\x00re",
503 8,
504 "\x0c\x0d\x00\x0f\x10\x1a\x3a\x3a\xe6\x34"
505 "\x0b\x00\x00\x0b\x0b\x49\x5f\x6e\x0b\x0b",
506 20,
507 sha1,
508 "e6b8e2fede87aa09dcb13e554df1435e056eae36");
509 }
510 END_TEST
511
512 /******************************************************************************
513 * Suite
514 *****************************************************************************/
515 Suite *
516 cipher_suite(void) {
517 Suite *s = suite_create("Cipher Suite");
518 TCase *tc = NULL;
519
520 /* md4 tests */
521 tc = tcase_create("MD4");
522 tcase_add_test(tc, test_md4_empty_string);
523 tcase_add_test(tc, test_md4_a);
524 tcase_add_test(tc, test_md4_abc);
525 tcase_add_test(tc, test_md4_message_digest);
526 tcase_add_test(tc, test_md4_a_to_z);
527 tcase_add_test(tc, test_md4_A_to_Z_a_to_z_0_to_9);
528 tcase_add_test(tc, test_md4_1_to_0_8_times);
529 suite_add_tcase(s, tc);
530
531 /* md5 tests */
532 tc = tcase_create("MD5");
533 tcase_add_test(tc, test_md5_empty_string);
534 tcase_add_test(tc, test_md5_a);
535 tcase_add_test(tc, test_md5_abc);
536 tcase_add_test(tc, test_md5_message_digest);
537 tcase_add_test(tc, test_md5_a_to_z);
538 tcase_add_test(tc, test_md5_A_to_Z_a_to_z_0_to_9);
539 tcase_add_test(tc, test_md5_1_to_0_8_times);
540 suite_add_tcase(s, tc);
541
542 /* sha1 tests */
543 tc = tcase_create("SHA1");
544 tcase_add_test(tc, test_sha1_empty_string);
545 tcase_add_test(tc, test_sha1_a);
546 tcase_add_test(tc, test_sha1_abc);
547 tcase_add_test(tc, test_sha1_abcd_gibberish);
548 tcase_add_test(tc, test_sha1_1000_as_1000_times);
549 suite_add_tcase(s, tc);
550
551 /* sha256 tests */
552 tc = tcase_create("SHA256");
553 tcase_add_test(tc, test_sha256_empty_string);
554 tcase_add_test(tc, test_sha256_a);
555 tcase_add_test(tc, test_sha256_abc);
556 tcase_add_test(tc, test_sha256_abcd_gibberish);
557 tcase_add_test(tc, test_sha256_1000_as_1000_times);
558 suite_add_tcase(s, tc);
559
560 /* des tests */
561 tc = tcase_create("DES");
562 tcase_add_test(tc, test_des_12345678);
563 tcase_add_test(tc, test_des_abcdefgh);
564 suite_add_tcase(s, tc);
565
566 /* des3 ecb tests */
567 tc = tcase_create("DES3 ECB");
568 tcase_add_test(tc, test_des3_ecb_nist1);
569 tcase_add_test(tc, test_des3_ecb_nist2);
570 tcase_add_test(tc, test_des3_ecb_null_key);
571 tcase_add_test(tc, test_des3_ecb_null_text);
572 tcase_add_test(tc, test_des3_ecb_null_key_and_text);
573 suite_add_tcase(s, tc);
574 /* des3 cbc tests */
575 tc = tcase_create("DES3 CBC");
576 tcase_add_test(tc, test_des3_cbc_nist1);
577 tcase_add_test(tc, test_des3_cbc_nist2);
578 tcase_add_test(tc, test_des3_cbc_null_key);
579 tcase_add_test(tc, test_des3_cbc_null_text);
580 tcase_add_test(tc, test_des3_cbc_null_key_and_text);
581 suite_add_tcase(s, tc);
582
583 /* hmac tests */
584 tc = tcase_create("HMAC");
585 tcase_add_test(tc, test_hmac_md5_Hi);
586 tcase_add_test(tc, test_hmac_md5_what);
587 tcase_add_test(tc, test_hmac_md5_dd);
588 tcase_add_test(tc, test_hmac_md5_cd);
589 tcase_add_test(tc, test_hmac_md5_truncation);
590 tcase_add_test(tc, test_hmac_md5_large_key);
591 tcase_add_test(tc, test_hmac_md5_large_key_and_data);
592 tcase_add_test(tc, test_hmac_md5_null_key);
593 tcase_add_test(tc, test_hmac_md5_null_text);
594 tcase_add_test(tc, test_hmac_md5_null_key_and_text);
595 tcase_add_test(tc, test_hmac_sha1_Hi);
596 tcase_add_test(tc, test_hmac_sha1_what);
597 tcase_add_test(tc, test_hmac_sha1_dd);
598 tcase_add_test(tc, test_hmac_sha1_cd);
599 tcase_add_test(tc, test_hmac_sha1_truncation);
600 tcase_add_test(tc, test_hmac_sha1_large_key);
601 tcase_add_test(tc, test_hmac_sha1_large_key_and_data);
602 tcase_add_test(tc, test_hmac_sha1_null_key);
603 tcase_add_test(tc, test_hmac_sha1_null_text);
604 tcase_add_test(tc, test_hmac_sha1_null_key_and_text);
605 suite_add_tcase(s, tc);
606
607 return s;
608 }
609
610

mercurial