diff options
author | bulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-08 14:33:11 +0000 |
---|---|---|
committer | bulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-08 14:33:11 +0000 |
commit | 1e5fead8aa598e7d834806f6f8eaef8302074f35 (patch) | |
tree | 27d865f1cbc3f810fd0ea0038228057e2dafd814 /net/base/openssl_util.cc | |
parent | 2db58053f8e04deaf129724bdf8ec0b326fb65ac (diff) | |
download | chromium_src-1e5fead8aa598e7d834806f6f8eaef8302074f35.zip chromium_src-1e5fead8aa598e7d834806f6f8eaef8302074f35.tar.gz chromium_src-1e5fead8aa598e7d834806f6f8eaef8302074f35.tar.bz2 |
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
Diffstat (limited to 'net/base/openssl_util.cc')
-rw-r--r-- | net/base/openssl_util.cc | 61 |
1 files changed, 61 insertions, 0 deletions
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 <openssl/err.h> +#include <openssl/x509v3.h> + +#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<OpenSSLInitSingleton>::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<size_t>(n), locks_.size()); + if (mode & CRYPTO_LOCK) + locks_[n]->Acquire(); + else + locks_[n]->Release(); +} + +} // namespace net + |