Lightweight Cryptography Primitives
|
LOTUS-AEAD and LOCUS-AEAD authenticated encryption algorithms. More...
#include "aead-common.h"
Go to the source code of this file.
Macros | |
#define | LOTUS_AEAD_KEY_SIZE 16 |
Size of the key for LOTUS-AEAD. | |
#define | LOTUS_AEAD_TAG_SIZE 8 |
Size of the authentication tag for LOTUS-AEAD. | |
#define | LOTUS_AEAD_NONCE_SIZE 16 |
Size of the nonce for LOTUS-AEAD. | |
#define | LOCUS_AEAD_KEY_SIZE 16 |
Size of the key for LOCUS-AEAD. | |
#define | LOCUS_AEAD_TAG_SIZE 8 |
Size of the authentication tag for LOCUS-AEAD. | |
#define | LOCUS_AEAD_NONCE_SIZE 16 |
Size of the nonce for LOCUS-AEAD. | |
Functions | |
int | lotus_aead_encrypt (unsigned char *c, unsigned long long *clen, const unsigned char *m, unsigned long long mlen, const unsigned char *ad, unsigned long long adlen, const unsigned char *nsec, const unsigned char *npub, const unsigned char *k) |
Encrypts and authenticates a packet with LOTUS-AEAD. More... | |
int | lotus_aead_decrypt (unsigned char *m, unsigned long long *mlen, unsigned char *nsec, const unsigned char *c, unsigned long long clen, const unsigned char *ad, unsigned long long adlen, const unsigned char *npub, const unsigned char *k) |
Decrypts and authenticates a packet with LOTUS-AEAD. More... | |
int | locus_aead_encrypt (unsigned char *c, unsigned long long *clen, const unsigned char *m, unsigned long long mlen, const unsigned char *ad, unsigned long long adlen, const unsigned char *nsec, const unsigned char *npub, const unsigned char *k) |
Encrypts and authenticates a packet with LOCUS-AEAD. More... | |
int | locus_aead_decrypt (unsigned char *m, unsigned long long *mlen, unsigned char *nsec, const unsigned char *c, unsigned long long clen, const unsigned char *ad, unsigned long long adlen, const unsigned char *npub, const unsigned char *k) |
Decrypts and authenticates a packet with LOCUS-AEAD. More... | |
Variables | |
aead_cipher_t const | lotus_aead_cipher |
Meta-information block for the LOTUS-AEAD cipher. | |
aead_cipher_t const | locus_aead_cipher |
Meta-information block for the LOCUS-AEAD cipher. | |
LOTUS-AEAD and LOCUS-AEAD authenticated encryption algorithms.
LOTUS-AEAD and LOCUS-AEAD are authenticated encryption algorithms that are based around a tweakable variant of the GIFT-64 block cipher called TweGIFT-64. Both AEAD algorithms have a 128-bit key, a 128-bit nonce, and a 64-bit tag.
The two algorithms have the same key initialization, associated data processing, and tag generation mechanisms. They differ in how the input is encrypted with TweGIFT-64.
LOTUS-AEAD uses a method similar to the block cipher mode OTR. TweGIFT-64 is essentially converted into a 128-bit block cipher using a Feistel construction and four TweGIFT-64 block operations every 16 bytes of input.
LOCUS-AEAD uses a method similar to the block cipher mode OCB with two TweGIFT-64 block operations for every 8 bytes of input. LOCUS-AEAD requires both the block encrypt and block decrypt operations of TweGIFT-64, which increases the overall code size. LOTUS-AEAD only needs the block encrypt operation.
LOTUS-AEAD is the primary member of the family.
References: https://www.isical.ac.in/~lightweight/lotus/
int locus_aead_decrypt | ( | unsigned char * | m, |
unsigned long long * | mlen, | ||
unsigned char * | nsec, | ||
const unsigned char * | c, | ||
unsigned long long | clen, | ||
const unsigned char * | ad, | ||
unsigned long long | adlen, | ||
const unsigned char * | npub, | ||
const unsigned char * | k | ||
) |
Decrypts and authenticates a packet with LOCUS-AEAD.
m | Buffer to receive the plaintext message on output. |
mlen | Receives the length of the plaintext message on output. |
nsec | Secret nonce - not used by this algorithm. |
c | Buffer that contains the ciphertext and authentication tag to decrypt. |
clen | Length of the input data in bytes, which includes the ciphertext and the 9 byte authentication tag. |
ad | Buffer that contains associated data to authenticate along with the packet but which does not need to be encrypted. |
adlen | Length of the associated data in bytes. |
npub | Points to the public nonce for the packet which must be 16 bytes in length. |
k | Points to the 16 bytes of the key to use to decrypt the packet. |
int locus_aead_encrypt | ( | unsigned char * | c, |
unsigned long long * | clen, | ||
const unsigned char * | m, | ||
unsigned long long | mlen, | ||
const unsigned char * | ad, | ||
unsigned long long | adlen, | ||
const unsigned char * | nsec, | ||
const unsigned char * | npub, | ||
const unsigned char * | k | ||
) |
Encrypts and authenticates a packet with LOCUS-AEAD.
c | Buffer to receive the output. |
clen | On exit, set to the length of the output which includes the ciphertext and the 8 byte authentication tag. |
m | Buffer that contains the plaintext message to encrypt. |
mlen | Length of the plaintext message in bytes. |
ad | Buffer that contains associated data to authenticate along with the packet but which does not need to be encrypted. |
adlen | Length of the associated data in bytes. |
nsec | Secret nonce - not used by this algorithm. |
npub | Points to the public nonce for the packet which must be 16 bytes in length. |
k | Points to the 16 bytes of the key to use to encrypt the packet. |
int lotus_aead_decrypt | ( | unsigned char * | m, |
unsigned long long * | mlen, | ||
unsigned char * | nsec, | ||
const unsigned char * | c, | ||
unsigned long long | clen, | ||
const unsigned char * | ad, | ||
unsigned long long | adlen, | ||
const unsigned char * | npub, | ||
const unsigned char * | k | ||
) |
Decrypts and authenticates a packet with LOTUS-AEAD.
m | Buffer to receive the plaintext message on output. |
mlen | Receives the length of the plaintext message on output. |
nsec | Secret nonce - not used by this algorithm. |
c | Buffer that contains the ciphertext and authentication tag to decrypt. |
clen | Length of the input data in bytes, which includes the ciphertext and the 9 byte authentication tag. |
ad | Buffer that contains associated data to authenticate along with the packet but which does not need to be encrypted. |
adlen | Length of the associated data in bytes. |
npub | Points to the public nonce for the packet which must be 16 bytes in length. |
k | Points to the 16 bytes of the key to use to decrypt the packet. |
int lotus_aead_encrypt | ( | unsigned char * | c, |
unsigned long long * | clen, | ||
const unsigned char * | m, | ||
unsigned long long | mlen, | ||
const unsigned char * | ad, | ||
unsigned long long | adlen, | ||
const unsigned char * | nsec, | ||
const unsigned char * | npub, | ||
const unsigned char * | k | ||
) |
Encrypts and authenticates a packet with LOTUS-AEAD.
c | Buffer to receive the output. |
clen | On exit, set to the length of the output which includes the ciphertext and the 8 byte authentication tag. |
m | Buffer that contains the plaintext message to encrypt. |
mlen | Length of the plaintext message in bytes. |
ad | Buffer that contains associated data to authenticate along with the packet but which does not need to be encrypted. |
adlen | Length of the associated data in bytes. |
nsec | Secret nonce - not used by this algorithm. |
npub | Points to the public nonce for the packet which must be 16 bytes in length. |
k | Points to the 16 bytes of the key to use to encrypt the packet. |