xref: /curl/tests/unit/unit1615.c (revision af73743f)
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