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 # ifdef OPENSSL_IA32_SSE2
86 * Alternative to this is to call OpenSSL_add_all_algorithms... The below
87 * code is retained exclusively for debugging purposes.
92 if ((env = getenv("OPENSSL_ia32cap")))
93 OPENSSL_ia32cap = strtoul(env, NULL, 0);
97 fprintf(stdout, "Testing SHA-512 ");
99 EVP_Digest("abc", 3, md, NULL, EVP_sha512(), NULL);
100 if (memcmp(md, app_c1, sizeof(app_c1))) {
102 fprintf(stderr, "\nTEST 1 of 3 failed.\n");
105 fprintf(stdout, ".");
108 EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk"
109 "efghijkl" "fghijklm" "ghijklmn" "hijklmno"
110 "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs"
111 "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha512(), NULL);
112 if (memcmp(md, app_c2, sizeof(app_c2))) {
114 fprintf(stderr, "\nTEST 2 of 3 failed.\n");
117 fprintf(stdout, ".");
120 evp = EVP_MD_CTX_new();
123 fprintf(stderr, "\nTEST 3 of 3 failed. (malloc failure)\n");
126 EVP_DigestInit_ex(evp, EVP_sha512(), NULL);
127 for (i = 0; i < 1000000; i += 288)
128 EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
129 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
130 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
131 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
132 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
133 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
134 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
135 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
136 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa",
137 (1000000 - i) < 288 ? 1000000 - i : 288);
138 EVP_DigestFinal_ex(evp, md, NULL);
139 EVP_MD_CTX_reset(evp);
141 if (memcmp(md, app_c3, sizeof(app_c3))) {
143 fprintf(stderr, "\nTEST 3 of 3 failed.\n");
146 fprintf(stdout, ".");
149 fprintf(stdout, " passed.\n");
152 fprintf(stdout, "Testing SHA-384 ");
154 EVP_Digest("abc", 3, md, NULL, EVP_sha384(), NULL);
155 if (memcmp(md, app_d1, sizeof(app_d1))) {
157 fprintf(stderr, "\nTEST 1 of 3 failed.\n");
160 fprintf(stdout, ".");
163 EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk"
164 "efghijkl" "fghijklm" "ghijklmn" "hijklmno"
165 "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs"
166 "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha384(), NULL);
167 if (memcmp(md, app_d2, sizeof(app_d2))) {
169 fprintf(stderr, "\nTEST 2 of 3 failed.\n");
172 fprintf(stdout, ".");
175 EVP_DigestInit_ex(evp, EVP_sha384(), NULL);
176 for (i = 0; i < 1000000; i += 64)
177 EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
178 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa",
179 (1000000 - i) < 64 ? 1000000 - i : 64);
180 EVP_DigestFinal_ex(evp, md, NULL);
181 EVP_MD_CTX_free(evp);
183 if (memcmp(md, app_d3, sizeof(app_d3))) {
185 fprintf(stderr, "\nTEST 3 of 3 failed.\n");
188 fprintf(stdout, ".");
191 fprintf(stdout, " passed.\n");