xref: /aosp_15_r20/external/vboot_reference/tests/sha_tests.c (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
1*8617a60dSAndroid Build Coastguard Worker /* Copyright 2010 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 <stdint.h>
9*8617a60dSAndroid Build Coastguard Worker #include <stdio.h>
10*8617a60dSAndroid Build Coastguard Worker #include <stdlib.h>
11*8617a60dSAndroid Build Coastguard Worker #include <string.h>
12*8617a60dSAndroid Build Coastguard Worker 
13*8617a60dSAndroid Build Coastguard Worker #include "sha_test_vectors.h"
14*8617a60dSAndroid Build Coastguard Worker 
SHA1_tests(void)15*8617a60dSAndroid Build Coastguard Worker int SHA1_tests(void) {
16*8617a60dSAndroid Build Coastguard Worker 	int i, success = 1;
17*8617a60dSAndroid Build Coastguard Worker 	uint8_t sha1_digest[SHA1_DIGEST_SIZE];
18*8617a60dSAndroid Build Coastguard Worker 	uint8_t* test_inputs[3];
19*8617a60dSAndroid Build Coastguard Worker 	test_inputs[0] = (uint8_t *) oneblock_msg;
20*8617a60dSAndroid Build Coastguard Worker 	test_inputs[1] = (uint8_t *) multiblock_msg1;
21*8617a60dSAndroid Build Coastguard Worker 	test_inputs[2] = (uint8_t *) long_msg;
22*8617a60dSAndroid Build Coastguard Worker 
23*8617a60dSAndroid Build Coastguard Worker 	for (i = 0; i < 3; i++) {
24*8617a60dSAndroid Build Coastguard Worker 		internal_SHA1(test_inputs[i], strlen((char *)test_inputs[i]),
25*8617a60dSAndroid Build Coastguard Worker 			      sha1_digest);
26*8617a60dSAndroid Build Coastguard Worker 		if (!memcmp(sha1_digest, sha1_results[i],
27*8617a60dSAndroid Build Coastguard Worker 			    SHA1_DIGEST_SIZE)) {
28*8617a60dSAndroid Build Coastguard Worker 			fprintf(stderr, "Test vector %d PASSED for SHA-1\n",
29*8617a60dSAndroid Build Coastguard Worker 				i+1);
30*8617a60dSAndroid Build Coastguard Worker 		}
31*8617a60dSAndroid Build Coastguard Worker 		else {
32*8617a60dSAndroid Build Coastguard Worker 			fprintf(stderr, "Test vector %d FAILED for SHA-1\n",
33*8617a60dSAndroid Build Coastguard Worker 				i+1);
34*8617a60dSAndroid Build Coastguard Worker 			success = 0;
35*8617a60dSAndroid Build Coastguard Worker 		}
36*8617a60dSAndroid Build Coastguard Worker 	}
37*8617a60dSAndroid Build Coastguard Worker 	return success;
38*8617a60dSAndroid Build Coastguard Worker }
39*8617a60dSAndroid Build Coastguard Worker 
SHA256_tests(void)40*8617a60dSAndroid Build Coastguard Worker int SHA256_tests(void) {
41*8617a60dSAndroid Build Coastguard Worker 	int i, success = 1;
42*8617a60dSAndroid Build Coastguard Worker 	uint8_t sha256_digest[SHA256_DIGEST_SIZE];
43*8617a60dSAndroid Build Coastguard Worker 	uint8_t* test_inputs[3];
44*8617a60dSAndroid Build Coastguard Worker 	test_inputs[0] = (uint8_t *) oneblock_msg;
45*8617a60dSAndroid Build Coastguard Worker 	test_inputs[1] = (uint8_t *) multiblock_msg1;
46*8617a60dSAndroid Build Coastguard Worker 	test_inputs[2] = (uint8_t *) long_msg;
47*8617a60dSAndroid Build Coastguard Worker 
48*8617a60dSAndroid Build Coastguard Worker 	for (i = 0; i < 3; i++) {
49*8617a60dSAndroid Build Coastguard Worker 		internal_SHA256(test_inputs[i], strlen((char *)test_inputs[i]),
50*8617a60dSAndroid Build Coastguard Worker 				sha256_digest);
51*8617a60dSAndroid Build Coastguard Worker 		if (!memcmp(sha256_digest, sha256_results[i],
52*8617a60dSAndroid Build Coastguard Worker 			    SHA256_DIGEST_SIZE)) {
53*8617a60dSAndroid Build Coastguard Worker 			fprintf(stderr, "Test vector %d PASSED for SHA-256\n",
54*8617a60dSAndroid Build Coastguard Worker 				i+1);
55*8617a60dSAndroid Build Coastguard Worker 		}
56*8617a60dSAndroid Build Coastguard Worker 		else {
57*8617a60dSAndroid Build Coastguard Worker 			fprintf(stderr, "Test vector %d FAILED for SHA-256\n",
58*8617a60dSAndroid Build Coastguard Worker 				i+1);
59*8617a60dSAndroid Build Coastguard Worker 			success = 0;
60*8617a60dSAndroid Build Coastguard Worker 		}
61*8617a60dSAndroid Build Coastguard Worker 	}
62*8617a60dSAndroid Build Coastguard Worker 	return success;
63*8617a60dSAndroid Build Coastguard Worker }
64*8617a60dSAndroid Build Coastguard Worker 
SHA512_tests(void)65*8617a60dSAndroid Build Coastguard Worker int SHA512_tests(void) {
66*8617a60dSAndroid Build Coastguard Worker 	int i, success = 1;
67*8617a60dSAndroid Build Coastguard Worker 	uint8_t sha512_digest[SHA512_DIGEST_SIZE];
68*8617a60dSAndroid Build Coastguard Worker 	uint8_t* test_inputs[3];
69*8617a60dSAndroid Build Coastguard Worker 	test_inputs[0] = (uint8_t *) oneblock_msg;
70*8617a60dSAndroid Build Coastguard Worker 	test_inputs[1] = (uint8_t *) multiblock_msg2;
71*8617a60dSAndroid Build Coastguard Worker 	test_inputs[2] = (uint8_t *) long_msg;
72*8617a60dSAndroid Build Coastguard Worker 
73*8617a60dSAndroid Build Coastguard Worker 	for (i = 0; i < 3; i++) {
74*8617a60dSAndroid Build Coastguard Worker 		internal_SHA512(test_inputs[i], strlen((char *)test_inputs[i]),
75*8617a60dSAndroid Build Coastguard Worker 				sha512_digest);
76*8617a60dSAndroid Build Coastguard Worker 		if (!memcmp(sha512_digest, sha512_results[i],
77*8617a60dSAndroid Build Coastguard Worker 			    SHA512_DIGEST_SIZE)) {
78*8617a60dSAndroid Build Coastguard Worker 			fprintf(stderr, "Test vector %d PASSED for SHA-512\n",
79*8617a60dSAndroid Build Coastguard Worker 				i+1);
80*8617a60dSAndroid Build Coastguard Worker 		}
81*8617a60dSAndroid Build Coastguard Worker 		else {
82*8617a60dSAndroid Build Coastguard Worker 			fprintf(stderr, "Test vector %d FAILED for SHA-512\n",
83*8617a60dSAndroid Build Coastguard Worker 				i+1);
84*8617a60dSAndroid Build Coastguard Worker 			success = 0;
85*8617a60dSAndroid Build Coastguard Worker 		}
86*8617a60dSAndroid Build Coastguard Worker 	}
87*8617a60dSAndroid Build Coastguard Worker 	return success;
88*8617a60dSAndroid Build Coastguard Worker }
89*8617a60dSAndroid Build Coastguard Worker 
main(int argc,char * argv[])90*8617a60dSAndroid Build Coastguard Worker int main(int argc, char* argv[]) {
91*8617a60dSAndroid Build Coastguard Worker 	int success = 1;
92*8617a60dSAndroid Build Coastguard Worker 	/* Initialize long_msg with 'a' x 1,000,000 */
93*8617a60dSAndroid Build Coastguard Worker 	long_msg = (char *) malloc(1000001);
94*8617a60dSAndroid Build Coastguard Worker 	memset(long_msg, 'a', 1000000);
95*8617a60dSAndroid Build Coastguard Worker 	long_msg[1000000]=0;
96*8617a60dSAndroid Build Coastguard Worker 
97*8617a60dSAndroid Build Coastguard Worker 	if (!SHA1_tests())
98*8617a60dSAndroid Build Coastguard Worker 		success = 0;
99*8617a60dSAndroid Build Coastguard Worker 	if (!SHA256_tests())
100*8617a60dSAndroid Build Coastguard Worker 		success = 0;
101*8617a60dSAndroid Build Coastguard Worker 	if (!SHA512_tests())
102*8617a60dSAndroid Build Coastguard Worker 		success = 0;
103*8617a60dSAndroid Build Coastguard Worker 
104*8617a60dSAndroid Build Coastguard Worker 	free(long_msg);
105*8617a60dSAndroid Build Coastguard Worker 
106*8617a60dSAndroid Build Coastguard Worker 	return !success;
107*8617a60dSAndroid Build Coastguard Worker }
108