Source code
Revision control
Copy as Markdown
Other Tools
#!/usr/bin/env bash
source $(dirname "$0")/tools.sh
# Do differential fuzzing with Botan (and not OpenSSL) since NSS has
# symbol collisions with OpenSSL and therefore they can't be used together
# in Cryptofuzz.
export CRYPTOFUZZ_VERSION="687d3064c5cef2b0fe1f30824065a2f2c9c0bbd8"
export BOTAN_VERSION="3.6.1"
git -C cryptofuzz checkout "$CRYPTOFUZZ_VERSION"
git -C botan checkout "$BOTAN_VERSION"
export CC="clang"
export CXX="clang++"
export CFLAGS="-fsanitize=address,fuzzer-no-link -O2 -g"
export CXXFLAGS="-fsanitize=address,fuzzer-no-link -O2 -g"
if [ "$1" = "--i386" ]; then
# Make sure everything is compiled and linked with 32-bit.
export CFLAGS="$CFLAGS -m32"
export CXXFLAGS="$CXXFLAGS -m32"
export LD_FLAGS="$LD_FLAGS -m32"
export LINK_FLAGS="$LINK_FLAGS -m32"
# Some static libraries aren't built on 32-bit systems, but still assumed
# to exist by Cryptofuzz.
sed -i "/libhw-acc-crypto-avx.a/d" cryptofuzz/modules/nss/Makefile
sed -i "/libhw-acc-crypto-avx2.a/d" cryptofuzz/modules/nss/Makefile
else
# UBSan is only enabled for 64-bit builds of NSS.
export CFLAGS="$CFLAGS -fsanitize=undefined"
export CXXFLAGS="$CXXFLAGS -fsanitize=undefined"
fi
# Build Botan.
pushd botan
if [ "$1" = "--i386" ]; then
./configure.py --cpu=x86_32 \
--cc-bin=$CXX \
--cc-abi-flags="$CXXFLAGS" \
--disable-shared \
--disable-modules=locking_allocator \
--build-targets=static \
--without-documentation
else
./configure.py --cc-bin=$CXX \
--cc-abi-flags="$CXXFLAGS" \
--disable-shared \
--disable-modules=locking_allocator \
--build-targets=static \
--without-documentation
fi
make -j"$(nproc)"
popd
# Generate Cryptofuzz header.
pushd cryptofuzz
./gen_repository.py
popd
# Build Botan module.
export CXXFLAGS="$CXXFLAGS -DCRYPTOFUZZ_BOTAN"
export LIBBOTAN_A_PATH="$(realpath botan/libbotan-3.a)"
export BOTAN_INCLUDE_PATH="$(realpath botan/build/include)"
pushd cryptofuzz/modules/botan
make -j"$(nproc)"
popd
# Build NSS module.
export NSS_NSPR_PATH="$PWD"
export CXXFLAGS="$CXXFLAGS -I $NSS_NSPR_PATH/dist/public/nss -I $NSS_NSPR_PATH/dist/Debug/include/nspr -DCRYPTOFUZZ_NSS -DCRYPTOFUZZ_NO_OPENSSL"
export LINK_FLAGS="$LINK_FLAGS -lsqlite3"
# The library lies somewhere else than what is expected by Cryptofuzz.
sed -i "s/nspr\/Debug\/pr\/src/dist\/Debug\/lib/" cryptofuzz/modules/nss/Makefile
pushd cryptofuzz/modules/nss
make -j"$(nproc)"
popd
# Build Cryptofuzz.
export LIBFUZZER_LINK="-fsanitize=fuzzer"
pushd cryptofuzz
make -j"$(nproc)"
popd
# Package
mkdir -p artifacts
tar cvfjh artifacts/cryptofuzz.tar.bz2 cryptofuzz