summaryrefslogtreecommitdiff
path: root/crypto_aead
diff options
context:
space:
mode:
authorKévin Le Gouguec <kevin.legouguec@airbus.com>2018-11-22 16:50:59 +0100
committerKévin Le Gouguec <kevin.legouguec@airbus.com>2018-11-22 16:50:59 +0100
commitaf4d06b805a887fe7ce5d6816728269fd362f848 (patch)
treebfb3b3afd7b1630d70cc61cd22df2517a606f13e /crypto_aead
parent778bb979efd0cf202899f21360992ce9a616cbfd (diff)
downloadlilliput-ae-implem-af4d06b805a887fe7ce5d6816728269fd362f848.tar.xz
Implémentation du mode ΘCB3 (début)
Diffstat (limited to 'crypto_aead')
-rw-r--r--crypto_aead/lilliputaei128v1/ref/lilliput-ae-i.c68
1 files changed, 63 insertions, 5 deletions
diff --git a/crypto_aead/lilliputaei128v1/ref/lilliput-ae-i.c b/crypto_aead/lilliputaei128v1/ref/lilliput-ae-i.c
index 82dd0b7..a52049e 100644
--- a/crypto_aead/lilliputaei128v1/ref/lilliput-ae-i.c
+++ b/crypto_aead/lilliputaei128v1/ref/lilliput-ae-i.c
@@ -1,24 +1,72 @@
#include <stdbool.h>
#include <stdint.h>
+#include <string.h>
#include "lilliput-ae.h"
+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]
+)
+{
+}
+
+static void _encrypt_message(
+ const uint8_t key[KEY_BYTES],
+ size_t message_len, const uint8_t message[message_len],
+ const uint8_t nonce[NONCE_BYTES],
+
+ size_t *ciphertext_len, uint8_t ciphertext[message_len+BLOCK_BYTES],
+ uint8_t final[BLOCK_BYTES]
+)
+{
+}
+
+static void _decrypt_message(
+ const uint8_t key[KEY_BYTES],
+ size_t ciphertext_len, const uint8_t ciphertext[ciphertext_len],
+ const uint8_t nonce[NONCE_BYTES],
+
+ size_t *message_len, uint8_t message[ciphertext_len],
+ uint8_t final[BLOCK_BYTES]
+)
+{
+}
+
+static void _generate_tag(
+ const uint8_t final[BLOCK_BYTES],
+ const uint8_t auth[BLOCK_BYTES],
+ uint8_t tag[TAG_BYTES]
+)
+{
+}
+
+
void lilliput_ae_encrypt(
- size_t message_len, const uint8_t message[message_len],
- size_t auth_data_len, const uint8_t auth_data[auth_data_len],
+ size_t message_len, const uint8_t message[message_len],
+ size_t auth_data_len, const uint8_t auth_data[auth_data_len],
const uint8_t key[KEY_BYTES],
- const uint8_t nonce[NONCE_BYTES],
+ const uint8_t nonce[NONCE_BYTES],
size_t *ciphertext_len, uint8_t ciphertext[message_len+BLOCK_BYTES],
uint8_t tag[TAG_BYTES]
)
{
+ uint8_t auth[BLOCK_BYTES];
+ _process_associated_data(key, auth_data_len, auth_data, auth);
+
+ uint8_t final[BLOCK_BYTES];
+ _encrypt_message(key, message_len, message, nonce,
+ ciphertext_len, ciphertext, final);
+
+ _generate_tag(final, auth, tag);
}
bool lilliput_ae_decrypt(
size_t ciphertext_len, const uint8_t ciphertext[ciphertext_len],
- size_t auth_data_len, const uint8_t auth_data[auth_data_len],
+ size_t auth_data_len, const uint8_t auth_data[auth_data_len],
const uint8_t key[KEY_BYTES],
const uint8_t nonce[NONCE_BYTES],
const uint8_t tag[TAG_BYTES],
@@ -26,6 +74,16 @@ bool lilliput_ae_decrypt(
size_t *message_len, uint8_t message[ciphertext_len]
)
{
- return false;
+ uint8_t auth[BLOCK_BYTES];
+ _process_associated_data(key, auth_data_len, auth_data, auth);
+
+ uint8_t final[BLOCK_BYTES];
+ _decrypt_message(key, ciphertext_len, ciphertext, nonce,
+ message_len, message, final);
+
+ uint8_t effective_tag[TAG_BYTES];
+ _generate_tag(final, auth, effective_tag);
+
+ return memcmp(tag, effective_tag, TAG_BYTES) == 0;
}