Go to the documentation of this file.
58 #include "../fipsmodule/cipher/internal.h"
77 if (M < 4 || M > 16 || (M & 1) != 0 || L < 2 || L > 8) {
88 return ctx->L >=
sizeof(size_t) ? (
size_t)-1
89 : (((size_t)1) << (
ctx->L * 8)) - 1;
94 const uint8_t *nonce,
size_t nonce_len,
95 const uint8_t *aad,
size_t aad_len,
96 size_t plaintext_len) {
98 const unsigned M =
ctx->M;
99 const unsigned L =
ctx->L;
103 nonce_len != 15 -
L) {
111 state->nonce.c[0] |= 0x40;
114 for (
unsigned i = 0;
i <
L;
i++) {
125 if (aad_len_u64 < 0x10000 - 0x100) {
129 }
else if (aad_len_u64 <= 0xffffffff) {
130 state->cmac.c[0] ^= 0xff;
131 state->cmac.c[1] ^= 0xfe;
138 state->cmac.c[0] ^= 0xff;
139 state->cmac.c[1] ^= 0xff;
152 for (;
i < 16 && aad_len != 0;
i++) {
160 }
while (aad_len != 0);
166 size_t remaining_blocks = 2 * ((plaintext_len + 15) / 16) + 1;
167 if (plaintext_len + 15 < plaintext_len ||
168 remaining_blocks + blocks < blocks ||
176 state->nonce.c[0] &= 7;
184 for (
unsigned i = 0;
i <
ctx->L;
i++) {
185 state->nonce.c[15 -
i] = 0;
187 state->nonce.c[15] = 1;
191 if (
ctx->ctr != NULL) {
203 uint8_t *out_tag,
size_t tag_len,
206 if (tag_len !=
ctx->M) {
224 for (
size_t i = 0;
i <
len;
i++) {
231 for (
unsigned i = 0;
i <
ctx->L;
i++) {
232 state->nonce.c[15 -
i] = 0;
244 uint8_t *out_tag,
size_t tag_len,
245 const uint8_t *nonce,
size_t nonce_len,
247 const uint8_t *aad,
size_t aad_len) {
257 uint8_t *out_tag,
size_t tag_len,
260 const uint8_t *aad,
size_t aad_len) {
268 #define EVP_AEAD_AES_CCM_MAX_TAG_LEN 16
280 "AEAD state is too small");
281 #if defined(__GNUC__) || defined(__clang__)
284 "AEAD state has insufficient alignment");
288 size_t key_len,
size_t tag_len,
unsigned M,
312 ctx->tag_len = tag_len;
325 size_t *out_tag_len,
size_t max_out_tag_len,
const uint8_t *nonce,
326 size_t nonce_len,
const uint8_t *
in,
size_t in_len,
const uint8_t *extra_in,
327 size_t extra_in_len,
const uint8_t *ad,
size_t ad_len) {
336 if (max_out_tag_len < ctx->tag_len) {
347 ctx->tag_len, nonce, nonce_len,
in, in_len, ad,
353 *out_tag_len =
ctx->tag_len;
358 const uint8_t *nonce,
size_t nonce_len,
360 const uint8_t *in_tag,
size_t in_tag_len,
361 const uint8_t *ad,
size_t ad_len) {
375 if (in_tag_len !=
ctx->tag_len) {
383 ctx->tag_len, nonce, nonce_len,
in, in_len, ad,
398 size_t key_len,
size_t tag_len) {
424 size_t key_len,
size_t tag_len) {
static int aead_aes_ccm_bluetooth_init(EVP_AEAD_CTX *ctx, const uint8_t *key, size_t key_len, size_t tag_len)
static int CRYPTO_ccm128_decrypt(const struct ccm128_context *ctx, const AES_KEY *key, uint8_t *out, uint8_t *out_tag, size_t tag_len, const uint8_t *nonce, size_t nonce_len, const uint8_t *in, size_t len, const uint8_t *aad, size_t aad_len)
static int aead_aes_ccm_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)
#define CIPHER_R_INVALID_NONCE_SIZE
static void aead_aes_ccm_cleanup(EVP_AEAD_CTX *ctx)
OPENSSL_EXPORT pem_password_cb void * u
#define CIPHER_R_BAD_KEY_LENGTH
#define CRYPTO_ctr128_encrypt_ctr32
#define EVP_AEAD_AES_CCM_MAX_TAG_LEN
static int CRYPTO_ccm128_init(struct ccm128_context *ctx, const AES_KEY *key, block128_f block, ctr128_f ctr, unsigned M, unsigned L)
static void * OPENSSL_memset(void *dst, int c, size_t n)
union ccm128_state::@338 cmac
#define EVP_AEAD_nonce_length
#define EVP_AEAD_DEFAULT_TAG_LENGTH
static int ccm128_compute_mac(const struct ccm128_context *ctx, struct ccm128_state *state, const AES_KEY *key, uint8_t *out_tag, size_t tag_len, const uint8_t *in, size_t len)
static void * tag(intptr_t t)
void(* ctr128_f)(const uint8_t *in, uint8_t *out, size_t blocks, const AES_KEY *key, const uint8_t ivec[16])
static int aead_aes_ccm_init(EVP_AEAD_CTX *ctx, const uint8_t *key, size_t key_len, size_t tag_len, unsigned M, unsigned L)
#define CIPHER_R_TAG_TOO_LARGE
static int aead_aes_ccm_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)
unsigned __int64 uint64_t
static void * OPENSSL_memcpy(void *dst, const void *src, size_t n)
OPENSSL_STATIC_ASSERT(sizeof(((EVP_AEAD_CTX *) NULL) ->state) >=sizeof(struct aead_aes_ccm_ctx), "AEAD state is too small")
#define ERR_R_INTERNAL_ERROR
static int aead_aes_ccm_bluetooth_8_init(EVP_AEAD_CTX *ctx, const uint8_t *key, size_t key_len, size_t tag_len)
#define CIPHER_R_BUFFER_TOO_SMALL
static int ccm128_init_state(const struct ccm128_context *ctx, struct ccm128_state *state, const AES_KEY *key, const uint8_t *nonce, size_t nonce_len, const uint8_t *aad, size_t aad_len, size_t plaintext_len)
static int ccm128_encrypt(const struct ccm128_context *ctx, struct ccm128_state *state, const AES_KEY *key, uint8_t *out, const uint8_t *in, size_t len)
const EVP_AEAD * EVP_aead_aes_128_ccm_bluetooth(void)
#define CRYPTO_ctr128_encrypt
static size_t CRYPTO_ccm128_max_input(const struct ccm128_context *ctx)
static int CRYPTO_ccm128_encrypt(const struct ccm128_context *ctx, const AES_KEY *key, uint8_t *out, uint8_t *out_tag, size_t tag_len, const uint8_t *nonce, size_t nonce_len, const uint8_t *in, size_t len, const uint8_t *aad, size_t aad_len)
static const EVP_AEAD aead_aes_128_ccm_bluetooth
static const EVP_AEAD aead_aes_128_ccm_bluetooth_8
#define CIPHER_R_TOO_LARGE
struct ccm128_context ccm
union ccm128_state::@338 nonce
#define EVP_AEAD_key_length
#define EVP_AEAD_max_tag_len
if(p->owned &&p->wrapped !=NULL)
void(* block128_f)(const uint8_t in[16], uint8_t out[16], const AES_KEY *key)
#define EVP_AEAD_max_overhead
const EVP_AEAD * EVP_aead_aes_128_ccm_bluetooth_8(void)
#define CIPHER_R_BAD_DECRYPT
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:18