bn/asm/rsaz-avx2.pl: constant-time gather procedure.
[openssl.git] / test / sha512t.c
1 /* ====================================================================
2  * Copyright (c) 2004 The OpenSSL Project.  All rights reserved.
3  * ====================================================================
4  */
5 #include <stdio.h>
6 #include <string.h>
7 #include <stdlib.h>
8
9 #include <openssl/sha.h>
10 #include <openssl/evp.h>
11 #include <openssl/crypto.h>
12
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
22 };
23
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
33 };
34
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
44 };
45
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
53 };
54
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
62 };
63
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
71 };
72
73 int main(int argc, char **argv)
74 {
75     unsigned char md[SHA512_DIGEST_LENGTH];
76     int i;
77     EVP_MD_CTX *evp;
78
79 # ifdef OPENSSL_IA32_SSE2
80     /*
81      * Alternative to this is to call OpenSSL_add_all_algorithms... The below
82      * code is retained exclusively for debugging purposes.
83      */
84     {
85         char *env;
86
87         if ((env = getenv("OPENSSL_ia32cap")))
88             OPENSSL_ia32cap = strtoul(env, NULL, 0);
89     }
90 # endif
91
92     fprintf(stdout, "Testing SHA-512 ");
93
94     EVP_Digest("abc", 3, md, NULL, EVP_sha512(), NULL);
95     if (memcmp(md, app_c1, sizeof(app_c1))) {
96         fflush(stdout);
97         fprintf(stderr, "\nTEST 1 of 3 failed.\n");
98         return 1;
99     } else
100         fprintf(stdout, ".");
101     fflush(stdout);
102
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))) {
108         fflush(stdout);
109         fprintf(stderr, "\nTEST 2 of 3 failed.\n");
110         return 1;
111     } else
112         fprintf(stdout, ".");
113     fflush(stdout);
114
115     evp = EVP_MD_CTX_new();
116     if (evp == NULL) {
117         fflush(stdout);
118         fprintf(stderr, "\nTEST 3 of 3 failed. (malloc failure)\n");
119         return 1;
120     }
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);
135
136     if (memcmp(md, app_c3, sizeof(app_c3))) {
137         fflush(stdout);
138         fprintf(stderr, "\nTEST 3 of 3 failed.\n");
139         return 1;
140     } else
141         fprintf(stdout, ".");
142     fflush(stdout);
143
144     fprintf(stdout, " passed.\n");
145     fflush(stdout);
146
147     fprintf(stdout, "Testing SHA-384 ");
148
149     EVP_Digest("abc", 3, md, NULL, EVP_sha384(), NULL);
150     if (memcmp(md, app_d1, sizeof(app_d1))) {
151         fflush(stdout);
152         fprintf(stderr, "\nTEST 1 of 3 failed.\n");
153         return 1;
154     } else
155         fprintf(stdout, ".");
156     fflush(stdout);
157
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))) {
163         fflush(stdout);
164         fprintf(stderr, "\nTEST 2 of 3 failed.\n");
165         return 1;
166     } else
167         fprintf(stdout, ".");
168     fflush(stdout);
169
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);
177
178     if (memcmp(md, app_d3, sizeof(app_d3))) {
179         fflush(stdout);
180         fprintf(stderr, "\nTEST 3 of 3 failed.\n");
181         return 1;
182     } else
183         fprintf(stdout, ".");
184     fflush(stdout);
185
186     fprintf(stdout, " passed.\n");
187     fflush(stdout);
188
189     return 0;
190 }