1#!/bin/bash -eu 2# Copyright 2020 Google LLC 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15# 16################################################################################ 17 18# Install Rust nightly 19#curl https://sh.rustup.rs -sSf | sh -s -- -y 20#source $HOME/.cargo/env 21 22# Build libmpdec 23tar zxf mpdecimal-2.5.1.tar.gz 24cd mpdecimal-2.5.1 25./configure && make -j$(nproc) 26 27cd $SRC/openssl 28if [[ $CFLAGS = *sanitize=memory* ]] 29then 30 CFLAGS+=" -DOPENSSL_NO_ASM=1" 31fi 32./config --debug no-fips no-shared no-tests 33make -j$(nproc) 34 35# Build libgmp 36cd $SRC/libgmp 37autoreconf -ivf 38./configure --enable-maintainer-mode 39make -j$(nproc) 40 41# Build OpenSSL module 42cd $SRC/bignum-fuzzer/modules/openssl 43OPENSSL_INCLUDE_PATH=$SRC/openssl/include OPENSSL_LIBCRYPTO_A_PATH=$SRC/openssl/libcrypto.a make 44 45# Build Go module 46cd $SRC/bignum-fuzzer/modules/go 47make 48 49# Build Rust module 50#cd $SRC/bignum-fuzzer/modules/rust 51#make 52 53# Build C++-Boost module 54cd $SRC/bignum-fuzzer/modules/cpp_boost 55make 56 57# Build libgmp module 58cd $SRC/bignum-fuzzer/modules/libgmp 59LIBGMP_INCLUDE_PATH=$SRC/libgmp LIBGMP_A_PATH=$SRC/libgmp/.libs/libgmp.a make 60 61# Build libmpdec module 62cd $SRC/bignum-fuzzer/modules/libmpdec 63LIBMPDEC_A_PATH=$SRC/mpdecimal-2.5.1/libmpdec/libmpdec.a LIBMPDEC_INCLUDE_PATH=$SRC/mpdecimal-2.5.1/libmpdec make 64 65BASE_CXXFLAGS=$CXXFLAGS 66 67# Build OpenSSL/Go fuzzer 68cd $SRC/bignum-fuzzer 69./config-modules.sh openssl go 70CXXFLAGS="$BASE_CXXFLAGS -DBNFUZZ_FLAG_NO_NEGATIVE=1 -DBNFUZZ_FLAG_NUM_LEN=1200 -DBNFUZZ_FLAG_ALL_OPERATIONS=1" 71LIBFUZZER_LINK="$LIB_FUZZING_ENGINE" make 72 73# Copy OpenSSL/Go fuzzer to the designated location 74cp $SRC/bignum-fuzzer/fuzzer $OUT/fuzzer_openssl_go_no_negative_num_len_1200_all_operations 75 76# Build OpenSSL/Rust fuzzer 77#cd $SRC/bignum-fuzzer 78#make clean 79#./config-modules.sh openssl rust 80#CXXFLAGS="$BASE_CXXFLAGS -DBNFUZZ_FLAG_NUM_LEN=1200 -DBNFUZZ_FLAG_ALL_OPERATIONS=1 -DBNFUZZ_FLAG_NUM_LOOPS=1" 81#LIBFUZZER_LINK="$LIB_FUZZING_ENGINE" make 82 83# Copy OpenSSL/Rust fuzzer to the designated location 84#cp $SRC/bignum-fuzzer/fuzzer $OUT/fuzzer_openssl_rust_num_len_1200_all_operations_num_loops_1 85 86# Build OpenSSL/C++-Boost fuzzer 87cd $SRC/bignum-fuzzer 88make clean 89./config-modules.sh openssl cpp_boost 90CXXFLAGS="$BASE_CXXFLAGS -DBNFUZZ_FLAG_NUM_LEN=1200 -DBNFUZZ_FLAG_ALL_OPERATIONS=1 -DBNFUZZ_FLAG_NUM_LOOPS=1" 91LIBFUZZER_LINK="$LIB_FUZZING_ENGINE" make 92 93# Copy OpenSSL/C++-Boost fuzzer to the designated location 94cp $SRC/bignum-fuzzer/fuzzer $OUT/fuzzer_openssl_cpp_boost_num_len_1200_all_operations_num_loops_1 95 96# Build OpenSSL/libgmp fuzzer 97cd $SRC/bignum-fuzzer 98make clean 99./config-modules.sh openssl libgmp 100CXXFLAGS="$BASE_CXXFLAGS -DBNFUZZ_FLAG_NUM_LEN=1200 -DBNFUZZ_FLAG_ALL_OPERATIONS=1 -DBNFUZZ_FLAG_NUM_LOOPS=1" 101LIBFUZZER_LINK="$LIB_FUZZING_ENGINE" make 102 103# Copy OpenSSL/libgmp fuzzer to the designated location 104cp $SRC/bignum-fuzzer/fuzzer $OUT/fuzzer_openssl_libgmp_num_len_1200_all_operations_num_loops_1 105 106# Build mbedtls 107cd $SRC/mbedtls 108make lib -j$(nproc) 109 110# Build BoringSSL 111cd $SRC/boringssl 112mkdir build 113cd build 114cmake -DCMAKE_CXX_FLAGS="$CXXFLAGS" -DCMAKE_C_FLAGS="$CFLAGS" -DBORINGSSL_ALLOW_CXX_RUNTIME=1 .. 115make -j$(nproc) 116 117# Build BoringSSL module 118cd $SRC/bignum-fuzzer/modules/openssl 119make clean 120CFLAGS="$CFLAGS -DBIGNUM_FUZZER_BORINGSSL" OPENSSL_INCLUDE_PATH=$SRC/boringssl/include OPENSSL_LIBCRYPTO_A_PATH=$SRC/boringssl/build/crypto/libcrypto.a make 121 122# Build mbedtls module 123cd $SRC/bignum-fuzzer/modules/mbedtls 124MBEDTLS_LIBMBEDCRYPTO_A_PATH=$SRC/mbedtls/library/libmbedcrypto.a MBEDTLS_INCLUDE_PATH=$SRC/mbedtls/include make 125 126# Build BoringSSL/mbedtls fuzzer 127cd $SRC/bignum-fuzzer 128make clean 129./config-modules.sh boringssl mbedtls 130CXXFLAGS="$BASE_CXXFLAGS -DBNFUZZ_FLAG_NUM_LEN=100 -DBNFUZZ_FLAG_ALL_OPERATIONS=1 -DBNFUZZ_FLAG_NUM_LOOPS=1" 131LIBFUZZER_LINK="$LIB_FUZZING_ENGINE" make 132 133# Copy BoringSSL/mbedtls fuzzer to the designated location 134cp $SRC/bignum-fuzzer/fuzzer $OUT/fuzzer_boringssl_mbedtls_num_len_100_all_operations_num_loops_1 135 136# Build BoringSSL/libmpdec fuzzer 137cd $SRC/bignum-fuzzer 138make clean 139./config-modules.sh boringssl libmpdec 140CXXFLAGS="$BASE_CXXFLAGS -DBNFUZZ_FLAG_NUM_LEN=100 -DBNFUZZ_FLAG_ALL_OPERATIONS=1 -DBNFUZZ_FLAG_NUM_LOOPS=1" 141LIBFUZZER_LINK="$LIB_FUZZING_ENGINE" make 142 143# Copy BoringSSL/libmpdec fuzzer to the designated location 144cp $SRC/bignum-fuzzer/fuzzer $OUT/fuzzer_boringssl_libmpdec_num_len_100_all_operations_num_loops_1 145 146# Copy seed corpora to the designated location 147cp $SRC/bignum-fuzzer/corpora/fuzzer_openssl_go_no_negative_num_len_1200_all_operations_seed_corpus.zip $OUT 148#cp $SRC/bignum-fuzzer/corpora/fuzzer_openssl_rust_num_len_1200_all_operations_num_loops_1_seed_corpus.zip $OUT 149cp $SRC/bignum-fuzzer/corpora/fuzzer_openssl_cpp_boost_num_len_1200_all_operations_num_loops_1_seed_corpus.zip $OUT 150cp $SRC/bignum-fuzzer/corpora/fuzzer_openssl_libgmp_num_len_1200_all_operations_num_loops_1_seed_corpus.zip $OUT 151cp $SRC/bignum-fuzzer/corpora/fuzzer_boringssl_mbedtls_num_len_100_all_operations_num_loops_1_seed_corpus.zip $OUT 152cp $SRC/bignum-fuzzer/corpora/fuzzer_boringssl_mbedtls_num_len_100_all_operations_num_loops_1_seed_corpus.zip $OUT/fuzzer_boringssl_libmpdec_num_len_100_all_operations_num_loops_1_seed_corpus.zip 153