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