Lightweight Cryptography Primitives
|
GIFT-128 block cipher. More...
Go to the source code of this file.
Data Structures | |
struct | gift128b_key_schedule_t |
Structure of the key schedule for GIFT-128 (bit-sliced). More... | |
Macros | |
#define | GIFT128_BLK_SIZE 16 |
Size of a GIFT-128 block in bytes. | |
#define | GIFT128_ROUND_KEYS 80 |
Number of round keys for the GIFT-128 key schedule. | |
Functions | |
void | gift128b_init (gift128b_key_schedule_t *ks, const unsigned char *key) |
Initializes the key schedule for GIFT-128 (bit-sliced). More... | |
void | gift128b_encrypt_preloaded (const gift128b_key_schedule_t *ks, uint32_t output[4], const uint32_t input[4]) |
Encrypts a 128-bit block with GIFT-128 (bit-sliced and pre-loaded). More... | |
void | gift128b_decrypt_preloaded (const gift128b_key_schedule_t *ks, uint32_t output[4], const uint32_t input[4]) |
Decrypts a 128-bit block with GIFT-128 (bit-sliced and pre-loaded). More... | |
void | gift128_nibbles_to_words (uint32_t block[4]) |
Converts the GIFT-128 nibble-based representation into word-based. More... | |
void | gift128_words_to_nibbles (uint32_t block[4]) |
Converts the GIFT-128 word-based representation into nibble-based. More... | |
GIFT-128 block cipher.
This version of GIFT-128 implements a cutdown form of the bit-sliced representation of GIFT-128 that is used by GIFT-COFB.
Only initialization and block encryption are supported, and the encryption function assumes that the input data was already converted from big endian to host byte order by the caller.
References: https://eprint.iacr.org/2017/622.pdf, https://eprint.iacr.org/2020/412.pdf, https://giftcipher.github.io/gift/
void gift128_nibbles_to_words | ( | uint32_t | block[4] | ) |
Converts the GIFT-128 nibble-based representation into word-based.
block | Block to convert from nibble-based to word-based. |
void gift128_words_to_nibbles | ( | uint32_t | block[4] | ) |
Converts the GIFT-128 word-based representation into nibble-based.
block | Block to convert from word-based to nibble-based. |
void gift128b_decrypt_preloaded | ( | const gift128b_key_schedule_t * | ks, |
uint32_t | output[4], | ||
const uint32_t | input[4] | ||
) |
Decrypts a 128-bit block with GIFT-128 (bit-sliced and pre-loaded).
ks | Points to the GIFT-128 key schedule. |
output | Output buffer which must be at least 16 bytes in length. |
input | Input buffer which must be at least 16 bytes in length. |
The input and output buffers can be the same buffer for in-place decryption.
This function assumes that the input has already been pre-loaded from big-endian into host byte order in the supplied word array. The output is delivered in the same way.
void gift128b_encrypt_preloaded | ( | const gift128b_key_schedule_t * | ks, |
uint32_t | output[4], | ||
const uint32_t | input[4] | ||
) |
Encrypts a 128-bit block with GIFT-128 (bit-sliced and pre-loaded).
ks | Points to the GIFT-128 key schedule. |
output | Output buffer which must be at least 16 bytes in length. |
input | Input buffer which must be at least 16 bytes in length. |
The input and output buffers can be the same buffer for in-place encryption.
This function assumes that the input has already been pre-loaded from big-endian into host byte order in the supplied word array. The output is delivered in the same way.
void gift128b_init | ( | gift128b_key_schedule_t * | ks, |
const unsigned char * | key | ||
) |
Initializes the key schedule for GIFT-128 (bit-sliced).
ks | Points to the key schedule to initialize. |
key | Points to the 16 bytes of the key data. |