@@ -458,6 +458,50 @@ void DefaultDACVerifier::VerifyAttestationInformation(const DeviceAttestationVer
458
458
VerifyOrExit (attestationError == AttestationVerificationResult::kSuccess , attestationError = attestationError);
459
459
}
460
460
461
+ {
462
+ uint8_t issuerBuf[kMaxCertificateDistinguishedNameLength ] = { 0 };
463
+ MutableByteSpan paaIssuer (issuerBuf);
464
+ MutableByteSpan paiIssuer (issuerBuf);
465
+ MutableByteSpan dacIssuer (issuerBuf);
466
+ uint8_t akidBuf[kAuthorityKeyIdentifierLength ];
467
+ MutableByteSpan akid (akidBuf);
468
+ uint8_t serialNumberBuf[kMaxCertificateSerialNumberLength ];
469
+ MutableByteSpan serialNumber (serialNumberBuf);
470
+
471
+ VerifyOrExit (ExtractIssuerFromX509Cert (paaDerBuffer, paaIssuer) == CHIP_NO_ERROR,
472
+ attestationError = AttestationVerificationResult::kPaaFormatInvalid );
473
+ VerifyOrExit (ExtractAKIDFromX509Cert (paaDerBuffer, akid) == CHIP_NO_ERROR,
474
+ attestationError = AttestationVerificationResult::kPaaFormatInvalid );
475
+ VerifyOrExit (ExtractSerialNumberFromX509Cert (paaDerBuffer, serialNumber) == CHIP_NO_ERROR,
476
+ attestationError = AttestationVerificationResult::kPaaFormatInvalid );
477
+
478
+ attestationError = IsCertificateRevoked (true , paaVidPid, paaIssuer, akid, serialNumber);
479
+ VerifyOrExit (attestationError == AttestationVerificationResult::kSuccess ,
480
+ attestationError = AttestationVerificationResult::kPaaRevoked );
481
+
482
+ VerifyOrExit (ExtractIssuerFromX509Cert (info.paiDerBuffer , paiIssuer) == CHIP_NO_ERROR,
483
+ attestationError = AttestationVerificationResult::kPaiFormatInvalid );
484
+ VerifyOrExit (ExtractAKIDFromX509Cert (info.paiDerBuffer , akid) == CHIP_NO_ERROR,
485
+ attestationError = AttestationVerificationResult::kPaiFormatInvalid );
486
+ VerifyOrExit (ExtractSerialNumberFromX509Cert (info.paiDerBuffer , serialNumber) == CHIP_NO_ERROR,
487
+ attestationError = AttestationVerificationResult::kPaiFormatInvalid );
488
+
489
+ attestationError = IsCertificateRevoked (false , paiVidPid, paiIssuer, akid, serialNumber);
490
+ VerifyOrExit (attestationError == AttestationVerificationResult::kSuccess ,
491
+ attestationError = AttestationVerificationResult::kPaiRevoked );
492
+
493
+ VerifyOrExit (ExtractIssuerFromX509Cert (info.dacDerBuffer , dacIssuer) == CHIP_NO_ERROR,
494
+ attestationError = AttestationVerificationResult::kDacFormatInvalid );
495
+ VerifyOrExit (ExtractAKIDFromX509Cert (info.dacDerBuffer , akid) == CHIP_NO_ERROR,
496
+ attestationError = AttestationVerificationResult::kDacFormatInvalid );
497
+ VerifyOrExit (ExtractSerialNumberFromX509Cert (info.dacDerBuffer , serialNumber) == CHIP_NO_ERROR,
498
+ attestationError = AttestationVerificationResult::kDacFormatInvalid );
499
+
500
+ attestationError = IsCertificateRevoked (false , dacVidPid, dacIssuer, akid, serialNumber);
501
+ VerifyOrExit (attestationError == AttestationVerificationResult::kSuccess ,
502
+ attestationError = AttestationVerificationResult::kDacRevoked );
503
+ }
504
+
461
505
exit :
462
506
onCompletion->mCall (onCompletion->mContext , info, attestationError);
463
507
}
@@ -607,6 +651,15 @@ CHIP_ERROR DefaultDACVerifier::VerifyNodeOperationalCSRInformation(const ByteSpa
607
651
return CHIP_NO_ERROR;
608
652
}
609
653
654
+ AttestationVerificationResult DefaultDACVerifier::IsCertificateRevoked (bool isPaa, AttestationCertVidPid vidPidUnderTest,
655
+ ByteSpan issuer, ByteSpan authorityKeyId,
656
+ ByteSpan serialNumber)
657
+ {
658
+ VerifyOrReturnError (mRevocationSet != nullptr , AttestationVerificationResult::kNotImplemented );
659
+
660
+ return mRevocationSet ->IsCertificateRevoked (isPaa, vidPidUnderTest, issuer, authorityKeyId, serialNumber);
661
+ }
662
+
610
663
bool CsaCdKeysTrustStore::IsCdTestKey (const ByteSpan & kid) const
611
664
{
612
665
return kid.data_equal (ByteSpan{ gTestCdPubkeyKid });
@@ -683,9 +736,9 @@ const AttestationTrustStore * GetTestAttestationTrustStore()
683
736
return &gTestAttestationTrustStore .get ();
684
737
}
685
738
686
- DeviceAttestationVerifier * GetDefaultDACVerifier (const AttestationTrustStore * paaRootStore)
739
+ DeviceAttestationVerifier * GetDefaultDACVerifier (const AttestationTrustStore * paaRootStore, const RevocationSet * revocationSet )
687
740
{
688
- static DefaultDACVerifier defaultDACVerifier{ paaRootStore };
741
+ static DefaultDACVerifier defaultDACVerifier{ paaRootStore, revocationSet };
689
742
690
743
return &defaultDACVerifier;
691
744
}
0 commit comments