#!/bin/bash set -Eeu # Generate NIST's expected tree: # # crypto_aead # │ # └── lilliputae${mode}${keylen}v1 # │ # ├── add_${someimplementation} # │ ├── api.h # │ └── encrypt.c # │ # ├── add_${someplatform} # │ ├── api.h # │ └── encrypt.c # │ # ├── ref # │ ├── api.h # │ └── encrypt.c # │ # └── LWC_AEAD_KAT_${keylen}_120.txt NIST_DIR=$(dirname $0) ROOT=${NIST_DIR}/.. TMP_DIR=$(mktemp -d) cleanup () { rm -r ${TMP_DIR} } trap cleanup ERR add-variant () { mode=$1 key_length=$2 variant=lilliputae${mode}${key_length}v1 dest=${TMP_DIR}/crypto_aead/${variant} mkdir -p ${dest} source_files=( cipher.{c,h} constants.h lilliput-ae{.h,-utils.h} lilliput-${mode}.c tweakey.{c,h} ) implementations=( ref add_threshold add_tweakeyloop ) for implem in ${implementations[@]} do mkdir ${dest}/${implem} cp ${ROOT}/src/${mode}-${key_length}/parameters.h ${dest}/${implem} cp ${NIST_DIR}/{api.h,encrypt.c} ${dest}/${implem} for f in ${source_files[@]} do cp ${ROOT}/src/${implem}/${f} ${dest}/${implem} done done } test-variant () { mode=$1 key_length=$2 variant=lilliputae${mode}${key_length}v1 dest=${TMP_DIR}/crypto_aead/${variant} src=${dest}/ref genkat=${TMP_DIR}/${variant} nist_flags=(-std=c99 -Wall -Wextra -Wshadow -fsanitize=address,undefined -O2) gcc ${nist_flags[@]} -Werror -I${src} -I${TMP_DIR} \ ${src}/*.c ${TMP_DIR}/genkat_aead.c -o ${genkat} ${genkat} mv LWC_AEAD_KAT_${key_length}_120.txt ${dest} } cp ${NIST_DIR}/TestVectorGen/* ${TMP_DIR} for mode in i ii do for key_length in 128 192 256 do add-variant ${mode} ${key_length} test-variant ${mode} ${key_length} done done cp -r ${TMP_DIR}/crypto_aead . cleanup