2 * @file hasher_sha1_test.h
4 * @brief Tests the sha1 hasher
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 "hasher_sha1_test.h"
27 #include "../utils/allocator.h"
31 * described in Header-File
33 void test_hasher_sha1(tester_t
*tester
)
36 * Test Vectors (from FIPS PUB 180-1)
38 * A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D
39 * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
40 * 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1
41 * A million repetitions of "a"
42 * 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
44 hasher_t
*hasher
= hasher_create(HASH_SHA1
);
45 u_int8_t hash_buffer
[20];
46 chunk_t abc
, abcdb
, aaa
, hash_chunk
;
48 u_int8_t hash_abc
[] = {
55 u_int8_t hash_abcdb
[] = {
62 u_int8_t hash_aaa
[] = {
71 abcdb
.ptr
= "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
72 abcdb
.len
= strlen(abcdb
.ptr
);
73 aaa
.ptr
= "aaaaaaaaaa"; /* 10 a's */
76 tester
->assert_true(tester
, hasher
->get_block_size(hasher
) == 20, "block size");
78 /* simple hashing, using "abc" */
79 hasher
->get_hash(hasher
, abc
, hash_buffer
);
80 tester
->assert_false(tester
, memcmp(hash_buffer
, hash_abc
, 20), "hash for abc");
82 /* with allocation, using "abcdb..." */
83 hasher
->reset(hasher
);
84 hasher
->allocate_hash(hasher
, abcdb
, &hash_chunk
);
85 tester
->assert_true(tester
, hash_chunk
.len
== 20, "chunk len");
86 tester
->assert_false(tester
, memcmp(hash_chunk
.ptr
, hash_abcdb
, hash_chunk
.len
), "hash for abcdb...");
87 allocator_free(hash_chunk
.ptr
);
89 /* updating, using "aaaaaaa..." */
90 hasher
->reset(hasher
);
91 for(i
=0; i
<100000; i
++)
95 hasher
->get_hash(hasher
, aaa
, NULL
);
99 hasher
->get_hash(hasher
, aaa
, hash_buffer
);
102 tester
->assert_false(tester
, memcmp(hash_buffer
, hash_aaa
, 20), "hash for aaa...");