@@ -195,8 +195,7 @@ static void TestDACVerifierExample_AttestationInfoVerification(nlTestSuite * inS
195
195
default_verifier->VerifyAttestationInformation (ByteSpan (), ByteSpan (), ByteSpan (), ByteSpan (), ByteSpan (), ByteSpan ());
196
196
NL_TEST_ASSERT (inSuite, attestation_result == AttestationVerificationResult::kNotImplemented );
197
197
198
- // Replace default verifier with example verifier
199
- DeviceAttestationVerifier * example_dac_verifier = GetDefaultDACVerifier ();
198
+ DeviceAttestationVerifier * example_dac_verifier = GetDefaultDACVerifier (GetTestAttestationTrustStore ());
200
199
NL_TEST_ASSERT (inSuite, example_dac_verifier != nullptr );
201
200
NL_TEST_ASSERT (inSuite, default_verifier != example_dac_verifier);
202
201
@@ -252,7 +251,7 @@ static void TestDACVerifierExample_CertDeclarationVerification(nlTestSuite * inS
252
251
CHIP_ERROR err = CHIP_NO_ERROR;
253
252
254
253
// Replace default verifier with example verifier
255
- DeviceAttestationVerifier * example_dac_verifier = GetDefaultDACVerifier ();
254
+ DeviceAttestationVerifier * example_dac_verifier = GetDefaultDACVerifier (GetTestAttestationTrustStore () );
256
255
NL_TEST_ASSERT (inSuite, example_dac_verifier != nullptr );
257
256
258
257
SetDeviceAttestationVerifier (example_dac_verifier);
@@ -295,6 +294,80 @@ static void TestDACVerifierExample_CertDeclarationVerification(nlTestSuite * inS
295
294
NL_TEST_ASSERT (inSuite, attestation_result == AttestationVerificationResult::kSuccess );
296
295
}
297
296
297
+ static void TestAttestationTrustStore (nlTestSuite * inSuite, void * inContext)
298
+ {
299
+ uint8_t kPaaFff1Start [] = { 0x30 , 0x82 , 0x01 , 0x99 , 0x30 , 0x82 , 0x01 , 0x3F , 0xA0 , 0x03 , 0x02 , 0x01 , 0x02 ,
300
+ 0x02 , 0x08 , 0x68 , 0x38 , 0x4F , 0xAB , 0xB9 , 0x19 , 0xFC , 0xDF , 0x30 , 0x0A , 0x06 ,
301
+ 0x08 , 0x2A , 0x86 , 0x48 , 0xCE , 0x3D , 0x04 , 0x03 , 0x02 , 0x30 , 0x1F , 0x31 };
302
+ uint8_t kPaaFff1Skid [] = { 0xEF , 0x18 , 0xE0 , 0xEC , 0xD4 , 0x66 , 0x04 , 0x34 , 0xDF , 0x0D ,
303
+ 0xBC , 0x91 , 0x1E , 0xD4 , 0x52 , 0x16 , 0x99 , 0x66 , 0x83 , 0x9F };
304
+
305
+ uint8_t kPaaFff2Start [] = { 0x30 , 0x82 , 0x01 , 0x9D , 0x30 , 0x82 , 0x01 , 0x42 , 0xA0 , 0x03 , 0x02 , 0x01 , 0x02 ,
306
+ 0x02 , 0x08 , 0x03 , 0x92 , 0xA7 , 0x65 , 0x5A , 0x3E , 0x6C , 0x77 , 0x30 , 0x0A , 0x06 ,
307
+ 0x08 , 0x2A , 0x86 , 0x48 , 0xCE , 0x3D , 0x04 , 0x03 , 0x02 , 0x30 , 0x1F , 0x31 };
308
+ uint8_t kPaaFff2Skid [] = { 0xE7 , 0xEF , 0xEA , 0xC3 , 0x33 , 0x5C , 0x5F , 0xD0 , 0xC3 , 0xE6 ,
309
+ 0x34 , 0x52 , 0x9F , 0x16 , 0x70 , 0x46 , 0xC4 , 0xBC , 0xA5 , 0x5C };
310
+
311
+ // SKID to trigger CHIP_ERROR_INVALID_ARGUMENT
312
+ uint8_t kPaaBadSkid1 [] = { 0xE7 , 0xEF , 0xEA , 0xC3 , 0x33 , 0x5C , 0xD0 , 0xC3 , 0xE6 , 0x34 ,
313
+ 0x52 , 0x9F , 0x16 , 0x70 , 0x46 , 0xC4 , 0xBC , 0xA5 , 0x5C };
314
+ ByteSpan kPaaBadSkidSpan1 { kPaaBadSkid1 };
315
+
316
+ // SKID to trigger CHIP_ERROR_INVALID_ARGUMENT
317
+ ByteSpan kPaaBadSkidSpan2 { nullptr , sizeof (kPaaFff2Skid ) };
318
+
319
+ // SKID to trigger CHIP_ERROR_CA_CERT_NOT_FOUND
320
+ uint8_t kPaaGoodSkidNotPresent [] = { 0xE7 , 0xEF , 0xEA , 0xC3 , 0x33 , 0x5C , 0x5F , 0xD0 , 0xC3 , 0xE6 ,
321
+ 0x34 , 0x52 , 0x9F , 0x16 , 0x70 , 0xFF , 0xFF , 0xBC , 0xA5 , 0x5C };
322
+
323
+ struct TestCase
324
+ {
325
+ ByteSpan skidSpan;
326
+ ByteSpan startSpan;
327
+ CHIP_ERROR expectedResult;
328
+ };
329
+
330
+ const TestCase kTestCases [] = {
331
+ { .skidSpan = ByteSpan{ kPaaFff1Skid }, .startSpan = ByteSpan{ kPaaFff1Start }, .expectedResult = CHIP_NO_ERROR },
332
+ { .skidSpan = ByteSpan{ kPaaFff2Skid }, .startSpan = ByteSpan{ kPaaFff2Start }, .expectedResult = CHIP_NO_ERROR },
333
+ { .skidSpan = ByteSpan{ kPaaFff2Skid },
334
+ .startSpan = ByteSpan{ kPaaFff2Start },
335
+ .expectedResult = CHIP_ERROR_BUFFER_TOO_SMALL },
336
+ { .skidSpan = kPaaBadSkidSpan1 , .startSpan = ByteSpan{}, .expectedResult = CHIP_ERROR_INVALID_ARGUMENT },
337
+ { .skidSpan = kPaaBadSkidSpan2 , .startSpan = ByteSpan{}, .expectedResult = CHIP_ERROR_INVALID_ARGUMENT },
338
+ { .skidSpan = ByteSpan{ kPaaGoodSkidNotPresent }, .startSpan = ByteSpan{}, .expectedResult = CHIP_ERROR_CA_CERT_NOT_FOUND },
339
+ };
340
+
341
+ const AttestationTrustStore * testAttestationTrustStore = GetTestAttestationTrustStore ();
342
+ NL_TEST_ASSERT (inSuite, testAttestationTrustStore != nullptr );
343
+
344
+ size_t testCaseIdx = 0 ;
345
+ for (const auto & testCase : kTestCases )
346
+ {
347
+ uint8_t buf[kMaxDERCertLength ];
348
+ MutableByteSpan paaCertSpan{ buf };
349
+ if (testCase.expectedResult == CHIP_ERROR_BUFFER_TOO_SMALL)
350
+ {
351
+ // Make the output much too small if checking for size handling
352
+ paaCertSpan = paaCertSpan.SubSpan (0 , 16 );
353
+ }
354
+
355
+ // Try to obtain cert
356
+ CHIP_ERROR result = testAttestationTrustStore->GetProductAttestationAuthorityCert (testCase.skidSpan , paaCertSpan);
357
+ NL_TEST_ASSERT (inSuite, result == testCase.expectedResult );
358
+
359
+ // In success cases, make sure the start of the cert matches expectation. Not using full certs
360
+ // to avoid repeating the known constants here.
361
+ if (testCase.expectedResult == CHIP_NO_ERROR)
362
+ {
363
+ NL_TEST_ASSERT (inSuite, paaCertSpan.size () > testCase.startSpan .size ());
364
+ paaCertSpan = paaCertSpan.SubSpan (0 , testCase.startSpan .size ());
365
+ NL_TEST_ASSERT (inSuite, paaCertSpan.data_equal (testCase.startSpan ) == true );
366
+ }
367
+ ++testCaseIdx;
368
+ }
369
+ }
370
+
298
371
/* *
299
372
* Set up the test suite.
300
373
*/
@@ -326,6 +399,7 @@ int TestDeviceAttestation_Teardown(void * inContext)
326
399
static const nlTest sTests [] = {
327
400
NL_TEST_DEF (" Test Example Device Attestation Credentials Providers" , TestDACProvidersExample_Providers),
328
401
NL_TEST_DEF (" Test Example Device Attestation Signature" , TestDACProvidersExample_Signature),
402
+ NL_TEST_DEF (" Test the 'for testing' Paa Root Store" , TestAttestationTrustStore),
329
403
NL_TEST_DEF (" Test Example Device Attestation Information Verification" , TestDACVerifierExample_AttestationInfoVerification),
330
404
NL_TEST_DEF (" Test Example Device Attestation Certification Declaration Verification" , TestDACVerifierExample_CertDeclarationVerification),
331
405
NL_TEST_SENTINEL ()
0 commit comments