Chromium Code Reviews| Index: net/base/openssl_memory_private_key_store.cc |
| diff --git a/net/base/openssl_memory_private_key_store.cc b/net/base/openssl_memory_private_key_store.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..3735925e926da16386ecb0e532377799348d2918 |
| --- /dev/null |
| +++ b/net/base/openssl_memory_private_key_store.cc |
| @@ -0,0 +1,61 @@ |
| +// Copyright (c) 2010 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. |
| + |
| +// Defines an in-memory private key store, primarily used for testing. |
| + |
| +#include <openssl/evp.h> |
| + |
| +#include "net/base/openssl_private_key_store.h" |
| + |
| +#include "base/logging.h" |
| +#include "base/openssl_util.h" |
| +#include "base/singleton.h" |
| +#include "net/base/x509_certificate.h" |
| + |
| +namespace net { |
| + |
| +namespace { |
| + |
| +class OpenSSLMemoryKeyStore : public OpenSSLPrivateKeyStore { |
| + public: |
| + OpenSSLMemoryKeyStore() {} |
| + ~OpenSSLMemoryKeyStore() { |
|
bulach
2010/12/08 20:37:00
virtual?
joth
2010/12/09 11:20:21
Done.
|
| + AutoLock lock(lock_); |
| + for (std::vector<EVP_PKEY*>::iterator it = keys_.begin(); |
| + it != keys_.end(); ++it) { |
| + EVP_PKEY_free(*it); |
| + } |
| + } |
|
bulach
2010/12/08 20:37:00
\n
joth
2010/12/09 11:20:21
Done.
|
| + virtual bool StorePrivateKey(const GURL& url, EVP_PKEY* pkey) { |
| + CRYPTO_add(&pkey->references, 1, CRYPTO_LOCK_EVP_PKEY); |
| + AutoLock lock(lock_); |
| + keys_.push_back(pkey); |
| + return true; |
| + } |
|
bulach
2010/12/08 20:37:00
\n
joth
2010/12/09 11:20:21
Done.
|
| + virtual EVP_PKEY* FetchPrivateKey(EVP_PKEY* pkey) { |
| + AutoLock lock(lock_); |
| + for (std::vector<EVP_PKEY*>::iterator it = keys_.begin(); |
| + it != keys_.end(); ++it) { |
| + if (EVP_PKEY_cmp(*it, pkey) == 1) |
| + return *it; |
| + } |
| + return NULL; |
| + } |
| + |
| + private: |
| + std::vector<EVP_PKEY*> keys_; |
| + Lock lock_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(OpenSSLMemoryKeyStore); |
| +}; |
| + |
| +} // namespace |
| + |
| +// static |
| +OpenSSLPrivateKeyStore* OpenSSLPrivateKeyStore::GetInstance() { |
| + return Singleton<OpenSSLMemoryKeyStore>::get(); |
| +} |
| + |
| +} // namespace net |
| + |