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>
16 #include <openssl/crypto.h>
18 static const unsigned char app_c1[SHA512_DIGEST_LENGTH] = {
19 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba,
20 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31,
21 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2,
22 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a,
23 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8,
24 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd,
25 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e,
26 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f
29 static const unsigned char app_c2[SHA512_DIGEST_LENGTH] = {
30 0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda,
31 0x8c, 0xf4, 0xf7, 0x28, 0x14, 0xfc, 0x14, 0x3f,
32 0x8f, 0x77, 0x79, 0xc6, 0xeb, 0x9f, 0x7f, 0xa1,
33 0x72, 0x99, 0xae, 0xad, 0xb6, 0x88, 0x90, 0x18,
34 0x50, 0x1d, 0x28, 0x9e, 0x49, 0x00, 0xf7, 0xe4,
35 0x33, 0x1b, 0x99, 0xde, 0xc4, 0xb5, 0x43, 0x3a,
36 0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26, 0x54,
37 0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09
40 static const unsigned char app_c3[SHA512_DIGEST_LENGTH] = {
41 0xe7, 0x18, 0x48, 0x3d, 0x0c, 0xe7, 0x69, 0x64,
42 0x4e, 0x2e, 0x42, 0xc7, 0xbc, 0x15, 0xb4, 0x63,
43 0x8e, 0x1f, 0x98, 0xb1, 0x3b, 0x20, 0x44, 0x28,
44 0x56, 0x32, 0xa8, 0x03, 0xaf, 0xa9, 0x73, 0xeb,
45 0xde, 0x0f, 0xf2, 0x44, 0x87, 0x7e, 0xa6, 0x0a,
46 0x4c, 0xb0, 0x43, 0x2c, 0xe5, 0x77, 0xc3, 0x1b,
47 0xeb, 0x00, 0x9c, 0x5c, 0x2c, 0x49, 0xaa, 0x2e,
48 0x4e, 0xad, 0xb2, 0x17, 0xad, 0x8c, 0xc0, 0x9b
51 static const unsigned char app_d1[SHA384_DIGEST_LENGTH] = {
52 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b,
53 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07,
54 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63,
55 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed,
56 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23,
57 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7
60 static const unsigned char app_d2[SHA384_DIGEST_LENGTH] = {
61 0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8,
62 0x3d, 0x19, 0x2f, 0xc7, 0x82, 0xcd, 0x1b, 0x47,
63 0x53, 0x11, 0x1b, 0x17, 0x3b, 0x3b, 0x05, 0xd2,
64 0x2f, 0xa0, 0x80, 0x86, 0xe3, 0xb0, 0xf7, 0x12,
65 0xfc, 0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9,
66 0x66, 0xc3, 0xe9, 0xfa, 0x91, 0x74, 0x60, 0x39
69 static const unsigned char app_d3[SHA384_DIGEST_LENGTH] = {
70 0x9d, 0x0e, 0x18, 0x09, 0x71, 0x64, 0x74, 0xcb,
71 0x08, 0x6e, 0x83, 0x4e, 0x31, 0x0a, 0x4a, 0x1c,
72 0xed, 0x14, 0x9e, 0x9c, 0x00, 0xf2, 0x48, 0x52,
73 0x79, 0x72, 0xce, 0xc5, 0x70, 0x4c, 0x2a, 0x5b,
74 0x07, 0xb8, 0xb3, 0xdc, 0x38, 0xec, 0xc4, 0xeb,
75 0xae, 0x97, 0xdd, 0xd8, 0x7f, 0x3d, 0x89, 0x85
78 int main(int argc, char **argv)
80 unsigned char md[SHA512_DIGEST_LENGTH];
84 fprintf(stdout, "Testing SHA-512 ");
86 if (!EVP_Digest("abc", 3, md, NULL, EVP_sha512(), NULL))
88 if (memcmp(md, app_c1, sizeof(app_c1))) {
90 fprintf(stderr, "\nTEST 1 of 3 failed.\n");
96 if (!EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk"
97 "efghijkl" "fghijklm" "ghijklmn" "hijklmno"
98 "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs"
99 "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha512(), NULL))
101 if (memcmp(md, app_c2, sizeof(app_c2))) {
103 fprintf(stderr, "\nTEST 2 of 3 failed.\n");
106 fprintf(stdout, ".");
109 evp = EVP_MD_CTX_new();
112 fprintf(stderr, "\nTEST 3 of 3 failed. (malloc failure)\n");
115 if (!EVP_DigestInit_ex(evp, EVP_sha512(), NULL))
117 for (i = 0; i < 1000000; i += 288) {
118 if (!EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
119 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
120 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
121 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
122 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
123 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
124 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
125 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
126 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa",
127 (1000000 - i) < 288 ? 1000000 - i : 288))
130 if (!EVP_DigestFinal_ex(evp, md, NULL))
132 EVP_MD_CTX_reset(evp);
134 if (memcmp(md, app_c3, sizeof(app_c3))) {
136 fprintf(stderr, "\nTEST 3 of 3 failed.\n");
139 fprintf(stdout, ".");
142 fprintf(stdout, " passed.\n");
145 fprintf(stdout, "Testing SHA-384 ");
147 if (!EVP_Digest("abc", 3, md, NULL, EVP_sha384(), NULL))
149 if (memcmp(md, app_d1, sizeof(app_d1))) {
151 fprintf(stderr, "\nTEST 1 of 3 failed.\n");
154 fprintf(stdout, ".");
157 if (!EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk"
158 "efghijkl" "fghijklm" "ghijklmn" "hijklmno"
159 "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs"
160 "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha384(), NULL))
162 if (memcmp(md, app_d2, sizeof(app_d2))) {
164 fprintf(stderr, "\nTEST 2 of 3 failed.\n");
167 fprintf(stdout, ".");
170 if (!EVP_DigestInit_ex(evp, EVP_sha384(), NULL))
172 for (i = 0; i < 1000000; i += 64) {
173 if (!EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
174 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa",
175 (1000000 - i) < 64 ? 1000000 - i : 64))
178 if (!EVP_DigestFinal_ex(evp, md, NULL))
180 EVP_MD_CTX_free(evp);
182 if (memcmp(md, app_d3, sizeof(app_d3))) {
184 fprintf(stderr, "\nTEST 3 of 3 failed.\n");
187 fprintf(stdout, ".");
190 fprintf(stdout, " passed.\n");
197 fprintf(stderr, "\nFatal EVP error!\n");