Added SILC Server library.
[silc.git] / lib / silccrypt / tests / test_sha256.c
1 #include "silc.h"
2
3 /* Test vectors from NIST secure hashing definition for SHA-256 */
4
5 /* First test vector */
6 const unsigned char data1[] = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
7 const unsigned char data1_digest[] = "\x24\x8d\x6a\x61\xd2\x06\x38\xb8\xe5\xc0\x26\x93\x0c\x3e\x60\x39\xa3\x3c\xe4\x59\x64\xff\x21\x67\xf6\xec\xed\xd4\x19\xdb\x06\xc1";
8
9 /* Second test vector */
10 const unsigned char data2[] = "abc";
11 const unsigned char data2_digest[] = "\xba\x78\x16\xbf\x8f\x01\xcf\xea\x41\x41\x40\xde\x5d\xae\x22\x23\xb0\x03\x61\xa3\x96\x17\x7a\x9c\xb4\x10\xff\x61\xf2\x00\x15\xad";
12
13 int main(int argc, char **argv)
14 {
15   SilcBool success = FALSE;
16   unsigned char digest[20];
17   SilcHash sha256;
18   
19   if (argc > 1 && !strcmp(argv[1], "-d")) {
20     silc_log_debug(TRUE);
21     silc_log_debug_hexdump(TRUE);
22     silc_log_set_debug_string("*crypt*,*hash*,*sha256*");
23   }
24
25   SILC_LOG_DEBUG(("Registering builtin hash functions"));
26   silc_hash_register_default();
27
28   SILC_LOG_DEBUG(("Allocating sha256 hash function"));
29   if (!silc_hash_alloc("sha256", &sha256)) {
30     SILC_LOG_DEBUG(("Allocating sha256 hash function failed"));
31     goto err;
32   }
33
34   /* First test vector */
35   SILC_LOG_DEBUG(("First test vector"));
36   silc_hash_init(sha256);
37   silc_hash_update(sha256, data1, strlen(data1));
38   silc_hash_final(sha256, digest);
39   SILC_LOG_HEXDUMP(("Message"), (unsigned char *)data1, strlen(data1));
40   SILC_LOG_HEXDUMP(("Digest"), digest, sizeof(digest));
41   SILC_LOG_HEXDUMP(("Expected digest"), (unsigned char *)data1_digest,
42                    sizeof(digest));
43   if (memcmp(digest, data1_digest, sizeof(digest))) {
44     SILC_LOG_DEBUG(("Hash failed"));
45     goto err;
46   }
47   SILC_LOG_DEBUG(("Hash is successful"));
48   
49   /* Second test vector */
50   SILC_LOG_DEBUG(("First test vector"));
51   silc_hash_init(sha256);
52   silc_hash_update(sha256, data2, strlen(data2));
53   silc_hash_final(sha256, digest);
54   SILC_LOG_HEXDUMP(("Message"), (unsigned char *)data2, strlen(data2));
55   SILC_LOG_HEXDUMP(("Digest"), digest, sizeof(digest));
56   SILC_LOG_HEXDUMP(("Expected digest"), (unsigned char *)data2_digest,
57                    sizeof(digest));
58   if (memcmp(digest, data2_digest, sizeof(digest))) {
59     SILC_LOG_DEBUG(("Hash failed"));
60     goto err;
61   }
62   SILC_LOG_DEBUG(("Hash is successful"));
63   
64   success = TRUE;
65   
66  err:
67   SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
68   fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");
69
70   silc_hash_free(sha256);
71   silc_hash_unregister_all();
72   return success;
73 }