Go to the documentation of this file.
131 #include "../crypto/internal.h"
138 : x509_method(x509_method_arg) {}
174 ret->x509_method->cert_dup(
ret.get(), cert);
183 ret->dc = cert->
dc->Dup();
253 if (privkey != NULL &&
266 if (num_certs == 0 ||
267 (privkey == NULL && privkey_method == NULL)) {
272 if (privkey != NULL && privkey_method != NULL) {
292 for (
size_t i = 0;
i < num_certs;
i++) {
321 if (cert->
chain !=
nullptr) {
328 if (cert->
chain ==
nullptr) {
348 UniquePtr<EVP_PKEY> *out_pubkey,
354 CBS certificate_list;
361 if (
CBS_len(&certificate_list) == 0) {
372 UniquePtr<EVP_PKEY> pubkey;
373 while (
CBS_len(&certificate_list) > 0) {
390 if (out_leaf_sha256 != NULL) {
395 UniquePtr<CRYPTO_BUFFER>
buf(
464 out_tbs_cert, NULL, NULL,
519 if (privkey ==
nullptr) {
524 if (cert->
chain ==
nullptr ||
545 CBS tbs_cert, outer_extensions;
557 &tbs_cert, &outer_extensions, &has_extensions,
563 if (!has_extensions) {
585 static const uint8_t kKeyUsageOID[3] = {0x55, 0x1d, 0x0f};
638 CBS distinguished_name;
645 UniquePtr<CRYPTO_BUFFER>
buffer(
655 if (!ssl->
ctx->x509_method->check_client_CA_list(
ret.get())) {
666 if (
names ==
nullptr) {
669 if (
names ==
nullptr) {
733 if (!ssl->
ctx->x509_method->ssl_auto_chain_if_needed(hs)) {
756 bssl::UniquePtr<DC>
ret = MakeUnique<DC>();
769 UniquePtr<DC> dc = MakeUnique<DC>();
777 CBS pubkey, deleg, sig;
782 !
CBS_get_u16(&deleg, &dc->expected_cert_verify_algorithm) ||
793 if (dc->pkey ==
nullptr) {
808 if (cert->
dc ==
nullptr ||
809 cert->
dc->raw ==
nullptr ||
815 const DC *dc = cert->
dc.get();
816 assert(hs->
ssl->
s3->have_version);
823 for (
uint16_t peer_sigalg : peer_sigalgs) {
841 if (privkey ==
nullptr && key_method ==
nullptr) {
846 if (privkey !=
nullptr && key_method !=
nullptr) {
852 UniquePtr<DC> dc =
DC::Parse(raw, &alert);
875 using namespace bssl;
878 size_t num_certs,
EVP_PKEY *privkey,
884 privkey, privkey_method);
888 size_t num_certs,
EVP_PKEY *privkey,
895 return ctx->cert->chain.get();
931 if (session == NULL) {
935 return session->
certs.get();
939 if (ssl->
s3->hs == NULL) {
942 return ssl->
s3->hs->ca_names.get();
948 CBS_init(&sct_list, list, list_len);
975 ctx->cert->ocsp_response.reset(
977 return ctx->cert->ocsp_response !=
nullptr;
985 ssl->
config->cert->ocsp_response.reset(
987 return ssl->
config->cert->ocsp_response !=
nullptr;
991 ctx->x509_method->ssl_ctx_flush_cached_client_CA(
ctx);
999 ssl->
ctx->x509_method->ssl_flush_cached_client_CA(ssl->
config.get());
1013 return ssl->
s3->delegated_credential_used;
UniquePtr< EVP_PKEY > privatekey
UniquePtr< CRYPTO_BUFFER > ocsp_response
#define CRYPTO_BUFFER_free
#define CBS_get_u24_length_prefixed
bool ssl_has_client_CAs(const SSL_CONFIG *cfg)
@ leaf_cert_and_privkey_mismatch
void SSL_CTX_set_cert_cb(SSL_CTX *ctx, int(*cb)(SSL *ssl, void *arg), void *arg)
static int OPENSSL_memcmp(const void *s1, const void *s2, size_t n)
#define EC_KEY_get_conv_form
uint32_t ssl_cipher_auth_mask_for_key(const EVP_PKEY *key)
UniquePtr< CRYPTO_BUFFER > raw
const Descriptor::ReservedRange const EnumValueDescriptor const MethodDescriptor extension
@ leaf_cert_and_privkey_ok
bool ssl_is_key_type_supported(int key_type)
UniquePtr< EVP_PKEY > local_pubkey
const SSL_CIPHER * new_cipher
static UniquePtr< DC > Parse(CRYPTO_BUFFER *in, uint8_t *out_alert)
int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, size_t der_len, const uint8_t *der)
#define OPENSSL_PUT_ERROR(library, reason)
#define CRYPTO_BUFFER_new_from_CBS
int SSL_delegated_credential_used(const SSL *ssl)
#define CBB_add_u16_length_prefixed
#define CBS_ASN1_OCTETSTRING
bssl::UniquePtr< bssl::SSL_CONFIG > config
#define CBS_ASN1_CONTEXT_SPECIFIC
#define SSL_AD_INTERNAL_ERROR
#define CRYPTO_BUFFER_len
bool ssl_set_cert(CERT *cert, UniquePtr< CRYPTO_BUFFER > buffer)
#define EVP_PKEY_is_opaque
bool tls1_check_group_id(const SSL_HANDSHAKE *hs, uint16_t group_id)
uint8_t sid_ctx[SSL_MAX_SID_CTX_LENGTH]
#define SSL_R_INVALID_SCT_LIST
#define SSL_R_INVALID_DELEGATED_CREDENTIAL
UniquePtr< EVP_PKEY > ssl_cert_parse_pubkey(const CBS *in)
int SSL_CTX_set_chain_and_key(SSL_CTX *ctx, CRYPTO_BUFFER *const *certs, size_t num_certs, EVP_PKEY *privkey, const SSL_PRIVATE_KEY_METHOD *privkey_method)
Array< uint16_t > sigalgs
static enum leaf_cert_and_privkey_result_t check_leaf_cert_and_privkey(CRYPTO_BUFFER *leaf_buffer, EVP_PKEY *privkey)
#define SSL_R_KEY_USAGE_BIT_INCORRECT
#define CRYPTO_BUFFER_up_ref
#define CBS_is_valid_asn1_bitstring
int SSL_use_certificate_ASN1(SSL *ssl, const uint8_t *der, size_t der_len)
bool ssl_add_cert_chain(SSL_HANDSHAKE *hs, CBB *cbb)
#define EC_KEY_get0_group
const SSL_PRIVATE_KEY_METHOD * key_method
const STACK_OF(CRYPTO_BUFFER) *SSL_CTX_get0_chain(const SSL_CTX *ctx)
#define X509_R_KEY_TYPE_MISMATCH
static int cert_set_dc(CERT *cert, CRYPTO_BUFFER *const raw, EVP_PKEY *privkey, const SSL_PRIVATE_KEY_METHOD *key_method)
@ key_usage_digital_signature
static bool ssl_cert_skip_to_spki(const CBS *in, CBS *out_tbs_cert)
static CRYPTO_BUFFER * buffer_up_ref(CRYPTO_BUFFER *buffer)
UniquePtr< EVP_PKEY > pkey
bool ssl_check_leaf_certificate(SSL_HANDSHAKE *hs, EVP_PKEY *pkey, const CRYPTO_BUFFER *leaf)
#define CBS_peek_asn1_tag
bool ssl_is_sct_list_valid(const CBS *contents)
void(* cert_clear)(CERT *cert)
#define SSL_get0_peer_certificates
int SSL_CTX_set_ocsp_response(SSL_CTX *ctx, const uint8_t *response, size_t response_len)
UniquePtr< STACK_OF(CRYPTO_BUFFER)> chain
#define sk_CRYPTO_BUFFER_new_null
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
#define ERR_R_PASSED_NULL_PARAMETER
bool ssl_cert_check_key_usage(const CBS *in, enum ssl_key_usage_t bit)
leaf_cert_and_privkey_result_t
#define SSL_R_CERT_LENGTH_MISMATCH
#define EC_GROUP_get_curve_name
static int set_signed_cert_timestamp_list(CERT *cert, const uint8_t *list, size_t list_len)
void SSL_CTX_set0_client_CAs(SSL_CTX *ctx, STACK_OF(CRYPTO_BUFFER) *name_list)
void(* cert_flush_cached_leaf)(CERT *cert)
#define SSL_R_NO_CERTIFICATE_ASSIGNED
static void * OPENSSL_memcpy(void *dst, const void *src, size_t n)
#define BSSL_NAMESPACE_END
bool ssl_compare_public_and_private_key(const EVP_PKEY *pubkey, const EVP_PKEY *privkey)
bool ssl_parse_cert_chain(uint8_t *out_alert, UniquePtr< STACK_OF(CRYPTO_BUFFER)> *out_chain, UniquePtr< EVP_PKEY > *out_pubkey, uint8_t *out_leaf_sha256, CBS *cbs, CRYPTO_BUFFER_POOL *pool)
#define ERR_R_INTERNAL_ERROR
uint16_t ssl_protocol_version(const SSL *ssl)
static void ssl_cert_set_cert_cb(CERT *cert, int(*cb)(SSL *ssl, void *arg), void *arg)
int SSL_set_signed_cert_timestamp_list(SSL *ssl, const uint8_t *list, size_t list_len)
void SSL_set0_client_CAs(SSL *ssl, STACK_OF(CRYPTO_BUFFER) *name_list)
#define CRYPTO_BUFFER_new
bool ssl_on_certificate_selected(SSL_HANDSHAKE *hs)
OPENSSL_EXPORT size_t const uint8_t size_t response_len
int SSL_set_chain_and_key(SSL *ssl, CRYPTO_BUFFER *const *certs, size_t num_certs, EVP_PKEY *privkey, const SSL_PRIVATE_KEY_METHOD *privkey_method)
#define SSL_R_CANNOT_HAVE_BOTH_PRIVKEY_AND_METHOD
std::unique_ptr< T, DefaultDeleteChar > UniquePtr
UniquePtr< CERT > ssl_cert_dup(CERT *cert)
#define SSL_R_WRONG_CERTIFICATE_TYPE
#define CBS_ASN1_CONSTRUCTED
bool ssl_has_private_key(const SSL_HANDSHAKE *hs)
uint16_t expected_cert_verify_algorithm
void ssl_cert_clear_certs(CERT *cert)
bool ssl_signing_with_dc(const SSL_HANDSHAKE *hs)
bool ssl_nid_to_group_id(uint16_t *out_group_id, int nid)
int(* cert_cb)(SSL *ssl, void *arg)
UniquePtr< CRYPTO_BUFFER > signed_cert_timestamp_list
#define sk_CRYPTO_BUFFER_value
#define sk_CRYPTO_BUFFER_deep_copy
#define SSL_R_LENGTH_MISMATCH
#define SSL_R_BAD_ECC_CERT
#define CBS_get_optional_asn1
CERT(const SSL_X509_METHOD *x509_method)
static int cert_set_chain_and_key(CERT *cert, CRYPTO_BUFFER *const *certs, size_t num_certs, EVP_PKEY *privkey, const SSL_PRIVATE_KEY_METHOD *privkey_method)
#define CBS_ASN1_BITSTRING
#define EVP_PKEY_get0_EC_KEY
#define CRYPTO_BUFFER_init_CBS
@ POINT_CONVERSION_UNCOMPRESSED
#define SSL_R_CERTIFICATE_AND_PRIVATE_KEY_MISMATCH
#define SSL_AD_DECODE_ERROR
UniquePtr< STACK_OF(CRYPTO_BUFFER)> client_CA
UniquePtr< SSL_SESSION > ret
#define SSL_R_NO_PRIVATE_KEY_ASSIGNED
#define CBS_get_u16_length_prefixed
#define EVP_parse_public_key
std::enable_if<!internal::StackTraits< Stack >::kIsConst, bool >::type PushToStack(Stack *sk, UniquePtr< typename internal::StackTraits< Stack >::Type > elem)
#define SSL_R_CA_DN_TOO_LONG
static bool ssl_can_serve_dc(const SSL_HANDSHAKE *hs)
#define SSL_get0_server_requested_CAs
bool ssl_add_client_CA_list(SSL_HANDSHAKE *hs, CBB *cbb)
int SSL_set1_delegated_credential(SSL *ssl, CRYPTO_BUFFER *dc, EVP_PKEY *pkey, const SSL_PRIVATE_KEY_METHOD *key_method)
const SSL_X509_METHOD * x509_method
InternalDescriptorPool * pool
bool ssl_has_certificate(const SSL_HANDSHAKE *hs)
#define SSL_R_UNKNOWN_CERTIFICATE_TYPE
void(* cert_free)(CERT *cert)
#define sk_CRYPTO_BUFFER_set
int SSL_set_ocsp_response(SSL *ssl, const uint8_t *response, size_t response_len)
#define SSL_R_DECODE_ERROR
Array< uint16_t > peer_delegated_credential_sigalgs
UniquePtr< STACK_OF(CRYPTO_BUFFER)> ssl_parse_client_CA_list(SSL *ssl, uint8_t *out_alert, CBS *cbs)
#define SSL_CTX_get0_chain
const SSL_PRIVATE_KEY_METHOD * dc_key_method
int SSL_CTX_set_signed_cert_timestamp_list(SSL_CTX *ctx, const uint8_t *list, size_t list_len)
#define X509_R_KEY_VALUES_MISMATCH
#define CBS_ASN1_SEQUENCE
void SSL_set_cert_cb(SSL *ssl, int(*cb)(SSL *ssl, void *arg), void *arg)
bssl::UniquePtr< STACK_OF(CRYPTO_BUFFER)> certs
bssl::UniquePtr< SSL_CTX > ctx
#define X509_R_UNKNOWN_KEY_TYPE
#define sk_CRYPTO_BUFFER_num
OPENSSL_EXPORT pem_password_cb * cb
UniquePtr< EVP_PKEY > dc_privatekey
#define CRYPTO_BUFFER_data
#define ERR_R_MALLOC_FAILURE
@ leaf_cert_and_privkey_error
bool delegated_credential_requested
#define SSL_R_CANNOT_PARSE_LEAF_CERT
#define CBS_asn1_bitstring_has_bit
bool ssl_cert_check_private_key(const CERT *cert, const EVP_PKEY *privkey)
#define CBB_add_u24_length_prefixed
grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:20