7
7
#include "spdm_unit_test.h"
8
8
#include "internal/libspdm_responder_lib.h"
9
9
10
+ #if defined(_WIN32 ) || (defined(__clang__ ) && (defined (LIBSPDM_CPU_AARCH64 ) || \
11
+ defined(LIBSPDM_CPU_ARM )))
12
+ #else
13
+ #include <fcntl.h>
14
+ #include <unistd.h>
15
+ #include <sys/stat.h>
16
+ #endif
17
+
10
18
#if LIBSPDM_ENABLE_CAPABILITY_SET_CERT_CAP
11
19
12
20
extern bool g_in_trusted_environment ;
@@ -760,6 +768,126 @@ void libspdm_test_responder_set_cetificate_rsp_case9(void **state)
760
768
free (cert_chain );
761
769
free (m_libspdm_set_certificate_request );
762
770
}
771
+
772
+ /**
773
+ * Test 10: receives a valid SET_CERTIFICATE request message from Requester to erase cert in slot_id:1 with session
774
+ * Expected Behavior: produces a valid SET_CERTIFICATE_RSP response message
775
+ **/
776
+ void libspdm_test_responder_set_cetificate_rsp_case10 (void * * state )
777
+ {
778
+ libspdm_return_t status ;
779
+ libspdm_test_context_t * spdm_test_context ;
780
+ libspdm_context_t * spdm_context ;
781
+ size_t response_size ;
782
+ uint8_t response [LIBSPDM_MAX_SPDM_MSG_SIZE ];
783
+ spdm_set_certificate_response_t * spdm_response ;
784
+ spdm_set_certificate_request_t * m_libspdm_set_certificate_request ;
785
+
786
+ libspdm_session_info_t * session_info ;
787
+ uint32_t session_id ;
788
+ uint8_t slot_id ;
789
+ #if defined(_WIN32 ) || (defined(__clang__ ) && (defined (LIBSPDM_CPU_AARCH64 ) || \
790
+ defined(LIBSPDM_CPU_ARM )))
791
+ FILE * fp_out ;
792
+ #else
793
+ int64_t fp_out ;
794
+ struct stat file_stat ;
795
+ #endif
796
+ size_t cert_file_size ;
797
+
798
+ char file_name [] = "slot_id_0_cert_chain.der" ;
799
+ slot_id = 1 ;
800
+
801
+ spdm_test_context = * state ;
802
+ spdm_context = spdm_test_context -> spdm_context ;
803
+ spdm_test_context -> case_id = 0xA ;
804
+ spdm_context -> connection_info .version = SPDM_MESSAGE_VERSION_13 <<
805
+ SPDM_VERSION_NUMBER_SHIFT_BIT ;
806
+ /*responset_state need to set normal*/
807
+ spdm_context -> response_state = LIBSPDM_RESPONSE_STATE_NORMAL ;
808
+ spdm_context -> connection_info .connection_state =
809
+ LIBSPDM_CONNECTION_STATE_AUTHENTICATED ;
810
+ spdm_context -> local_context .capability .flags |=
811
+ SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_SET_CERT_CAP ;
812
+ spdm_context -> local_context .capability .flags |=
813
+ SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MEAS_CAP_SIG ;
814
+ spdm_context -> connection_info .algorithm .base_hash_algo =
815
+ m_libspdm_use_hash_algo ;
816
+ spdm_context -> connection_info .algorithm .base_asym_algo =
817
+ m_libspdm_use_asym_algo ;
818
+
819
+ spdm_context -> local_context .algorithm .base_hash_algo =
820
+ m_libspdm_use_hash_algo ;
821
+ spdm_context -> local_context .algorithm .base_asym_algo =
822
+ m_libspdm_use_asym_algo ;
823
+
824
+ session_id = 0xFFFFFFFF ;
825
+ spdm_context -> latest_session_id = session_id ;
826
+ spdm_context -> last_spdm_request_session_id_valid = true;
827
+ spdm_context -> last_spdm_request_session_id = session_id ;
828
+ session_info = & spdm_context -> session_info [0 ];
829
+ libspdm_session_info_init (spdm_context , session_info , session_id , true);
830
+ libspdm_secured_message_set_session_state (
831
+ session_info -> secured_message_context ,
832
+ LIBSPDM_SESSION_STATE_ESTABLISHED );
833
+
834
+ m_libspdm_set_certificate_request = malloc (sizeof (spdm_set_certificate_request_t ));
835
+
836
+ m_libspdm_set_certificate_request -> header .spdm_version = SPDM_MESSAGE_VERSION_13 ;
837
+ m_libspdm_set_certificate_request -> header .request_response_code = SPDM_SET_CERTIFICATE ;
838
+ m_libspdm_set_certificate_request -> header .param1 = slot_id |
839
+ SPDM_SET_CERTIFICATE_REQUEST_ATTRIBUTES_ERASE ;
840
+ m_libspdm_set_certificate_request -> header .param2 = 0 ;
841
+
842
+ size_t m_libspdm_set_certificate_request_size = sizeof (spdm_set_certificate_request_t );
843
+
844
+ response_size = sizeof (response );
845
+ status = libspdm_get_response_set_certificate (spdm_context ,
846
+ m_libspdm_set_certificate_request_size ,
847
+ m_libspdm_set_certificate_request ,
848
+ & response_size , response );
849
+ assert_int_equal (status , LIBSPDM_STATUS_SUCCESS );
850
+ assert_int_equal (response_size , sizeof (spdm_set_certificate_response_t ));
851
+ spdm_response = (void * )response ;
852
+ assert_int_equal (spdm_response -> header .request_response_code ,
853
+ SPDM_SET_CERTIFICATE_RSP );
854
+ assert_int_equal (spdm_response -> header .param1 , slot_id );
855
+
856
+ /*change the file name, for example: slot_id_1_cert_chain.der*/
857
+ file_name [8 ] = (char )(slot_id + '0' );
858
+
859
+ #if defined(_WIN32 ) || (defined(__clang__ ) && (defined (LIBSPDM_CPU_AARCH64 ) || \
860
+ defined(LIBSPDM_CPU_ARM )))
861
+ if ((fp_out = fopen (file_name , "r" )) == NULL ) {
862
+ printf ("Unable to open file %s\n" , file_name );
863
+ assert_false (true);
864
+ }
865
+
866
+ /*check the cert is erased*/
867
+ fseek (fp_out , 0 , SEEK_END );
868
+ cert_file_size = ftell (fp_out );
869
+ assert_int_equal (cert_file_size , 0 );
870
+
871
+ fclose (fp_out );
872
+ #else
873
+ if ((fp_out = open (file_name , O_RDONLY )) == -1 ) {
874
+ printf ("Unable to open file %s\n" , file_name );
875
+ assert_false (true);
876
+ }
877
+
878
+ if (fstat (fp_out , & file_stat ) != 0 ) {
879
+ assert_false (true);
880
+ }
881
+
882
+ cert_file_size = file_stat .st_size ;
883
+ assert_int_equal (cert_file_size , 0 );
884
+
885
+ close (fp_out );
886
+ #endif
887
+
888
+ free (m_libspdm_set_certificate_request );
889
+ }
890
+
763
891
libspdm_test_context_t m_libspdm_responder_set_certificate_rsp_test_context = {
764
892
LIBSPDM_TEST_CONTEXT_VERSION ,
765
893
false,
@@ -786,6 +914,8 @@ int libspdm_responder_set_certificate_rsp_test_main(void)
786
914
cmocka_unit_test (libspdm_test_responder_set_cetificate_rsp_case8 ),
787
915
/* Error Case for set_certificate to slot_id:1 without session and without trusted environment */
788
916
cmocka_unit_test (libspdm_test_responder_set_cetificate_rsp_case9 ),
917
+ /* Success Case for erase certificate to slot_id:1 with session*/
918
+ cmocka_unit_test (libspdm_test_responder_set_cetificate_rsp_case10 ),
789
919
};
790
920
791
921
libspdm_setup_test_context (& m_libspdm_responder_set_certificate_rsp_test_context );
0 commit comments