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 8ebfbf8d7dae9fff9dec033f3712c437ffd828a9
parent 31cb973c38c9d52142892081d579dde52f39ff63
Author: Kévin Le Gouguec <kevin.legouguec@airbus.com>
Date:   Tue, 18 Dec 2018 13:54:20 +0100

Ajout d'un générateur de vecteurs pour FELICS

(Plus précisément, la variante Airbus qui gère les AEAD)

Diffstat:
Atest/felics/Makefile | 16++++++++++++++++
Atest/felics/make-vector.c | 62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atest/felics/make-vectors.sh | 9+++++++++
3 files changed, 87 insertions(+), 0 deletions(-)

diff --git a/test/felics/Makefile b/test/felics/Makefile @@ -0,0 +1,16 @@ +all: vector + +include ../common.mk + + +vector: $(results_dir)/felics-make-vector | $(results_dir) + $(results_dir)/felics-make-vector 16 16 + + +$(results_dir)/felics-make-vector: $(results_dir)/felics-make-vector.o \ +$(results_dir)/src/lilliput-ae-$(mode).o $(results_dir)/src/cipher.o \ +$(results_dir)/src/tweakey.o | $(results_dir) + +$(results_dir)/felics-make-vector.o: $(test_dir)/felics/make-vector.c | $(results_dir) + @ echo "CC $@" + $(Q) gcc -c $< $(CFLAGS) -o $@ diff --git a/test/felics/make-vector.c b/test/felics/make-vector.c @@ -0,0 +1,62 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <inttypes.h> + +#include "lilliput-ae.h" + + +void parse_arguments(char const* const* argv, size_t* plaintext_len, size_t* auth_len) +{ + sscanf(argv[1], "%zu", plaintext_len); + sscanf(argv[2], "%zu", auth_len); +} + +void init_buffer(size_t len, uint8_t buf[len]) +{ + for (size_t i=0; i<len; i++) + buf[i] = i; +} + +void dump_buffer(const char* header, size_t len, const uint8_t buf[len]) +{ + printf("%s = { ", header); + for (const uint8_t* b=buf; b<buf+len-1; b++) + printf("0x%02x, ", *b); + printf("0x%02x };\n", buf[len-1]); +} + +int main(int argc, char const* const* argv) +{ + if (argc != 3) + { + fprintf(stderr, "usage: %s PLAINTEXT-LEN AUTHDATA-LEN\n", argv[0]); + return 1; + } + + size_t plaintext_len; + size_t auth_len; + parse_arguments(argv, &plaintext_len, &auth_len); + + uint8_t plaintext[plaintext_len]; + uint8_t auth[auth_len]; + uint8_t key[KEY_BYTES]; + uint8_t nonce[NONCE_BYTES]; + + memset(nonce, 0, NONCE_BYTES); + init_buffer(plaintext_len, plaintext); + init_buffer(auth_len, auth); + init_buffer(KEY_BYTES, key); + + uint8_t ciphertext[plaintext_len+TAG_BYTES]; + + lilliput_ae_encrypt( + plaintext_len, plaintext, auth_len, auth, + key, nonce, ciphertext, ciphertext+plaintext_len + ); + + dump_buffer("const uint8_t expectedPlaintext[MAXTEST_BYTES_M]", plaintext_len, plaintext); + dump_buffer("const uint8_t expectedAssociated[MAXTEST_BYTES_AD]", auth_len, auth); + dump_buffer("const uint8_t expectedKey[KEY_SIZE]", KEY_BYTES, key); + dump_buffer("const uint8_t expectedCiphertext[MAXTEST_BYTES_M+CRYPTO_ABYTES]", plaintext_len+TAG_BYTES, ciphertext); +} diff --git a/test/felics/make-vectors.sh b/test/felics/make-vectors.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +for mode in i ii +do + for keylen in 128 192 256 + do + make vector mode=${mode} keylen=${keylen} + done +done