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 #if defined(OPENSSL_NO_SHA) || defined(OPENSSL_NO_SHA512)
15 int main(int argc, char *argv[])
17 printf("No SHA512 support\n");
22 unsigned char app_c1[SHA512_DIGEST_LENGTH] = {
23 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba,
24 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31,
25 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2,
26 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a,
27 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8,
28 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd,
29 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e,
30 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f
33 unsigned char app_c2[SHA512_DIGEST_LENGTH] = {
34 0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda,
35 0x8c, 0xf4, 0xf7, 0x28, 0x14, 0xfc, 0x14, 0x3f,
36 0x8f, 0x77, 0x79, 0xc6, 0xeb, 0x9f, 0x7f, 0xa1,
37 0x72, 0x99, 0xae, 0xad, 0xb6, 0x88, 0x90, 0x18,
38 0x50, 0x1d, 0x28, 0x9e, 0x49, 0x00, 0xf7, 0xe4,
39 0x33, 0x1b, 0x99, 0xde, 0xc4, 0xb5, 0x43, 0x3a,
40 0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26, 0x54,
41 0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09
44 unsigned char app_c3[SHA512_DIGEST_LENGTH] = {
45 0xe7, 0x18, 0x48, 0x3d, 0x0c, 0xe7, 0x69, 0x64,
46 0x4e, 0x2e, 0x42, 0xc7, 0xbc, 0x15, 0xb4, 0x63,
47 0x8e, 0x1f, 0x98, 0xb1, 0x3b, 0x20, 0x44, 0x28,
48 0x56, 0x32, 0xa8, 0x03, 0xaf, 0xa9, 0x73, 0xeb,
49 0xde, 0x0f, 0xf2, 0x44, 0x87, 0x7e, 0xa6, 0x0a,
50 0x4c, 0xb0, 0x43, 0x2c, 0xe5, 0x77, 0xc3, 0x1b,
51 0xeb, 0x00, 0x9c, 0x5c, 0x2c, 0x49, 0xaa, 0x2e,
52 0x4e, 0xad, 0xb2, 0x17, 0xad, 0x8c, 0xc0, 0x9b
55 unsigned char app_d1[SHA384_DIGEST_LENGTH] = {
56 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b,
57 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07,
58 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63,
59 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed,
60 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23,
61 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7
64 unsigned char app_d2[SHA384_DIGEST_LENGTH] = {
65 0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8,
66 0x3d, 0x19, 0x2f, 0xc7, 0x82, 0xcd, 0x1b, 0x47,
67 0x53, 0x11, 0x1b, 0x17, 0x3b, 0x3b, 0x05, 0xd2,
68 0x2f, 0xa0, 0x80, 0x86, 0xe3, 0xb0, 0xf7, 0x12,
69 0xfc, 0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9,
70 0x66, 0xc3, 0xe9, 0xfa, 0x91, 0x74, 0x60, 0x39
73 unsigned char app_d3[SHA384_DIGEST_LENGTH] = {
74 0x9d, 0x0e, 0x18, 0x09, 0x71, 0x64, 0x74, 0xcb,
75 0x08, 0x6e, 0x83, 0x4e, 0x31, 0x0a, 0x4a, 0x1c,
76 0xed, 0x14, 0x9e, 0x9c, 0x00, 0xf2, 0x48, 0x52,
77 0x79, 0x72, 0xce, 0xc5, 0x70, 0x4c, 0x2a, 0x5b,
78 0x07, 0xb8, 0xb3, 0xdc, 0x38, 0xec, 0xc4, 0xeb,
79 0xae, 0x97, 0xdd, 0xd8, 0x7f, 0x3d, 0x89, 0x85
82 int main(int argc, char **argv)
84 unsigned char md[SHA512_DIGEST_LENGTH];
88 # ifdef OPENSSL_IA32_SSE2
90 * Alternative to this is to call OpenSSL_add_all_algorithms... The below
91 * code is retained exclusively for debugging purposes.
96 if ((env = getenv("OPENSSL_ia32cap")))
97 OPENSSL_ia32cap = strtoul(env, NULL, 0);
101 fprintf(stdout, "Testing SHA-512 ");
103 EVP_Digest("abc", 3, md, NULL, EVP_sha512(), NULL);
104 if (memcmp(md, app_c1, sizeof(app_c1))) {
106 fprintf(stderr, "\nTEST 1 of 3 failed.\n");
109 fprintf(stdout, ".");
112 EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk"
113 "efghijkl" "fghijklm" "ghijklmn" "hijklmno"
114 "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs"
115 "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha512(), NULL);
116 if (memcmp(md, app_c2, sizeof(app_c2))) {
118 fprintf(stderr, "\nTEST 2 of 3 failed.\n");
121 fprintf(stdout, ".");
124 EVP_MD_CTX_init(&evp);
125 EVP_DigestInit_ex(&evp, EVP_sha512(), NULL);
126 for (i = 0; i < 1000000; i += 288)
127 EVP_DigestUpdate(&evp, "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 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
134 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
135 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa",
136 (1000000 - i) < 288 ? 1000000 - i : 288);
137 EVP_DigestFinal_ex(&evp, md, NULL);
138 EVP_MD_CTX_cleanup(&evp);
140 if (memcmp(md, app_c3, sizeof(app_c3))) {
142 fprintf(stderr, "\nTEST 3 of 3 failed.\n");
145 fprintf(stdout, ".");
148 fprintf(stdout, " passed.\n");
151 fprintf(stdout, "Testing SHA-384 ");
153 EVP_Digest("abc", 3, md, NULL, EVP_sha384(), NULL);
154 if (memcmp(md, app_d1, sizeof(app_d1))) {
156 fprintf(stderr, "\nTEST 1 of 3 failed.\n");
159 fprintf(stdout, ".");
162 EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk"
163 "efghijkl" "fghijklm" "ghijklmn" "hijklmno"
164 "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs"
165 "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha384(), NULL);
166 if (memcmp(md, app_d2, sizeof(app_d2))) {
168 fprintf(stderr, "\nTEST 2 of 3 failed.\n");
171 fprintf(stdout, ".");
174 EVP_MD_CTX_init(&evp);
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_cleanup(&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");