diff options
| -rw-r--r-- | crypto_aead/lilliputaei128v1/ref/lilliput-ae-i.c | 27 |
1 files 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 index a52049e..f67be07 100644 --- 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( |
