Branch data Line data Source code
1 : : /**
2 : : * Copyright Notice:
3 : : * Copyright 2023-2026 DMTF. All rights reserved.
4 : : * License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
5 : : **/
6 : :
7 : : #include "internal/libspdm_crypt_lib.h"
8 : : #include "internal/libspdm_fips_lib.h"
9 : : #include "internal/libspdm_common_lib.h"
10 : :
11 : : #if LIBSPDM_FIPS_MODE
12 : :
13 : 1 : void libspdm_fips_selftest_sha256(void *fips_selftest_context)
14 : : {
15 : : #if LIBSPDM_SHA256_SUPPORT
16 : 1 : bool result = true;
17 : :
18 : 1 : libspdm_fips_selftest_context_t *context = fips_selftest_context;
19 [ - + ]: 1 : LIBSPDM_ASSERT(fips_selftest_context != NULL);
20 : :
21 : : /* any test fail cause the FIPS fail*/
22 [ - + ]: 1 : if (context->tested_algo != context->self_test_result) {
23 : 0 : return;
24 : : }
25 : :
26 : : /* check if run before.*/
27 [ - + ]: 1 : if ((context->tested_algo & LIBSPDM_FIPS_SELF_TEST_SHA256) != 0) {
28 : 0 : return;
29 : : }
30 : :
31 : 1 : libspdm_fips_selftest_hmac_sha256(context);
32 : 1 : result = (context->self_test_result & LIBSPDM_FIPS_SELF_TEST_HMAC_SHA256) != 0;
33 : :
34 : : /* mark it as tested*/
35 : 1 : context->tested_algo |= LIBSPDM_FIPS_SELF_TEST_SHA256;
36 : :
37 : : /* record test result*/
38 [ + - ]: 1 : if (result) {
39 : 1 : context->self_test_result |= LIBSPDM_FIPS_SELF_TEST_SHA256;
40 : : } else {
41 : 0 : context->self_test_result &= ~LIBSPDM_FIPS_SELF_TEST_SHA256;
42 : : }
43 : : #endif /*LIBSPDM_SHA256_SUPPORT*/
44 : : }
45 : :
46 : 1 : void libspdm_fips_selftest_sha384(void *fips_selftest_context)
47 : : {
48 : : #if LIBSPDM_SHA384_SUPPORT
49 : 1 : bool result = true;
50 : :
51 : 1 : libspdm_fips_selftest_context_t *context = fips_selftest_context;
52 [ - + ]: 1 : LIBSPDM_ASSERT(fips_selftest_context != NULL);
53 : :
54 : : /* any test fail cause the FIPS fail*/
55 [ - + ]: 1 : if (context->tested_algo != context->self_test_result) {
56 : 0 : return;
57 : : }
58 : :
59 : : /* check if run before.*/
60 [ - + ]: 1 : if ((context->tested_algo & LIBSPDM_FIPS_SELF_TEST_SHA384) != 0) {
61 : 0 : return;
62 : : }
63 : :
64 : 1 : libspdm_fips_selftest_hmac_sha384(context);
65 : 1 : result = (context->self_test_result & LIBSPDM_FIPS_SELF_TEST_HMAC_SHA384) != 0;
66 : :
67 : : /* mark it as tested*/
68 : 1 : context->tested_algo |= LIBSPDM_FIPS_SELF_TEST_SHA384;
69 : :
70 : : /* record test result*/
71 [ + - ]: 1 : if (result) {
72 : 1 : context->self_test_result |= LIBSPDM_FIPS_SELF_TEST_SHA384;
73 : : } else {
74 : 0 : context->self_test_result &= ~LIBSPDM_FIPS_SELF_TEST_SHA384;
75 : : }
76 : : #endif /*LIBSPDM_SHA384_SUPPORT*/
77 : : }
78 : :
79 : 1 : void libspdm_fips_selftest_sha512(void *fips_selftest_context)
80 : : {
81 : : #if LIBSPDM_SHA512_SUPPORT
82 : 1 : bool result = true;
83 : :
84 : 1 : libspdm_fips_selftest_context_t *context = fips_selftest_context;
85 [ - + ]: 1 : LIBSPDM_ASSERT(fips_selftest_context != NULL);
86 : :
87 : : /* any test fail cause the FIPS fail*/
88 [ - + ]: 1 : if (context->tested_algo != context->self_test_result) {
89 : 0 : return;
90 : : }
91 : :
92 : : /* check if run before.*/
93 [ - + ]: 1 : if ((context->tested_algo & LIBSPDM_FIPS_SELF_TEST_SHA512) != 0) {
94 : 0 : return;
95 : : }
96 : :
97 : 1 : libspdm_fips_selftest_hmac_sha512(context);
98 : 1 : result = (context->self_test_result & LIBSPDM_FIPS_SELF_TEST_HMAC_SHA512) != 0;
99 : :
100 : : /* mark it as tested*/
101 : 1 : context->tested_algo |= LIBSPDM_FIPS_SELF_TEST_SHA512;
102 : :
103 : : /* record test result*/
104 [ + - ]: 1 : if (result) {
105 : 1 : context->self_test_result |= LIBSPDM_FIPS_SELF_TEST_SHA512;
106 : : } else {
107 : 0 : context->self_test_result &= ~LIBSPDM_FIPS_SELF_TEST_SHA512;
108 : : }
109 : : #endif /*LIBSPDM_SHA512_SUPPORT*/
110 : : }
111 : :
112 : : #endif/*LIBSPDM_FIPS_MODE*/
|