| // Copyright 2017 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 "net/ssl/ssl_private_key.h" |
| |
| #include "base/logging.h" |
| #include "third_party/boringssl/src/include/openssl/evp.h" |
| #include "third_party/boringssl/src/include/openssl/ssl.h" |
| |
| namespace net { |
| |
| std::vector<uint16_t> SSLPrivateKey::DefaultAlgorithmPreferences( |
| int type, |
| bool supports_pss) { |
| switch (type) { |
| case EVP_PKEY_RSA: |
| if (supports_pss) { |
| return { |
| // Only SHA-1 if the server supports no other hashes, but otherwise |
| // prefer smaller SHA-2 hashes. SHA-256 is considered fine and more |
| // likely to be supported by smartcards, etc. |
| SSL_SIGN_RSA_PKCS1_SHA256, SSL_SIGN_RSA_PKCS1_SHA384, |
| SSL_SIGN_RSA_PKCS1_SHA512, SSL_SIGN_RSA_PKCS1_SHA1, |
| |
| // Order PSS last so we preferentially use the more conservative |
| // option. While the platform APIs may support RSA-PSS, the key may |
| // not. Ideally the SSLPrivateKey would query this, but smartcards |
| // often do not support such queries well. |
| SSL_SIGN_RSA_PSS_SHA256, SSL_SIGN_RSA_PSS_SHA384, |
| SSL_SIGN_RSA_PSS_SHA512, |
| }; |
| } |
| return { |
| SSL_SIGN_RSA_PKCS1_SHA256, SSL_SIGN_RSA_PKCS1_SHA384, |
| SSL_SIGN_RSA_PKCS1_SHA512, SSL_SIGN_RSA_PKCS1_SHA1, |
| }; |
| case EVP_PKEY_EC: |
| return { |
| SSL_SIGN_ECDSA_SECP256R1_SHA256, SSL_SIGN_ECDSA_SECP384R1_SHA384, |
| SSL_SIGN_ECDSA_SECP521R1_SHA512, SSL_SIGN_ECDSA_SHA1, |
| }; |
| default: |
| NOTIMPLEMENTED(); |
| return {}; |
| }; |
| } |
| |
| } // namespace net |