| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/cert/internal/path_builder.h" | 5 #include "net/cert/internal/path_builder.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <unordered_set> | 8 #include <unordered_set> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 CertPathBuilder::ResultPath::ResultPath() = default; | 513 CertPathBuilder::ResultPath::ResultPath() = default; |
| 514 CertPathBuilder::ResultPath::~ResultPath() = default; | 514 CertPathBuilder::ResultPath::~ResultPath() = default; |
| 515 | 515 |
| 516 bool CertPathBuilder::ResultPath::IsValid() const { | 516 bool CertPathBuilder::ResultPath::IsValid() const { |
| 517 return path.GetTrustedCert() && !errors.ContainsHighSeverityErrors(); | 517 return path.GetTrustedCert() && !errors.ContainsHighSeverityErrors(); |
| 518 } | 518 } |
| 519 | 519 |
| 520 CertPathBuilder::Result::Result() = default; | 520 CertPathBuilder::Result::Result() = default; |
| 521 CertPathBuilder::Result::~Result() = default; | 521 CertPathBuilder::Result::~Result() = default; |
| 522 | 522 |
| 523 bool CertPathBuilder::Result::HasValidPath() const { |
| 524 return GetBestValidPath() != nullptr; |
| 525 } |
| 526 |
| 523 const CertPathBuilder::ResultPath* CertPathBuilder::Result::GetBestValidPath() | 527 const CertPathBuilder::ResultPath* CertPathBuilder::Result::GetBestValidPath() |
| 524 const { | 528 const { |
| 525 DCHECK((paths.empty() && best_result_index == 0) || | 529 DCHECK((paths.empty() && best_result_index == 0) || |
| 526 best_result_index < paths.size()); | 530 best_result_index < paths.size()); |
| 527 | 531 |
| 528 if (best_result_index >= paths.size()) | 532 if (best_result_index >= paths.size()) |
| 529 return nullptr; | 533 return nullptr; |
| 530 | 534 |
| 531 const ResultPath* result_path = paths[best_result_index].get(); | 535 const ResultPath* result_path = paths[best_result_index].get(); |
| 532 if (result_path->IsValid()) | 536 if (result_path->IsValid()) |
| 533 return result_path; | 537 return result_path; |
| 534 | 538 |
| 535 return nullptr; | 539 return nullptr; |
| 536 } | 540 } |
| 537 | 541 |
| 538 bool CertPathBuilder::Result::HasValidPath() const { | 542 void CertPathBuilder::Result::Clear() { |
| 539 return GetBestValidPath() != nullptr; | 543 paths.clear(); |
| 544 best_result_index = 0; |
| 540 } | 545 } |
| 541 | 546 |
| 542 CertPathBuilder::CertPathBuilder(scoped_refptr<ParsedCertificate> cert, | 547 CertPathBuilder::CertPathBuilder(scoped_refptr<ParsedCertificate> cert, |
| 543 TrustStore* trust_store, | 548 TrustStore* trust_store, |
| 544 const SignaturePolicy* signature_policy, | 549 const SignaturePolicy* signature_policy, |
| 545 const der::GeneralizedTime& time, | 550 const der::GeneralizedTime& time, |
| 546 KeyPurpose key_purpose, | 551 KeyPurpose key_purpose, |
| 547 Result* result) | 552 Result* result) |
| 548 : cert_path_iter_(new CertPathIter(std::move(cert), trust_store)), | 553 : cert_path_iter_(new CertPathIter(std::move(cert), trust_store)), |
| 549 signature_policy_(signature_policy), | 554 signature_policy_(signature_policy), |
| 550 time_(time), | 555 time_(time), |
| 551 key_purpose_(key_purpose), | 556 key_purpose_(key_purpose), |
| 552 next_state_(STATE_NONE), | 557 next_state_(STATE_NONE), |
| 553 out_result_(result) { | 558 out_result_(result) { |
| 559 result->Clear(); |
| 554 // The TrustStore also implements the CertIssuerSource interface. | 560 // The TrustStore also implements the CertIssuerSource interface. |
| 555 AddCertIssuerSource(trust_store); | 561 AddCertIssuerSource(trust_store); |
| 556 } | 562 } |
| 557 | 563 |
| 558 CertPathBuilder::~CertPathBuilder() {} | 564 CertPathBuilder::~CertPathBuilder() {} |
| 559 | 565 |
| 560 void CertPathBuilder::AddCertIssuerSource( | 566 void CertPathBuilder::AddCertIssuerSource( |
| 561 CertIssuerSource* cert_issuer_source) { | 567 CertIssuerSource* cert_issuer_source) { |
| 562 cert_path_iter_->AddCertIssuerSource(cert_issuer_source); | 568 cert_path_iter_->AddCertIssuerSource(cert_issuer_source); |
| 563 } | 569 } |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 624 | 630 |
| 625 void CertPathBuilder::AddResultPath(std::unique_ptr<ResultPath> result_path) { | 631 void CertPathBuilder::AddResultPath(std::unique_ptr<ResultPath> result_path) { |
| 626 // TODO(mattm): set best_result_index based on number or severity of errors. | 632 // TODO(mattm): set best_result_index based on number or severity of errors. |
| 627 if (result_path->IsValid()) | 633 if (result_path->IsValid()) |
| 628 out_result_->best_result_index = out_result_->paths.size(); | 634 out_result_->best_result_index = out_result_->paths.size(); |
| 629 // TODO(mattm): add flag to only return a single path or all attempted paths? | 635 // TODO(mattm): add flag to only return a single path or all attempted paths? |
| 630 out_result_->paths.push_back(std::move(result_path)); | 636 out_result_->paths.push_back(std::move(result_path)); |
| 631 } | 637 } |
| 632 | 638 |
| 633 } // namespace net | 639 } // namespace net |
| OLD | NEW |