#!/bin/bash set -eu # Run NIST's genkat_aead.c against the reference implementation as # well as another one, and compare vectors. TEST_DIR=$(dirname $0) ROOT=${TEST_DIR}/.. implem=$1 run-genkat () { local tmp_dir=$1 local implem=$2 local mode=$3 local keylen=$4 local src_dir=${ROOT}/src/ local source_files=( ae-common.h cipher.{c,h} lilliput-ae{.h,-${mode}.c} parameters.h tweakey.{c,h} ) local f for f in ${source_files[@]} do cp ${src_dir}/${implem}/${f} ${tmp_dir} done cp ${src_dir}/${mode}-${keylen}/_parameters.h ${tmp_dir} cp ${ROOT_DIR}/nist/{api.h,encrypt.c} ${tmp_dir} local nist_flags=(-std=c99 -Wall -Wextra -Wshadow -fsanitize=address,undefined -O2) gcc ${nist_flags[@]} -Werror -I${tmp_dir} -o ${tmp_dir}/genkat ( cd ${tmp_dir} ./genkat cat LWC_AEAD_KAT*.txt ) } test-implem () { local implem=$1 local tmp_dir=$(mktemp -d) local mode local keylen for mode in i ii do for keylen in 128 192 256 do run-genkat ${tmp_dir} ${implem} ${mode} ${keylen} done done rm -r ${tmp_dir} } diff -u <(test-implem ref) <(test-implem ${implem})