lilliput-ae-reference-implementation

Implementations of Lilliput-AE submitted to the NIST LWC standardization process
git clone https://git.kevinlegouguec.net/lilliput-ae-reference-implementation
Log | Files | Refs | README

commit fc7f6f86fb89adfb12289e69ed1e57f6bfa7e607
parent af4d06b805a887fe7ce5d6816728269fd362f848
Author: Kévin Le Gouguec <kevin.legouguec@airbus.com>
Date:   Thu, 22 Nov 2018 17:21:29 +0100

Implémentation du mode ΘCB3 (suite)

Diffstat:
Mcrypto_aead/lilliputaei128v1/ref/lilliput-ae-i.c | 27+++++++++++++++++++++++++++
1 file changed, 27 insertions(+), 0 deletions(-)

diff --git a/crypto_aead/lilliputaei128v1/ref/lilliput-ae-i.c b/crypto_aead/lilliputaei128v1/ref/lilliput-ae-i.c @@ -2,15 +2,42 @@ #include <stdint.h> #include <string.h> +#include "cipher.h" #include "lilliput-ae.h" +static void _lilliput_tbc(const uint8_t key[KEY_BYTES], + const uint8_t tweak[TWEAK_BYTES], + const uint8_t message[BLOCK_BYTES], + uint8_t ciphertext[BLOCK_BYTES]) +{ + lilliput_tbc_encrypt(key, tweak, message, ciphertext, NULL); +} + +static void _xor_into(size_t len, uint8_t dest[len], uint8_t src[len]) +{ + for (size_t i=0; i<len; i++) + dest[i] ^= src[i]; +} + static void _process_associated_data( const uint8_t key[KEY_BYTES], size_t auth_data_len, const uint8_t auth_data[auth_data_len], uint8_t auth[BLOCK_BYTES] ) { + size_t l_a = auth_data_len / BLOCK_BYTES; + + memset(auth, 0, BLOCK_BYTES); + + for (size_t i=0; i<l_a; i++) + { + uint8_t tweak[TWEAK_BYTES]; + /* TODO: generate tweak */ + uint8_t Ek_Ai[BLOCK_BYTES]; + _lilliput_tbc(key, tweak, auth_data+i*BLOCK_BYTES, Ek_Ai); + _xor_into(BLOCK_BYTES, auth, Ek_Ai); + } } static void _encrypt_message(