Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2964)

Unified Diff: base/openssl_util.cc

Issue 6805019: Move crypto files out of base, to a top level directory. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/openssl_util.cc
===================================================================
--- base/openssl_util.cc (revision 80572)
+++ base/openssl_util.cc (working copy)
@@ -1,113 +0,0 @@
-// Copyright (c) 2011 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 "base/openssl_util.h"
-
-#include <openssl/err.h>
-#include <openssl/ssl.h>
-
-#include "base/logging.h"
-#include "base/memory/scoped_vector.h"
-#include "base/memory/singleton.h"
-#include "base/string_piece.h"
-#include "base/synchronization/lock.h"
-
-namespace base {
-
-namespace {
-
-unsigned long CurrentThreadId() {
- return static_cast<unsigned long>(PlatformThread::CurrentId());
-}
-
-// Singleton for initializing and cleaning up the OpenSSL library.
-class OpenSSLInitSingleton {
- public:
- static OpenSSLInitSingleton* GetInstance() {
- // We allow the SSL environment to leak for multiple reasons:
- // - it is used from a non-joinable worker thread that is not stopped on
- // shutdown, hence may still be using OpenSSL library after the AtExit
- // runner has completed.
- // - There are other OpenSSL related singletons (e.g. the client socket
- // context) who's cleanup depends on the global environment here, but
- // we can't control the order the AtExit handlers will run in so
- // allowing the global environment to leak at least ensures it is
- // available for those other singletons to reliably cleanup.
- return Singleton<OpenSSLInitSingleton,
- LeakySingletonTraits<OpenSSLInitSingleton> >::get();
- }
- private:
- friend struct DefaultSingletonTraits<OpenSSLInitSingleton>;
- OpenSSLInitSingleton() {
- SSL_load_error_strings();
- SSL_library_init();
- OpenSSL_add_all_algorithms();
- int num_locks = CRYPTO_num_locks();
- locks_.reserve(num_locks);
- for (int i = 0; i < num_locks; ++i)
- locks_.push_back(new base::Lock());
- CRYPTO_set_locking_callback(LockingCallback);
- CRYPTO_set_id_callback(CurrentThreadId);
- }
-
- ~OpenSSLInitSingleton() {
- CRYPTO_set_locking_callback(NULL);
- EVP_cleanup();
- ERR_free_strings();
- }
-
- static void LockingCallback(int mode, int n, const char* file, int line) {
- OpenSSLInitSingleton::GetInstance()->OnLockingCallback(mode, n, file, line);
- }
-
- void 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();
- }
-
- // These locks are used and managed by OpenSSL via LockingCallback().
- ScopedVector<base::Lock> locks_;
-
- DISALLOW_COPY_AND_ASSIGN(OpenSSLInitSingleton);
-};
-
-// Callback routine for OpenSSL to print error messages. |str| is a
-// NULL-terminated string of length |len| containing diagnostic information
-// such as the library, function and reason for the error, the file and line
-// where the error originated, plus potentially any context-specific
-// information about the error. |context| contains a pointer to user-supplied
-// data, which is currently unused.
-// If this callback returns a value <= 0, OpenSSL will stop processing the
-// error queue and return, otherwise it will continue calling this function
-// until all errors have been removed from the queue.
-int OpenSSLErrorCallback(const char* str, size_t len, void* context) {
- DVLOG(1) << "\t" << StringPiece(str, len);
- return 1;
-}
-
-} // namespace
-
-void EnsureOpenSSLInit() {
- (void)OpenSSLInitSingleton::GetInstance();
-}
-
-void ClearOpenSSLERRStack(const tracked_objects::Location& location) {
- if (logging::DEBUG_MODE && VLOG_IS_ON(1)) {
- int error_num = ERR_peek_error();
- if (error_num == 0)
- return;
-
- std::string message;
- location.Write(true, true, &message);
- DVLOG(1) << "OpenSSL ERR_get_error stack from " << message;
- ERR_print_errors_cb(&OpenSSLErrorCallback, NULL);
- } else {
- ERR_clear_error();
- }
-}
-
-} // namespace base

Powered by Google App Engine
This is Rietveld 408576698