77 lines
2.6 KiB
Bash
Executable File
77 lines
2.6 KiB
Bash
Executable File
# Copyright (c) (2018-2020) Apple Inc. All rights reserved.
|
||
#
|
||
# corecrypto is licensed under Apple Inc.’s Internal Use License Agreement (which
|
||
# is contained in the License.txt file distributed with corecrypto) and only to
|
||
# people who accept that license. IMPORTANT: Any license rights granted to you by
|
||
# Apple Inc. (if any) are limited to internal use within your organization only on
|
||
# devices and computers you own or control, for the sole purpose of verifying the
|
||
# security characteristics and correct functioning of the Apple Software. You may
|
||
# not, directly or indirectly, redistribute the Apple Software or any portions thereof.
|
||
|
||
#!/bin/bash
|
||
|
||
OUTFILE=$1
|
||
INPUT_DIR=$2
|
||
INPUT_DIRS=()
|
||
INPUT_FNAMES=()
|
||
OUTPUT_FNAMES=()
|
||
|
||
NAMES=()
|
||
STRUCTURES=()
|
||
LENGTHS=()
|
||
|
||
# Concatenate each struct to a single file
|
||
echo "#ifndef test_vectors_h" > ${OUTFILE}
|
||
echo "#define test_vectors_h" >> ${OUTFILE}
|
||
echo "" >> ${OUTFILE}
|
||
|
||
for FNAME in $(find ${INPUT_DIR} -name *.json)
|
||
do
|
||
xxd --include ${FNAME} > ${FNAME}.c
|
||
OUTPUT_FNAMES+=(${FNAME}.c)
|
||
|
||
PARSER=$(basename $(dirname ${FNAME}))
|
||
STRUCTNAME=`grep "unsigned char" ${FNAME}.c | sed -e 's/unsigned\ char\ \(.*\)\[\]\ \=\ \(.*\)/\1/'`
|
||
LENGTH=`grep "unsigned int" ${FNAME}.c | sed -e 's/unsigned\ int\ \(.*\)\ \=\ \(.*\)/\1/'`
|
||
NAME=`basename -s ".json" ${FNAME}`
|
||
|
||
sed -e "s/${STRUCTNAME}/${NAME}/g" ${FNAME}.c > ${FNAME}.c.tmp && mv ${FNAME}.c.tmp ${FNAME}.c
|
||
sed -e "s/unsigned\ int\ ${NAME}/const\ unsigned\ int\ ${NAME}_len/g" ${FNAME}.c > ${FNAME}.c.tmp && mv ${FNAME}.c.tmp ${FNAME}.c
|
||
LENGTH=`grep "unsigned int" ${FNAME}.c | sed -e 's/const\ unsigned\ int\ \(.*\)\ \=\ \(.*\)/\1/'`
|
||
|
||
NAMES+=(${PARSER})
|
||
STRUCTURES+=(${NAME})
|
||
LENGTHS+=(${LENGTH})
|
||
done
|
||
|
||
for i in "${!OUTPUT_FNAMES[@]}"
|
||
do
|
||
FNAME=${OUTPUT_FNAMES[$i]}
|
||
cat ${FNAME} >> ${OUTFILE}
|
||
rm ${FNAME}
|
||
done
|
||
|
||
echo "" >> ${OUTFILE}
|
||
echo "struct ccgenerated_test_vector {" >> ${OUTFILE}
|
||
echo " const char *parser;" >> ${OUTFILE}
|
||
echo " const uint8_t *buffer;" >> ${OUTFILE}
|
||
echo " size_t buffer_len;" >> ${OUTFILE}
|
||
echo "};" >> ${OUTFILE}
|
||
|
||
echo "" >> ${OUTFILE}
|
||
echo "const struct ccgenerated_test_vector ccgenerated_test_vectors[] = {" >> ${OUTFILE}
|
||
for i in "${!OUTPUT_FNAMES[@]}"
|
||
do
|
||
STRUCTNAME=${STRUCTURES[$i]}
|
||
LENGTH=${LENGTHS[$i]}
|
||
PARSER=${NAMES[$i]}
|
||
echo " { .parser = \"${PARSER}\", .buffer = ${STRUCTNAME}, .buffer_len = ${LENGTH} }," >> ${OUTFILE}
|
||
done
|
||
echo "};" >> ${OUTFILE}
|
||
|
||
echo "" >> ${OUTFILE}
|
||
echo "const size_t ccgenerated_test_vectors_count = ${#OUTPUT_FNAMES[@]};" >> ${OUTFILE}
|
||
echo "" >> ${OUTFILE}
|
||
|
||
echo "#endif" >> ${OUTFILE}
|