#!/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}/ref mkdir -p ${dest} cp ${ROOT}/crypto_aead/${variant}/ref/_parameters.h ${dest} cp ${NIST_DIR}/{api.h,encrypt.c} ${dest} source_files=( ae-common.h cipher.{c,h} constants.{c,h} lilliput-ae{.h,-${mode}.c} parameters.h tweakey.{c,h} ) for f in ${source_files[@]} do cp ${ROOT}/src/${f} ${dest} 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 results/ cleanup