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 EVP_Digest("abc", 3, md, NULL, EVP_sha512(), NULL);
87 if (memcmp(md, app_c1, sizeof(app_c1))) {
89 fprintf(stderr, "\nTEST 1 of 3 failed.\n");
95 EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk"
96 "efghijkl" "fghijklm" "ghijklmn" "hijklmno"
97 "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs"
98 "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha512(), NULL);
99 if (memcmp(md, app_c2, sizeof(app_c2))) {
101 fprintf(stderr, "\nTEST 2 of 3 failed.\n");
104 fprintf(stdout, ".");
107 evp = EVP_MD_CTX_new();
110 fprintf(stderr, "\nTEST 3 of 3 failed. (malloc failure)\n");
113 EVP_DigestInit_ex(evp, EVP_sha512(), NULL);
114 for (i = 0; i < 1000000; i += 288)
115 EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
116 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
117 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
118 "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 (1000000 - i) < 288 ? 1000000 - i : 288);
125 EVP_DigestFinal_ex(evp, md, NULL);
126 EVP_MD_CTX_reset(evp);
128 if (memcmp(md, app_c3, sizeof(app_c3))) {
130 fprintf(stderr, "\nTEST 3 of 3 failed.\n");
133 fprintf(stdout, ".");
136 fprintf(stdout, " passed.\n");
139 fprintf(stdout, "Testing SHA-384 ");
141 EVP_Digest("abc", 3, md, NULL, EVP_sha384(), NULL);
142 if (memcmp(md, app_d1, sizeof(app_d1))) {
144 fprintf(stderr, "\nTEST 1 of 3 failed.\n");
147 fprintf(stdout, ".");
150 EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk"
151 "efghijkl" "fghijklm" "ghijklmn" "hijklmno"
152 "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs"
153 "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha384(), NULL);
154 if (memcmp(md, app_d2, sizeof(app_d2))) {
156 fprintf(stderr, "\nTEST 2 of 3 failed.\n");
159 fprintf(stdout, ".");
162 EVP_DigestInit_ex(evp, EVP_sha384(), NULL);
163 for (i = 0; i < 1000000; i += 64)
164 EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
165 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa",
166 (1000000 - i) < 64 ? 1000000 - i : 64);
167 EVP_DigestFinal_ex(evp, md, NULL);
168 EVP_MD_CTX_free(evp);
170 if (memcmp(md, app_d3, sizeof(app_d3))) {
172 fprintf(stderr, "\nTEST 3 of 3 failed.\n");
175 fprintf(stdout, ".");
178 fprintf(stdout, " passed.\n");