1 /***************************************************************************
2 * _ _ ____ _
3 * Project ___| | | | _ \| |
4 * / __| | | | |_) | |
5 * | (__| |_| | _ <| |___
6 * \___|\___/|_| \_\_____|
7 *
8 * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
9 * Copyright (C) Evgeny Grin (Karlson2k), <k2k@narod.ru>.
10 *
11 * This software is licensed as described in the file COPYING, which
12 * you should have received as part of this distribution. The terms
13 * are also available at https://curl.se/docs/copyright.html.
14 *
15 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
16 * copies of the Software, and permit persons to whom the Software is
17 * furnished to do so, under the terms of the COPYING file.
18 *
19 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20 * KIND, either express or implied.
21 *
22 * SPDX-License-Identifier: curl
23 *
24 ***************************************************************************/
25 #include "curlcheck.h"
26
27 #include "curl_sha512_256.h"
28
unit_setup(void)29 static CURLcode unit_setup(void)
30 {
31 return CURLE_OK;
32 }
33
unit_stop(void)34 static void unit_stop(void)
35 {
36
37 }
38
39 UNITTEST_START
40
41 #ifdef CURL_HAVE_SHA512_256
42
43 static const char test_str1[] = "1";
44 static const unsigned char precomp_hash1[CURL_SHA512_256_DIGEST_LENGTH] = {
45 0x18, 0xd2, 0x75, 0x66, 0xbd, 0x1a, 0xc6, 0x6b, 0x23, 0x32, 0xd8,
46 0xc5, 0x4a, 0xd4, 0x3f, 0x7b, 0xb2, 0x20, 0x79, 0xc9, 0x06, 0xd0,
47 0x5f, 0x49, 0x1f, 0x3f, 0x07, 0xa2, 0x8d, 0x5c, 0x69, 0x90
48 };
49 static const char test_str2[] = "hello-you-fool";
50 static const unsigned char precomp_hash2[CURL_SHA512_256_DIGEST_LENGTH] = {
51 0xaf, 0x6f, 0xb4, 0xb0, 0x13, 0x9b, 0xee, 0x13, 0xd1, 0x95, 0x3c,
52 0xb8, 0xc7, 0xcd, 0x5b, 0x19, 0xf9, 0xcd, 0xcd, 0x21, 0xef, 0xdf,
53 0xa7, 0x42, 0x5c, 0x07, 0x13, 0xea, 0xcc, 0x1a, 0x39, 0x76
54 };
55 static const char test_str3[] = "abc";
56 static const unsigned char precomp_hash3[CURL_SHA512_256_DIGEST_LENGTH] = {
57 0x53, 0x04, 0x8E, 0x26, 0x81, 0x94, 0x1E, 0xF9, 0x9B, 0x2E, 0x29,
58 0xB7, 0x6B, 0x4C, 0x7D, 0xAB, 0xE4, 0xC2, 0xD0, 0xC6, 0x34, 0xFC,
59 0x6D, 0x46, 0xE0, 0xE2, 0xF1, 0x31, 0x07, 0xE7, 0xAF, 0x23
60 };
61 static const char test_str4[] = ""; /* empty, zero size input */
62 static const unsigned char precomp_hash4[CURL_SHA512_256_DIGEST_LENGTH] = {
63 0xc6, 0x72, 0xb8, 0xd1, 0xef, 0x56, 0xed, 0x28, 0xab, 0x87, 0xc3,
64 0x62, 0x2c, 0x51, 0x14, 0x06, 0x9b, 0xdd, 0x3a, 0xd7, 0xb8, 0xf9,
65 0x73, 0x74, 0x98, 0xd0, 0xc0, 0x1e, 0xce, 0xf0, 0x96, 0x7a
66 };
67 static const char test_str5[] =
68 "abcdefghijklmnopqrstuvwxyzzyxwvutsrqponMLKJIHGFEDCBA" \
69 "abcdefghijklmnopqrstuvwxyzzyxwvutsrqponMLKJIHGFEDCBA";
70 static const unsigned char precomp_hash5[CURL_SHA512_256_DIGEST_LENGTH] = {
71 0xad, 0xe9, 0x5d, 0x55, 0x3b, 0x9e, 0x45, 0x69, 0xdb, 0x53, 0xa4,
72 0x04, 0x92, 0xe7, 0x87, 0x94, 0xff, 0xc9, 0x98, 0x5f, 0x93, 0x03,
73 0x86, 0x45, 0xe1, 0x97, 0x17, 0x72, 0x7c, 0xbc, 0x31, 0x15
74 };
75 static const char test_str6[] =
76 "/long/long/long/long/long/long/long/long/long/long/long" \
77 "/long/long/long/long/long/long/long/long/long/long/long" \
78 "/long/long/long/long/long/long/long/long/long/long/long" \
79 "/long/long/long/long/long/long/long/long/long/long/long" \
80 "/long/long/long/long/long/long/long/long/long/long/long" \
81 "/long/long/long/long/long/long/long/long/long/long/long" \
82 "/long/long/long/long/path?with%20some=parameters";
83 static const unsigned char precomp_hash6[CURL_SHA512_256_DIGEST_LENGTH] = {
84 0xbc, 0xab, 0xc6, 0x2c, 0x0a, 0x22, 0xd5, 0xcb, 0xac, 0xac, 0xe9,
85 0x25, 0xcf, 0xce, 0xaa, 0xaf, 0x0e, 0xa1, 0xed, 0x42, 0x46, 0x8a,
86 0xe2, 0x01, 0xee, 0x2f, 0xdb, 0x39, 0x75, 0x47, 0x73, 0xf1
87 };
88 static const char test_str7[] = "Simple string.";
89 static const unsigned char precomp_hash7[CURL_SHA512_256_DIGEST_LENGTH] = {
90 0xde, 0xcb, 0x3c, 0x81, 0x65, 0x4b, 0xa0, 0xf5, 0xf0, 0x45, 0x6b,
91 0x7e, 0x61, 0xf5, 0x0d, 0xf5, 0x38, 0xa4, 0xfc, 0xb1, 0x8a, 0x95,
92 0xff, 0x59, 0xbc, 0x04, 0x82, 0xcf, 0x23, 0xb2, 0x32, 0x56
93 };
94 static const unsigned char test_seq8[]= {
95 255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242,
96 241, 240, 239, 238, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228,
97 227, 226, 225, 224, 223, 222, 221, 220, 219, 218, 217, 216, 215, 214,
98 213, 212, 211, 210, 209, 208, 207, 206, 205, 204, 203, 202, 201, 200,
99 199, 198, 197, 196, 195, 194, 193, 192, 191, 190, 189, 188, 187, 186,
100 185, 184, 183, 182, 181, 180, 179, 178, 177, 176, 175, 174, 173, 172,
101 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, 161, 160, 159, 158,
102 157, 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, 146, 145, 144,
103 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 131, 130,
104 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116,
105 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102,
106 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85,
107 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67,
108 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49,
109 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31,
110 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13,
111 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; /* 255..1 sequence */
112 static const unsigned char precomp_hash8[CURL_SHA512_256_DIGEST_LENGTH] = {
113 0x22, 0x31, 0xf2, 0xa1, 0xb4, 0x89, 0xb2, 0x44, 0xf7, 0x66, 0xa0,
114 0xb8, 0x31, 0xed, 0xb7, 0x73, 0x8a, 0x34, 0xdc, 0x11, 0xc8, 0x2c,
115 0xf2, 0xb5, 0x88, 0x60, 0x39, 0x6b, 0x5c, 0x06, 0x70, 0x37
116 };
117
118 unsigned char output_buf[CURL_SHA512_256_DIGEST_LENGTH];
119 unsigned char *computed_hash; /* Just to mute compiler warning */
120
121 /* Mute compiler warnings in 'verify_memory' macros below */
122 computed_hash = output_buf;
123
124 Curl_sha512_256it(output_buf, (const unsigned char *) test_str1,
125 (sizeof(test_str1) / sizeof(char)) - 1);
126 verify_memory(computed_hash, precomp_hash1, CURL_SHA512_256_DIGEST_LENGTH);
127
128 Curl_sha512_256it(output_buf, (const unsigned char *) test_str2,
129 (sizeof(test_str2) / sizeof(char)) - 1);
130 verify_memory(computed_hash, precomp_hash2, CURL_SHA512_256_DIGEST_LENGTH);
131
132 Curl_sha512_256it(output_buf, (const unsigned char *) test_str3,
133 (sizeof(test_str3) / sizeof(char)) - 1);
134 verify_memory(computed_hash, precomp_hash3, CURL_SHA512_256_DIGEST_LENGTH);
135
136 Curl_sha512_256it(output_buf, (const unsigned char *) test_str4,
137 (sizeof(test_str4) / sizeof(char)) - 1);
138 verify_memory(computed_hash, precomp_hash4, CURL_SHA512_256_DIGEST_LENGTH);
139
140 Curl_sha512_256it(output_buf, (const unsigned char *) test_str5,
141 (sizeof(test_str5) / sizeof(char)) - 1);
142 verify_memory(computed_hash, precomp_hash5, CURL_SHA512_256_DIGEST_LENGTH);
143
144 Curl_sha512_256it(output_buf, (const unsigned char *) test_str6,
145 (sizeof(test_str6) / sizeof(char)) - 1);
146 verify_memory(computed_hash, precomp_hash6, CURL_SHA512_256_DIGEST_LENGTH);
147
148 Curl_sha512_256it(output_buf, (const unsigned char *) test_str7,
149 (sizeof(test_str7) / sizeof(char)) - 1);
150 verify_memory(computed_hash, precomp_hash7, CURL_SHA512_256_DIGEST_LENGTH);
151
152 Curl_sha512_256it(output_buf, test_seq8,
153 sizeof(test_seq8) / sizeof(unsigned char));
154 verify_memory(computed_hash, precomp_hash8, CURL_SHA512_256_DIGEST_LENGTH);
155
156 #endif /* CURL_HAVE_SHA512_256 */
157
158
159 UNITTEST_STOP
160