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 3 // found in the LICENSE file. 4 5 #include "net/base/test_root_certs.h" 6 7 #include <openssl/err.h> 8 #include <openssl/x509v3.h> 9 10 #include "base/logging.h" 11 #include "base/tracked.h" 12 #include "crypto/openssl_util.h" 13 #include "net/base/x509_certificate.h" 14 15 namespace net { 16 17 bool TestRootCerts::Add(X509Certificate* certificate) { 18 if (!X509_STORE_add_cert(X509Certificate::cert_store(), 19 certificate->os_cert_handle())) { 20 unsigned long error_code = ERR_peek_error(); 21 if (ERR_GET_LIB(error_code) != ERR_LIB_X509 || 22 ERR_GET_REASON(error_code) != X509_R_CERT_ALREADY_IN_HASH_TABLE) { 23 crypto::ClearOpenSSLERRStack(FROM_HERE); 24 return false; 25 } 26 ERR_clear_error(); 27 } 28 29 empty_ = false; 30 return true; 31 } 32 33 void TestRootCerts::Clear() { 34 if (empty_) 35 return; 36 37 X509Certificate::ResetCertStore(); 38 empty_ = true; 39 } 40 41 bool TestRootCerts::IsEmpty() const { 42 return empty_; 43 } 44 45 TestRootCerts::~TestRootCerts() {} 46 47 void TestRootCerts::Init() { 48 empty_ = true; 49 } 50 51 } // namespace net 52