1 #include "silcincludes.h"
3 /* Test vectors from NIST secure hashing definition for SHA-1 */
5 /* First test vector */
6 const unsigned char data1[] = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
7 const unsigned char data1_digest[] = "\x84\x98\x3e\x44\x1c\x3b\xd2\x6e\xba\xae\x4a\xa1\xf9\x51\x29\xe5\xe5\x46\x70\xf1";
9 /* Second test vector. This will be allocated with 1000000 'a' characters
12 const unsigned char data2_digest[] = "\x34\xaa\x97\x3c\xd4\xc4\xda\xa4\xf6\x1e\xeb\x2b\xdb\xad\x27\x31\x65\x34\x01\x6f";
14 int main(int argc, char **argv)
17 unsigned char digest[20];
20 if (argc > 1 && !strcmp(argv[1], "-d")) {
22 silc_log_debug_hexdump(TRUE);
23 silc_log_set_debug_string("*crypt*,*hash*,*sha1*");
26 SILC_LOG_DEBUG(("Registering builtin hash functions"));
27 silc_hash_register_default();
29 SILC_LOG_DEBUG(("Allocating sha1 hash function"));
30 if (!silc_hash_alloc("sha1", &sha1)) {
31 SILC_LOG_DEBUG(("Allocating sha1 hash function failed"));
35 /* First test vector */
36 SILC_LOG_DEBUG(("First test vector"));
38 silc_hash_update(sha1, data1, strlen(data1));
39 silc_hash_final(sha1, digest);
40 SILC_LOG_HEXDUMP(("Message"), (unsigned char *)data1, strlen(data1));
41 SILC_LOG_HEXDUMP(("Digest"), digest, sizeof(digest));
42 SILC_LOG_HEXDUMP(("Expected digest"), (unsigned char *)data1_digest,
44 if (memcmp(digest, data1_digest, sizeof(digest))) {
45 SILC_LOG_DEBUG(("Hash failed"));
48 SILC_LOG_DEBUG(("Hash is successful"));
50 /* First test vector */
51 SILC_LOG_DEBUG(("Second test vector"));
52 data2 = silc_malloc(1000000);
53 memset(data2, 'a', 1000000);
55 silc_hash_update(sha1, data2, 1000000);
56 silc_hash_final(sha1, digest);
57 SILC_LOG_HEXDUMP(("Digest"), digest, sizeof(digest));
58 SILC_LOG_HEXDUMP(("Expected digest"), (unsigned char *)data2_digest,
60 if (memcmp(digest, data2_digest, sizeof(digest))) {
61 SILC_LOG_DEBUG(("Hash failed"));
64 SILC_LOG_DEBUG(("Hash is successful"));
69 SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
70 fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");
74 silc_hash_unregister_all();