32 int (*setkey)(
void *state,
const uint8_t *key,
const size_t keylen,
33 const uint8_t *iv,
size_t ivlen);
34 void (*encrypt)(
void *state,
const uint8_t *plaintext,
35 uint8_t *ciphertext,
size_t datalen,
const uint8_t *aad,
36 size_t aadlen, uint8_t *tag,
size_t taglen);
37 void (*enc_init)(
void *state,
const uint8_t *aad,
size_t aadlen);
38 void (*enc_update)(
void *state,
const uint8_t *plaintext,
39 uint8_t *ciphertext,
size_t datalen);
40 void (*enc_final)(
void *state, uint8_t *tag,
size_t taglen);
41 int (*decrypt)(
void *state,
const uint8_t *ciphertext,
42 uint8_t *plaintext,
size_t datalen,
const uint8_t *aad,
43 size_t aadlen,
const uint8_t *tag,
size_t taglen);
44 void (*dec_init)(
void *state,
const uint8_t *aad,
size_t aadlen);
45 void (*dec_update)(
void *state,
const uint8_t *ciphertext,
46 uint8_t *plaintext,
size_t datalen);
47 int (*dec_final)(
void *state,
const uint8_t *tag,
size_t taglen);
48 void (*zero)(
void *state);
49 uint64_t algorithm_type;
53 const struct lc_aead *aead;
57#define LC_AEAD_CTX(name, cb) \
59 name->aead_state = (uint8_t *)(name) + sizeof(struct lc_aead_ctx)
61#define LC_AEAD_HASH_ALIGN_CTX(name, cb) \
63 name->aead_state = LC_ALIGN_HASH_MASK((uint8_t *)(name) + \
64 sizeof(struct lc_aead_ctx))
115 const size_t keylen,
const uint8_t *iv,
size_t ivlen);
139 uint8_t *ciphertext,
size_t datalen,
const uint8_t *aad,
140 size_t aadlen, uint8_t *tag,
size_t taglen);
176 uint8_t *ciphertext,
size_t datalen);
215 uint8_t *plaintext,
size_t datalen,
const uint8_t *aad,
216 size_t aadlen,
const uint8_t *tag,
size_t taglen);
252 uint8_t *plaintext,
size_t datalen);
int lc_aead_dec_update(struct lc_aead_ctx *ctx, const uint8_t *ciphertext, uint8_t *plaintext, size_t datalen)
AEAD-decrypt data - send partial data.
int lc_aead_encrypt(struct lc_aead_ctx *ctx, const uint8_t *plaintext, uint8_t *ciphertext, size_t datalen, const uint8_t *aad, size_t aadlen, uint8_t *tag, size_t taglen)
AEAD-encrypt data in one call.
int lc_aead_enc_init(struct lc_aead_ctx *ctx, const uint8_t *aad, size_t aadlen)
Initialize AEAD encryption.
int lc_aead_dec_init(struct lc_aead_ctx *ctx, const uint8_t *aad, size_t aadlen)
Initialize AEAD decryption.
uint64_t lc_aead_ctx_algorithm_type(const struct lc_aead_ctx *ctx)
Obtain algorithm type usable with lc_alg_status.
int lc_aead_dec_final(struct lc_aead_ctx *ctx, const uint8_t *tag, size_t taglen)
AEAD-decrypt data - Perform authentication.
int lc_aead_setkey(struct lc_aead_ctx *ctx, const uint8_t *key, const size_t keylen, const uint8_t *iv, size_t ivlen)
Set the key for the AEAD encyption or decryption operation.
int lc_aead_enc_update(struct lc_aead_ctx *ctx, const uint8_t *plaintext, uint8_t *ciphertext, size_t datalen)
AEAD-encrypt data - send partial data.
int lc_aead_enc_final(struct lc_aead_ctx *ctx, uint8_t *tag, size_t taglen)
Complete AEAD encryption - Obtain the authentication tag from the encryption operation.
void lc_aead_zero(struct lc_aead_ctx *ctx)
Zeroize AEAD context.
void lc_aead_zero_free(struct lc_aead_ctx *ctx)
Zeroize and free AEAD context.
int lc_aead_decrypt(struct lc_aead_ctx *ctx, const uint8_t *ciphertext, uint8_t *plaintext, size_t datalen, const uint8_t *aad, size_t aadlen, const uint8_t *tag, size_t taglen)
AEAD-decrypt data in one call.
uint64_t lc_aead_algorithm_type(const struct lc_aead *aead)
Obtain algorithm type usable with lc_alg_status.