Branch data Line data Source code
1 : : /**
2 : : * Copyright Notice:
3 : : * Copyright 2025-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_secured_message_lib.h"
8 : :
9 : 0 : void *libspdm_secured_message_kem_new(spdm_version_number_t spdm_version,
10 : : uint32_t kem_alg, bool is_initiator)
11 : : {
12 : 0 : return libspdm_kem_new(spdm_version, kem_alg, is_initiator);
13 : : }
14 : :
15 : 0 : void libspdm_secured_message_kem_free(uint32_t kem_alg, void *kem_context)
16 : : {
17 : 0 : libspdm_kem_free(kem_alg, kem_context);
18 : 0 : }
19 : :
20 : 0 : bool libspdm_secured_message_kem_generate_key(uint32_t kem_alg,
21 : : void *kem_context,
22 : : uint8_t *encap_key,
23 : : size_t *encap_key_size)
24 : : {
25 : 0 : return libspdm_kem_generate_key(kem_alg, kem_context, encap_key, encap_key_size);
26 : : }
27 : :
28 : 0 : bool libspdm_secured_message_kem_encapsulate(
29 : : uint32_t kem_alg, void *kem_context,
30 : : const uint8_t *peer_encap_key, size_t peer_encap_key_size,
31 : : uint8_t *cipher_text, size_t *cipher_text_size,
32 : : void *spdm_secured_message_context)
33 : : {
34 : : libspdm_secured_message_context_t *secured_message_context;
35 : : uint8_t final_key[LIBSPDM_MAX_KEM_SS_SIZE];
36 : : size_t final_key_size;
37 : : bool ret;
38 : :
39 : 0 : secured_message_context = spdm_secured_message_context;
40 : :
41 : 0 : final_key_size = sizeof(final_key);
42 : 0 : ret = libspdm_kem_encapsulate(kem_alg, kem_context, peer_encap_key,
43 : : peer_encap_key_size, cipher_text,
44 : : cipher_text_size, final_key,
45 : : &final_key_size);
46 [ # # ]: 0 : if (!ret) {
47 : 0 : return ret;
48 : : }
49 : 0 : libspdm_copy_mem(secured_message_context->master_secret.shared_secret,
50 : : sizeof(secured_message_context->master_secret.shared_secret),
51 : : final_key, final_key_size);
52 : 0 : libspdm_zero_mem(final_key, final_key_size);
53 : 0 : secured_message_context->shared_key_size = final_key_size;
54 : 0 : return true;
55 : : }
56 : :
57 : 0 : bool libspdm_secured_message_kem_decapsulate(
58 : : uint32_t kem_alg, void *kem_context,
59 : : const uint8_t *peer_cipher_text, size_t peer_cipher_text_size,
60 : : void *spdm_secured_message_context)
61 : : {
62 : : libspdm_secured_message_context_t *secured_message_context;
63 : : uint8_t final_key[LIBSPDM_MAX_KEM_SS_SIZE];
64 : : size_t final_key_size;
65 : : bool ret;
66 : :
67 : 0 : secured_message_context = spdm_secured_message_context;
68 : :
69 : 0 : final_key_size = sizeof(final_key);
70 : 0 : ret = libspdm_kem_decapsulate(kem_alg, kem_context, peer_cipher_text,
71 : : peer_cipher_text_size, final_key,
72 : : &final_key_size);
73 [ # # ]: 0 : if (!ret) {
74 : 0 : return ret;
75 : : }
76 : 0 : libspdm_copy_mem(secured_message_context->master_secret.shared_secret,
77 : : sizeof(secured_message_context->master_secret.shared_secret),
78 : : final_key, final_key_size);
79 : 0 : libspdm_zero_mem(final_key, final_key_size);
80 : 0 : secured_message_context->shared_key_size = final_key_size;
81 : 0 : return true;
82 : : }
|