Copyright consolidation 02/10
[openssl.git] / test / sha512t.c
1 /*
2  * Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved.
3  *
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
8  */
9
10 #include <stdio.h>
11 #include <string.h>
12 #include <stdlib.h>
13
14 #include <openssl/sha.h>
15 #include <openssl/evp.h>
16 #include <openssl/crypto.h>
17
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
27 };
28
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
38 };
39
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
49 };
50
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
58 };
59
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
67 };
68
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
76 };
77
78 int main(int argc, char **argv)
79 {
80     unsigned char md[SHA512_DIGEST_LENGTH];
81     int i;
82     EVP_MD_CTX *evp;
83
84 # ifdef OPENSSL_IA32_SSE2
85     /*
86      * Alternative to this is to call OpenSSL_add_all_algorithms... The below
87      * code is retained exclusively for debugging purposes.
88      */
89     {
90         char *env;
91
92         if ((env = getenv("OPENSSL_ia32cap")))
93             OPENSSL_ia32cap = strtoul(env, NULL, 0);
94     }
95 # endif
96
97     fprintf(stdout, "Testing SHA-512 ");
98
99     EVP_Digest("abc", 3, md, NULL, EVP_sha512(), NULL);
100     if (memcmp(md, app_c1, sizeof(app_c1))) {
101         fflush(stdout);
102         fprintf(stderr, "\nTEST 1 of 3 failed.\n");
103         return 1;
104     } else
105         fprintf(stdout, ".");
106     fflush(stdout);
107
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))) {
113         fflush(stdout);
114         fprintf(stderr, "\nTEST 2 of 3 failed.\n");
115         return 1;
116     } else
117         fprintf(stdout, ".");
118     fflush(stdout);
119
120     evp = EVP_MD_CTX_new();
121     if (evp == NULL) {
122         fflush(stdout);
123         fprintf(stderr, "\nTEST 3 of 3 failed. (malloc failure)\n");
124         return 1;
125     }
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);
140
141     if (memcmp(md, app_c3, sizeof(app_c3))) {
142         fflush(stdout);
143         fprintf(stderr, "\nTEST 3 of 3 failed.\n");
144         return 1;
145     } else
146         fprintf(stdout, ".");
147     fflush(stdout);
148
149     fprintf(stdout, " passed.\n");
150     fflush(stdout);
151
152     fprintf(stdout, "Testing SHA-384 ");
153
154     EVP_Digest("abc", 3, md, NULL, EVP_sha384(), NULL);
155     if (memcmp(md, app_d1, sizeof(app_d1))) {
156         fflush(stdout);
157         fprintf(stderr, "\nTEST 1 of 3 failed.\n");
158         return 1;
159     } else
160         fprintf(stdout, ".");
161     fflush(stdout);
162
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))) {
168         fflush(stdout);
169         fprintf(stderr, "\nTEST 2 of 3 failed.\n");
170         return 1;
171     } else
172         fprintf(stdout, ".");
173     fflush(stdout);
174
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);
182
183     if (memcmp(md, app_d3, sizeof(app_d3))) {
184         fflush(stdout);
185         fprintf(stderr, "\nTEST 3 of 3 failed.\n");
186         return 1;
187     } else
188         fprintf(stdout, ".");
189     fflush(stdout);
190
191     fprintf(stdout, " passed.\n");
192     fflush(stdout);
193
194     return 0;
195 }