Ensure read records are marked as read
[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     fprintf(stdout, "Testing SHA-512 ");
85
86     EVP_Digest("abc", 3, md, NULL, EVP_sha512(), NULL);
87     if (memcmp(md, app_c1, sizeof(app_c1))) {
88         fflush(stdout);
89         fprintf(stderr, "\nTEST 1 of 3 failed.\n");
90         return 1;
91     } else
92         fprintf(stdout, ".");
93     fflush(stdout);
94
95     EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk"
96                "efghijkl" "fghijklm" "ghijklmn" "hijklmno"
97                "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs"
98                "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha512(), NULL);
99     if (memcmp(md, app_c2, sizeof(app_c2))) {
100         fflush(stdout);
101         fprintf(stderr, "\nTEST 2 of 3 failed.\n");
102         return 1;
103     } else
104         fprintf(stdout, ".");
105     fflush(stdout);
106
107     evp = EVP_MD_CTX_new();
108     if (evp == NULL) {
109         fflush(stdout);
110         fprintf(stderr, "\nTEST 3 of 3 failed. (malloc failure)\n");
111         return 1;
112     }
113     EVP_DigestInit_ex(evp, EVP_sha512(), NULL);
114     for (i = 0; i < 1000000; i += 288)
115         EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
116                          "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
117                          "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
118                          "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
119                          "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
120                          "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
121                          "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
122                          "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
123                          "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa",
124                          (1000000 - i) < 288 ? 1000000 - i : 288);
125     EVP_DigestFinal_ex(evp, md, NULL);
126     EVP_MD_CTX_reset(evp);
127
128     if (memcmp(md, app_c3, sizeof(app_c3))) {
129         fflush(stdout);
130         fprintf(stderr, "\nTEST 3 of 3 failed.\n");
131         return 1;
132     } else
133         fprintf(stdout, ".");
134     fflush(stdout);
135
136     fprintf(stdout, " passed.\n");
137     fflush(stdout);
138
139     fprintf(stdout, "Testing SHA-384 ");
140
141     EVP_Digest("abc", 3, md, NULL, EVP_sha384(), NULL);
142     if (memcmp(md, app_d1, sizeof(app_d1))) {
143         fflush(stdout);
144         fprintf(stderr, "\nTEST 1 of 3 failed.\n");
145         return 1;
146     } else
147         fprintf(stdout, ".");
148     fflush(stdout);
149
150     EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk"
151                "efghijkl" "fghijklm" "ghijklmn" "hijklmno"
152                "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs"
153                "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha384(), NULL);
154     if (memcmp(md, app_d2, sizeof(app_d2))) {
155         fflush(stdout);
156         fprintf(stderr, "\nTEST 2 of 3 failed.\n");
157         return 1;
158     } else
159         fprintf(stdout, ".");
160     fflush(stdout);
161
162     EVP_DigestInit_ex(evp, EVP_sha384(), NULL);
163     for (i = 0; i < 1000000; i += 64)
164         EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
165                          "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa",
166                          (1000000 - i) < 64 ? 1000000 - i : 64);
167     EVP_DigestFinal_ex(evp, md, NULL);
168     EVP_MD_CTX_free(evp);
169
170     if (memcmp(md, app_d3, sizeof(app_d3))) {
171         fflush(stdout);
172         fprintf(stderr, "\nTEST 3 of 3 failed.\n");
173         return 1;
174     } else
175         fprintf(stdout, ".");
176     fflush(stdout);
177
178     fprintf(stdout, " passed.\n");
179     fflush(stdout);
180
181     return 0;
182 }