Lightweight Cryptography Primitives
 All Data Structures Files Functions Variables Typedefs Macros Pages
Data Structures | Macros | Typedefs | Functions
internal-gift128-m.h File Reference

Masked version of the GIFT-128 block cipher. More...

#include "internal-masking.h"
#include "internal-gift128-config.h"

Go to the source code of this file.

Data Structures

struct  gift128b_masked_key_schedule_t
 Structure of the key schedule for masked GIFT-128 (bit-sliced). More...
 

Macros

#define GIFT128_MASKED_BLOCK_SIZE   16
 Size of a GIFT-128 block in bytes.
 
#define GIFT128_MASKED_ROUND_KEYS   80
 Number of round keys for the GIFT-128 key schedule.
 
#define GIFT128TM_TWEAK_0   0x00000000
 
#define GIFT128TM_TWEAK_1   0xe1e1e1e1
 
#define GIFT128TM_TWEAK_2   0xd2d2d2d2
 
#define GIFT128TM_TWEAK_3   0x33333333
 
#define GIFT128TM_TWEAK_4   0xb4b4b4b4
 
#define GIFT128TM_TWEAK_5   0x55555555
 
#define GIFT128TM_TWEAK_6   0x66666666
 
#define GIFT128TM_TWEAK_7   0x87878787
 
#define GIFT128TM_TWEAK_8   0x78787878
 
#define GIFT128TM_TWEAK_9   0x99999999
 
#define GIFT128TM_TWEAK_10   0xaaaaaaaa
 
#define GIFT128TM_TWEAK_11   0x4b4b4b4b
 
#define GIFT128TM_TWEAK_12   0xcccccccc
 
#define GIFT128TM_TWEAK_13   0x2d2d2d2d
 
#define GIFT128TM_TWEAK_14   0x1e1e1e1e
 
#define GIFT128TM_TWEAK_15   0xffffffff
 

Typedefs

typedef
gift128b_masked_key_schedule_t 
gift128n_masked_key_schedule_t
 Structure of the key schedule for masked GIFT-128 (nibble-based).
 

Functions

void gift128b_init_masked (gift128b_masked_key_schedule_t *ks, const unsigned char *key)
 Initializes the key schedule for masked GIFT-128 (bit-sliced). More...
 
void gift128b_encrypt_masked (const gift128b_masked_key_schedule_t *ks, unsigned char *output, const unsigned char *input)
 Encrypts a 128-bit block with masked GIFT-128 (bit-sliced). More...
 
void gift128b_encrypt_preloaded_masked (const gift128b_masked_key_schedule_t *ks, mask_uint32_t output[4], const mask_uint32_t input[4])
 Encrypts a block with masked GIFT-128 (bit-sliced and pre-loaded). More...
 
void gift128b_decrypt_masked (const gift128b_masked_key_schedule_t *ks, unsigned char *output, const unsigned char *input)
 Decrypts a 128-bit block with masked GIFT-128 (bit-sliced). More...
 
void gift128n_init_masked (gift128n_masked_key_schedule_t *ks, const unsigned char *key)
 Initializes the key schedule for masked GIFT-128 (nibble-based). More...
 
void gift128n_encrypt_masked (const gift128n_masked_key_schedule_t *ks, unsigned char *output, const unsigned char *input)
 Encrypts a 128-bit block with masked GIFT-128 (nibble-based). More...
 
void gift128n_decrypt_masked (const gift128n_masked_key_schedule_t *ks, unsigned char *output, const unsigned char *input)
 Decrypts a 128-bit block with masked GIFT-128 (nibble-based). More...
 
void gift128t_encrypt_masked (const gift128n_masked_key_schedule_t *ks, unsigned char *output, const unsigned char *input, uint32_t tweak)
 Encrypts a 128-bit block with masked TweGIFT-128 (tweakable variant). More...
 
void gift128t_decrypt_masked (const gift128n_masked_key_schedule_t *ks, unsigned char *output, const unsigned char *input, uint32_t tweak)
 Decrypts a 128-bit block with masked TweGIFT-128 (tweakable variant). More...
 

Detailed Description

Masked version of the GIFT-128 block cipher.

Macro Definition Documentation

#define GIFT128TM_TWEAK_0   0x00000000

TweGIFT-128 tweak value 0

#define GIFT128TM_TWEAK_1   0xe1e1e1e1

TweGIFT-128 tweak value 1

#define GIFT128TM_TWEAK_10   0xaaaaaaaa

TweGIFT-128 tweak value 10

#define GIFT128TM_TWEAK_11   0x4b4b4b4b

TweGIFT-128 tweak value 11

#define GIFT128TM_TWEAK_12   0xcccccccc

TweGIFT-128 tweak value 12

#define GIFT128TM_TWEAK_13   0x2d2d2d2d

TweGIFT-128 tweak value 13

#define GIFT128TM_TWEAK_14   0x1e1e1e1e

TweGIFT-128 tweak value 14

#define GIFT128TM_TWEAK_15   0xffffffff

TweGIFT-128 tweak value 15

#define GIFT128TM_TWEAK_2   0xd2d2d2d2

TweGIFT-128 tweak value 2

