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

Unified Diff: net/ssl/ssl_platform_key_chromecast.cc

Issue 2898573002: Refactor client cert private key handling. (Closed)
Patch Set: removed no longer needed forward declaration Created 3 years, 6 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
« no previous file with comments | « net/ssl/ssl_platform_key_android.cc ('k') | net/ssl/ssl_platform_key_chromecast_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/ssl/ssl_platform_key_chromecast.cc
diff --git a/net/ssl/ssl_platform_key_chromecast.cc b/net/ssl/ssl_platform_key_chromecast.cc
deleted file mode 100644
index 1b4d2da3c807460f2abb069fb651f1d6de968d01..0000000000000000000000000000000000000000
--- a/net/ssl/ssl_platform_key_chromecast.cc
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright 2016 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 <keyhi.h>
-#include <pk11pub.h>
-#include <prerror.h>
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/memory/ptr_util.h"
-#include "crypto/scoped_nss_types.h"
-#include "net/cert/x509_certificate.h"
-#include "net/ssl/client_key_store.h"
-#include "net/ssl/ssl_platform_key.h"
-#include "net/ssl/ssl_platform_key_util.h"
-#include "net/ssl/ssl_private_key.h"
-#include "net/ssl/threaded_ssl_private_key.h"
-#include "third_party/boringssl/src/include/openssl/mem.h"
-#include "third_party/boringssl/src/include/openssl/nid.h"
-#include "third_party/boringssl/src/include/openssl/rsa.h"
-
-namespace net {
-
-namespace {
-
-void LogPRError() {
- PRErrorCode err = PR_GetError();
- const char* err_name = PR_ErrorToName(err);
- if (err_name == nullptr)
- err_name = "";
- LOG(ERROR) << "Could not sign digest: " << err << " (" << err_name << ")";
-}
-
-class SSLPlatformKeyChromecast : public ThreadedSSLPrivateKey::Delegate {
- public:
- SSLPlatformKeyChromecast(crypto::ScopedSECKEYPrivateKey key)
- : key_(std::move(key)) {}
- ~SSLPlatformKeyChromecast() override {}
-
- std::vector<SSLPrivateKey::Hash> GetDigestPreferences() override {
- return std::vector<SSLPrivateKey::Hash>{SSLPrivateKey::Hash::SHA256,
- SSLPrivateKey::Hash::SHA1};
- }
-
- Error SignDigest(SSLPrivateKey::Hash hash,
- const base::StringPiece& input,
- std::vector<uint8_t>* signature) override {
- SECItem digest_item;
- digest_item.data =
- const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(input.data()));
- digest_item.len = input.size();
-
- bssl::UniquePtr<uint8_t> free_digest_info;
- // PK11_Sign expects the caller to prepend the DigestInfo.
- int hash_nid = NID_undef;
- switch (hash) {
- case SSLPrivateKey::Hash::MD5_SHA1:
- hash_nid = NID_md5_sha1;
- break;
- case SSLPrivateKey::Hash::SHA1:
- hash_nid = NID_sha1;
- break;
- case SSLPrivateKey::Hash::SHA256:
- hash_nid = NID_sha256;
- break;
- default:
- return ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED;
- }
- DCHECK_NE(NID_undef, hash_nid);
- int is_alloced;
- size_t prefix_len;
- if (!RSA_add_pkcs1_prefix(&digest_item.data, &prefix_len, &is_alloced,
- hash_nid, digest_item.data, digest_item.len)) {
- return ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED;
- }
- digest_item.len = prefix_len;
- if (is_alloced)
- free_digest_info.reset(digest_item.data);
-
- int len = PK11_SignatureLen(key_.get());
- if (len <= 0) {
- LogPRError();
- return ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED;
- }
- signature->resize(len);
- SECItem signature_item;
- signature_item.data = signature->data();
- signature_item.len = signature->size();
-
- SECStatus rv = PK11_Sign(key_.get(), &signature_item, &digest_item);
- if (rv != SECSuccess) {
- LogPRError();
- return ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED;
- }
- signature->resize(signature_item.len);
-
- return OK;
- }
-
- private:
- crypto::ScopedSECKEYPrivateKey key_;
-
- DISALLOW_COPY_AND_ASSIGN(SSLPlatformKeyChromecast);
-};
-
-} // namespace
-
-scoped_refptr<SSLPrivateKey> FetchClientCertPrivateKey(
- const X509Certificate* certificate) {
- crypto::ScopedSECKEYPrivateKey key(
- PK11_FindKeyByAnyCert(certificate->os_cert_handle(), nullptr));
- if (!key) {
- return ClientKeyStore::GetInstance()->FetchClientCertPrivateKey(
- *certificate);
- }
-
- return make_scoped_refptr(new ThreadedSSLPrivateKey(
- base::MakeUnique<SSLPlatformKeyChromecast>(std::move(key)),
- GetSSLPlatformKeyTaskRunner()));
-}
-
-} // namespace net
« no previous file with comments | « net/ssl/ssl_platform_key_android.cc ('k') | net/ssl/ssl_platform_key_chromecast_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698