3333#include " asylo/crypto/util/bytes.h"
3434#include " asylo/crypto/util/trivial_object_util.h"
3535#include " asylo/identity/additional_authenticated_data_generator.h"
36+ #include " asylo/identity/attestation/sgx/internal/intel_certs/qe_identity.h"
3637#include " asylo/identity/attestation/sgx/internal/intel_ecdsa_quote.h"
3738#include " asylo/identity/attestation/sgx/internal/mock_intel_architectural_enclave_interface.h"
3839#include " asylo/identity/attestation/sgx/sgx_intel_ecdsa_qe_remote_assertion_authority_config.pb.h"
4647#include " asylo/test/util/memory_matchers.h"
4748#include " asylo/test/util/proto_matchers.h"
4849#include " asylo/test/util/status_matchers.h"
50+ #include " asylo/util/error_codes.h"
4951#include " asylo/util/proto_parse_util.h"
5052#include " asylo/util/status.h"
5153#include " asylo/util/thread.h"
@@ -75,7 +77,9 @@ class SgxIntelEcdsaQeRemoteAssertionGeneratorTests : public testing::Test {
7577 EnclaveAssertionAuthorityConfig config;
7678 ASYLO_ASSERT_OK_AND_ASSIGN (
7779 config,
78- experimental::CreateSgxIntelEcdsaQeRemoteAssertionAuthorityConfig ());
80+ experimental::CreateSgxIntelEcdsaQeRemoteAssertionAuthorityConfig (
81+ sgx::GetFakePckCertificateChain (),
82+ ParseTextProtoOrDie (sgx::kIntelEcdsaQeIdentityTextproto )));
7983 valid_config_ = std::move (*config.mutable_config ());
8084 }
8185
@@ -130,6 +134,8 @@ TEST_F(SgxIntelEcdsaQeRemoteAssertionGeneratorTests,
130134
131135TEST_F (SgxIntelEcdsaQeRemoteAssertionGeneratorTests, InitializeWorksOnce) {
132136 EXPECT_FALSE (generator_.IsInitialized ());
137+ EXPECT_CALL (*mock_intel_enclaves_, SetPckCertificateChain (_))
138+ .WillOnce (Return (Status::OkStatus ()));
133139 EXPECT_THAT (generator_.Initialize (valid_config_), IsOk ());
134140 EXPECT_TRUE (generator_.IsInitialized ());
135141 EXPECT_THAT (generator_.Initialize (valid_config_),
@@ -163,6 +169,24 @@ TEST_F(SgxIntelEcdsaQeRemoteAssertionGeneratorTests,
163169 StatusIs (error::GoogleError::INVALID_ARGUMENT));
164170}
165171
172+ TEST_F (SgxIntelEcdsaQeRemoteAssertionGeneratorTests,
173+ InitializeFailsWhenSetPckCertificateChainFails) {
174+ EXPECT_CALL (*mock_intel_enclaves_, SetPckCertificateChain (_))
175+ .WillOnce (Return (Status (error::GoogleError::INTERNAL, " kaboom" )));
176+ EXPECT_THAT (generator_.Initialize (valid_config_),
177+ StatusIs (error::GoogleError::INTERNAL));
178+ }
179+
180+ TEST_F (SgxIntelEcdsaQeRemoteAssertionGeneratorTests,
181+ InitializeSetsPckCertificateChain) {
182+ auto expected_certs = sgx::GetFakePckCertificateChain ();
183+ EXPECT_CALL (
184+ *mock_intel_enclaves_,
185+ SetPckCertificateChain (EqualsProto (expected_certs)))
186+ .WillOnce (Return (Status::OkStatus ()));
187+ EXPECT_THAT (generator_.Initialize (valid_config_), IsOk ());
188+ }
189+
166190TEST_F (SgxIntelEcdsaQeRemoteAssertionGeneratorTests, IdentityType) {
167191 EXPECT_THAT (generator_.IdentityType (), Eq (CODE_IDENTITY));
168192}
@@ -174,6 +198,8 @@ TEST_F(SgxIntelEcdsaQeRemoteAssertionGeneratorTests, AuthorityType) {
174198
175199TEST_F (SgxIntelEcdsaQeRemoteAssertionGeneratorTests,
176200 CreateAssertionOfferSuccess) {
201+ EXPECT_CALL (*mock_intel_enclaves_, SetPckCertificateChain (_))
202+ .WillOnce (Return (Status::OkStatus ()));
177203 ASSERT_THAT (generator_.Initialize (valid_config_), IsOk ());
178204
179205 AssertionOffer assertion_offer;
@@ -192,6 +218,8 @@ TEST_F(SgxIntelEcdsaQeRemoteAssertionGeneratorTests,
192218}
193219
194220TEST_F (SgxIntelEcdsaQeRemoteAssertionGeneratorTests, CanGenerateSuccess) {
221+ EXPECT_CALL (*mock_intel_enclaves_, SetPckCertificateChain (_))
222+ .WillOnce (Return (Status::OkStatus ()));
195223 ASSERT_THAT (generator_.Initialize (valid_config_), IsOk ());
196224 AssertionRequest request;
197225 *request.mutable_description () = CreateValidAssertionDescription ();
@@ -207,6 +235,8 @@ TEST_F(SgxIntelEcdsaQeRemoteAssertionGeneratorTests,
207235
208236TEST_F (SgxIntelEcdsaQeRemoteAssertionGeneratorTests,
209237 CanGenerateFailsForIncompatibleDescription) {
238+ EXPECT_CALL (*mock_intel_enclaves_, SetPckCertificateChain (_))
239+ .WillOnce (Return (Status::OkStatus ()));
210240 ASSERT_THAT (generator_.Initialize (valid_config_), IsOk ());
211241 AssertionRequest request;
212242
@@ -232,6 +262,8 @@ TEST_F(SgxIntelEcdsaQeRemoteAssertionGeneratorTests, GenerateSucceeds) {
232262 expected_report_data.data .replace (sizeof (kDataSha256 ) + sizeof (kAadPurpose ),
233263 kAadUuid );
234264
265+ EXPECT_CALL (*mock_intel_enclaves_, SetPckCertificateChain (_))
266+ .WillOnce (Return (Status::OkStatus ()));
235267 ASSERT_THAT (generator_.Initialize (valid_config_), IsOk ());
236268 AssertionRequest request;
237269 *request.mutable_description () = CreateValidAssertionDescription ();
@@ -258,51 +290,6 @@ TEST_F(SgxIntelEcdsaQeRemoteAssertionGeneratorTests, GenerateSucceeds) {
258290 EXPECT_THAT (assertion.assertion (), ElementsAreArray (fake_quote));
259291}
260292
261- TEST_F (SgxIntelEcdsaQeRemoteAssertionGeneratorTests,
262- GenerateSucceedsWithUserSuppliedCertChain) {
263- SgxIntelEcdsaQeRemoteAssertionAuthorityConfig config;
264- auto cert_chain =
265- config.mutable_generator_info ()->mutable_pck_certificate_chain ();
266- *cert_chain = sgx::GetFakePckCertificateChain ();
267-
268- std::string expected_output_cert_chain;
269- for (const auto &cert : cert_chain->certificates ()) {
270- ASSERT_THAT (cert.format (), Eq (Certificate::X509_PEM));
271- absl::StrAppend (&expected_output_cert_chain, cert.data (), " \n " );
272- }
273-
274- std::string serialized_config;
275- ASSERT_TRUE (config.SerializeToString (&serialized_config));
276- EXPECT_THAT (generator_.Initialize (serialized_config), IsOk ());
277-
278- EXPECT_CALL (*mock_intel_enclaves_, GetQeTargetinfo ())
279- .WillOnce (Return (CreateFakeTargetInfo ()));
280- EXPECT_CALL (*mock_hardware_interface_, GetReport (_, _))
281- .WillOnce (Return (TrivialRandomObject<Report>()));
282-
283- sgx::IntelQeQuote input_quote;
284- RandomFillTrivialObject (&input_quote.header );
285- RandomFillTrivialObject (&input_quote.body );
286- auto fake_quote = TrivialRandomObject<UnsafeBytes<101 >>();
287- EXPECT_CALL (*mock_intel_enclaves_, GetQeQuote (_))
288- .WillOnce (Return (sgx::PackDcapQuote (input_quote)));
289-
290- AssertionRequest request;
291- *request.mutable_description () = CreateValidAssertionDescription ();
292-
293- Assertion assertion;
294- ASSERT_THAT (generator_.Generate (" user data" , request, &assertion), IsOk ());
295- sgx::IntelQeQuote output_quote;
296- ASYLO_ASSERT_OK_AND_ASSIGN (output_quote,
297- sgx::ParseDcapPackedQuote (assertion.assertion ()));
298-
299- ASSERT_THAT (output_quote.cert_data .qe_cert_data_type ,
300- Eq (::intel::sgx::qvl::constants::PCK_ID_PCK_CERT_CHAIN));
301- EXPECT_THAT (std::string (output_quote.cert_data .qe_cert_data .begin (),
302- output_quote.cert_data .qe_cert_data .end ()),
303- Eq (expected_output_cert_chain));
304- }
305-
306293TEST_F (SgxIntelEcdsaQeRemoteAssertionGeneratorTests,
307294 GenerateFailsIfNotInitialized) {
308295 ASSERT_FALSE (generator_.IsInitialized ());
@@ -314,6 +301,8 @@ TEST_F(SgxIntelEcdsaQeRemoteAssertionGeneratorTests,
314301
315302TEST_F (SgxIntelEcdsaQeRemoteAssertionGeneratorTests,
316303 GenerateFailsForIncompatibleDescription) {
304+ EXPECT_CALL (*mock_intel_enclaves_, SetPckCertificateChain (_))
305+ .WillOnce (Return (Status::OkStatus ()));
317306 ASSERT_THAT (generator_.Initialize (valid_config_), IsOk ());
318307 AssertionRequest request;
319308 Assertion assertion;
@@ -335,6 +324,9 @@ TEST_F(SgxIntelEcdsaQeRemoteAssertionGeneratorTests,
335324 InitializeSucceedsOnceFromMultipleThreads) {
336325 constexpr int kNumThreads = 10 ;
337326
327+ EXPECT_CALL (*mock_intel_enclaves_, SetPckCertificateChain (_))
328+ .WillOnce (Return (Status::OkStatus ()));
329+
338330 std::atomic<int > success_count (0 );
339331 std::vector<Thread> threads;
340332 threads.reserve (kNumThreads );
0 commit comments