Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(399)

Side by Side Diff: net/cert/internal/trust_store_in_memory.cc

Issue 2832703002: Allow the TrustStore interface to return matching intermediates, and identify distrusted certs. (Closed)
Patch Set: address comments Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/trust_store_in_memory.h" 5 #include "net/cert/internal/trust_store_in_memory.h"
6 6
7 namespace net { 7 namespace net {
8 8
9 TrustStoreInMemory::TrustStoreInMemory() = default; 9 TrustStoreInMemory::TrustStoreInMemory() = default;
10 TrustStoreInMemory::~TrustStoreInMemory() = default; 10 TrustStoreInMemory::~TrustStoreInMemory() = default;
11 11
12 void TrustStoreInMemory::Clear() { 12 void TrustStoreInMemory::Clear() {
13 anchors_.clear(); 13 entries_.clear();
14 } 14 }
15 15
16 void TrustStoreInMemory::AddTrustAnchor(scoped_refptr<TrustAnchor> anchor) { 16 void TrustStoreInMemory::AddTrustAnchor(scoped_refptr<ParsedCertificate> cert) {
17 // TODO(mattm): should this check for duplicate anchors? 17 AddCertificate(std::move(cert), CertificateTrust::ForTrustAnchor());
18 anchors_.insert(std::make_pair(anchor->normalized_subject().AsStringPiece(),
19 std::move(anchor)));
20 } 18 }
21 19
22 void TrustStoreInMemory::FindTrustAnchorsForCert( 20 void TrustStoreInMemory::AddTrustAnchorWithConstraints(
23 const scoped_refptr<ParsedCertificate>& cert, 21 scoped_refptr<ParsedCertificate> cert) {
24 TrustAnchors* matches) const { 22 AddCertificate(std::move(cert),
25 auto range = anchors_.equal_range(cert->normalized_issuer().AsStringPiece()); 23 CertificateTrust::ForTrustAnchorEnforcingConstraints());
26 for (auto it = range.first; it != range.second; ++it)
27 matches->push_back(it->second);
28 } 24 }
29 25
30 bool TrustStoreInMemory::Contains(const TrustAnchor* anchor) const { 26 void TrustStoreInMemory::AddDistrustedCertificateForTest(
31 for (const auto& it : anchors_) { 27 scoped_refptr<ParsedCertificate> cert) {
32 if (anchor == it.second.get()) 28 AddCertificate(std::move(cert), CertificateTrust::ForDistrusted());
29 }
30
31 void TrustStoreInMemory::SyncGetIssuersOf(const ParsedCertificate* cert,
32 ParsedCertificateList* issuers) {
33 auto range = entries_.equal_range(cert->normalized_issuer().AsStringPiece());
34 for (auto it = range.first; it != range.second; ++it)
35 issuers->push_back(it->second.cert);
36 }
37
38 void TrustStoreInMemory::GetTrust(const scoped_refptr<ParsedCertificate>& cert,
39 CertificateTrust* trust) const {
40 auto range = entries_.equal_range(cert->normalized_subject().AsStringPiece());
41 for (auto it = range.first; it != range.second; ++it) {
42 if (cert.get() == it->second.cert.get() ||
43 cert->der_cert() == it->second.cert->der_cert()) {
44 *trust = it->second.trust;
45 // NOTE: ambiguity when there are duplicate entries.
46 return;
47 }
48 }
49 *trust = CertificateTrust::ForUnspecified();
50 }
51
52 bool TrustStoreInMemory::Contains(const ParsedCertificate* cert) const {
53 for (const auto& it : entries_) {
54 if (cert->der_cert() == it.second.cert->der_cert())
33 return true; 55 return true;
34 } 56 }
35 return false; 57 return false;
36 } 58 }
37 59
60 TrustStoreInMemory::Entry::Entry() = default;
61 TrustStoreInMemory::Entry::Entry(const Entry& other) = default;
62 TrustStoreInMemory::Entry::~Entry() = default;
63
64 void TrustStoreInMemory::AddCertificate(scoped_refptr<ParsedCertificate> cert,
65 const CertificateTrust& trust) {
66 Entry entry;
67 entry.cert = std::move(cert);
68 entry.trust = trust;
69
70 // TODO(mattm): should this check for duplicate certificates?
71 entries_.insert(
72 std::make_pair(entry.cert->normalized_subject().AsStringPiece(), entry));
73 }
74
38 } // namespace net 75 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698