Go to the documentation of this file.
69 #include "../crypto/internal.h"
85 if (cert->
chain !=
nullptr &&
137 if (hs->
config->
cert->privatekey !=
nullptr ||
209 privatekey = hs->
config->
cert->dc_privatekey.get();
212 if (key_method != NULL) {
213 enum ssl_private_key_result_t
ret;
217 ret = key_method->
sign(ssl,
out, out_len, max_out,
218 sigalg,
in.data(),
in.size());
228 ScopedEVP_MD_CTX
ctx;
229 if (!
setup_ctx(ssl,
ctx.get(), privatekey, sigalg,
false ) ||
239 ScopedEVP_MD_CTX
ctx;
244 in.data(),
in.size());
245 #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
260 enum ssl_private_key_result_t
ret;
265 in.data(),
in.size());
314 using namespace bssl;
317 if (rsa == NULL || ssl->
config == NULL) {
343 if (pkey == NULL || ssl->
config == NULL) {
353 if (der_len > LONG_MAX) {
360 if (!pkey || p != der + der_len) {
406 if (der_len > LONG_MAX) {
413 if (!pkey || p != der + der_len) {
426 ssl->
config->cert->key_method = key_method;
431 ctx->cert->key_method = key_method;
438 static const struct {
459 if (!include_curve) {
462 return "ecdsa_sha256";
464 return "ecdsa_sha384";
466 return "ecdsa_sha512";
471 if (candidate.signature_algorithm == sigalg) {
472 return candidate.name;
486 if (alg ==
nullptr || alg->
digest_func ==
nullptr) {
510 static constexpr
struct {
531 if ((num_values & 1) == 1) {
535 const size_t num_pairs = num_values / 2;
536 if (!
out->Init(num_pairs)) {
540 for (
size_t i = 0;
i < num_values;
i += 2) {
547 (*out)[
i / 2] = candidate.signature_algorithm;
568 }
else if (u1 > u2) {
576 if (in_sigalgs.
size() < 2) {
581 if (!sigalgs.
CopyFrom(in_sigalgs)) {
587 for (
size_t i = 1;
i < sigalgs.
size();
i++) {
588 if (sigalgs[
i - 1] == sigalgs[
i]) {
606 !
ctx->verify_sigalgs.CopyFrom(sigalgs)) {
626 !ssl->
config->verify_sigalgs.CopyFrom(sigalgs)) {
640 for (
const char *p =
str; *p; p++) {
655 }
state = pkey_or_name;
670 if (
state == hash_name) {
682 if (strcmp(
buf,
"RSA") == 0) {
684 }
else if (strcmp(
buf,
"RSA-PSS") == 0 ||
685 strcmp(
buf,
"PSS") == 0) {
687 }
else if (strcmp(
buf,
"ECDSA") == 0) {
710 if (
state == pkey_or_name) {
714 if (strcmp(candidate.name,
buf) == 0) {
716 (*out)[out_i++] = candidate.signature_algorithm;
728 if (strcmp(
buf,
"SHA1") == 0) {
730 }
else if (strcmp(
buf,
"SHA256") == 0) {
732 }
else if (strcmp(
buf,
"SHA384") == 0) {
734 }
else if (strcmp(
buf,
"SHA512") == 0) {
747 (*out)[out_i++] = candidate.signature_algorithm;
760 state = pkey_or_name;
765 if (buf_used ==
sizeof(
buf) - 1) {
771 if ((c >=
'0' && c <=
'9') || (c >=
'a' && c <=
'z') ||
772 (c >=
'A' && c <=
'Z') || c ==
'-' || c ==
'_') {
783 assert(out_i ==
out->size());
UniquePtr< EVP_PKEY > privatekey
const char * SSL_get_signature_algorithm_name(uint16_t sigalg, int include_curve)
int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey)
#define SSL_SIGN_RSA_PSS_RSAE_SHA512
const OPENSSL_EXPORT EVP_MD * EVP_md5_sha1(void)
#define SSL_R_PRIVATE_KEY_OPERATION_FAILED
#define EVP_DigestSignInit
const OPENSSL_EXPORT EVP_MD * EVP_sha512(void)
static bool sigalgs_unique(Span< const uint16_t > in_sigalgs)
#define SSL_SIGN_RSA_PSS_RSAE_SHA256
#define EVP_DigestVerifyInit
static int compare_uint16_t(const void *p1, const void *p2)
#define NID_X9_62_prime256v1
static bool setup_ctx(SSL *ssl, EVP_MD_CTX *ctx, EVP_PKEY *pkey, uint16_t sigalg, bool is_verify)
UniquePtr< EVP_PKEY > local_pubkey
#define EVP_PKEY_get0_RSA
const OPENSSL_EXPORT EVP_MD * EVP_sha384(void)
#define SSL_R_INVALID_SIGNATURE_ALGORITHM
static constexpr struct @375 kSignatureAlgorithmsMapping[]
#define OPENSSL_PUT_ERROR(library, reason)
enum ssl_private_key_result_t(* sign)(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out, uint16_t signature_algorithm, const uint8_t *in, size_t in_len)
#define OPENSSL_ARRAY_SIZE(array)
int SSL_CTX_set_signing_algorithm_prefs(SSL_CTX *ctx, const uint16_t *prefs, size_t num_prefs)
bssl::UniquePtr< bssl::SSL_CONFIG > config
const EVP_MD *(* digest_func)(void)
enum ssl_private_key_result_t ssl_private_key_sign(SSL_HANDSHAKE *hs, uint8_t *out, size_t *out_len, size_t max_out, uint16_t sigalg, Span< const uint8_t > in)
#define SSL_SIGN_RSA_PSS_RSAE_SHA384
int SSL_set_signing_algorithm_prefs(SSL *ssl, const uint16_t *prefs, size_t num_prefs)
static struct test_ctx ctx
#define SSL_R_DUPLICATE_SIGNATURE_ALGORITHM
static size_t num_elements(const uint8_t *in, size_t in_len)
bool ssl_cert_check_private_key(const CERT *cert, const EVP_PKEY *privkey)
#define SSL_SIGN_ECDSA_SECP521R1_SHA512
const OPENSSL_EXPORT EVP_MD * EVP_sha256(void)
#define SSL_SIGN_RSA_PKCS1_SHA256
int SSL_use_PrivateKey_ASN1(int type, SSL *ssl, const uint8_t *der, size_t der_len)
#define EC_KEY_get0_group
static bool parse_sigalgs_list(Array< uint16_t > *out, const char *str)
bool CopyFrom(Span< const T > in)
int SSL_get_signature_algorithm_key_type(uint16_t sigalg)
int SSL_is_signature_algorithm_rsa_pss(uint16_t sigalg)
#define SSL_SIGN_RSA_PKCS1_SHA384
#define SSL_SIGN_RSA_PKCS1_SHA512
#define RSA_private_key_from_bytes
UniquePtr< STACK_OF(CRYPTO_BUFFER)> chain
int SSL_set_verify_algorithm_prefs(SSL *ssl, const uint16_t *prefs, size_t num_prefs)
bool ssl_has_private_key(const SSL_HANDSHAKE *hs)
int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const uint8_t *der, size_t der_len)
void SSL_set_private_key_method(SSL *ssl, const SSL_PRIVATE_KEY_METHOD *key_method)
#define ERR_R_PASSED_NULL_PARAMETER
bool pending_private_key_op
int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa)
bool ssl_public_key_verify(SSL *ssl, Span< const uint8_t > signature, uint16_t sigalg, EVP_PKEY *pkey, Span< const uint8_t > in)
#define ERR_add_error_dataf
#define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED
#define EC_GROUP_get_curve_name
#define SSL_SIGN_RSA_PKCS1_SHA1
static const SSL_SIGNATURE_ALGORITHM * get_signature_algorithm(uint16_t sigalg)
enum ssl_private_key_result_t(* complete)(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out)
#define SSL_R_WRONG_SIGNATURE_TYPE
#define BSSL_NAMESPACE_END
int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const uint8_t *der, size_t der_len)
#define ERR_R_INTERNAL_ERROR
uint16_t ssl_protocol_version(const SSL *ssl)
void qsort(void *a, size_t n, size_t es, int(*cmp)(const void *, const void *))
bool can_release_private_key
int SSL_CTX_set1_sigalgs_list(SSL_CTX *ctx, const char *str)
int SSL_set1_sigalgs(SSL *ssl, const int *values, size_t num_values)
BSSL_NAMESPACE_BEGIN bool ssl_is_key_type_supported(int key_type)
#define sk_CRYPTO_BUFFER_value
#define EVP_PKEY_set1_RSA
#define SSL_SIGN_RSA_PKCS1_MD5_SHA1
#define EVP_PKEY_get0_EC_KEY
UniquePtr< SSL_SESSION > ret
static bool parse_sigalg_pairs(Array< uint16_t > *out, const int *values, size_t num_values)
int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa)
enum ssl_private_key_result_t ssl_private_key_decrypt(SSL_HANDSHAKE *hs, uint8_t *out, size_t *out_len, size_t max_out, Span< const uint8_t > in)
static bool ssl_set_pkey(CERT *cert, EVP_PKEY *pkey)
std::array< int64_t, Size > values
const EVP_MD * SSL_get_signature_algorithm_digest(uint16_t sigalg)
static const SSL_SIGNATURE_ALGORITHM kSignatureAlgorithms[]
static constexpr size_t kMaxSignatureAlgorithmNameLen
const OPENSSL_EXPORT EVP_MD * EVP_sha1(void)
#define RSA_PKCS1_PSS_PADDING
int SSL_CTX_use_PrivateKey_ASN1(int type, SSL_CTX *ctx, const uint8_t *der, size_t der_len)
#define EVP_PKEY_CTX_set_rsa_padding
const char name[kMaxSignatureAlgorithmNameLen]
#define SSL_R_UNKNOWN_CERTIFICATE_TYPE
static const struct @374 kSignatureAlgorithmNames[]
#define SSL_SIGN_ECDSA_SHA1
void SSL_CTX_set_private_key_method(SSL_CTX *ctx, const SSL_PRIVATE_KEY_METHOD *key_method)
#define EVP_PKEY_CTX_set_rsa_pss_saltlen
bool ssl_private_key_supports_signature_algorithm(SSL_HANDSHAKE *hs, uint16_t sigalg)
int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey)
bool ssl_signing_with_dc(const SSL_HANDSHAKE *hs)
int SSL_CTX_set1_sigalgs(SSL_CTX *ctx, const int *values, size_t num_values)
#define OPENSSL_FALLTHROUGH
static bool pkey_supports_algorithm(const SSL *ssl, EVP_PKEY *pkey, uint16_t sigalg)
uint16_t signature_algorithm
int SSL_set1_sigalgs_list(SSL *ssl, const char *str)
#define SSL_SIGN_ECDSA_SECP384R1_SHA384
constexpr Span< const T > MakeConstSpan(T *ptr, size_t size) noexcept
#define SSL_SIGN_ECDSA_SECP256R1_SHA256
int SSL_CTX_set_verify_algorithm_prefs(SSL_CTX *ctx, const uint16_t *prefs, size_t num_prefs)
grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:16