2 * Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved.
4 * Licensed under the OpenSSL license (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
14 #include <openssl/sha.h>
15 #include <openssl/evp.h>
17 static const unsigned char app_b1[SHA256_DIGEST_LENGTH] = {
18 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea,
19 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
20 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c,
21 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad
24 static const unsigned char app_b2[SHA256_DIGEST_LENGTH] = {
25 0x24, 0x8d, 0x6a, 0x61, 0xd2, 0x06, 0x38, 0xb8,
26 0xe5, 0xc0, 0x26, 0x93, 0x0c, 0x3e, 0x60, 0x39,
27 0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff, 0x21, 0x67,
28 0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1
31 static const unsigned char app_b3[SHA256_DIGEST_LENGTH] = {
32 0xcd, 0xc7, 0x6e, 0x5c, 0x99, 0x14, 0xfb, 0x92,
33 0x81, 0xa1, 0xc7, 0xe2, 0x84, 0xd7, 0x3e, 0x67,
34 0xf1, 0x80, 0x9a, 0x48, 0xa4, 0x97, 0x20, 0x0e,
35 0x04, 0x6d, 0x39, 0xcc, 0xc7, 0x11, 0x2c, 0xd0
38 static const unsigned char addenum_1[SHA224_DIGEST_LENGTH] = {
39 0x23, 0x09, 0x7d, 0x22, 0x34, 0x05, 0xd8, 0x22,
40 0x86, 0x42, 0xa4, 0x77, 0xbd, 0xa2, 0x55, 0xb3,
41 0x2a, 0xad, 0xbc, 0xe4, 0xbd, 0xa0, 0xb3, 0xf7,
42 0xe3, 0x6c, 0x9d, 0xa7
45 static const unsigned char addenum_2[SHA224_DIGEST_LENGTH] = {
46 0x75, 0x38, 0x8b, 0x16, 0x51, 0x27, 0x76, 0xcc,
47 0x5d, 0xba, 0x5d, 0xa1, 0xfd, 0x89, 0x01, 0x50,
48 0xb0, 0xc6, 0x45, 0x5c, 0xb4, 0xf5, 0x8b, 0x19,
49 0x52, 0x52, 0x25, 0x25
52 static const unsigned char addenum_3[SHA224_DIGEST_LENGTH] = {
53 0x20, 0x79, 0x46, 0x55, 0x98, 0x0c, 0x91, 0xd8,
54 0xbb, 0xb4, 0xc1, 0xea, 0x97, 0x61, 0x8a, 0x4b,
55 0xf0, 0x3f, 0x42, 0x58, 0x19, 0x48, 0xb2, 0xee,
56 0x4e, 0xe7, 0xad, 0x67
59 int main(int argc, char **argv)
61 unsigned char md[SHA256_DIGEST_LENGTH];
65 fprintf(stdout, "Testing SHA-256 ");
67 if (!EVP_Digest("abc", 3, md, NULL, EVP_sha256(), NULL))
69 if (memcmp(md, app_b1, sizeof(app_b1))) {
71 fprintf(stderr, "\nTEST 1 of 3 failed.\n");
77 if (!EVP_Digest("abcdbcde" "cdefdefg" "efghfghi" "ghijhijk"
78 "ijkljklm" "klmnlmno" "mnopnopq", 56, md,
79 NULL, EVP_sha256(), NULL))
81 if (memcmp(md, app_b2, sizeof(app_b2))) {
83 fprintf(stderr, "\nTEST 2 of 3 failed.\n");
89 evp = EVP_MD_CTX_new();
92 fprintf(stderr, "\nTEST 3 of 3 failed. (malloc failure)\n");
95 if (!EVP_DigestInit_ex(evp, EVP_sha256(), NULL))
97 for (i = 0; i < 1000000; i += 288) {
98 if (!EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
99 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
100 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
101 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
102 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
103 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
104 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
105 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
106 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa",
107 (1000000 - i) < 288 ? 1000000 - i : 288))
110 if (!EVP_DigestFinal_ex(evp, md, NULL))
113 if (memcmp(md, app_b3, sizeof(app_b3))) {
115 fprintf(stderr, "\nTEST 3 of 3 failed.\n");
118 fprintf(stdout, ".");
121 fprintf(stdout, " passed.\n");
124 fprintf(stdout, "Testing SHA-224 ");
126 if (!EVP_Digest("abc", 3, md, NULL, EVP_sha224(), NULL))
128 if (memcmp(md, addenum_1, sizeof(addenum_1))) {
130 fprintf(stderr, "\nTEST 1 of 3 failed.\n");
133 fprintf(stdout, ".");
136 if (!EVP_Digest("abcdbcde" "cdefdefg" "efghfghi" "ghijhijk"
137 "ijkljklm" "klmnlmno" "mnopnopq", 56, md,
138 NULL, EVP_sha224(), NULL))
140 if (memcmp(md, addenum_2, sizeof(addenum_2))) {
142 fprintf(stderr, "\nTEST 2 of 3 failed.\n");
145 fprintf(stdout, ".");
148 EVP_MD_CTX_reset(evp);
149 if (!EVP_DigestInit_ex(evp, EVP_sha224(), NULL))
151 for (i = 0; i < 1000000; i += 64) {
152 if (!EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
153 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa",
154 (1000000 - i) < 64 ? 1000000 - i : 64))
157 if (!EVP_DigestFinal_ex(evp, md, NULL))
159 EVP_MD_CTX_free(evp);
161 if (memcmp(md, addenum_3, sizeof(addenum_3))) {
163 fprintf(stderr, "\nTEST 3 of 3 failed.\n");
166 fprintf(stdout, ".");
169 fprintf(stdout, " passed.\n");
175 fprintf(stderr, "Fatal EVP error!\n");