1 #include "silcincludes.h"
3 /* Test vectors from NIST secure hashing definition for SHA-256 */
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";
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";
13 int main(int argc, char **argv)
16 unsigned char digest[20];
19 if (argc > 1 && !strcmp(argv[1], "-d")) {
21 silc_log_debug_hexdump(TRUE);
22 silc_log_set_debug_string("*crypt*,*hash*,*sha256*");
25 SILC_LOG_DEBUG(("Registering builtin hash functions"));
26 silc_hash_register_default();
28 SILC_LOG_DEBUG(("Allocating sha256 hash function"));
29 if (!silc_hash_alloc("sha256", &sha256)) {
30 SILC_LOG_DEBUG(("Allocating sha256 hash function failed"));
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,
43 if (memcmp(digest, data1_digest, sizeof(digest))) {
44 SILC_LOG_DEBUG(("Hash failed"));
47 SILC_LOG_DEBUG(("Hash is successful"));
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,
58 if (memcmp(digest, data2_digest, sizeof(digest))) {
59 SILC_LOG_DEBUG(("Hash failed"));
62 SILC_LOG_DEBUG(("Hash is successful"));
67 SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
68 fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");
70 silc_hash_free(sha256);
71 silc_hash_unregister_all();