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 15namespace net { 16 17bool 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 33void TestRootCerts::Clear() { 34 if (empty_) 35 return; 36 37 X509Certificate::ResetCertStore(); 38 empty_ = true; 39} 40 41bool TestRootCerts::IsEmpty() const { 42 return empty_; 43} 44 45TestRootCerts::~TestRootCerts() {} 46 47void TestRootCerts::Init() { 48 empty_ = true; 49} 50 51} // namespace net 52