| Index: components/cast_certificate/cast_crl.cc
|
| diff --git a/components/cast_certificate/cast_crl.cc b/components/cast_certificate/cast_crl.cc
|
| index 7efd90b127b60d4ec1804d31753ad81ea03e4681..94ecb1acfe9058abc658f4634372b1d1bb52eaa8 100644
|
| --- a/components/cast_certificate/cast_crl.cc
|
| +++ b/components/cast_certificate/cast_crl.cc
|
| @@ -62,13 +62,12 @@ class CastCRLTrustStore {
|
|
|
| CastCRLTrustStore() {
|
| // Initialize the trust store with the root certificate.
|
| - // TODO(ryanchung): Add official Cast CRL Root here
|
| - // scoped_refptr<net::ParsedCertificate> root = net::ParsedCertificate::
|
| - // net::ParsedCertificate::CreateFromCertificateData(
|
| - // kCastCRLRootCaDer, sizeof(kCastCRLRootCaDer),
|
| - // net::ParsedCertificate::DataSource::EXTERNAL_REFERENCE, {});
|
| - // CHECK(root);
|
| - // store_.AddTrustedCertificate(std::move(root));
|
| + scoped_refptr<net::ParsedCertificate> root =
|
| + net::ParsedCertificate::CreateFromCertificateData(
|
| + kCastCRLRootCaDer, sizeof(kCastCRLRootCaDer),
|
| + net::ParsedCertificate::DataSource::EXTERNAL_REFERENCE, {});
|
| + CHECK(root);
|
| + store_.AddTrustedCertificate(std::move(root));
|
| }
|
|
|
| net::TrustStore store_;
|
| @@ -101,6 +100,7 @@ std::unique_ptr<net::SignaturePolicy> CreateCastSignaturePolicy() {
|
| bool VerifyCRL(const Crl& crl,
|
| const TbsCrl& tbs_crl,
|
| const base::Time& time,
|
| + net::TrustStore* trust_store,
|
| net::der::GeneralizedTime* overall_not_after) {
|
| // Verify the trust of the CRL authority.
|
| scoped_refptr<net::ParsedCertificate> parsed_cert =
|
| @@ -136,9 +136,9 @@ bool VerifyCRL(const Crl& crl,
|
| return false;
|
| }
|
| net::CertPathBuilder::Result result;
|
| - net::CertPathBuilder path_builder(
|
| - parsed_cert.get(), &CastCRLTrustStore::Get(), signature_policy.get(),
|
| - verification_time, &result);
|
| + net::CertPathBuilder path_builder(parsed_cert.get(), trust_store,
|
| + signature_policy.get(), verification_time,
|
| + &result);
|
| net::CompletionStatus rv = path_builder.Run(base::Closure());
|
| DCHECK_EQ(rv, net::CompletionStatus::SYNC);
|
| if (!result.is_success() || result.paths.empty() ||
|
| @@ -298,10 +298,11 @@ bool CastCRLImpl::CheckRevocation(
|
| return true;
|
| }
|
|
|
| -} // namespace
|
| -
|
| +// Parses and verifies the CRL used to verify the revocation status of
|
| +// Cast device certificates.
|
| std::unique_ptr<CastCRL> ParseAndVerifyCRL(const std::string& crl_proto,
|
| - const base::Time& time) {
|
| + const base::Time& time,
|
| + net::TrustStore* trust_store) {
|
| CrlBundle crl_bundle;
|
| if (!crl_bundle.ParseFromString(crl_proto)) {
|
| LOG(ERROR) << "CRL - Binary could not be parsed.";
|
| @@ -317,7 +318,7 @@ std::unique_ptr<CastCRL> ParseAndVerifyCRL(const std::string& crl_proto,
|
| continue;
|
| }
|
| net::der::GeneralizedTime overall_not_after;
|
| - if (!VerifyCRL(crl, tbs_crl, time, &overall_not_after)) {
|
| + if (!VerifyCRL(crl, tbs_crl, time, trust_store, &overall_not_after)) {
|
| LOG(ERROR) << "CRL - Verification failed.";
|
| return nullptr;
|
| }
|
| @@ -327,14 +328,18 @@ std::unique_ptr<CastCRL> ParseAndVerifyCRL(const std::string& crl_proto,
|
| return nullptr;
|
| }
|
|
|
| -bool SetCRLTrustAnchorForTest(const std::string& cert) {
|
| - scoped_refptr<net::ParsedCertificate> anchor(
|
| - net::ParsedCertificate::CreateFromCertificateCopy(cert, {}));
|
| - if (!anchor)
|
| - return false;
|
| - CastCRLTrustStore::Get().Clear();
|
| - CastCRLTrustStore::Get().AddTrustedCertificate(std::move(anchor));
|
| - return true;
|
| +} // namespace
|
| +
|
| +std::unique_ptr<CastCRL> ParseAndVerifyCRL(const std::string& crl_proto,
|
| + const base::Time& time) {
|
| + return ParseAndVerifyCRL(crl_proto, time, &CastCRLTrustStore::Get());
|
| +}
|
| +
|
| +std::unique_ptr<CastCRL> ParseAndVerifyCRLForTest(
|
| + const std::string& crl_proto,
|
| + const base::Time& time,
|
| + net::TrustStore* trust_store) {
|
| + return ParseAndVerifyCRL(crl_proto, time, trust_store);
|
| }
|
|
|
| } // namespace cast_certificate
|
|
|