diff options
| author | Kévin Le Gouguec <kevin.legouguec@airbus.com> | 2018-11-22 16:50:59 +0100 |
|---|---|---|
| committer | Kévin Le Gouguec <kevin.legouguec@airbus.com> | 2018-11-22 16:50:59 +0100 |
| commit | af4d06b805a887fe7ce5d6816728269fd362f848 (patch) | |
| tree | bfb3b3afd7b1630d70cc61cd22df2517a606f13e | |
| parent | 778bb979efd0cf202899f21360992ce9a616cbfd (diff) | |
| download | lilliput-ae-implem-af4d06b805a887fe7ce5d6816728269fd362f848.tar.xz | |
Implémentation du mode ΘCB3 (début)
| -rw-r--r-- | crypto_aead/lilliputaei128v1/ref/lilliput-ae-i.c | 68 |
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; } |
