1 /* ====================================================================
2 * Copyright (c) 2004 The OpenSSL Project. All rights reserved.
3 * ====================================================================
9 #include <openssl/sha.h>
10 #include <openssl/evp.h>
11 #include <openssl/crypto.h>
13 static const unsigned char app_c1[SHA512_DIGEST_LENGTH] = {
14 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba,
15 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31,
16 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2,
17 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a,
18 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8,
19 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd,
20 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e,
21 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f
24 static const unsigned char app_c2[SHA512_DIGEST_LENGTH] = {
25 0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda,
26 0x8c, 0xf4, 0xf7, 0x28, 0x14, 0xfc, 0x14, 0x3f,
27 0x8f, 0x77, 0x79, 0xc6, 0xeb, 0x9f, 0x7f, 0xa1,
28 0x72, 0x99, 0xae, 0xad, 0xb6, 0x88, 0x90, 0x18,
29 0x50, 0x1d, 0x28, 0x9e, 0x49, 0x00, 0xf7, 0xe4,
30 0x33, 0x1b, 0x99, 0xde, 0xc4, 0xb5, 0x43, 0x3a,
31 0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26, 0x54,
32 0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09
35 static const unsigned char app_c3[SHA512_DIGEST_LENGTH] = {
36 0xe7, 0x18, 0x48, 0x3d, 0x0c, 0xe7, 0x69, 0x64,
37 0x4e, 0x2e, 0x42, 0xc7, 0xbc, 0x15, 0xb4, 0x63,
38 0x8e, 0x1f, 0x98, 0xb1, 0x3b, 0x20, 0x44, 0x28,
39 0x56, 0x32, 0xa8, 0x03, 0xaf, 0xa9, 0x73, 0xeb,
40 0xde, 0x0f, 0xf2, 0x44, 0x87, 0x7e, 0xa6, 0x0a,
41 0x4c, 0xb0, 0x43, 0x2c, 0xe5, 0x77, 0xc3, 0x1b,
42 0xeb, 0x00, 0x9c, 0x5c, 0x2c, 0x49, 0xaa, 0x2e,
43 0x4e, 0xad, 0xb2, 0x17, 0xad, 0x8c, 0xc0, 0x9b
46 static const unsigned char app_d1[SHA384_DIGEST_LENGTH] = {
47 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b,
48 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07,
49 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63,
50 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed,
51 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23,
52 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7
55 static const unsigned char app_d2[SHA384_DIGEST_LENGTH] = {
56 0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8,
57 0x3d, 0x19, 0x2f, 0xc7, 0x82, 0xcd, 0x1b, 0x47,
58 0x53, 0x11, 0x1b, 0x17, 0x3b, 0x3b, 0x05, 0xd2,
59 0x2f, 0xa0, 0x80, 0x86, 0xe3, 0xb0, 0xf7, 0x12,
60 0xfc, 0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9,
61 0x66, 0xc3, 0xe9, 0xfa, 0x91, 0x74, 0x60, 0x39
64 static const unsigned char app_d3[SHA384_DIGEST_LENGTH] = {
65 0x9d, 0x0e, 0x18, 0x09, 0x71, 0x64, 0x74, 0xcb,
66 0x08, 0x6e, 0x83, 0x4e, 0x31, 0x0a, 0x4a, 0x1c,
67 0xed, 0x14, 0x9e, 0x9c, 0x00, 0xf2, 0x48, 0x52,
68 0x79, 0x72, 0xce, 0xc5, 0x70, 0x4c, 0x2a, 0x5b,
69 0x07, 0xb8, 0xb3, 0xdc, 0x38, 0xec, 0xc4, 0xeb,
70 0xae, 0x97, 0xdd, 0xd8, 0x7f, 0x3d, 0x89, 0x85
73 int main(int argc, char **argv)
75 unsigned char md[SHA512_DIGEST_LENGTH];
79 # ifdef OPENSSL_IA32_SSE2
81 * Alternative to this is to call OpenSSL_add_all_algorithms... The below
82 * code is retained exclusively for debugging purposes.
87 if ((env = getenv("OPENSSL_ia32cap")))
88 OPENSSL_ia32cap = strtoul(env, NULL, 0);
92 fprintf(stdout, "Testing SHA-512 ");
94 EVP_Digest("abc", 3, md, NULL, EVP_sha512(), NULL);
95 if (memcmp(md, app_c1, sizeof(app_c1))) {
97 fprintf(stderr, "\nTEST 1 of 3 failed.\n");
100 fprintf(stdout, ".");
103 EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk"
104 "efghijkl" "fghijklm" "ghijklmn" "hijklmno"
105 "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs"
106 "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha512(), NULL);
107 if (memcmp(md, app_c2, sizeof(app_c2))) {
109 fprintf(stderr, "\nTEST 2 of 3 failed.\n");
112 fprintf(stdout, ".");
115 evp = EVP_MD_CTX_new();
118 fprintf(stderr, "\nTEST 3 of 3 failed. (malloc failure)\n");
121 EVP_DigestInit_ex(evp, EVP_sha512(), NULL);
122 for (i = 0; i < 1000000; i += 288)
123 EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
124 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
125 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
126 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
127 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
128 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
129 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
130 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
131 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa",
132 (1000000 - i) < 288 ? 1000000 - i : 288);
133 EVP_DigestFinal_ex(evp, md, NULL);
134 EVP_MD_CTX_reset(evp);
136 if (memcmp(md, app_c3, sizeof(app_c3))) {
138 fprintf(stderr, "\nTEST 3 of 3 failed.\n");
141 fprintf(stdout, ".");
144 fprintf(stdout, " passed.\n");
147 fprintf(stdout, "Testing SHA-384 ");
149 EVP_Digest("abc", 3, md, NULL, EVP_sha384(), NULL);
150 if (memcmp(md, app_d1, sizeof(app_d1))) {
152 fprintf(stderr, "\nTEST 1 of 3 failed.\n");
155 fprintf(stdout, ".");
158 EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk"
159 "efghijkl" "fghijklm" "ghijklmn" "hijklmno"
160 "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs"
161 "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 EVP_DigestInit_ex(evp, EVP_sha384(), NULL);
171 for (i = 0; i < 1000000; i += 64)
172 EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
173 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa",
174 (1000000 - i) < 64 ? 1000000 - i : 64);
175 EVP_DigestFinal_ex(evp, md, NULL);
176 EVP_MD_CTX_free(evp);
178 if (memcmp(md, app_d3, sizeof(app_d3))) {
180 fprintf(stderr, "\nTEST 3 of 3 failed.\n");
183 fprintf(stdout, ".");
186 fprintf(stdout, " passed.\n");