summaryrefslogtreecommitdiff
path: root/nist/make-package.sh
blob: 4a4ae13340fb01c4650e0f2d3fb782305fa90990 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/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