dmtf / spdm-emu Goto Github PK
View Code? Open in Web Editor NEWLicense: BSD 3-Clause "New" or "Revised" License
License: BSD 3-Clause "New" or "Revised" License
spdm-emu/spdm_emu/spdm_responder_emu/spdm_responder_session.c
Lines 39 to 59 in aef708d
Line 39 defines status, but when line 41 and line 48 if are false, status is not initialized and is used in line 55.
Hi,
We are planning to implement our own responder lib (it will not be exact same libspdm but with quite of modifications as per our device implementation) which will be hooked up to spdm-emu responder. But spdm-emu requester would still be the same using vanilla libspdm beneath.
Is it some feasible approach ? Or there are some hidden considerations that the way spdm-emu requester and responder designed to work with only same vanilla libspdm ?
Thanks,
Manish
Currently, we have example to get SPDM measurement.
We need another example to compare the measurement with a known reference integrity manifest (RIM).
Hi,
I was looking through the code where responder exactly pickup the message from the platform -
bool platform_server(IN SOCKET socket)
{
bool result;
return_status status;
uint8_t response[PCI_DOE_MAX_NON_SPDM_MESSAGE_SIZE];
uintn response_size;
while (true) {
**status = libspdm_responder_dispatch_message(m_spdm_context);**
if (status == RETURN_SUCCESS) {
/* success dispatch SPDM message*/
}
libspdm_responder_dispatch_message() calls below to get the message from platform
spdm_context->receive_message(spdm_context, &request_size,
request, 0);
The problem I see here is there seems no synchronization here when receiving the message (i.e responder may run faster and try to recv the message but requester might not have posted the message still, causing responder to fail/exit) and it's possible that responder may get same message again which it read before already (as it's blindly trying to receive message from the platform in a while loop above). How this is syned actually ?
Thanks,
Manish
compile command:
cmake -DARCH=x64 -DTOOLCHAIN=GCC -DTARGET=Release -DCRYPTO=mbedtls ..
responder:
./spdm_responder_emu --trans NONE
requester:
./spdm_requester_emu --trans NONE
responder log:
.....
Platform port Transmit command: 00 00 00 01
Platform port Transmit transport_type: 00 00 00 00
Platform port Transmit size: 00 00 00 34
Platform port Transmit buffer:
12 65 00 00 71 b3 36 fa 7e b9 35 ac 48 78 15 09 58 0f 24 77 4c 34 22 ca fb 1c 5d 4a 08 72 fe e6 84 3b ca 5c 7e 80 dc aa c5 e5 04 53 8c c5 78 c6 0e 16 6e a3
Platform port Receive command: 00 00 00 01
Platform port Receive transport_type: 00 00 00 00
Platform port Receive size: 00 00 00 1c
Platform port Receive buffer:
ff ff ff ff 16 00 d3 b7 4e bb 40 38 25 f1 ba 3e 50 40 a5 2b 6d 62 73 2e 61 cb 87 c9
SpdmReceiveRequest[.] ...
SpdmReceiveRequest[0] (0x1c):
0000: ff ff ff ff 16 00 d3 b7 4e bb 40 38 25 f1 ba 3e 50 40 a5 2b 6d 62 73 2e 61 cb 87 c9
SpdmSendResponse[0] ...
LIBSPDM_ASSERT: /home/binbin/workspace/SPDM/spdm-emu-2.1.0/libspdm/library/spdm_responder_lib/libspdm_rsp_receive_send.c(87): request_code != 0xFF
requester log:
....
libspdm_start_session - libspdm_send_receive_finish - (nil)
libspdm_send_spdm_request[ffffffff] (0x4):
0000: 12 e8 00 00
Platform port Transmit command: 00 00 00 01
Platform port Transmit transport_type: 00 00 00 00
Platform port Transmit size: 00 00 00 1c
Platform port Transmit buffer:
ff ff ff ff 16 00 d3 b7 4e bb 40 38 25 f1 ba 3e 50 40 a5 2b 6d 62 73 2e 61 cb 87 c9
When use "git submodule update --init --recursive" command to get the full repo, the libspdm code and its submodules will download twice.
The files in SPDM-Responder-Validator/libspdm directory are not necessary to build the spdm-emu executable files.
I built emu with below command -
cmake -DARCH=x64 -DTOOLCHAIN=GCC -DTARGET=Release -DCRYPTO=mbedtls ..
make copy_sample_key
make -j
/dev/shm/spdm-emu/build/bin# ./spdm_responder_emu > resp_log
free(): invalid next size (normal)
Aborted (core dumped)
/dev/shm/spdm-emu/build/bin# ./spdm_requester_emu > req_log
Responder Aborted and dumped the core. attached the logs for both req/resp.
Thanks,
Manish
logs.zip
Because spdm_version_number_t have changed, the build error is found.
[ 89%] Building C object spdm_emu/spdm_requester_emu/CMakeFiles/spdm_requester_emu.dir/spdm_requester.c.obj
spdm_requester.c
C:\mywork\code\spdm-emu\spdm_emu\spdm_requester_emu\spdm_requester.c(143): error C2224: left of '.major_version' must have struct/union type
C:\mywork\code\spdm-emu\spdm_emu\spdm_requester_emu\spdm_requester.c(144): error C2224: left of '.minor_version' must have struct/union type
C:\mywork\code\spdm-emu\spdm_emu\spdm_requester_emu\spdm_requester.c(145): error C2224: left of '.alpha' must have struct/union type
C:\mywork\code\spdm-emu\spdm_emu\spdm_requester_emu\spdm_requester.c(146): error C2224: left of '.update_version_number' must have struct/union type
C:\mywork\code\spdm-emu\spdm_emu\spdm_requester_emu\spdm_requester.c(155): error C2224: left of '.major_version' must have struct/union type
C:\mywork\code\spdm-emu\spdm_emu\spdm_requester_emu\spdm_requester.c(157): error C2224: left of '.minor_version' must have struct/union type
C:\mywork\code\spdm-emu\spdm_emu\spdm_requester_emu\spdm_requester.c(159): error C2224: left of '.alpha' must have struct/union type
C:\mywork\code\spdm-emu\spdm_emu\spdm_requester_emu\spdm_requester.c(160): error C2224: left of '.update_version_number' must have struct/union type
Because the code is still old and still use the struct. We should update the code.
spdm_version.major_version = (m_use_version >> 4) & 0xF;
spdm_version.minor_version = m_use_version & 0xF;
spdm_version.alpha = 0;
spdm_version.update_version_number = 0;
Current CI only covers both trans_size 42.
We need cross add cross check:
This can be done after DMTF/libspdm#1237
I see that currently all the transport type is compiled, and no control knob to remove the PCI_DOE or MCTP
would be good if we can provide that in spdm_lib_config.h
When running the default setting of the spdm emulator, it appears that spdm runs the SPDM_GET_MEASUREMENTS command for each certificate in the slot id (MeasOp=0x00 through MeasOp=0xfe). However, for the majority of the get_measurement operations, the responder returns the SPDM_ERROR message (i.e. lines 52, 54, 56).
41 (1664917952) MCTP(5) REQ->RSP SPDM(12, 0xe0) SPDM_GET_MEASUREMENTS (Attr=0x00(), MeasOp=0x00(TotalNum))
42 (1664917952) MCTP(5) RSP->REQ SPDM(12, 0x60) SPDM_MEASUREMENTS (TotalMeasIndex=0x07)
43 (1664917952) MCTP(5) REQ->RSP SPDM(12, 0xe0) SPDM_GET_MEASUREMENTS (Attr=0x00(), MeasOp=0x01)
44 (1664917952) MCTP(5) RSP->REQ SPDM(12, 0x60) SPDM_MEASUREMENTS (NumOfBlocks=0x1, MeasRecordLen=0x47)
45 (1664917952) MCTP(5) REQ->RSP SPDM(12, 0xe0) SPDM_GET_MEASUREMENTS (Attr=0x00(), MeasOp=0x02)
46 (1664917952) MCTP(5) RSP->REQ SPDM(12, 0x60) SPDM_MEASUREMENTS (NumOfBlocks=0x1, MeasRecordLen=0x47)
47 (1664917952) MCTP(5) REQ->RSP SPDM(12, 0xe0) SPDM_GET_MEASUREMENTS (Attr=0x00(), MeasOp=0x03)
48 (1664917952) MCTP(5) RSP->REQ SPDM(12, 0x60) SPDM_MEASUREMENTS (NumOfBlocks=0x1, MeasRecordLen=0x47)
49 (1664917952) MCTP(5) REQ->RSP SPDM(12, 0xe0) SPDM_GET_MEASUREMENTS (Attr=0x00(), MeasOp=0x04)
50 (1664917952) MCTP(5) RSP->REQ SPDM(12, 0x60) SPDM_MEASUREMENTS (NumOfBlocks=0x1, MeasRecordLen=0x47)
51 (1664917952) MCTP(5) REQ->RSP SPDM(12, 0xe0) SPDM_GET_MEASUREMENTS (Attr=0x00(), MeasOp=0x05)
52 (1664917952) MCTP(5) RSP->REQ SPDM(12, 0x7f) SPDM_ERROR (ErrCode=0x01, ErrData=0x00)
53 (1664917952) MCTP(5) REQ->RSP SPDM(12, 0xe0) SPDM_GET_MEASUREMENTS (Attr=0x00(), MeasOp=0x06)
54 (1664917952) MCTP(5) RSP->REQ SPDM(12, 0x7f) SPDM_ERROR (ErrCode=0x01, ErrData=0x00)
55 (1664917952) MCTP(5) REQ->RSP SPDM(12, 0xe0) SPDM_GET_MEASUREMENTS (Attr=0x00(), MeasOp=0x07)
56 (1664917952) MCTP(5) RSP->REQ SPDM(12, 0x7f) SPDM_ERROR (ErrCode=0x01, ErrData=0x00)
I have a few concerns regarding this issue. What is ErrCode 0x01 and why is the responder returning the SPDM_ERROR message? Also, based on my understanding of the SPDM spec, the protocol should be able to retrieve a specific measurement in the slot id. Is there a command in the user tools to do this, and if not, is there a reason why the emulator retrieves all of the measurements?
From the help message, spdm_requester_emu --cap support 'CACHE', 'MEAS_NO_SIG', 'MEAS_SIG', 'MEAS_FRESH', 'PSK_WITH_CONTEXT' those flags, but when we use those type, it directly report unsupported flag. we need to make the help message and the code behavior to align.
spdm_requester_emu [--trans MCTP|PCI_DOE]
[--cap CACHE|CERT|CHAL|MEAS_NO_SIG|MEAS_SIG|MEAS_FRESH|ENCRYPT|MAC|MUT_AUTH|KEY_EX|PSK|PSK_WITH_CONTEXT|ENCAP|HBEAT|KEY_UPD|HANDSHAKE_IN_CLEAR|PUB_KEY_ID]
$ ./spdm_requester_emu --cap CACHE
spdm_requester_emu version 0.1
unsupported flag - CACHE
invalid --cap CACHE
[--meas_hash] is measurement hash algorithm. By default, SHA_512,SHA_384,SHA_256 is used.
but SHA_256 is missed in the following code.
spdm-emu/spdm_emu/spdm_emu_common/key.c
Lines 102 to 104 in 4e66a72
here also mentioned the default supported measurement hash algorithm.
https://github.com/DMTF/spdm-emu/blob/main/doc/spdm_emu.md
In libspdm_get_response_challenge_auth(), It seems that the code below might potentially cause unaligned access on certain CPUs.
*(uint16_t *)ptr = (uint16_t)spdm_context->local_context
.opaque_challenge_auth_rsp_size;
Not sure if there's any alignment assumption of the 'ptr' at this location by design.
Pointer m_spdm_context
returned from call to function spdm_client_init
at line 123 may be NULL and will be dereferenced at line 124.
spdm-emu/spdm_emu/spdm_device_attester_sample/spdm_device_attester_sample.c
Lines 123 to 124 in 40dc3da
In the testing, responder has set capabilities "not supporting" CHALLENGE.
However requester emu still send CHALLENGE command to responder.
When responder responds with an invalid request error, requester just end the communication.
Shouldn’t requester send the SPDM command base on responder supported capabilities/features?
When I try to build with the latest main I get the following error:
spdm-emu/libspdm/library/spdm_requester_lib/get_digests.c:206:8: error: extra tokens at end of #endif directive [-Werror=endif-labels]
#endif SPDM_ENABLE_CAPABILITY_CERT_CAP
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\spdm-emu\build\bin>spdm_responder_emu.exe --slot 0
spdm_responder_emu version 0.1
invalid --slot
The '--slot' in Line 44 does not match the '--slot_id' in Line 75, I think the '--slot' in Line 44 should be '--slot_id'.
spdm-emu/spdm_emu/spdm_emu_common/spdm_emu.c
Lines 75 to 77 in 868b4a6
spdm-emu/spdm_emu/spdm_emu_common/support.c
Lines 61 to 65 in aef708d
When an error occurs in the ftell function, it will return a negative value.
If the parameter of malloc function is negative, the memory request will fail.
Thanks for solving the SPDM-Responder-Validator issues below.
DMTF/SPDM-Responder-Validator#11
DMTF/SPDM-Responder-Validator#12
Would you help also update the submodule pointer for spdm_device_validator_sample to include the latest fixes?
Passing expression bytes_received
to append_pcap_packet_data
, which uses it as an offset.
bytes_received
is an uncertain value, which needs to be checked in advance.
spdm-emu/spdm_emu/spdm_emu_common/command.c
Lines 165 to 171 in 0bc64fb
Test at the commit 2c4ada8
Open one command prompt to run
C:\spdm-emu1011\build\bin>spdm_responder_emu.exe > responder.log
Open another command prompt to run
C:\spdm-emu1011\build\bin>spdm_requester_emu.exe > requester.log
check the 'requester.log', there is a fail at line 59 as following:
!!! VerifyCertificateChainData - FAIL (cert chain verify failed)!!!
Please refer to the attached 'requester.log'.
requester.log
.
Hi
I appreciated the spdm-emu project, but we want to integrate spdm-emu to openbmc project to do some evaluation on qemu,
So could you share any hint how to write a recipe to integrate spdm-emu into openbmc(maybe romulus or ast2600evb)?
And could you share how to build spdm-emu for static linking based on ARM_GCC toolchain?
Thanks
John
currently slot-id 0 is used to do key exchange. It may hide bug in the implementation that assume the slot-id 0 is used.
We need add the case to use non-0 slot-id for key exchange. E.g. slot id 1.
[ 80%] Building C object out/spdm_common_lib.out/CMakeFiles/spdm_common_lib.dir/libspdm_com_opaque_data.c.obj
libspdm_com_opaque_data.c
C:\Workspace\project\mine\spdm-emu\libspdm\library\spdm_common_lib\libspdm_com_opaque_data.c(396) : error C2220: the following warning is treated as an error
C:\Workspace\project\mine\spdm-emu\libspdm\library\spdm_common_lib\libspdm_com_opaque_data.c(396) : warning C4702: unreachable code
NMAKE : fatal error U1077: 'C:\PROGRA2\MIB0551\2019\BUILDT1\VC\Tools\MSVC\14281.293\bin\Hostx64\x64\cl.exe' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29333\bin\HostX64\x64\nmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29333\bin\HostX64\x64\nmake.exe"' : return code '0x2'
Stop.
If it works over SMBUS/I2C lines, could you please provide the patch so that it will be helpful for me to run that tool inside Raspberry PI 3 Model B+ and we should be able to send and receive data over SMBUS/I2C lines between requester and responder.
Line 27 parameter uint8_t *kp_ack_status
does not match the usage of line 49.
Maybe *kp_ack_status = PCI_IDE_KM_KP_ACK_STATUS_SUCCESS;
Because some variables redefine, emu build error:
mctp_send_receive.c
C:\mywork\code\spdm-emu\include\library/mctp_common_lib.h(31): error C2371: 'pldm_get_tid_request_t': redefinition; different basic types
C:\mywork\code\spdm-emu\libspdm\include\industry_standard/pldm.h(66): note: see declaration of 'pldm_get_tid_request_t'
C:\mywork\code\spdm-emu\include\library/mctp_common_lib.h(39): error C2371: 'pldm_get_tid_response_t': redefinition; different basic types
C:\mywork\code\spdm-emu\libspdm\include\industry_standard/pldm.h(74): note: see declaration of 'pldm_get_tid_response_t'
pci_doe_req_discovery.c
C:\mywork\code\spdm-emu\include\library/pci_doe_common_lib.h(26): error C2371: 'pci_doe_spdm_vendor_defined_request_t': redefinition; different basic types
C:\mywork\code\spdm-emu\libspdm\include\industry_standard/pcidoe.h(78): note: see declaration of 'pci_doe_spdm_vendor_defined_request_t'
C:\mywork\code\spdm-emu\include\library/pci_doe_common_lib.h(37): error C2371: 'pci_doe_spdm_vendor_defined_response_t': redefinition; different basic types
C:\mywork\code\spdm-emu\libspdm\include\industry_standard/pcidoe.h(94): note: see declaration of 'pci_doe_spdm_vendor_defined_response_t'
We should update the libspdm version and fix the build error.
related issue DMTF/libspdm#480
Test at the commit 2c4ada8
The line 248, 264, and 278 just handle the case when res = TRUE, I think we should also handle the other case when res = FALSE.
When read certificate fail, we should stop the communication between the requester and responder, maybe just like the following three lines sample code(bold text).
free(m_spdm_context);
m_spdm_context = NULL;
return NULL;
spdm-emu/spdm_emu/spdm_requester_emu/spdm_requester.c
Lines 244 to 292 in eea369c
Line 271, caps
is defined
Line 279, the address of caps is passed into function cxl_ide_km_query
, but in function cxl_ide_km_query
, the address of cap is not used.
Should caps
be initialized or should the &caps
parameter be removed from function cxl_ide_km_query
spdm-emu/spdm_emu/spdm_requester_emu/spdm_requester_pci_doe.c
Lines 271 to 287 in 95ece01
Hi,
I could not find any code changes as part of spdm-emu which can validate the newly added chunk mechanism feature. So any idea how to test the chunk feature?
Thanks in advance,
Best Regards
Ranjan
Current code didn't check return status of spdm_load_negotiated_state but logically spdm_load_negotiated_state could fail with some values left in spdm_context.
Maybe we could call spdm_load_negotiated_state immediately after spdm_init_context and re-init the context in case of load failures.
spdm_init_context(spdm_context);
if (m_load_state_file_name != NULL) {
if (spdm_load_negotiated_state(spdm_context, FALSE) != RETURN_SUCCESS) {
/* re-init spdm context */
spdm_init_context(spdm_context);
}
}
spdm_register_device_io_func(spdm_context, spdm_device_send_message,
spdm_device_receive_message);
return_status spdm_clear_negotiated_state(IN void *spdm_context)
Test at the commit 2c4ada8
[--cap CACHE|CERT|CHAL|MEAS_NO_SIG|MEAS_SIG|MEAS_FRESH|ENCRYPT|MAC|MUT_AUTH|KEY_EX|PSK|PSK_WITH_CONTEXT|ENCAP|HBEAT|KEY_UPD|HANDSHAKE_IN_CLEAR|PUB_KEY_ID]
[--cap] is capability flags. Multiple flags can be set together. Please use ',' for them.
Open one command prompt to run :
Fail scenario (There is a space after the comma)
C:\spdm-emu\build\bin>spdm_responder_emu.exe --cap CERT, CHAL
spdm_responder_emu version 0.1
cap - 0x00000002
invalid CHAL
Pass scenario (There is no any space after the comma)
C:\spdm-emu\build\bin>spdm_responder_emu.exe --cap CERT,CHAL
spdm_responder_emu version 0.1
cap - 0x00000006
context_size - 0x7080
Hi
At first, thanks a lot for this open project spdm-emu, this give me a good topic to study SPDM spec.
And recently I try to build spdm-emu for ARM_GCC,
my code is clone from "8b193c1 revision", and after run "cmake -DARCH=arm =DTOOLCHAIN=ARM_GCC -DARGET=Debug -DCRYPTO=openssl .."
I found a error as following, could you check this? thank you.
_spdm-emu/spdm_emu/spdm_requester_emu/spdm_requester.c:268:11: error: ‘SPDM_DATA_PEER_PUBLIC_ROOT_CERT’ undeclared (first use in this function); did you mean ‘SPDM_DATA_PEER_PUBLIC_ROOT_CERT_HASH’? 268 | SPDM_DATA_PEER_PUBLIC_ROOT_CERT, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | SPDM_DATA_PEER_PUBLIC_ROOT_CERT_HASH_
John
It may cause no-debug version crash.
spdm-emu/spdm_emu/spdm_requester_emu/spdm_requester_authentication.c
Lines 84 to 108 in fca95c2
Hi,
I am not pretty sure but these lines seem to verify the recent changes of allowing GET_DIGESTS/GET_CERTIFICATE after CHALLENGE.
Would you help take them out if they are not supposed to be part of a typical authentication procedure?
Thanks!
Issue from jyao1/openspdm#193
In SpdmServerConnectionStateCallback(), if connection state is SpdmConnectionStateNegotiated, a new SPDM_CERT_CHAIN will be allocated by ReadResponderPublicCertificateChain(), and then the allocated SPDM_CERT_CHAIN will be held in SpdmContext->LocalContext.LocalCertChainProvision.
That's a smart design but I didn't seem to see the code to free the newly allocated SPDM_CERT_CHAIN. Would you point me to where the buffer gets freed?
BTW, I think we don't need to compose the SPDM_CERT_CHAIN every time when the connection state reaches to Negotiated. We only need to recompose the SPDM_CERT_CHAIN only when the negotiated base hash algorithm changes.
client_socket
at line 50 may be lost at line 59 return false;
. I'm not 100% sure whether it is an issue.spdm-emu/spdm_emu/spdm_requester_emu/spdm_requester_emu.c
Lines 50 to 60 in 40dc3da
spdm-emu/spdm_emu/spdm_responder_emu/spdm_responder_emu.c
Lines 35 to 45 in 40dc3da
SPDM 1.2 spec define:
2 device may only have one physical channel, but they can have multiple virtual SPDM connections.
Each virtual SPDM connection should have one dedicate spdm_context.
spdm-emu can emulate such scenario.
Test at the commit 2c4ada8
Open one command prompt to run :
C:\spdm-emu\build\bin>spdm_responder_emu.exe --cap CACHE
spdm_responder_emu version 0.1
cap - 0x00000001
context_size - 0x7080
ASSERT: C:\spdm-emu\libspdm\library\spdm_common_lib\context_data.c(136): (*(uint32 *)data) & 0x00000002
libspdm_read_responder_root_public_certificate
function may change the value of data_size
to zero.data_size - sizeof(spdm_cert_chain_t) - hash_size
may be negative value.spdm-emu/spdm_emu/spdm_requester_emu/spdm_requester_spdm.c
Lines 318 to 325 in aef708d
data_size
will be zero.data1_size
may be zero. same issue.spdm-emu/spdm_emu/spdm_requester_emu/spdm_requester_spdm.c
Lines 339 to 347 in aef708d
*listen_socket
in Line 35.return false;
in Line 61, then the handle *listen_socket is lost.spdm-emu/spdm_emu/spdm_responder_emu/spdm_responder_emu.c
Lines 53 to 62 in 40dc3da
closesocket(*listen_socket);
before return false;
in Line 61.Example:
use the command:
spdm_requester_emu.exe --asym ECDSA_P521
and spdm_responder_emu.exe --asym ECDSA_P521
spdm_responder_emu version 0.1
asym - 0x00000100
.......
Platform port Receive command: 00 00 00 01
Platform port Receive transport_type: 00 00 00 01
Platform port Receive size: 00 00 00 31
Platform port Receive buffer:
05 11 e3 04 00 30 00 01 00 00 01 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 20 1b 00 03 20 06 00 04 20 0f 00 05 20 01 00
SpdmReceiveRequest[.] ...
SpdmReceiveRequest[0] (0x30):
0000: 11 e3 04 00 30 00 01 00 00 01 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0020: 02 20 1b 00 03 20 06 00 04 20 0f 00 05 20 01 00
SpdmSendResponse[0] ...
ASSERT: D:\Test\spdm-emu\libspdm\os_stub\spdm_device_secret_lib\cert.c(229): ((boolean)(0 == 1))
SPDM_ENABLE_CAPABILITY_XXX_CAP is compile time optimization switches. The URL for the code is
#define SPDM_ENABLE_CAPABILITY_CERT_CAP 1
#define SPDM_ENABLE_CAPABILITY_CHAL_CAP 1
#define SPDM_ENABLE_CAPABILITY_MEAS_CAP 1
#define SPDM_ENABLE_CAPABILITY_KEY_EX_CAP 1
#define SPDM_ENABLE_CAPABILITY_PSK_EX_CAP 1
in spdm-emu\libspdm\include\library\spdm_lib_config.h
When disable the SPDM_ENABLE_CAPABILITY_XXX_CAP ,some build errors were found.
I find it is because that spdm-emu call the wrong function when disable SPDM_ENABLE_CAPABILITY_XXX_CAP.
These function is not definition when disable SPDM_ENABLE_CAPABILITY_XXX_CAP.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.