xref: /aosp_15_r20/external/vboot_reference/tests/vb2_sha_tests.c (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
1*8617a60dSAndroid Build Coastguard Worker /* Copyright 2014 The ChromiumOS Authors
2*8617a60dSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
3*8617a60dSAndroid Build Coastguard Worker  * found in the LICENSE file.
4*8617a60dSAndroid Build Coastguard Worker  */
5*8617a60dSAndroid Build Coastguard Worker 
6*8617a60dSAndroid Build Coastguard Worker /* FIPS 180-2 Tests for message digest functions. */
7*8617a60dSAndroid Build Coastguard Worker 
8*8617a60dSAndroid Build Coastguard Worker #include <stdio.h>
9*8617a60dSAndroid Build Coastguard Worker 
10*8617a60dSAndroid Build Coastguard Worker #include "2return_codes.h"
11*8617a60dSAndroid Build Coastguard Worker #include "2rsa.h"
12*8617a60dSAndroid Build Coastguard Worker #include "2sha.h"
13*8617a60dSAndroid Build Coastguard Worker #include "2sysincludes.h"
14*8617a60dSAndroid Build Coastguard Worker #include "common/tests.h"
15*8617a60dSAndroid Build Coastguard Worker #include "sha_test_vectors.h"
16*8617a60dSAndroid Build Coastguard Worker 
sha1_tests(void)17*8617a60dSAndroid Build Coastguard Worker static void sha1_tests(void)
18*8617a60dSAndroid Build Coastguard Worker {
19*8617a60dSAndroid Build Coastguard Worker 	struct vb2_hash hash;
20*8617a60dSAndroid Build Coastguard Worker 	uint8_t *test_inputs[3];
21*8617a60dSAndroid Build Coastguard Worker 	int i;
22*8617a60dSAndroid Build Coastguard Worker 
23*8617a60dSAndroid Build Coastguard Worker 	test_inputs[0] = (uint8_t *) oneblock_msg;
24*8617a60dSAndroid Build Coastguard Worker 	test_inputs[1] = (uint8_t *) multiblock_msg1;
25*8617a60dSAndroid Build Coastguard Worker 	test_inputs[2] = (uint8_t *) long_msg;
26*8617a60dSAndroid Build Coastguard Worker 
27*8617a60dSAndroid Build Coastguard Worker 	for (i = 0; i < 3; i++) {
28*8617a60dSAndroid Build Coastguard Worker 		TEST_SUCC(vb2_hash_calculate(false, test_inputs[i],
29*8617a60dSAndroid Build Coastguard Worker 					     strlen((const char *)test_inputs[i]),
30*8617a60dSAndroid Build Coastguard Worker 					     VB2_HASH_SHA1, &hash),
31*8617a60dSAndroid Build Coastguard Worker 			  "vb2_hash_calculate() SHA-1");
32*8617a60dSAndroid Build Coastguard Worker 		TEST_EQ(memcmp(hash.sha1, sha1_results[i],
33*8617a60dSAndroid Build Coastguard Worker 			sizeof(sha1_results[i])), 0, "  SHA-1 digest");
34*8617a60dSAndroid Build Coastguard Worker 	}
35*8617a60dSAndroid Build Coastguard Worker 
36*8617a60dSAndroid Build Coastguard Worker 	struct vb2_digest_context dc;
37*8617a60dSAndroid Build Coastguard Worker 	vb2_digest_init(&dc, false, VB2_HASH_SHA1, 0);
38*8617a60dSAndroid Build Coastguard Worker 	vb2_digest_extend(&dc, test_inputs[0],
39*8617a60dSAndroid Build Coastguard Worker 			  strlen((const char *)test_inputs[0]));
40*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_digest_finalize(&dc, hash.sha1, sizeof(hash.sha1) - 1),
41*8617a60dSAndroid Build Coastguard Worker 		VB2_ERROR_SHA_FINALIZE_DIGEST_SIZE,
42*8617a60dSAndroid Build Coastguard Worker 		"vb2_digest_finalize() SHA-1 too small");
43*8617a60dSAndroid Build Coastguard Worker 
44*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_hash_block_size(VB2_HASH_SHA1), VB2_SHA1_BLOCK_SIZE,
45*8617a60dSAndroid Build Coastguard Worker 		"vb2_hash_block_size(VB2_HASH_SHA1)");
46*8617a60dSAndroid Build Coastguard Worker }
47*8617a60dSAndroid Build Coastguard Worker 
sha256_tests(void)48*8617a60dSAndroid Build Coastguard Worker static void sha256_tests(void)
49*8617a60dSAndroid Build Coastguard Worker {
50*8617a60dSAndroid Build Coastguard Worker 	struct vb2_hash hash;
51*8617a60dSAndroid Build Coastguard Worker 	uint8_t *test_inputs[3];
52*8617a60dSAndroid Build Coastguard Worker 	struct vb2_sha256_context ctx;
53*8617a60dSAndroid Build Coastguard Worker 	const uint8_t expect_multiple[VB2_SHA256_DIGEST_SIZE] = {
54*8617a60dSAndroid Build Coastguard Worker 			0x07, 0x08, 0xb4, 0xca, 0x46, 0x4c, 0x40, 0x39,
55*8617a60dSAndroid Build Coastguard Worker 			0x07, 0x06, 0x88, 0x80, 0x30, 0x55, 0x5d, 0x86,
56*8617a60dSAndroid Build Coastguard Worker 			0x0e, 0x4a, 0x0d, 0x2b, 0xc6, 0xc4, 0x87, 0x39,
57*8617a60dSAndroid Build Coastguard Worker 			0x2c, 0x16, 0x55, 0xb0, 0x82, 0x13, 0x16, 0x29 };
58*8617a60dSAndroid Build Coastguard Worker 	const uint8_t extend_from[VB2_SHA256_DIGEST_SIZE] = { 0x00, };
59*8617a60dSAndroid Build Coastguard Worker 	const uint8_t extend_by[VB2_SHA256_BLOCK_SIZE] = { 0x00, };
60*8617a60dSAndroid Build Coastguard Worker 	const uint8_t expected_extend[VB2_SHA256_DIGEST_SIZE] = {
61*8617a60dSAndroid Build Coastguard Worker 		0x7c, 0xa5, 0x16, 0x14, 0x42, 0x5c, 0x3b, 0xa8, 0xce, 0x54,
62*8617a60dSAndroid Build Coastguard Worker 		0xdd, 0x2f, 0xc2, 0x02, 0x0a, 0xe7, 0xb6, 0xe5, 0x74, 0xd1,
63*8617a60dSAndroid Build Coastguard Worker 		0x98, 0x13, 0x6d, 0x0f, 0xae, 0x7e, 0x26, 0xcc, 0xbf, 0x0b,
64*8617a60dSAndroid Build Coastguard Worker 		0xe7, 0xa6 };
65*8617a60dSAndroid Build Coastguard Worker 	int i;
66*8617a60dSAndroid Build Coastguard Worker 
67*8617a60dSAndroid Build Coastguard Worker 	test_inputs[0] = (uint8_t *) oneblock_msg;
68*8617a60dSAndroid Build Coastguard Worker 	test_inputs[1] = (uint8_t *) multiblock_msg1;
69*8617a60dSAndroid Build Coastguard Worker 	test_inputs[2] = (uint8_t *) long_msg;
70*8617a60dSAndroid Build Coastguard Worker 
71*8617a60dSAndroid Build Coastguard Worker 	for (i = 0; i < 3; i++) {
72*8617a60dSAndroid Build Coastguard Worker 		TEST_SUCC(vb2_hash_calculate(false, test_inputs[i],
73*8617a60dSAndroid Build Coastguard Worker 					    strlen((const char *)test_inputs[i]),
74*8617a60dSAndroid Build Coastguard Worker 					    VB2_HASH_SHA256, &hash),
75*8617a60dSAndroid Build Coastguard Worker 			  "vb2_hash_calculate() SHA-256");
76*8617a60dSAndroid Build Coastguard Worker 		TEST_EQ(memcmp(hash.sha256, sha256_results[i],
77*8617a60dSAndroid Build Coastguard Worker 			sizeof(sha256_results[i])), 0, "  SHA-256 digest");
78*8617a60dSAndroid Build Coastguard Worker 	}
79*8617a60dSAndroid Build Coastguard Worker 
80*8617a60dSAndroid Build Coastguard Worker 	struct vb2_digest_context dc;
81*8617a60dSAndroid Build Coastguard Worker 	vb2_digest_init(&dc, false, VB2_HASH_SHA256, 0);
82*8617a60dSAndroid Build Coastguard Worker 	vb2_digest_extend(&dc, test_inputs[0], strlen((const char *)test_inputs[0]));
83*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_digest_finalize(&dc, hash.sha256, sizeof(hash.sha256) - 1),
84*8617a60dSAndroid Build Coastguard Worker 		VB2_ERROR_SHA_FINALIZE_DIGEST_SIZE,
85*8617a60dSAndroid Build Coastguard Worker 		"vb2_digest_finalize() SHA-256 too small");
86*8617a60dSAndroid Build Coastguard Worker 
87*8617a60dSAndroid Build Coastguard Worker 	/* Test multiple small extends */
88*8617a60dSAndroid Build Coastguard Worker 	vb2_sha256_init(&ctx, VB2_HASH_SHA256);
89*8617a60dSAndroid Build Coastguard Worker 	vb2_sha256_update(&ctx, (uint8_t *)"test1", 5);
90*8617a60dSAndroid Build Coastguard Worker 	vb2_sha256_update(&ctx, (uint8_t *)"test2", 5);
91*8617a60dSAndroid Build Coastguard Worker 	vb2_sha256_update(&ctx, (uint8_t *)"test3", 5);
92*8617a60dSAndroid Build Coastguard Worker 	vb2_sha256_finalize(&ctx, hash.sha256, VB2_HASH_SHA256);
93*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(memcmp(hash.sha256, expect_multiple, sizeof(hash.sha256)), 0,
94*8617a60dSAndroid Build Coastguard Worker 		"SHA-256 multiple extends");
95*8617a60dSAndroid Build Coastguard Worker 
96*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_hash_block_size(VB2_HASH_SHA256), VB2_SHA256_BLOCK_SIZE,
97*8617a60dSAndroid Build Coastguard Worker 		"vb2_hash_block_size(VB2_HASH_SHA256)");
98*8617a60dSAndroid Build Coastguard Worker 
99*8617a60dSAndroid Build Coastguard Worker 	/* Test SHA256 hash extend */
100*8617a60dSAndroid Build Coastguard Worker 	vb2_sha256_extend(extend_from, extend_by, hash.sha256);
101*8617a60dSAndroid Build Coastguard Worker 	TEST_SUCC(memcmp(hash.sha256, expected_extend, sizeof(hash.sha256)), NULL);
102*8617a60dSAndroid Build Coastguard Worker }
103*8617a60dSAndroid Build Coastguard Worker 
sha512_tests(void)104*8617a60dSAndroid Build Coastguard Worker static void sha512_tests(void)
105*8617a60dSAndroid Build Coastguard Worker {
106*8617a60dSAndroid Build Coastguard Worker 	struct vb2_hash hash;
107*8617a60dSAndroid Build Coastguard Worker 	uint8_t *test_inputs[3];
108*8617a60dSAndroid Build Coastguard Worker 	int i;
109*8617a60dSAndroid Build Coastguard Worker 
110*8617a60dSAndroid Build Coastguard Worker 	test_inputs[0] = (uint8_t *) oneblock_msg;
111*8617a60dSAndroid Build Coastguard Worker 	test_inputs[1] = (uint8_t *) multiblock_msg2;
112*8617a60dSAndroid Build Coastguard Worker 	test_inputs[2] = (uint8_t *) long_msg;
113*8617a60dSAndroid Build Coastguard Worker 
114*8617a60dSAndroid Build Coastguard Worker 	for (i = 0; i < 3; i++) {
115*8617a60dSAndroid Build Coastguard Worker 		TEST_SUCC(vb2_hash_calculate(false, test_inputs[i],
116*8617a60dSAndroid Build Coastguard Worker 					     strlen((const char *)test_inputs[i]),
117*8617a60dSAndroid Build Coastguard Worker 					     VB2_HASH_SHA512, &hash),
118*8617a60dSAndroid Build Coastguard Worker 			  "vb2_hash_calculate() SHA512");
119*8617a60dSAndroid Build Coastguard Worker 		TEST_EQ(memcmp(hash.sha512, sha512_results[i],
120*8617a60dSAndroid Build Coastguard Worker 			sizeof(sha512_results[i])), 0, "  SHA-512 digest");
121*8617a60dSAndroid Build Coastguard Worker 	}
122*8617a60dSAndroid Build Coastguard Worker 
123*8617a60dSAndroid Build Coastguard Worker 	struct vb2_digest_context dc;
124*8617a60dSAndroid Build Coastguard Worker 	vb2_digest_init(&dc, false, VB2_HASH_SHA512, 0);
125*8617a60dSAndroid Build Coastguard Worker 	vb2_digest_extend(&dc, test_inputs[0], strlen((const char *)test_inputs[0]));
126*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_digest_finalize(&dc, hash.sha512, sizeof(hash.sha512) - 1),
127*8617a60dSAndroid Build Coastguard Worker 		VB2_ERROR_SHA_FINALIZE_DIGEST_SIZE,
128*8617a60dSAndroid Build Coastguard Worker 		"vb2_digest_finalize() SHA-512 too small");
129*8617a60dSAndroid Build Coastguard Worker 
130*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_hash_block_size(VB2_HASH_SHA512), VB2_SHA512_BLOCK_SIZE,
131*8617a60dSAndroid Build Coastguard Worker 		"vb2_hash_block_size(VB2_HASH_SHA512)");
132*8617a60dSAndroid Build Coastguard Worker }
133*8617a60dSAndroid Build Coastguard Worker 
misc_tests(void)134*8617a60dSAndroid Build Coastguard Worker static void misc_tests(void)
135*8617a60dSAndroid Build Coastguard Worker {
136*8617a60dSAndroid Build Coastguard Worker 	uint8_t digest[VB2_SHA512_DIGEST_SIZE];
137*8617a60dSAndroid Build Coastguard Worker 	struct vb2_digest_context dc;
138*8617a60dSAndroid Build Coastguard Worker 
139*8617a60dSAndroid Build Coastguard Worker 	/* Crypto algorithm to hash algorithm mapping */
140*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_crypto_to_hash(VB2_ALG_RSA1024_SHA1), VB2_HASH_SHA1,
141*8617a60dSAndroid Build Coastguard Worker 		"Crypto map to SHA1");
142*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_crypto_to_hash(VB2_ALG_RSA2048_SHA256), VB2_HASH_SHA256,
143*8617a60dSAndroid Build Coastguard Worker 		"Crypto map to SHA256");
144*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_crypto_to_hash(VB2_ALG_RSA4096_SHA256), VB2_HASH_SHA256,
145*8617a60dSAndroid Build Coastguard Worker 		"Crypto map to SHA256 2");
146*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_crypto_to_hash(VB2_ALG_RSA8192_SHA512), VB2_HASH_SHA512,
147*8617a60dSAndroid Build Coastguard Worker 		"Crypto map to SHA512");
148*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_crypto_to_hash(VB2_ALG_COUNT), VB2_HASH_INVALID,
149*8617a60dSAndroid Build Coastguard Worker 		"Crypto map to invalid");
150*8617a60dSAndroid Build Coastguard Worker 
151*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_digest_size(VB2_HASH_INVALID), 0,
152*8617a60dSAndroid Build Coastguard Worker 		"digest size invalid alg");
153*8617a60dSAndroid Build Coastguard Worker 
154*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_hash_block_size(VB2_HASH_INVALID), 0,
155*8617a60dSAndroid Build Coastguard Worker 		"vb2_hash_block_size(VB2_HASH_INVALID)");
156*8617a60dSAndroid Build Coastguard Worker 
157*8617a60dSAndroid Build Coastguard Worker 	/* Test bad algorithm inside extend and finalize */
158*8617a60dSAndroid Build Coastguard Worker 	vb2_digest_init(&dc, false, VB2_HASH_SHA256, 0);
159*8617a60dSAndroid Build Coastguard Worker 	dc.hash_alg = VB2_HASH_INVALID;
160*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_digest_extend(&dc, digest, sizeof(digest)),
161*8617a60dSAndroid Build Coastguard Worker 		VB2_ERROR_SHA_EXTEND_ALGORITHM,
162*8617a60dSAndroid Build Coastguard Worker 		"vb2_digest_extend() invalid alg");
163*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_digest_finalize(&dc, digest, sizeof(digest)),
164*8617a60dSAndroid Build Coastguard Worker 		VB2_ERROR_SHA_FINALIZE_ALGORITHM,
165*8617a60dSAndroid Build Coastguard Worker 		"vb2_digest_finalize() invalid alg");
166*8617a60dSAndroid Build Coastguard Worker }
167*8617a60dSAndroid Build Coastguard Worker 
known_value_tests(void)168*8617a60dSAndroid Build Coastguard Worker static void known_value_tests(void)
169*8617a60dSAndroid Build Coastguard Worker {
170*8617a60dSAndroid Build Coastguard Worker 	const char sentinel[] = "keepme";
171*8617a60dSAndroid Build Coastguard Worker 	union {
172*8617a60dSAndroid Build Coastguard Worker 		struct vb2_hash hash;
173*8617a60dSAndroid Build Coastguard Worker 		char overflow[sizeof(struct vb2_hash) + 8];
174*8617a60dSAndroid Build Coastguard Worker 	} test;
175*8617a60dSAndroid Build Coastguard Worker 
176*8617a60dSAndroid Build Coastguard Worker 
177*8617a60dSAndroid Build Coastguard Worker #define TEST_KNOWN_VALUE(algo, str, value) \
178*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_digest_size(algo), sizeof(value) - 1, \
179*8617a60dSAndroid Build Coastguard Worker 		"Known hash size " #algo ": " #str); \
180*8617a60dSAndroid Build Coastguard Worker 	{								\
181*8617a60dSAndroid Build Coastguard Worker 		char *sent_base = test.overflow + \
182*8617a60dSAndroid Build Coastguard Worker 			offsetof(struct vb2_hash, raw) + sizeof(value) - 1; \
183*8617a60dSAndroid Build Coastguard Worker 		strcpy(sent_base, sentinel);				\
184*8617a60dSAndroid Build Coastguard Worker 		TEST_SUCC(vb2_hash_calculate(false, str, sizeof(str) - 1, \
185*8617a60dSAndroid Build Coastguard Worker 					     algo, &test.hash),		\
186*8617a60dSAndroid Build Coastguard Worker 			  "Calculate known hash " #algo ": " #str);	\
187*8617a60dSAndroid Build Coastguard Worker 		TEST_EQ(memcmp(test.hash.raw, value, sizeof(value) - 1), 0, \
188*8617a60dSAndroid Build Coastguard Worker 			"Known hash " #algo ": " #str);			\
189*8617a60dSAndroid Build Coastguard Worker 		TEST_EQ(strcmp(sent_base, sentinel), 0,			\
190*8617a60dSAndroid Build Coastguard Worker 			"Overflow known hash " #algo ": " #str);	\
191*8617a60dSAndroid Build Coastguard Worker 	}
192*8617a60dSAndroid Build Coastguard Worker 
193*8617a60dSAndroid Build Coastguard Worker 	TEST_KNOWN_VALUE(VB2_HASH_SHA1, "",
194*8617a60dSAndroid Build Coastguard Worker 		"\xda\x39\xa3\xee\x5e\x6b\x4b\x0d\x32\x55\xbf\xef\x95\x60\x18"
195*8617a60dSAndroid Build Coastguard Worker 		"\x90\xaf\xd8\x07\x09");
196*8617a60dSAndroid Build Coastguard Worker 	TEST_KNOWN_VALUE(VB2_HASH_SHA256, "",
197*8617a60dSAndroid Build Coastguard Worker 		"\xe3\xb0\xc4\x42\x98\xfc\x1c\x14\x9a\xfb\xf4\xc8\x99\x6f\xb9"
198*8617a60dSAndroid Build Coastguard Worker 		"\x24\x27\xae\x41\xe4\x64\x9b\x93\x4c\xa4\x95\x99\x1b\x78\x52"
199*8617a60dSAndroid Build Coastguard Worker 		"\xb8\x55");
200*8617a60dSAndroid Build Coastguard Worker 	TEST_KNOWN_VALUE(VB2_HASH_SHA512, "",
201*8617a60dSAndroid Build Coastguard Worker 		"\xcf\x83\xe1\x35\x7e\xef\xb8\xbd\xf1\x54\x28\x50\xd6\x6d\x80"
202*8617a60dSAndroid Build Coastguard Worker 		"\x07\xd6\x20\xe4\x05\x0b\x57\x15\xdc\x83\xf4\xa9\x21\xd3\x6c"
203*8617a60dSAndroid Build Coastguard Worker 		"\xe9\xce\x47\xd0\xd1\x3c\x5d\x85\xf2\xb0\xff\x83\x18\xd2\x87"
204*8617a60dSAndroid Build Coastguard Worker 		"\x7e\xec\x2f\x63\xb9\x31\xbd\x47\x41\x7a\x81\xa5\x38\x32\x7a"
205*8617a60dSAndroid Build Coastguard Worker 		"\xf9\x27\xda\x3e");
206*8617a60dSAndroid Build Coastguard Worker 	TEST_KNOWN_VALUE(VB2_HASH_SHA224, "",
207*8617a60dSAndroid Build Coastguard Worker 		"\xd1\x4a\x02\x8c\x2a\x3a\x2b\xc9\x47\x61\x02\xbb\x28\x82\x34"
208*8617a60dSAndroid Build Coastguard Worker 		"\xc4\x15\xa2\xb0\x1f\x82\x8e\xa6\x2a\xc5\xb3\xe4\x2f");
209*8617a60dSAndroid Build Coastguard Worker 	TEST_KNOWN_VALUE(VB2_HASH_SHA384, "",
210*8617a60dSAndroid Build Coastguard Worker 		"\x38\xb0\x60\xa7\x51\xac\x96\x38\x4c\xd9\x32\x7e\xb1\xb1\xe3"
211*8617a60dSAndroid Build Coastguard Worker 		"\x6a\x21\xfd\xb7\x11\x14\xbe\x07\x43\x4c\x0c\xc7\xbf\x63\xf6"
212*8617a60dSAndroid Build Coastguard Worker 		"\xe1\xda\x27\x4e\xde\xbf\xe7\x6f\x65\xfb\xd5\x1a\xd2\xf1\x48"
213*8617a60dSAndroid Build Coastguard Worker 		"\x98\xb9\x5b");
214*8617a60dSAndroid Build Coastguard Worker 
215*8617a60dSAndroid Build Coastguard Worker 	const char long_test_string[] = "abcdefghbcdefghicdefghijdefghijkefgh"
216*8617a60dSAndroid Build Coastguard Worker 		"ijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrs"
217*8617a60dSAndroid Build Coastguard Worker 		"mnopqrstnopqrstu";
218*8617a60dSAndroid Build Coastguard Worker 	TEST_KNOWN_VALUE(VB2_HASH_SHA1, long_test_string,
219*8617a60dSAndroid Build Coastguard Worker 		"\xa4\x9b\x24\x46\xa0\x2c\x64\x5b\xf4\x19\xf9\x95\xb6\x70\x91"
220*8617a60dSAndroid Build Coastguard Worker 		"\x25\x3a\x04\xa2\x59");
221*8617a60dSAndroid Build Coastguard Worker 	TEST_KNOWN_VALUE(VB2_HASH_SHA256, long_test_string,
222*8617a60dSAndroid Build Coastguard Worker 		"\xcf\x5b\x16\xa7\x78\xaf\x83\x80\x03\x6c\xe5\x9e\x7b\x04\x92"
223*8617a60dSAndroid Build Coastguard Worker 		"\x37\x0b\x24\x9b\x11\xe8\xf0\x7a\x51\xaf\xac\x45\x03\x7a\xfe"
224*8617a60dSAndroid Build Coastguard Worker 		"\xe9\xd1");
225*8617a60dSAndroid Build Coastguard Worker 	TEST_KNOWN_VALUE(VB2_HASH_SHA512, long_test_string,
226*8617a60dSAndroid Build Coastguard Worker 		"\x8e\x95\x9b\x75\xda\xe3\x13\xda\x8c\xf4\xf7\x28\x14\xfc\x14"
227*8617a60dSAndroid Build Coastguard Worker 		"\x3f\x8f\x77\x79\xc6\xeb\x9f\x7f\xa1\x72\x99\xae\xad\xb6\x88"
228*8617a60dSAndroid Build Coastguard Worker 		"\x90\x18\x50\x1d\x28\x9e\x49\x00\xf7\xe4\x33\x1b\x99\xde\xc4"
229*8617a60dSAndroid Build Coastguard Worker 		"\xb5\x43\x3a\xc7\xd3\x29\xee\xb6\xdd\x26\x54\x5e\x96\xe5\x5b"
230*8617a60dSAndroid Build Coastguard Worker 		"\x87\x4b\xe9\x09");
231*8617a60dSAndroid Build Coastguard Worker 	TEST_KNOWN_VALUE(VB2_HASH_SHA224, long_test_string,
232*8617a60dSAndroid Build Coastguard Worker 		"\xc9\x7c\xa9\xa5\x59\x85\x0c\xe9\x7a\x04\xa9\x6d\xef\x6d\x99"
233*8617a60dSAndroid Build Coastguard Worker 		"\xa9\xe0\xe0\xe2\xab\x14\xe6\xb8\xdf\x26\x5f\xc0\xb3");
234*8617a60dSAndroid Build Coastguard Worker 	TEST_KNOWN_VALUE(VB2_HASH_SHA384, long_test_string,
235*8617a60dSAndroid Build Coastguard Worker 		"\x09\x33\x0c\x33\xf7\x11\x47\xe8\x3d\x19\x2f\xc7\x82\xcd\x1b"
236*8617a60dSAndroid Build Coastguard Worker 		"\x47\x53\x11\x1b\x17\x3b\x3b\x05\xd2\x2f\xa0\x80\x86\xe3\xb0"
237*8617a60dSAndroid Build Coastguard Worker 		"\xf7\x12\xfc\xc7\xc7\x1a\x55\x7e\x2d\xb9\x66\xc3\xe9\xfa\x91"
238*8617a60dSAndroid Build Coastguard Worker 		"\x74\x60\x39");
239*8617a60dSAndroid Build Coastguard Worker 
240*8617a60dSAndroid Build Coastguard Worker 	/* vim helper to escape hex: <Shift+V>:s/\([a-f0-9]\{2\}\)/\\x\1/g */
241*8617a60dSAndroid Build Coastguard Worker #undef TEST_KNOWN_VALUE
242*8617a60dSAndroid Build Coastguard Worker }
243*8617a60dSAndroid Build Coastguard Worker 
main(int argc,char * argv[])244*8617a60dSAndroid Build Coastguard Worker int main(int argc, char *argv[])
245*8617a60dSAndroid Build Coastguard Worker {
246*8617a60dSAndroid Build Coastguard Worker 	/* Initialize long_msg with 'a' x 1,000,000 */
247*8617a60dSAndroid Build Coastguard Worker 	long_msg = (char *) malloc(1000001);
248*8617a60dSAndroid Build Coastguard Worker 	memset(long_msg, 'a', 1000000);
249*8617a60dSAndroid Build Coastguard Worker 	long_msg[1000000]=0;
250*8617a60dSAndroid Build Coastguard Worker 
251*8617a60dSAndroid Build Coastguard Worker 	sha1_tests();
252*8617a60dSAndroid Build Coastguard Worker 	sha256_tests();
253*8617a60dSAndroid Build Coastguard Worker 	sha512_tests();
254*8617a60dSAndroid Build Coastguard Worker 	misc_tests();
255*8617a60dSAndroid Build Coastguard Worker 	known_value_tests();
256*8617a60dSAndroid Build Coastguard Worker 
257*8617a60dSAndroid Build Coastguard Worker 	free(long_msg);
258*8617a60dSAndroid Build Coastguard Worker 
259*8617a60dSAndroid Build Coastguard Worker 	return gTestSuccess ? 0 : 255;
260*8617a60dSAndroid Build Coastguard Worker }
261