20#ifndef LC_ASCON_AEAD_H
21#define LC_ASCON_AEAD_H
31#define LC_ASCON_MAX_KEYSIZE 64
33struct lc_ascon_cryptor {
34 uint8_t key[LC_ASCON_MAX_KEYSIZE];
44#define LC_ASCON_ALIGNMENT LC_XOR_ALIGNMENT(LC_HASH_COMMON_ALIGNMENT)
46#define _LC_ASCON_SET_CTX(name, hashname, ctx, offset) \
47 name->state = LC_ALIGN_HASH_MASK(((uint8_t *)(ctx)) + (offset)); \
50#define LC_ASCON_SET_CTX(name, hashname, ascon_impl) \
51 LC_AEAD_HASH_ALIGN_CTX(name, ascon_impl); \
52 _LC_ASCON_SET_CTX(((struct lc_ascon_cryptor *)name->aead_state), \
54 ((struct lc_ascon_cryptor *)name->aead_state), \
55 (sizeof(struct lc_ascon_cryptor)))
57static inline int lc_ascon_load_key(
struct lc_ascon_cryptor *ascon,
58 const uint8_t *key,
size_t keylen)
60 if (ascon && keylen < LC_ASCON_MAX_KEYSIZE) {
61 memcpy(ascon->key, key, keylen);
62 ascon->keylen = (uint8_t)keylen;
72static inline void lc_ascon_add_padbyte(
struct lc_ascon_cryptor *ascon,
75 const struct lc_hash *hash = ascon->hash;
77 static const uint8_t pad_data = 0x01;
83 if (offset == hash->sponge_rate)
int lc_hash(const struct lc_hash *hash, const uint8_t *in, size_t inlen, uint8_t *digest)
Calculate message digest - one-shot.
int lc_sponge_add_bytes(const struct lc_hash *hash, void *state, const uint8_t *data, size_t offset, size_t length)
Function to add (in GF(2), using bitwise exclusive-or) data given as bytes into the sponge state.