Line data Source code
1 : /**
2 : * Copyright Notice:
3 : * Copyright 2024-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 <stdarg.h>
8 : #include <stddef.h>
9 : #include <setjmp.h>
10 : #include <stdint.h>
11 : #include <stdlib.h>
12 : #include <stdio.h>
13 : #include <assert.h>
14 : #include <string.h>
15 :
16 : #include <base.h>
17 : #include "library/memlib.h"
18 : #include "internal/libspdm_device_secret_lib.h"
19 : #include "internal/libspdm_common_lib.h"
20 :
21 : #if !LIBSPDM_PRIVATE_KEY_MODE_RAW_KEY_ONLY
22 146 : bool libspdm_read_responder_private_key(uint32_t base_asym_algo,
23 : void **data, size_t *size)
24 : {
25 : bool res;
26 : char *file;
27 :
28 146 : switch (base_asym_algo) {
29 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSASSA_2048:
30 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSAPSS_2048:
31 0 : file = "rsa2048/end_responder.key";
32 0 : break;
33 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSASSA_3072:
34 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSAPSS_3072:
35 0 : file = "rsa3072/end_responder.key";
36 0 : break;
37 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSASSA_4096:
38 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSAPSS_4096:
39 0 : file = "rsa4096/end_responder.key";
40 0 : break;
41 146 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_ECDSA_ECC_NIST_P256:
42 146 : file = "ecp256/end_responder.key";
43 146 : break;
44 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_ECDSA_ECC_NIST_P384:
45 0 : file = "ecp384/end_responder.key";
46 0 : break;
47 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_ECDSA_ECC_NIST_P521:
48 0 : file = "ecp521/end_responder.key";
49 0 : break;
50 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_SM2_ECC_SM2_P256:
51 0 : file = "sm2/end_responder.key";
52 0 : break;
53 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_EDDSA_ED25519:
54 0 : file = "ed25519/end_responder.key";
55 0 : break;
56 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_EDDSA_ED448:
57 0 : file = "ed448/end_responder.key";
58 0 : break;
59 0 : default:
60 0 : LIBSPDM_ASSERT(false);
61 0 : return false;
62 : }
63 146 : res = libspdm_read_input_file(file, data, size);
64 146 : return res;
65 : }
66 :
67 140 : bool libspdm_read_responder_private_key_ex(uint32_t base_asym_algo, uint8_t key_pair_id,
68 : void **data, size_t *size)
69 : {
70 : bool res;
71 : char *file;
72 :
73 : /* slot 0 / slot 1 share the default leaf key; slot 4 uses a distinct leaf key
74 : * (end_responder4.key) to demonstrate multiple keys. The slot-4 key pair is the negotiated
75 : * algorithm's SECONDARY key pair; only it selects end_responder4.key. */
76 140 : if (key_pair_id != libspdm_get_key_pair_id_by_slot(base_asym_algo, 0, 4)) {
77 140 : return libspdm_read_responder_private_key(base_asym_algo, data, size);
78 : }
79 :
80 0 : switch (base_asym_algo) {
81 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSASSA_2048:
82 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSAPSS_2048:
83 0 : file = "rsa2048/end_responder4.key";
84 0 : break;
85 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSASSA_3072:
86 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSAPSS_3072:
87 0 : file = "rsa3072/end_responder4.key";
88 0 : break;
89 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSASSA_4096:
90 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSAPSS_4096:
91 0 : file = "rsa4096/end_responder4.key";
92 0 : break;
93 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_ECDSA_ECC_NIST_P256:
94 0 : file = "ecp256/end_responder4.key";
95 0 : break;
96 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_ECDSA_ECC_NIST_P384:
97 0 : file = "ecp384/end_responder4.key";
98 0 : break;
99 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_ECDSA_ECC_NIST_P521:
100 0 : file = "ecp521/end_responder4.key";
101 0 : break;
102 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_SM2_ECC_SM2_P256:
103 0 : file = "sm2/end_responder4.key";
104 0 : break;
105 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_EDDSA_ED25519:
106 0 : file = "ed25519/end_responder4.key";
107 0 : break;
108 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_EDDSA_ED448:
109 0 : file = "ed448/end_responder4.key";
110 0 : break;
111 0 : default:
112 0 : LIBSPDM_ASSERT(false);
113 0 : return false;
114 : }
115 0 : res = libspdm_read_input_file(file, data, size);
116 0 : return res;
117 : }
118 : #endif
119 :
120 : #if (LIBSPDM_ENABLE_CAPABILITY_MUT_AUTH_CAP) || (LIBSPDM_ENABLE_CAPABILITY_ENDPOINT_INFO_CAP)
121 35 : bool libspdm_read_requester_private_key(uint16_t req_base_asym_alg,
122 : void **data, size_t *size)
123 : {
124 : bool res;
125 : char *file;
126 :
127 35 : switch (req_base_asym_alg) {
128 35 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSASSA_2048:
129 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSAPSS_2048:
130 35 : file = "rsa2048/end_requester.key";
131 35 : break;
132 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSASSA_3072:
133 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSAPSS_3072:
134 0 : file = "rsa3072/end_requester.key";
135 0 : break;
136 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSASSA_4096:
137 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSAPSS_4096:
138 0 : file = "rsa4096/end_requester.key";
139 0 : break;
140 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_ECDSA_ECC_NIST_P256:
141 0 : file = "ecp256/end_requester.key";
142 0 : break;
143 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_ECDSA_ECC_NIST_P384:
144 0 : file = "ecp384/end_requester.key";
145 0 : break;
146 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_ECDSA_ECC_NIST_P521:
147 0 : file = "ecp521/end_requester.key";
148 0 : break;
149 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_SM2_ECC_SM2_P256:
150 0 : file = "sm2/end_requester.key";
151 0 : break;
152 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_EDDSA_ED25519:
153 0 : file = "ed25519/end_requester.key";
154 0 : break;
155 0 : case SPDM_ALGORITHMS_BASE_ASYM_ALGO_EDDSA_ED448:
156 0 : file = "ed448/end_requester.key";
157 0 : break;
158 0 : default:
159 0 : LIBSPDM_ASSERT(false);
160 0 : return false;
161 : }
162 35 : res = libspdm_read_input_file(file, data, size);
163 35 : return res;
164 : }
165 : #endif /* (LIBSPDM_ENABLE_CAPABILITY_MUT_AUTH_CAP) || (...) */
|