2025-01-17 18:27:46 +03:00

116 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
# SPDX-License-Identifier: MIT
BASE=$(dirname "$0")
BASE=$(cd "${BASE}" && pwd)
echo "${BASE}"
VERSION=$(cat VERSION)
UPSTREAM_ARCHIVE="${VERSION}.zip"
BUILD="${BASE}/build"
BUILD_XKCP="${BUILD}/src/common/sha3/xkcp_low"
BUILD_UPSTREAM="${BUILD}/upstream"
function cleanup {
rm -rf "${BUILD}"
}
trap cleanup EXIT
if [ -e "${BUILD}" ]
then
printf "%s directory already exists. Delete it (y/n)? " "${BUILD}"
read -r yn
if [ "${yn:-n}" != "y" ]
then
exit -1
fi
rm -rf "${BUILD}"
fi
mkdir -p "${BUILD}"
if [ ! -f "${BASE}/${UPSTREAM_ARCHIVE}" ]
then
wget -P "${BASE}" "https://github.com/XKCP/XKCP/archive/${VERSION}.zip"
fi
unzip -qq -d "${BUILD}" "${BASE}/${UPSTREAM_ARCHIVE}"
mv "${BUILD}/XKCP-${VERSION}" "${BUILD_UPSTREAM}"
( cd "${BUILD_UPSTREAM}" || exit
for X in "${BASE}/patches/"*
do
patch -s -p1 < "${X}"
done
)
OUT="${BUILD_XKCP}/KeccakP-1600/plain-64bits"
mkdir -p "${OUT}"
cp -Lp "${BUILD_UPSTREAM}/lib/common/brg_endian.h" \
"${BUILD_UPSTREAM}/lib/low/common/SnP-Relaned.h" \
"${BUILD_UPSTREAM}/lib/low/KeccakP-1600/common/KeccakP-1600-64.macros" \
"${BUILD_UPSTREAM}/lib/low/KeccakP-1600/common/KeccakP-1600-unrolling.macros" \
"${BUILD_UPSTREAM}/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c" \
"${BUILD_UPSTREAM}/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-SnP.h" \
"${BUILD_UPSTREAM}/lib/low/KeccakP-1600/plain-64bits/ua/KeccakP-1600-opt64-config.h" \
"${OUT}"
OUT="${BUILD_XKCP}/KeccakP-1600/avx2"
mkdir -p "${OUT}"
cp -Lp "${BUILD_UPSTREAM}/lib/low/KeccakP-1600/AVX2/KeccakP-1600-AVX2.s" "${OUT}/KeccakP-1600-AVX2.S"
cp -Lp "${BUILD_UPSTREAM}/lib/common/align.h" \
"${BUILD_UPSTREAM}/lib/low/KeccakP-1600/AVX2/KeccakP-1600-SnP.h" \
"${OUT}"
OUT="${BUILD_XKCP}/KeccakP-1600times4/serial"
mkdir -p "${OUT}"
cp -Lp "${BUILD_UPSTREAM}/lib/low/common/PlSnP-Fallback.inc" \
"${BUILD_UPSTREAM}/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-on1.c" \
"${BUILD_UPSTREAM}/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-SnP.h" \
"${OUT}"
OUT="${BUILD_XKCP}/KeccakP-1600times4/avx2"
mkdir -p "${OUT}"
cp -Lp "${BUILD_UPSTREAM}/lib/common/brg_endian.h" \
"${BUILD_UPSTREAM}/lib/low/KeccakP-1600/common/KeccakP-1600-unrolling.macros" \
"${BUILD_UPSTREAM}/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SIMD256.c" \
"${BUILD_UPSTREAM}/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SnP.h" \
"${BUILD_UPSTREAM}/lib/low/KeccakP-1600-times4/AVX2/ua/SIMD256-config.h" \
"${OUT}"
find "${BUILD_XKCP}" \( -name \*.c -o -name \*.h \) -execdir \
unifdef -k -m \
-DNO_MISALIGNED_ACCESSES \
-DKeccakP1600_fullUnrolling \
-DKeccakP1600times4_fullUnrolling \
-DKeccakP1600_useLaneComplementing \
{} \;
find "${BUILD_XKCP}/KeccakP-1600times4/avx2" \( -name \*.c -o -name \*.h \) -execdir \
unifdef -k -m \
-DKeccakP1600times4_useAVX2 \
{} \;
cp "${BASE}/CMakeLists.txt" "${BUILD_XKCP}/CMakeLists.txt"
# Apply liboqs formatting
astyle \
--style=google \
--indent=tab \
--pad-oper \
--pad-comma \
--pad-header \
--align-pointer=name \
--add-braces \
--convert-tabs \
--mode=c \
--suffix=none \
--lineend=linux \
"${BUILD_XKCP}"/*/*/*.{c,h} >/dev/null
# Package
( cd "${BUILD}" || exit
tar czf "${BASE}"/liboqs-xkcp-"$(date +'%Y%m%d')".tar.gz src
)