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 59d170778bf2cbfec29ff2134455ae71d87dadde..515496c2b0529c459282feeba173bd535efd8afb 100644 |
--- a/net/socket/ssl_client_socket_openssl.cc |
+++ b/net/socket/ssl_client_socket_openssl.cc |
@@ -25,7 +25,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" |
@@ -178,33 +177,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 |
- |
class ScopedCBB { |
public: |
ScopedCBB() { CBB_zero(&cbb_); } |
@@ -216,7 +188,6 @@ class ScopedCBB { |
CBB cbb_; |
DISALLOW_COPY_AND_ASSIGN(ScopedCBB); |
}; |
- |
} // namespace |
class SSLClientSocketOpenSSL::SSLContext { |
@@ -679,7 +650,6 @@ void SSLClientSocketOpenSSL::Disconnect() { |
channel_id_request_.Cancel(); |
ssl_failure_state_ = SSL_FAILURE_NONE; |
- private_key_.reset(); |
signature_result_ = kNoPendingResult; |
signature_.clear(); |
} |
@@ -1109,7 +1079,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; |
@@ -1580,7 +1550,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 { |
@@ -1870,18 +1840,9 @@ int SSLClientSocketOpenSSL::ClientCertRequestCallback(SSL* ssl) { |
return -1; |
} |
-#if defined(OS_NACL) |
- 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; |
@@ -1890,7 +1851,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; |
@@ -1916,7 +1877,6 @@ int SSLClientSocketOpenSSL::ClientCertRequestCallback(SSL* ssl) { |
SSL_set_private_key_digest_prefs(ssl_, vector_as_array(&digests), |
digests.size()); |
-#endif // !OS_NACL |
int cert_count = 1 + sk_X509_num(chain.get()); |
net_log_.AddEvent(NetLog::TYPE_SSL_CLIENT_CERT_PROVIDED, |
@@ -2150,7 +2110,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: |
@@ -2161,7 +2121,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( |
@@ -2173,7 +2133,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); |
@@ -2184,7 +2144,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())); |
@@ -2196,7 +2156,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; |
@@ -2219,7 +2179,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); |