diff options
Diffstat (limited to 'tests/vb2_crypto_tests.c')
-rw-r--r-- | tests/vb2_crypto_tests.c | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/tests/vb2_crypto_tests.c b/tests/vb2_crypto_tests.c new file mode 100644 index 00000000..c7d66760 --- /dev/null +++ b/tests/vb2_crypto_tests.c @@ -0,0 +1,104 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for generic crypto algorithm helper stuff. + */ + +#include <stdio.h> + +#include "2crypto.h" +#include "2return_codes.h" +#include "2rsa.h" +#include "2sha.h" +#include "2sysincludes.h" +#include "test_common.h" +#include "vboot_host.h" + +static void hash_algorithm_name_tests(void) +{ + enum vb2_hash_algorithm alg; + char test_name[256]; + + for (alg = 0; alg < VB2_HASH_ALG_COUNT; alg++) { + sprintf(test_name, "%s (alg=%d)", + vb2_get_hash_algorithm_name(alg), alg); + TEST_STR_NEQ(vb2_get_hash_algorithm_name(alg), + VB2_INVALID_ALG_NAME, test_name); + } + + TEST_STR_EQ(vb2_get_hash_algorithm_name(VB2_HASH_ALG_COUNT), + VB2_INVALID_ALG_NAME, "hash alg name out of range"); +} + +static void sig_algorithm_name_tests(void) +{ + enum vb2_signature_algorithm alg; + char test_name[256]; + + for (alg = 1; alg < VB2_SIG_ALG_COUNT; alg++) { + sprintf(test_name, "%s (alg=%d)", + vb2_get_sig_algorithm_name(alg), alg); + TEST_STR_NEQ(vb2_get_sig_algorithm_name(alg), + VB2_INVALID_ALG_NAME, test_name); + } + + TEST_STR_EQ(vb2_get_sig_algorithm_name(VB2_SIG_INVALID), + VB2_INVALID_ALG_NAME, "sig alg name invalid"); + TEST_STR_EQ(vb2_get_sig_algorithm_name(VB2_SIG_ALG_COUNT), + VB2_INVALID_ALG_NAME, "sig alg name out of range"); +} + +static void hash_algorithm_lookup_tests(void) +{ + enum vb2_hash_algorithm alg, out; + char test_name[256]; + + for (alg = 1; alg < VB2_HASH_ALG_COUNT; alg++) { + sprintf(test_name, "%s (alg=%d)", + vb2_get_hash_algorithm_name(alg), alg); + TEST_EQ(vb2_lookup_hash_alg(vb2_get_hash_algorithm_name(alg), + &out), 1, test_name); + TEST_EQ(out, alg, " algorithm correct"); + } + + TEST_EQ(vb2_lookup_hash_alg(VB2_INVALID_ALG_NAME, &out), 0, + "invalid algorithm cannot be parsed"); + TEST_EQ(vb2_lookup_hash_alg("RSA1024", &out), 0, + "cannot parse hash as signature"); + TEST_EQ(vb2_lookup_hash_alg("shA512", &out), 1, + "case insensitivity spot check"); + TEST_EQ(out, VB2_HASH_SHA512, " algorithm correct"); +} + +static void sig_algorithm_lookup_tests(void) +{ + enum vb2_signature_algorithm alg, out; + char test_name[256]; + + for (alg = 1; alg < VB2_SIG_ALG_COUNT; alg++) { + sprintf(test_name, "%s (alg=%d)", + vb2_get_sig_algorithm_name(alg), alg); + TEST_EQ(vb2_lookup_sig_alg(vb2_get_sig_algorithm_name(alg), + &out), 1, test_name); + TEST_EQ(out, alg, " algorithm correct"); + } + + TEST_EQ(vb2_lookup_sig_alg(VB2_INVALID_ALG_NAME, &out), 0, + "invalid algorithm cannot be parsed"); + TEST_EQ(vb2_lookup_sig_alg("SHA256", &out), 0, + "cannot parse signature as hash"); + TEST_EQ(vb2_lookup_sig_alg("rSa2048", &out), 1, + "case insensitivity spot check"); + TEST_EQ(out, VB2_SIG_RSA2048, " algorithm correct"); +} + +int main(int argc, char *argv[]) +{ + hash_algorithm_name_tests(); + sig_algorithm_name_tests(); + hash_algorithm_lookup_tests(); + sig_algorithm_lookup_tests(); + + return gTestSuccess ? 0 : 255; +} |