From 1e5fead8aa598e7d834806f6f8eaef8302074f35 Mon Sep 17 00:00:00 2001 From: "bulach@chromium.org" Date: Fri, 8 Oct 2010 14:33:11 +0000 Subject: Adds X509 certificates for OpenSSL. Depends on http://codereview.chromium.org/3565006/show TEST=Existing *X509* tests should pass. Review URL: http://codereview.chromium.org/3529008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@61955 0039d316-1c4b-4281-b951-d872f2087c98 --- net/base/openssl_util.cc | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 net/base/openssl_util.cc (limited to 'net/base/openssl_util.cc') diff --git a/net/base/openssl_util.cc b/net/base/openssl_util.cc new file mode 100644 index 0000000..54a3df4 --- /dev/null +++ b/net/base/openssl_util.cc @@ -0,0 +1,61 @@ +// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/base/openssl_util.h" + +#include +#include + +#include "base/logging.h" + +namespace net { + +X509_STORE* OpenSSLInitSingleton::x509_store() const { + return store_.get(); +} + +OpenSSLInitSingleton::OpenSSLInitSingleton() + : store_(X509_STORE_new()) { + CHECK(store_.get()); + SSL_load_error_strings(); + OpenSSL_add_all_algorithms(); + X509_STORE_set_default_paths(store_.get()); + // TODO(bulach): Enable CRL (see X509_STORE_set_flags(X509_V_FLAG_CRL_CHECK)). + int num_locks = CRYPTO_num_locks(); + for (int i = 0; i < num_locks; ++i) + locks_.push_back(new Lock()); + CRYPTO_set_locking_callback(LockingCallback); +} + +OpenSSLInitSingleton::~OpenSSLInitSingleton() { + CRYPTO_set_locking_callback(NULL); + EVP_cleanup(); + ERR_free_strings(); +} + +OpenSSLInitSingleton* GetOpenSSLInitSingleton() { + return Singleton::get(); +} + +// static +void OpenSSLInitSingleton::LockingCallback(int mode, + int n, + const char* file, + int line) { + GetOpenSSLInitSingleton()->OnLockingCallback(mode, n, file, line); +} + +void OpenSSLInitSingleton::OnLockingCallback(int mode, + int n, + const char* file, + int line) { + CHECK_LT(static_cast(n), locks_.size()); + if (mode & CRYPTO_LOCK) + locks_[n]->Acquire(); + else + locks_[n]->Release(); +} + +} // namespace net + -- cgit v1.1