80-test_ssl_new.t: Make 19-mac-then-encrypt.conf work without TLSv1.2
[openssl.git] / test / sha256t.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
17 static const unsigned char app_b1[SHA256_DIGEST_LENGTH] = {
18     0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea,
19     0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
20     0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c,
21     0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad
22 };
23
24 static const unsigned char app_b2[SHA256_DIGEST_LENGTH] = {
25     0x24, 0x8d, 0x6a, 0x61, 0xd2, 0x06, 0x38, 0xb8,
26     0xe5, 0xc0, 0x26, 0x93, 0x0c, 0x3e, 0x60, 0x39,
27     0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff, 0x21, 0x67,
28     0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1
29 };
30
31 static const unsigned char app_b3[SHA256_DIGEST_LENGTH] = {
32     0xcd, 0xc7, 0x6e, 0x5c, 0x99, 0x14, 0xfb, 0x92,
33     0x81, 0xa1, 0xc7, 0xe2, 0x84, 0xd7, 0x3e, 0x67,
34     0xf1, 0x80, 0x9a, 0x48, 0xa4, 0x97, 0x20, 0x0e,
35     0x04, 0x6d, 0x39, 0xcc, 0xc7, 0x11, 0x2c, 0xd0
36 };
37
38 static const unsigned char addenum_1[SHA224_DIGEST_LENGTH] = {
39     0x23, 0x09, 0x7d, 0x22, 0x34, 0x05, 0xd8, 0x22,
40     0x86, 0x42, 0xa4, 0x77, 0xbd, 0xa2, 0x55, 0xb3,
41     0x2a, 0xad, 0xbc, 0xe4, 0xbd, 0xa0, 0xb3, 0xf7,
42     0xe3, 0x6c, 0x9d, 0xa7
43 };
44
45 static const unsigned char addenum_2[SHA224_DIGEST_LENGTH] = {
46     0x75, 0x38, 0x8b, 0x16, 0x51, 0x27, 0x76, 0xcc,
47     0x5d, 0xba, 0x5d, 0xa1, 0xfd, 0x89, 0x01, 0x50,
48     0xb0, 0xc6, 0x45, 0x5c, 0xb4, 0xf5, 0x8b, 0x19,
49     0x52, 0x52, 0x25, 0x25
50 };
51
52 static const unsigned char addenum_3[SHA224_DIGEST_LENGTH] = {
53     0x20, 0x79, 0x46, 0x55, 0x98, 0x0c, 0x91, 0xd8,
54     0xbb, 0xb4, 0xc1, 0xea, 0x97, 0x61, 0x8a, 0x4b,
55     0xf0, 0x3f, 0x42, 0x58, 0x19, 0x48, 0xb2, 0xee,
56     0x4e, 0xe7, 0xad, 0x67
57 };
58
59 int main(int argc, char **argv)
60 {
61     unsigned char md[SHA256_DIGEST_LENGTH];
62     int i;
63     EVP_MD_CTX *evp;
64
65     fprintf(stdout, "Testing SHA-256 ");
66
67     if (!EVP_Digest("abc", 3, md, NULL, EVP_sha256(), NULL))
68         goto err;
69     if (memcmp(md, app_b1, sizeof(app_b1))) {
70         fflush(stdout);
71         fprintf(stderr, "\nTEST 1 of 3 failed.\n");
72         return 1;
73     } else
74         fprintf(stdout, ".");
75     fflush(stdout);
76
77     if (!EVP_Digest("abcdbcde" "cdefdefg" "efghfghi" "ghijhijk"
78                     "ijkljklm" "klmnlmno" "mnopnopq", 56, md,
79                      NULL, EVP_sha256(), NULL))
80         goto err;
81     if (memcmp(md, app_b2, sizeof(app_b2))) {
82         fflush(stdout);
83         fprintf(stderr, "\nTEST 2 of 3 failed.\n");
84         return 1;
85     } else
86         fprintf(stdout, ".");
87     fflush(stdout);
88
89     evp = EVP_MD_CTX_new();
90     if (evp == NULL) {
91         fflush(stdout);
92         fprintf(stderr, "\nTEST 3 of 3 failed. (malloc failure)\n");
93         return 1;
94     }
95     if (!EVP_DigestInit_ex(evp, EVP_sha256(), NULL))
96         goto err;
97     for (i = 0; i < 1000000; i += 288) {
98         if (!EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
99                               "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
100                               "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
101                               "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
102                               "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
103                               "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
104                               "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
105                               "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
106                               "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa",
107                               (1000000 - i) < 288 ? 1000000 - i : 288))
108             goto err;
109     }
110     if (!EVP_DigestFinal_ex(evp, md, NULL))
111             goto err;
112
113     if (memcmp(md, app_b3, sizeof(app_b3))) {
114         fflush(stdout);
115         fprintf(stderr, "\nTEST 3 of 3 failed.\n");
116         return 1;
117     } else
118         fprintf(stdout, ".");
119     fflush(stdout);
120
121     fprintf(stdout, " passed.\n");
122     fflush(stdout);
123
124     fprintf(stdout, "Testing SHA-224 ");
125
126     if (!EVP_Digest("abc", 3, md, NULL, EVP_sha224(), NULL))
127         goto err;
128     if (memcmp(md, addenum_1, sizeof(addenum_1))) {
129         fflush(stdout);
130         fprintf(stderr, "\nTEST 1 of 3 failed.\n");
131         return 1;
132     } else
133         fprintf(stdout, ".");
134     fflush(stdout);
135
136     if (!EVP_Digest("abcdbcde" "cdefdefg" "efghfghi" "ghijhijk"
137                     "ijkljklm" "klmnlmno" "mnopnopq", 56, md,
138                     NULL, EVP_sha224(), NULL))
139         goto err;
140     if (memcmp(md, addenum_2, sizeof(addenum_2))) {
141         fflush(stdout);
142         fprintf(stderr, "\nTEST 2 of 3 failed.\n");
143         return 1;
144     } else
145         fprintf(stdout, ".");
146     fflush(stdout);
147
148     EVP_MD_CTX_reset(evp);
149     if (!EVP_DigestInit_ex(evp, EVP_sha224(), NULL))
150         goto err;
151     for (i = 0; i < 1000000; i += 64) {
152         if (!EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
153                               "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa",
154                               (1000000 - i) < 64 ? 1000000 - i : 64))
155             goto err;
156     }
157     if (!EVP_DigestFinal_ex(evp, md, NULL))
158             goto err;
159     EVP_MD_CTX_free(evp);
160
161     if (memcmp(md, addenum_3, sizeof(addenum_3))) {
162         fflush(stdout);
163         fprintf(stderr, "\nTEST 3 of 3 failed.\n");
164         return 1;
165     } else
166         fprintf(stdout, ".");
167     fflush(stdout);
168
169     fprintf(stdout, " passed.\n");
170     fflush(stdout);
171
172     return 0;
173
174  err:
175     fprintf(stderr, "Fatal EVP error!\n");
176     return 1;
177 }