OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/test_root_certs.h" | 5 #include "net/cert/test_root_certs.h" |
6 | 6 |
7 #include <cert.h> | 7 #include <cert.h> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
(...skipping 25 matching lines...) Expand all Loading... |
36 | 36 |
37 // The original trust settings, before |certificate_| was manipulated to | 37 // The original trust settings, before |certificate_| was manipulated to |
38 // be a temporarily trusted root. | 38 // be a temporarily trusted root. |
39 CERTCertTrust trust_; | 39 CERTCertTrust trust_; |
40 | 40 |
41 DISALLOW_COPY_AND_ASSIGN(TrustEntry); | 41 DISALLOW_COPY_AND_ASSIGN(TrustEntry); |
42 }; | 42 }; |
43 | 43 |
44 TestRootCerts::TrustEntry::TrustEntry(CERTCertificate* certificate, | 44 TestRootCerts::TrustEntry::TrustEntry(CERTCertificate* certificate, |
45 const CERTCertTrust& trust) | 45 const CERTCertTrust& trust) |
46 : certificate_(CERT_DupCertificate(certificate)), | 46 : certificate_(CERT_DupCertificate(certificate)), trust_(trust) { |
47 trust_(trust) { | |
48 } | 47 } |
49 | 48 |
50 TestRootCerts::TrustEntry::~TrustEntry() { | 49 TestRootCerts::TrustEntry::~TrustEntry() { |
51 CERT_DestroyCertificate(certificate_); | 50 CERT_DestroyCertificate(certificate_); |
52 } | 51 } |
53 | 52 |
54 bool TestRootCerts::Add(X509Certificate* certificate) { | 53 bool TestRootCerts::Add(X509Certificate* certificate) { |
55 #if defined(OS_IOS) | 54 #if defined(OS_IOS) |
56 x509_util_ios::NSSCertificate nss_certificate(certificate->os_cert_handle()); | 55 x509_util_ios::NSSCertificate nss_certificate(certificate->os_cert_handle()); |
57 CERTCertificate* cert_handle = nss_certificate.cert_handle(); | 56 CERTCertificate* cert_handle = nss_certificate.cert_handle(); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 return true; | 89 return true; |
91 } | 90 } |
92 | 91 |
93 void TestRootCerts::Clear() { | 92 void TestRootCerts::Clear() { |
94 // Restore the certificate trusts to what they were originally, before | 93 // Restore the certificate trusts to what they were originally, before |
95 // Add() was called. Work from the rear first, since if a certificate was | 94 // Add() was called. Work from the rear first, since if a certificate was |
96 // added twice, the second entry's original trust status will be that of | 95 // added twice, the second entry's original trust status will be that of |
97 // the first entry, while the first entry contains the desired resultant | 96 // the first entry, while the first entry contains the desired resultant |
98 // status. | 97 // status. |
99 for (std::list<TrustEntry*>::reverse_iterator it = trust_cache_.rbegin(); | 98 for (std::list<TrustEntry*>::reverse_iterator it = trust_cache_.rbegin(); |
100 it != trust_cache_.rend(); ++it) { | 99 it != trust_cache_.rend(); |
| 100 ++it) { |
101 CERTCertTrust original_trust = (*it)->trust(); | 101 CERTCertTrust original_trust = (*it)->trust(); |
102 SECStatus rv = CERT_ChangeCertTrust(CERT_GetDefaultCertDB(), | 102 SECStatus rv = CERT_ChangeCertTrust( |
103 (*it)->certificate(), | 103 CERT_GetDefaultCertDB(), (*it)->certificate(), &original_trust); |
104 &original_trust); | |
105 // DCHECK(), rather than LOG(), as a failure to restore the original | 104 // DCHECK(), rather than LOG(), as a failure to restore the original |
106 // trust can cause flake or hard-to-trace errors in any unit tests that | 105 // trust can cause flake or hard-to-trace errors in any unit tests that |
107 // occur after Clear() has been called. | 106 // occur after Clear() has been called. |
108 DCHECK_EQ(SECSuccess, rv) << "Cannot restore certificate trust."; | 107 DCHECK_EQ(SECSuccess, rv) << "Cannot restore certificate trust."; |
109 } | 108 } |
110 STLDeleteElements(&trust_cache_); | 109 STLDeleteElements(&trust_cache_); |
111 } | 110 } |
112 | 111 |
113 bool TestRootCerts::IsEmpty() const { | 112 bool TestRootCerts::IsEmpty() const { |
114 return trust_cache_.empty(); | 113 return trust_cache_.empty(); |
115 } | 114 } |
116 | 115 |
117 #if defined(USE_NSS) | 116 #if defined(USE_NSS) |
118 bool TestRootCerts::Contains(CERTCertificate* cert) const { | 117 bool TestRootCerts::Contains(CERTCertificate* cert) const { |
119 for (std::list<TrustEntry*>::const_iterator it = trust_cache_.begin(); | 118 for (std::list<TrustEntry*>::const_iterator it = trust_cache_.begin(); |
120 it != trust_cache_.end(); ++it) { | 119 it != trust_cache_.end(); |
| 120 ++it) { |
121 if (X509Certificate::IsSameOSCert(cert, (*it)->certificate())) | 121 if (X509Certificate::IsSameOSCert(cert, (*it)->certificate())) |
122 return true; | 122 return true; |
123 } | 123 } |
124 return false; | 124 return false; |
125 } | 125 } |
126 #endif | 126 #endif |
127 | 127 |
128 TestRootCerts::~TestRootCerts() { | 128 TestRootCerts::~TestRootCerts() { |
129 Clear(); | 129 Clear(); |
130 } | 130 } |
131 | 131 |
132 void TestRootCerts::Init() { | 132 void TestRootCerts::Init() { |
133 crypto::EnsureNSSInit(); | 133 crypto::EnsureNSSInit(); |
134 } | 134 } |
135 | 135 |
136 } // namespace net | 136 } // namespace net |
OLD | NEW |