xref: /aosp_15_r20/external/vboot_reference/tests/vb2_crypto_tests.c (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
1*8617a60dSAndroid Build Coastguard Worker /* Copyright 2020 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  * Tests for generic crypto algorithm helper stuff.
6*8617a60dSAndroid Build Coastguard Worker  */
7*8617a60dSAndroid Build Coastguard Worker 
8*8617a60dSAndroid Build Coastguard Worker #include <stdio.h>
9*8617a60dSAndroid Build Coastguard Worker 
10*8617a60dSAndroid Build Coastguard Worker #include "2crypto.h"
11*8617a60dSAndroid Build Coastguard Worker #include "2return_codes.h"
12*8617a60dSAndroid Build Coastguard Worker #include "2rsa.h"
13*8617a60dSAndroid Build Coastguard Worker #include "2sha.h"
14*8617a60dSAndroid Build Coastguard Worker #include "2sysincludes.h"
15*8617a60dSAndroid Build Coastguard Worker #include "common/tests.h"
16*8617a60dSAndroid Build Coastguard Worker #include "vboot_host.h"
17*8617a60dSAndroid Build Coastguard Worker 
hash_algorithm_name_tests(void)18*8617a60dSAndroid Build Coastguard Worker static void hash_algorithm_name_tests(void)
19*8617a60dSAndroid Build Coastguard Worker {
20*8617a60dSAndroid Build Coastguard Worker 	enum vb2_hash_algorithm alg;
21*8617a60dSAndroid Build Coastguard Worker 	char test_name[256];
22*8617a60dSAndroid Build Coastguard Worker 
23*8617a60dSAndroid Build Coastguard Worker 	for (alg = 0; alg < VB2_HASH_ALG_COUNT; alg++) {
24*8617a60dSAndroid Build Coastguard Worker 		sprintf(test_name, "%s (alg=%d)",
25*8617a60dSAndroid Build Coastguard Worker 			vb2_get_hash_algorithm_name(alg), alg);
26*8617a60dSAndroid Build Coastguard Worker 		TEST_STR_NEQ(vb2_get_hash_algorithm_name(alg),
27*8617a60dSAndroid Build Coastguard Worker 			     VB2_INVALID_ALG_NAME, test_name);
28*8617a60dSAndroid Build Coastguard Worker 	}
29*8617a60dSAndroid Build Coastguard Worker 
30*8617a60dSAndroid Build Coastguard Worker 	TEST_STR_EQ(vb2_get_hash_algorithm_name(VB2_HASH_ALG_COUNT),
31*8617a60dSAndroid Build Coastguard Worker 		    VB2_INVALID_ALG_NAME, "hash alg name out of range");
32*8617a60dSAndroid Build Coastguard Worker }
33*8617a60dSAndroid Build Coastguard Worker 
sig_algorithm_name_tests(void)34*8617a60dSAndroid Build Coastguard Worker static void sig_algorithm_name_tests(void)
35*8617a60dSAndroid Build Coastguard Worker {
36*8617a60dSAndroid Build Coastguard Worker 	enum vb2_signature_algorithm alg;
37*8617a60dSAndroid Build Coastguard Worker 	char test_name[256];
38*8617a60dSAndroid Build Coastguard Worker 
39*8617a60dSAndroid Build Coastguard Worker 	for (alg = 1; alg < VB2_SIG_ALG_COUNT; alg++) {
40*8617a60dSAndroid Build Coastguard Worker 		sprintf(test_name, "%s (alg=%d)",
41*8617a60dSAndroid Build Coastguard Worker 			vb2_get_sig_algorithm_name(alg), alg);
42*8617a60dSAndroid Build Coastguard Worker 		TEST_STR_NEQ(vb2_get_sig_algorithm_name(alg),
43*8617a60dSAndroid Build Coastguard Worker 			     VB2_INVALID_ALG_NAME, test_name);
44*8617a60dSAndroid Build Coastguard Worker 	}
45*8617a60dSAndroid Build Coastguard Worker 
46*8617a60dSAndroid Build Coastguard Worker 	TEST_STR_EQ(vb2_get_sig_algorithm_name(VB2_SIG_INVALID),
47*8617a60dSAndroid Build Coastguard Worker 		    VB2_INVALID_ALG_NAME, "sig alg name invalid");
48*8617a60dSAndroid Build Coastguard Worker 	TEST_STR_EQ(vb2_get_sig_algorithm_name(VB2_SIG_ALG_COUNT),
49*8617a60dSAndroid Build Coastguard Worker 		    VB2_INVALID_ALG_NAME, "sig alg name out of range");
50*8617a60dSAndroid Build Coastguard Worker }
51*8617a60dSAndroid Build Coastguard Worker 
hash_algorithm_lookup_tests(void)52*8617a60dSAndroid Build Coastguard Worker static void hash_algorithm_lookup_tests(void)
53*8617a60dSAndroid Build Coastguard Worker {
54*8617a60dSAndroid Build Coastguard Worker 	enum vb2_hash_algorithm alg, out;
55*8617a60dSAndroid Build Coastguard Worker 	char test_name[256];
56*8617a60dSAndroid Build Coastguard Worker 
57*8617a60dSAndroid Build Coastguard Worker 	for (alg = 1; alg < VB2_HASH_ALG_COUNT; alg++) {
58*8617a60dSAndroid Build Coastguard Worker 		sprintf(test_name, "%s (alg=%d)",
59*8617a60dSAndroid Build Coastguard Worker 			vb2_get_hash_algorithm_name(alg), alg);
60*8617a60dSAndroid Build Coastguard Worker 		TEST_EQ(vb2_lookup_hash_alg(vb2_get_hash_algorithm_name(alg),
61*8617a60dSAndroid Build Coastguard Worker 			&out), 1, test_name);
62*8617a60dSAndroid Build Coastguard Worker 		TEST_EQ(out, alg, "  algorithm correct");
63*8617a60dSAndroid Build Coastguard Worker 	}
64*8617a60dSAndroid Build Coastguard Worker 
65*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_lookup_hash_alg(VB2_INVALID_ALG_NAME, &out), 0,
66*8617a60dSAndroid Build Coastguard Worker 		"invalid algorithm cannot be parsed");
67*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_lookup_hash_alg("RSA1024", &out), 0,
68*8617a60dSAndroid Build Coastguard Worker 		"cannot parse hash  as signature");
69*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_lookup_hash_alg("shA512", &out), 1,
70*8617a60dSAndroid Build Coastguard Worker 		"case insensitivity spot check");
71*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(out, VB2_HASH_SHA512, "  algorithm correct");
72*8617a60dSAndroid Build Coastguard Worker }
73*8617a60dSAndroid Build Coastguard Worker 
sig_algorithm_lookup_tests(void)74*8617a60dSAndroid Build Coastguard Worker static void sig_algorithm_lookup_tests(void)
75*8617a60dSAndroid Build Coastguard Worker {
76*8617a60dSAndroid Build Coastguard Worker 	enum vb2_signature_algorithm alg, out;
77*8617a60dSAndroid Build Coastguard Worker 	char test_name[256];
78*8617a60dSAndroid Build Coastguard Worker 
79*8617a60dSAndroid Build Coastguard Worker 	for (alg = 1; alg < VB2_SIG_ALG_COUNT; alg++) {
80*8617a60dSAndroid Build Coastguard Worker 		sprintf(test_name, "%s (alg=%d)",
81*8617a60dSAndroid Build Coastguard Worker 			vb2_get_sig_algorithm_name(alg), alg);
82*8617a60dSAndroid Build Coastguard Worker 		TEST_EQ(vb2_lookup_sig_alg(vb2_get_sig_algorithm_name(alg),
83*8617a60dSAndroid Build Coastguard Worker 			&out), 1, test_name);
84*8617a60dSAndroid Build Coastguard Worker 		TEST_EQ(out, alg, "  algorithm correct");
85*8617a60dSAndroid Build Coastguard Worker 	}
86*8617a60dSAndroid Build Coastguard Worker 
87*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_lookup_sig_alg(VB2_INVALID_ALG_NAME, &out), 0,
88*8617a60dSAndroid Build Coastguard Worker 		"invalid algorithm cannot be parsed");
89*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_lookup_sig_alg("SHA256", &out), 0,
90*8617a60dSAndroid Build Coastguard Worker 		"cannot parse signature as hash");
91*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(vb2_lookup_sig_alg("rSa2048", &out), 1,
92*8617a60dSAndroid Build Coastguard Worker 		"case insensitivity spot check");
93*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(out, VB2_SIG_RSA2048, "  algorithm correct");
94*8617a60dSAndroid Build Coastguard Worker }
95*8617a60dSAndroid Build Coastguard Worker 
main(int argc,char * argv[])96*8617a60dSAndroid Build Coastguard Worker int main(int argc, char *argv[])
97*8617a60dSAndroid Build Coastguard Worker {
98*8617a60dSAndroid Build Coastguard Worker 	hash_algorithm_name_tests();
99*8617a60dSAndroid Build Coastguard Worker 	sig_algorithm_name_tests();
100*8617a60dSAndroid Build Coastguard Worker 	hash_algorithm_lookup_tests();
101*8617a60dSAndroid Build Coastguard Worker 	sig_algorithm_lookup_tests();
102*8617a60dSAndroid Build Coastguard Worker 
103*8617a60dSAndroid Build Coastguard Worker 	return gTestSuccess ? 0 : 255;
104*8617a60dSAndroid Build Coastguard Worker }
105