]> CyberLeo.Net >> Repos - FreeBSD/releng/9.3.git/blob - crypto/openssl/crypto/sha/sha512t.c
Fix multiple OpenSSL vulnerabilities.
[FreeBSD/releng/9.3.git] / crypto / openssl / crypto / sha / sha512t.c
1 /* crypto/sha/sha512t.c */
2 /* ====================================================================
3  * Copyright (c) 2004 The OpenSSL Project.  All rights reserved.
4  * ====================================================================
5  */
6 #include <stdio.h>
7 #include <string.h>
8 #include <stdlib.h>
9
10 #include <openssl/sha.h>
11 #include <openssl/evp.h>
12 #include <openssl/crypto.h>
13
14 #if defined(OPENSSL_NO_SHA) || defined(OPENSSL_NO_SHA512)
15 int main(int argc, char *argv[])
16 {
17     printf("No SHA512 support\n");
18     return (0);
19 }
20 #else
21
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
31 };
32
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
42 };
43
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
53 };
54
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
62 };
63
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
71 };
72
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
80 };
81
82 int main(int argc, char **argv)
83 {
84     unsigned char md[SHA512_DIGEST_LENGTH];
85     int i;
86     EVP_MD_CTX evp;
87
88 # ifdef OPENSSL_IA32_SSE2
89     /*
90      * Alternative to this is to call OpenSSL_add_all_algorithms... The below
91      * code is retained exclusively for debugging purposes.
92      */
93     {
94         char *env;
95
96         if ((env = getenv("OPENSSL_ia32cap")))
97             OPENSSL_ia32cap = strtoul(env, NULL, 0);
98     }
99 # endif
100
101     fprintf(stdout, "Testing SHA-512 ");
102
103     EVP_Digest("abc", 3, md, NULL, EVP_sha512(), NULL);
104     if (memcmp(md, app_c1, sizeof(app_c1))) {
105         fflush(stdout);
106         fprintf(stderr, "\nTEST 1 of 3 failed.\n");
107         return 1;
108     } else
109         fprintf(stdout, ".");
110     fflush(stdout);
111
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))) {
117         fflush(stdout);
118         fprintf(stderr, "\nTEST 2 of 3 failed.\n");
119         return 1;
120     } else
121         fprintf(stdout, ".");
122     fflush(stdout);
123
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);
139
140     if (memcmp(md, app_c3, sizeof(app_c3))) {
141         fflush(stdout);
142         fprintf(stderr, "\nTEST 3 of 3 failed.\n");
143         return 1;
144     } else
145         fprintf(stdout, ".");
146     fflush(stdout);
147
148     fprintf(stdout, " passed.\n");
149     fflush(stdout);
150
151     fprintf(stdout, "Testing SHA-384 ");
152
153     EVP_Digest("abc", 3, md, NULL, EVP_sha384(), NULL);
154     if (memcmp(md, app_d1, sizeof(app_d1))) {
155         fflush(stdout);
156         fprintf(stderr, "\nTEST 1 of 3 failed.\n");
157         return 1;
158     } else
159         fprintf(stdout, ".");
160     fflush(stdout);
161
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))) {
167         fflush(stdout);
168         fprintf(stderr, "\nTEST 2 of 3 failed.\n");
169         return 1;
170     } else
171         fprintf(stdout, ".");
172     fflush(stdout);
173
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);
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 }
196 #endif