summaryrefslogtreecommitdiff
path: root/crypto_aead/lilliputaei128v1/ref/lilliput-ae-i.c
diff options
context:
space:
mode:
authorKévin Le Gouguec <kevin.legouguec@airbus.com>2018-11-22 17:21:29 +0100
committerKévin Le Gouguec <kevin.legouguec@airbus.com>2018-11-22 17:21:29 +0100
commitfc7f6f86fb89adfb12289e69ed1e57f6bfa7e607 (patch)
tree6a0ded28bef9cb52278266628f19104ca711d2c3 /crypto_aead/lilliputaei128v1/ref/lilliput-ae-i.c
parentaf4d06b805a887fe7ce5d6816728269fd362f848 (diff)
downloadlilliput-ae-implem-fc7f6f86fb89adfb12289e69ed1e57f6bfa7e607.tar.xz
Implémentation du mode ΘCB3 (suite)
Diffstat (limited to 'crypto_aead/lilliputaei128v1/ref/lilliput-ae-i.c')
-rw-r--r--crypto_aead/lilliputaei128v1/ref/lilliput-ae-i.c27
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(