Go to the documentation of this file.
27 #include "../chacha/internal.h"
28 #include "../fipsmodule/cipher/internal.h"
29 #include "../internal.h"
37 "AEAD state is too small");
38 #if defined(__GNUC__) || defined(__clang__)
41 "AEAD state has insufficient alignment");
45 size_t key_len,
size_t tag_len) {
58 if (key_len !=
sizeof(c20_ctx->
key)) {
63 ctx->tag_len = tag_len;
73 for (
unsigned i = 0;
i <
sizeof(length_bytes);
i++) {
74 length_bytes[
i] = data_len;
85 const uint8_t *ciphertext_extra,
86 size_t ciphertext_extra_len) {
87 alignas(16)
uint8_t poly1305_key[32];
92 static const uint8_t padding[16] = { 0 };
96 if (ad_len % 16 != 0) {
101 const size_t ciphertext_total = ciphertext_len + ciphertext_extra_len;
102 if (ciphertext_total % 16 != 0) {
104 sizeof(padding) - (ciphertext_total % 16));
113 size_t *out_tag_len,
size_t max_out_tag_len,
const uint8_t *nonce,
114 size_t nonce_len,
const uint8_t *
in,
size_t in_len,
const uint8_t *extra_in,
115 size_t extra_in_len,
const uint8_t *ad,
size_t ad_len,
size_t tag_len) {
116 if (extra_in_len + tag_len < tag_len) {
120 if (max_out_tag_len < tag_len + extra_in_len) {
124 if (nonce_len != 12) {
136 if (in_len_64 >= (
UINT64_C(1) << 32) * 64 - 64) {
141 if (max_out_tag_len < tag_len) {
149 static const size_t kChaChaBlockSize = 64;
150 uint32_t block_counter = 1 + (in_len / kChaChaBlockSize);
151 size_t offset = in_len % kChaChaBlockSize;
154 for (
size_t done = 0;
done < extra_in_len; block_counter++) {
171 data.in.extra_ciphertext = out_tag;
172 data.in.extra_ciphertext_len = extra_in_len;
181 *out_tag_len = extra_in_len + tag_len;
187 size_t *out_tag_len,
size_t max_out_tag_len,
const uint8_t *
nonce,
188 size_t nonce_len,
const uint8_t *
in,
size_t in_len,
const uint8_t *extra_in,
189 size_t extra_in_len,
const uint8_t *ad,
size_t ad_len) {
194 c20_ctx->
key,
out, out_tag, out_tag_len, max_out_tag_len, nonce,
195 nonce_len,
in, in_len, extra_in, extra_in_len, ad, ad_len,
ctx->tag_len);
200 size_t *out_tag_len,
size_t max_out_tag_len,
const uint8_t *nonce,
201 size_t nonce_len,
const uint8_t *
in,
size_t in_len,
const uint8_t *extra_in,
202 size_t extra_in_len,
const uint8_t *ad,
size_t ad_len) {
206 if (nonce_len != 24) {
211 alignas(4)
uint8_t derived_key[32];
212 alignas(4)
uint8_t derived_nonce[12];
218 derived_key,
out, out_tag, out_tag_len, max_out_tag_len,
219 derived_nonce,
sizeof(derived_nonce),
in, in_len, extra_in, extra_in_len,
220 ad, ad_len,
ctx->tag_len);
226 size_t in_tag_len,
const uint8_t *ad,
size_t ad_len,
size_t tag_len) {
227 if (nonce_len != 12) {
232 if (in_tag_len != tag_len) {
244 if (in_len_64 >= (
UINT64_C(1) << 32) * 64 - 64) {
271 size_t in_tag_len,
const uint8_t *ad,
size_t ad_len) {
276 in_len, in_tag, in_tag_len, ad, ad_len,
283 size_t in_tag_len,
const uint8_t *ad,
size_t ad_len) {
287 if (nonce_len != 24) {
292 alignas(4)
uint8_t derived_key[32];
293 alignas(4)
uint8_t derived_nonce[12];
299 derived_key,
out, derived_nonce,
sizeof(derived_nonce),
in, in_len,
300 in_tag, in_tag_len, ad, ad_len,
ctx->tag_len);
return memset(p, 0, total)
static int aead_xchacha20_poly1305_seal_scatter(const EVP_AEAD_CTX *ctx, uint8_t *out, uint8_t *out_tag, size_t *out_tag_len, size_t max_out_tag_len, const uint8_t *nonce, size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *extra_in, size_t extra_in_len, const uint8_t *ad, size_t ad_len)
#define OPENSSL_PUT_ERROR(library, reason)
static int chacha20_poly1305_open_gather(const uint8_t *key, uint8_t *out, const uint8_t *nonce, size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *in_tag, size_t in_tag_len, const uint8_t *ad, size_t ad_len, size_t tag_len)
const EVP_AEAD * EVP_aead_chacha20_poly1305(void)
static void aead_chacha20_poly1305_cleanup(EVP_AEAD_CTX *ctx)
static struct test_ctx ctx
static void * OPENSSL_memset(void *dst, int c, size_t n)
const EVP_AEAD * EVP_aead_xchacha20_poly1305(void)
static void * tag(intptr_t t)
#define CIPHER_R_UNSUPPORTED_NONCE_SIZE
unsigned __int64 uint64_t
static void * OPENSSL_memcpy(void *dst, const void *src, size_t n)
static int aead_chacha20_poly1305_open_gather(const EVP_AEAD_CTX *ctx, uint8_t *out, const uint8_t *nonce, size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *in_tag, size_t in_tag_len, const uint8_t *ad, size_t ad_len)
#define CIPHER_R_BUFFER_TOO_SMALL
#define CRYPTO_poly1305_init
static const EVP_AEAD aead_chacha20_poly1305
#define CRYPTO_poly1305_finish
static const EVP_AEAD aead_xchacha20_poly1305
static int chacha20_poly1305_seal_scatter(const uint8_t *key, uint8_t *out, uint8_t *out_tag, size_t *out_tag_len, size_t max_out_tag_len, const uint8_t *nonce, size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *extra_in, size_t extra_in_len, const uint8_t *ad, size_t ad_len, size_t tag_len)
static int aead_chacha20_poly1305_seal_scatter(const EVP_AEAD_CTX *ctx, uint8_t *out, uint8_t *out_tag, size_t *out_tag_len, size_t max_out_tag_len, const uint8_t *nonce, size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *extra_in, size_t extra_in_len, const uint8_t *ad, size_t ad_len)
OPENSSL_STATIC_ASSERT(sizeof(((EVP_AEAD_CTX *) NULL) ->state) >=sizeof(struct aead_chacha20_poly1305_ctx), "AEAD state is too small")
#define CIPHER_R_TOO_LARGE
static void poly1305_update_length(poly1305_state *poly1305, size_t data_len)
uint8_t poly1305_state[512]
static void calc_tag(uint8_t tag[POLY1305_TAG_LEN], const uint8_t *key, const uint8_t nonce[12], const uint8_t *ad, size_t ad_len, const uint8_t *ciphertext, size_t ciphertext_len, const uint8_t *ciphertext_extra, size_t ciphertext_extra_len)
static int aead_xchacha20_poly1305_open_gather(const EVP_AEAD_CTX *ctx, uint8_t *out, const uint8_t *nonce, size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *in_tag, size_t in_tag_len, const uint8_t *ad, size_t ad_len)
static int aead_chacha20_poly1305_init(EVP_AEAD_CTX *ctx, const uint8_t *key, size_t key_len, size_t tag_len)
if(p->owned &&p->wrapped !=NULL)
#define CIPHER_R_BAD_DECRYPT
#define CRYPTO_poly1305_update
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:18