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