#define GIFT128TM_TWEAK_3   0x33333333

TweGIFT-128 tweak value 3

#define GIFT128TM_TWEAK_4   0xb4b4b4b4

TweGIFT-128 tweak value 4

#define GIFT128TM_TWEAK_5   0x55555555

TweGIFT-128 tweak value 5

#define GIFT128TM_TWEAK_6   0x66666666

TweGIFT-128 tweak value 6

#define GIFT128TM_TWEAK_7   0x87878787

TweGIFT-128 tweak value 7

#define GIFT128TM_TWEAK_8   0x78787878

TweGIFT-128 tweak value 8

#define GIFT128TM_TWEAK_9   0x99999999

TweGIFT-128 tweak value 9

Function Documentation

void gift128b_decrypt_masked ( const gift128b_masked_key_schedule_t ks,
unsigned char *  output,
const unsigned char *  input 
)

Decrypts a 128-bit block with masked GIFT-128 (bit-sliced).

Parameters
ksPoints to the masked GIFT-128 key schedule.
outputOutput buffer which must be at least 16 bytes in length.
inputInput buffer which must be at least 16 bytes in length.

The input and output buffers can be the same buffer for in-place decryption.

void gift128b_encrypt_masked ( const gift128b_masked_key_schedule_t ks,
unsigned char *  output,
const unsigned char *  input 
)

Encrypts a 128-bit block with masked GIFT-128 (bit-sliced).

Parameters
ksPoints to the masked GIFT-128 key schedule.
outputOutput buffer which must be at least 16 bytes in length.
inputInput buffer which must be at least 16 bytes in length.

The input and output buffers can be the same buffer for in-place encryption.

void gift128b_encrypt_preloaded_masked ( const gift128b_masked_key_schedule_t ks,
mask_uint32_t  output[4],
const mask_uint32_t  input[4] 
)

Encrypts a block with masked GIFT-128 (bit-sliced and pre-loaded).

Parameters
ksPoints to the masked GIFT-128 key schedule.
outputOutput buffer which must be at least 16 bytes in length.
inputInput 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 version 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_masked ( gift128b_masked_key_schedule_t ks,
const unsigned char *  key 
)

Initializes the key schedule for masked GIFT-128 (bit-sliced).

Parameters
ksPoints to the key schedule to initialize.
keyPoints to the 16 bytes of the key data.
void gift128n_decrypt_masked ( const gift128n_masked_key_schedule_t ks,
unsigned char *  output,
const unsigned char *  input 
)

Decrypts a 128-bit block with masked GIFT-128 (nibble-based).

Parameters
ksPoints to the masked GIFT-128 key schedule.
outputOutput buffer which must be at least 16 bytes in length.
inputInput buffer which must be at least 16 bytes in length.

The input and output buffers can be the same buffer for in-place decryption.

void gift128n_encrypt_masked ( const gift128n_masked_key_schedule_t ks,
unsigned char *  output,
const unsigned char *  input 
)

Encrypts a 128-bit block with masked GIFT-128 (nibble-based).

Parameters
ksPoints to the masked GIFT-128 key schedule.
outputOutput buffer which must be at least 16 bytes in length.
inputInput buffer which must be at least 16 bytes in length.

The input and output buffers can be the same buffer for in-place encryption.

void gift128n_init_masked ( gift128n_masked_key_schedule_t ks,
const unsigned char *  key 
)

Initializes the key schedule for masked GIFT-128 (nibble-based).

Parameters
ksPoints to the key schedule to initialize.
keyPoints to the 16 bytes of the key data.
void gift128t_decrypt_masked ( const gift128n_masked_key_schedule_t ks,
unsigned char *  output,
const unsigned char *  input,
uint32_t  tweak 
)

Decrypts a 128-bit block with masked TweGIFT-128 (tweakable variant).

Parameters
ksPoints to the masked GIFT-128 key schedule.
outputOutput buffer which must be at least 16 bytes in length.
inputInput buffer which must be at least 16 bytes in length.
tweak4-bit tweak value expanded to 32-bit.

The input and output buffers can be the same buffer for in-place encryption.

This variant of GIFT-128 is used by the ESTATE submission to the NIST Lightweight Cryptography Competition. A 4-bit tweak is added to some of the rounds to provide domain separation. If the tweak is zero, then this function is identical to gift128n_encrypt().

void gift128t_encrypt_masked ( const gift128n_masked_key_schedule_t ks,
unsigned char *  output,
const unsigned char *  input,
uint32_t  tweak 
)

Encrypts a 128-bit block with masked TweGIFT-128 (tweakable variant).

Parameters
ksPoints to the masked GIFT-128 key schedule.
outputOutput buffer which must be at least 16 bytes in length.
inputInput buffer which must be at least 16 bytes in length.
tweak4-bit tweak value expanded to 32-bit.

The input and output buffers can be the same buffer for in-place encryption.

This variant of GIFT-128 is used by the ESTATE submission to the NIST Lightweight Cryptography Competition. A 4-bit tweak is added to some of the rounds to provide domain separation. If the tweak is zero, then this function is identical to gift128n_encrypt_masked().