Switch command-line utils to new nameopt API.
[openssl.git] / test / sha512t.c
1 /*
2  * Copyright 2004-2017 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 <openssl/sha.h>
11 #include <openssl/evp.h>
12
13 #include "testutil.h"
14
15 static const unsigned char app_c1[SHA512_DIGEST_LENGTH] = {
16     0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba,
17     0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31,
18     0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2,
19     0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a,
20     0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8,
21     0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd,
22     0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e,
23     0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f
24 };
25
26 static const unsigned char app_c2[SHA512_DIGEST_LENGTH] = {
27     0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda,
28     0x8c, 0xf4, 0xf7, 0x28, 0x14, 0xfc, 0x14, 0x3f,
29     0x8f, 0x77, 0x79, 0xc6, 0xeb, 0x9f, 0x7f, 0xa1,
30     0x72, 0x99, 0xae, 0xad, 0xb6, 0x88, 0x90, 0x18,
31     0x50, 0x1d, 0x28, 0x9e, 0x49, 0x00, 0xf7, 0xe4,
32     0x33, 0x1b, 0x99, 0xde, 0xc4, 0xb5, 0x43, 0x3a,
33     0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26, 0x54,
34     0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09
35 };
36
37 static const unsigned char app_c3[SHA512_DIGEST_LENGTH] = {
38     0xe7, 0x18, 0x48, 0x3d, 0x0c, 0xe7, 0x69, 0x64,
39     0x4e, 0x2e, 0x42, 0xc7, 0xbc, 0x15, 0xb4, 0x63,
40     0x8e, 0x1f, 0x98, 0xb1, 0x3b, 0x20, 0x44, 0x28,
41     0x56, 0x32, 0xa8, 0x03, 0xaf, 0xa9, 0x73, 0xeb,
42     0xde, 0x0f, 0xf2, 0x44, 0x87, 0x7e, 0xa6, 0x0a,
43     0x4c, 0xb0, 0x43, 0x2c, 0xe5, 0x77, 0xc3, 0x1b,
44     0xeb, 0x00, 0x9c, 0x5c, 0x2c, 0x49, 0xaa, 0x2e,
45     0x4e, 0xad, 0xb2, 0x17, 0xad, 0x8c, 0xc0, 0x9b
46 };
47
48 static const unsigned char app_d1[SHA384_DIGEST_LENGTH] = {
49     0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b,
50     0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07,
51     0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63,
52     0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed,
53     0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23,
54     0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7
55 };
56
57 static const unsigned char app_d2[SHA384_DIGEST_LENGTH] = {
58     0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8,
59     0x3d, 0x19, 0x2f, 0xc7, 0x82, 0xcd, 0x1b, 0x47,
60     0x53, 0x11, 0x1b, 0x17, 0x3b, 0x3b, 0x05, 0xd2,
61     0x2f, 0xa0, 0x80, 0x86, 0xe3, 0xb0, 0xf7, 0x12,
62     0xfc, 0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9,
63     0x66, 0xc3, 0xe9, 0xfa, 0x91, 0x74, 0x60, 0x39
64 };
65
66 static const unsigned char app_d3[SHA384_DIGEST_LENGTH] = {
67     0x9d, 0x0e, 0x18, 0x09, 0x71, 0x64, 0x74, 0xcb,
68     0x08, 0x6e, 0x83, 0x4e, 0x31, 0x0a, 0x4a, 0x1c,
69     0xed, 0x14, 0x9e, 0x9c, 0x00, 0xf2, 0x48, 0x52,
70     0x79, 0x72, 0xce, 0xc5, 0x70, 0x4c, 0x2a, 0x5b,
71     0x07, 0xb8, 0xb3, 0xdc, 0x38, 0xec, 0xc4, 0xeb,
72     0xae, 0x97, 0xdd, 0xd8, 0x7f, 0x3d, 0x89, 0x85
73 };
74
75 static int test_sha512_short(void)
76 {
77     unsigned char md[SHA512_DIGEST_LENGTH];
78
79     if (!TEST_true(EVP_Digest("abc", 3, md, NULL, EVP_sha512(), NULL)))
80         return 0;
81     return TEST_mem_eq(md, sizeof(md), app_c1, sizeof(app_c1));
82 }
83
84 static int test_sha512_long(void)
85 {
86     unsigned char md[SHA512_DIGEST_LENGTH];
87
88     if (!TEST_true(EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk"
89                               "efghijkl" "fghijklm" "ghijklmn" "hijklmno"
90                               "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs"
91                               "mnopqrst" "nopqrstu", 112, md, NULL,
92                               EVP_sha512(), NULL)))
93         return 0;
94     return TEST_mem_eq(md, sizeof(md), app_c2, sizeof(app_c2));
95 }
96
97 static int test_sha512_multi(void)
98 {
99     unsigned char md[SHA512_DIGEST_LENGTH];
100     int i, testresult = 0;
101     EVP_MD_CTX *evp;
102     static const char *updstr = "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                                 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
108                                 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
109                                 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
110                                 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa";
111
112     evp = EVP_MD_CTX_new();
113     if (!TEST_ptr(evp))
114         return 0;
115     if (!TEST_true(EVP_DigestInit_ex(evp, EVP_sha512(), NULL)))
116         goto end;
117     for (i = 0; i < 1000000; i += 288)
118         if (!TEST_true(EVP_DigestUpdate(evp, updstr,
119                                         (1000000 - i) < 288 ? 1000000 - i
120                                                             : 288)))
121             goto end;
122     if (!TEST_true(EVP_DigestFinal_ex(evp, md, NULL))
123         || !TEST_mem_eq(md, sizeof(md), app_c3, sizeof(app_c3)))
124         goto end;
125
126     testresult = 1;
127  end:
128     EVP_MD_CTX_free(evp);
129     return testresult;
130 }
131
132 static int test_sha384_short(void)
133 {
134     unsigned char md[SHA384_DIGEST_LENGTH];
135
136     if (!TEST_true(EVP_Digest("abc", 3, md, NULL, EVP_sha384(), NULL)))
137         return 0;
138     return TEST_mem_eq(md, sizeof(md), app_d1, sizeof(app_d1));
139 }
140
141 static int test_sha384_long(void)
142 {
143     unsigned char md[SHA384_DIGEST_LENGTH];
144
145     if (!TEST_true(EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk"
146                               "efghijkl" "fghijklm" "ghijklmn" "hijklmno"
147                               "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs"
148                               "mnopqrst" "nopqrstu", 112, md, NULL,
149                               EVP_sha384(), NULL)))
150         return 0;
151     return TEST_mem_eq(md, sizeof(md), app_d2, sizeof(app_d2));
152 }
153
154 static int test_sha384_multi(void)
155 {
156     unsigned char md[SHA384_DIGEST_LENGTH];
157     int i, testresult = 0;
158     EVP_MD_CTX *evp;
159     static const char *updstr = "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
160                                 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa";
161
162     evp = EVP_MD_CTX_new();
163     if (!TEST_ptr(evp))
164         return 0;
165     if (!TEST_true(EVP_DigestInit_ex(evp, EVP_sha384(), NULL)))
166         goto end;
167     for (i = 0; i < 1000000; i += 64)
168         if (!TEST_true(EVP_DigestUpdate(evp, updstr,
169                                         (1000000 - i) < 64 ? 1000000 - i : 64)))
170             goto end;
171     if (!TEST_true(EVP_DigestFinal_ex(evp, md, NULL))
172         || !TEST_mem_eq(md, sizeof(md), app_d3, sizeof(app_d3)))
173         goto end;
174
175     testresult = 1;
176  end:
177     EVP_MD_CTX_free(evp);
178     return testresult;
179 }
180
181 void register_tests(void)
182 {
183     ADD_TEST(test_sha512_short);
184     ADD_TEST(test_sha512_long);
185     ADD_TEST(test_sha512_multi);
186     ADD_TEST(test_sha384_short);
187     ADD_TEST(test_sha384_long);
188     ADD_TEST(test_sha384_multi);
189 }