Go to the documentation of this file.
24 #include "../crypto/internal.h"
28 #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
29 #define FUZZER_MODE true
31 #define FUZZER_MODE false
38 : cipher_(cipher_arg),
40 is_dtls_(is_dtls_arg),
41 variable_nonce_included_in_record_(
false),
42 random_variable_nonce_(
false),
43 xor_fixed_nonce_(
false),
44 omit_length_in_ad_(
false),
45 ad_is_header_(
false) {
52 return MakeUnique<SSLAEADContext>(0 , is_dtls,
62 size_t expected_mac_key_len, expected_fixed_iv_len;
65 &expected_fixed_iv_len,
cipher, protocol_version,
68 expected_fixed_iv_len != fixed_iv.
size() ||
69 expected_mac_key_len != mac_key.
size()) {
75 if (!mac_key.
empty()) {
91 UniquePtr<SSLAEADContext> aead_ctx =
98 assert(aead_ctx->ProtocolVersion() == protocol_version);
101 aead_ctx->ctx_.get(), aead, enc_key.
data(), enc_key.
size(),
108 "variable_nonce_len doesn't fit in uint8_t");
110 if (mac_key.
empty()) {
111 assert(fixed_iv.
size() <=
sizeof(aead_ctx->fixed_nonce_));
113 aead_ctx->fixed_nonce_len_ = fixed_iv.
size();
117 aead_ctx->xor_fixed_nonce_ =
true;
118 aead_ctx->variable_nonce_len_ = 8;
121 assert(fixed_iv.
size() <= aead_ctx->variable_nonce_len_);
122 aead_ctx->variable_nonce_len_ -= fixed_iv.
size();
127 aead_ctx->variable_nonce_included_in_record_ =
true;
133 aead_ctx->xor_fixed_nonce_ =
true;
134 aead_ctx->variable_nonce_len_ = 8;
135 aead_ctx->variable_nonce_included_in_record_ =
false;
136 aead_ctx->ad_is_header_ =
true;
137 assert(fixed_iv.
size() >= aead_ctx->variable_nonce_len_);
141 aead_ctx->variable_nonce_included_in_record_ =
true;
142 aead_ctx->random_variable_nonce_ =
true;
143 aead_ctx->omit_length_in_ad_ =
true;
166 return protocol_version;
190 const size_t extra_in_len)
const {
192 *out_suffix_len = extra_in_len;
200 const size_t extra_in_len)
const {
207 if (len < in_len || len >= 0xffff) {
252 size_t plaintext_len = 0;
265 seqnum, plaintext_len,
header);
269 size_t nonce_len = 0;
306 nonce_len,
in.data(),
in.size(), ad.
data(),
319 size_t in_len,
const uint8_t *extra_in,
320 size_t extra_in_len) {
323 if (!
SuffixLen(&suffix_len, in_len, extra_in_len)) {
347 size_t nonce_len = 0;
391 size_t written_suffix_len;
393 ctx_.get(),
out, out_suffix, &written_suffix_len, suffix_len, nonce,
394 nonce_len,
in, in_len, extra_in, extra_in_len, ad.
data(), ad.
size());
395 assert(!
result || written_suffix_len == suffix_len);
405 if (!
SuffixLen(&suffix_len, in_len, 0)) {
409 if (in_len + prefix_len < in_len ||
410 in_len + prefix_len + suffix_len < in_len + prefix_len) {
414 if (in_len + prefix_len + suffix_len > max_out_len) {
420 record_version, seqnum,
header,
in, in_len, 0, 0)) {
423 *out_len = prefix_len + in_len + suffix_len;
#define SSL_CHACHA20POLY1305
#define EVP_AEAD_MAX_NONCE_LENGTH
#define OPENSSL_PUT_ERROR(library, reason)
static UniquePtr< SSLAEADContext > CreatePlaceholderForQUIC(uint16_t version, const SSL_CIPHER *cipher)
#define EVP_AEAD_CTX_get_iv
#define SSL_R_OUTPUT_ALIASES_INPUT
uint16_t RecordVersion() const
uint8_t variable_nonce_len_
#define EVP_AEAD_CTX_aead
static void * OPENSSL_memset(void *dst, int c, size_t n)
#define EVP_AEAD_nonce_length
Span< const uint8_t > GetAdditionalData(uint8_t storage[13], uint8_t type, uint16_t record_version, const uint8_t seqnum[8], size_t plaintext_len, Span< const uint8_t > header)
#define EVP_AEAD_DEFAULT_TAG_LENGTH
#define EVP_AEAD_CTX_init_with_direction
bool ssl_protocol_version_from_wire(uint16_t *out, uint16_t version)
#define SSL_R_BAD_PACKET_LENGTH
static void * OPENSSL_memcpy(void *dst, const void *src, size_t n)
#define BSSL_NAMESPACE_END
struct absl::base_internal::@2940::AllocList::Header header
bool random_variable_nonce_
#define ERR_R_INTERNAL_ERROR
static UniquePtr< SSLAEADContext > CreateNullCipher(bool is_dtls)
static const size_t overhead
bool variable_nonce_included_in_record_
SSLAEADContext(uint16_t version, bool is_dtls, const SSL_CIPHER *cipher)
uint16_t ProtocolVersion() const
const SSL_CIPHER * cipher() const
void SetVersionIfNullCipher(uint16_t version)
size_t MaxOverhead() const
#define EVP_AEAD_CTX_open
bool SuffixLen(size_t *out_suffix_len, size_t in_len, size_t extra_in_len) const
bool Open(Span< uint8_t > *out, uint8_t type, uint16_t record_version, const uint8_t seqnum[8], Span< const uint8_t > header, Span< uint8_t > in)
bool ssl_cipher_get_evp_aead(const EVP_AEAD **out_aead, size_t *out_mac_secret_len, size_t *out_fixed_iv_len, const SSL_CIPHER *cipher, uint16_t version, bool is_dtls)
#define EVP_AEAD_MAX_KEY_LENGTH
#define EVP_AEAD_CTX_tag_len
bool Seal(uint8_t *out, size_t *out_len, size_t max_out, uint8_t type, uint16_t record_version, const uint8_t seqnum[8], Span< const uint8_t > header, const uint8_t *in, size_t in_len)
bool is_null_cipher() const
static void * OPENSSL_memmove(void *dst, const void *src, size_t n)
bool SealScatter(uint8_t *out_prefix, uint8_t *out, uint8_t *out_suffix, uint8_t type, uint16_t record_version, const uint8_t seqnum[8], Span< const uint8_t > header, const uint8_t *in, size_t in_len, const uint8_t *extra_in, size_t extra_in_len)
#define SSL_R_BUFFER_TOO_SMALL
size_t ExplicitNonceLen() const
#define EVP_AEAD_CTX_seal_scatter
static int buffers_alias(const uint8_t *a, size_t a_len, const uint8_t *b, size_t b_len)
bool GetIV(const uint8_t **out_iv, size_t *out_iv_len) const
#define SSL_R_RECORD_TOO_LARGE
static ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES absl::base_internal::AtomicHook< StatusPayloadPrinter > storage
static UniquePtr< SSLAEADContext > Create(enum evp_aead_direction_t direction, uint16_t version, bool is_dtls, const SSL_CIPHER *cipher, Span< const uint8_t > enc_key, Span< const uint8_t > mac_key, Span< const uint8_t > fixed_iv)
bool CiphertextLen(size_t *out_len, size_t in_len, size_t extra_in_len) const
#define ERR_R_MALLOC_FAILURE
#define EVP_AEAD_max_overhead
constexpr Span< const T > MakeConstSpan(T *ptr, size_t size) noexcept
grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:15