Index: net/socket/ssl_client_socket_openssl.cc |
diff --git a/net/socket/ssl_client_socket_openssl.cc b/net/socket/ssl_client_socket_openssl.cc |
index 0d39f6483f2b3bcfed6a543a61e78995d917828a..b66b767fe5047bd6a8e2be346b98a43476401867 100644 |
--- a/net/socket/ssl_client_socket_openssl.cc |
+++ b/net/socket/ssl_client_socket_openssl.cc |
@@ -23,7 +23,6 @@ |
#include "base/stl_util.h" |
#include "base/strings/string_piece.h" |
#include "base/synchronization/lock.h" |
-#include "base/threading/sequenced_worker_pool.h" |
#include "base/threading/thread_local.h" |
#include "base/values.h" |
#include "crypto/ec_private_key.h" |
@@ -167,33 +166,6 @@ bool EVP_MDToPrivateKeyHash(const EVP_MD* md, SSLPrivateKey::Hash* hash) { |
} |
} |
-#if !defined(OS_NACL) |
-class PlatformKeyTaskRunner { |
- public: |
- PlatformKeyTaskRunner() { |
- // Serialize all the private key operations on a single background |
- // thread to avoid problems with buggy smartcards. |
- worker_pool_ = new base::SequencedWorkerPool(1, "Platform Key Thread"); |
- task_runner_ = worker_pool_->GetSequencedTaskRunnerWithShutdownBehavior( |
- worker_pool_->GetSequenceToken(), |
- base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN); |
- } |
- |
- scoped_refptr<base::SequencedTaskRunner> task_runner() { |
- return task_runner_; |
- } |
- |
- private: |
- scoped_refptr<base::SequencedWorkerPool> worker_pool_; |
- scoped_refptr<base::SequencedTaskRunner> task_runner_; |
- |
- DISALLOW_COPY_AND_ASSIGN(PlatformKeyTaskRunner); |
-}; |
- |
-base::LazyInstance<PlatformKeyTaskRunner>::Leaky g_platform_key_task_runner = |
- LAZY_INSTANCE_INITIALIZER; |
-#endif |
- |
} // namespace |
class SSLClientSocketOpenSSL::SSLContext { |
@@ -612,7 +584,6 @@ void SSLClientSocketOpenSSL::Disconnect() { |
channel_id_request_.Cancel(); |
ssl_failure_state_ = SSL_FAILURE_NONE; |
- private_key_.reset(); |
signature_result_ = kNoPendingResult; |
signature_.clear(); |
} |
@@ -1040,7 +1011,7 @@ int SSLClientSocketOpenSSL::DoHandshake() { |
return ERR_SSL_CLIENT_AUTH_CERT_NEEDED; |
} |
if (ssl_error == SSL_ERROR_WANT_PRIVATE_KEY_OPERATION) { |
- DCHECK(private_key_); |
+ DCHECK(ssl_config_.client_private_key); |
DCHECK_NE(kNoPendingResult, signature_result_); |
GotoState(STATE_HANDSHAKE); |
return ERR_IO_PENDING; |
@@ -1506,7 +1477,7 @@ int SSLClientSocketOpenSSL::DoPayloadRead() { |
pending_read_error_ = ERR_SSL_CLIENT_AUTH_CERT_NEEDED; |
} else if (pending_read_ssl_error_ == |
SSL_ERROR_WANT_PRIVATE_KEY_OPERATION) { |
- DCHECK(private_key_); |
+ DCHECK(ssl_config_.client_private_key); |
DCHECK_NE(kNoPendingResult, signature_result_); |
pending_read_error_ = ERR_IO_PENDING; |
} else { |
@@ -1797,17 +1768,12 @@ int SSLClientSocketOpenSSL::ClientCertRequestCallback(SSL* ssl) { |
} |
#if defined(OS_NACL) |
davidben
2015/11/06 21:47:45
I think this is no longer necessary. We'll just ne
svaldez
2015/11/09 17:32:16
Done.
|
- OpenSSLPutNetError(FROM_HERE, ERR_SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY); |
- return -1; |
+ OpenSSLPutNetError(FROM_HERE, ERR_SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY); |
+ return -1; |
#else |
- // TODO(davidben): Lift this call up to the embedder so we can actually test |
- // this code. https://crbug.com/394131 |
- private_key_ = FetchClientCertPrivateKey( |
- ssl_config_.client_cert.get(), |
- g_platform_key_task_runner.Get().task_runner()); |
- if (!private_key_) { |
- // Could not find the private key. Fail the handshake and surface an |
- // appropriate error to the caller. |
+ if (!ssl_config_.client_private_key) { |
+ // The caller supplied a null private key. Fail the handshake and surface |
+ // an appropriate error to the caller. |
LOG(WARNING) << "Client cert found without private key"; |
OpenSSLPutNetError(FROM_HERE, ERR_SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY); |
return -1; |
@@ -1816,7 +1782,7 @@ int SSLClientSocketOpenSSL::ClientCertRequestCallback(SSL* ssl) { |
SSL_set_private_key_method(ssl_, &SSLContext::kPrivateKeyMethod); |
std::vector<SSLPrivateKey::Hash> digest_prefs = |
- private_key_->GetDigestPreferences(); |
+ ssl_config_.client_private_key->GetDigestPreferences(); |
size_t digests_len = digest_prefs.size(); |
std::vector<int> digests; |
@@ -2073,7 +2039,7 @@ bool SSLClientSocketOpenSSL::IsRenegotiationAllowed() const { |
} |
int SSLClientSocketOpenSSL::PrivateKeyTypeCallback() { |
- switch (private_key_->GetType()) { |
+ switch (ssl_config_.client_private_key->GetType()) { |
case SSLPrivateKey::Type::RSA: |
return EVP_PKEY_RSA; |
case SSLPrivateKey::Type::ECDSA: |
@@ -2084,7 +2050,7 @@ int SSLClientSocketOpenSSL::PrivateKeyTypeCallback() { |
} |
size_t SSLClientSocketOpenSSL::PrivateKeyMaxSignatureLenCallback() { |
- return private_key_->GetMaxSignatureLengthInBytes(); |
+ return ssl_config_.client_private_key->GetMaxSignatureLengthInBytes(); |
} |
ssl_private_key_result_t SSLClientSocketOpenSSL::PrivateKeySignCallback( |
@@ -2096,7 +2062,7 @@ ssl_private_key_result_t SSLClientSocketOpenSSL::PrivateKeySignCallback( |
size_t in_len) { |
DCHECK_EQ(kNoPendingResult, signature_result_); |
DCHECK(signature_.empty()); |
- DCHECK(private_key_); |
+ DCHECK(ssl_config_.client_private_key); |
net_log_.BeginEvent(NetLog::TYPE_SSL_PRIVATE_KEY_OPERATION); |
@@ -2107,7 +2073,7 @@ ssl_private_key_result_t SSLClientSocketOpenSSL::PrivateKeySignCallback( |
} |
signature_result_ = ERR_IO_PENDING; |
- private_key_->SignDigest( |
+ ssl_config_.client_private_key->SignDigest( |
hash, base::StringPiece(reinterpret_cast<const char*>(in), in_len), |
base::Bind(&SSLClientSocketOpenSSL::OnPrivateKeySignComplete, |
weak_factory_.GetWeakPtr())); |
@@ -2119,7 +2085,7 @@ ssl_private_key_result_t SSLClientSocketOpenSSL::PrivateKeySignCompleteCallback( |
size_t* out_len, |
size_t max_out) { |
DCHECK_NE(kNoPendingResult, signature_result_); |
- DCHECK(private_key_); |
+ DCHECK(ssl_config_.client_private_key); |
if (signature_result_ == ERR_IO_PENDING) |
return ssl_private_key_retry; |
@@ -2142,7 +2108,7 @@ void SSLClientSocketOpenSSL::OnPrivateKeySignComplete( |
const std::vector<uint8_t>& signature) { |
DCHECK_EQ(ERR_IO_PENDING, signature_result_); |
DCHECK(signature_.empty()); |
- DCHECK(private_key_); |
+ DCHECK(ssl_config_.client_private_key); |
net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_PRIVATE_KEY_OPERATION, |
error); |