154 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/bin/bash -eu
 | |
| # Copyright 2018 Google Inc.
 | |
| #
 | |
| # Licensed under the Apache License, Version 2.0 (the "License");
 | |
| # you may not use this file except in compliance with the License.
 | |
| # You may obtain a copy of the License at
 | |
| #
 | |
| #      http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing, software
 | |
| # distributed under the License is distributed on an "AS IS" BASIS,
 | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| # See the License for the specific language governing permissions and
 | |
| # limitations under the License.
 | |
| #
 | |
| ################################################################################
 | |
| 
 | |
| # build projects
 | |
| #nettle
 | |
| (
 | |
| cd nettle
 | |
| tar -xvf ../gmp-6.1.2.tar.bz2
 | |
| cd gmp-6.1.2
 | |
| #do not use assembly instructions as we do not know if they will be available on the machine who will run the fuzzer
 | |
| #we could do instead --enable-fat
 | |
| ./configure --disable-shared --disable-assembly
 | |
| make -j$(nproc)
 | |
| make install
 | |
| cd ..
 | |
| autoreconf
 | |
| ./configure --disable-shared --disable-openssl
 | |
| make -j$(nproc)
 | |
| make install
 | |
| )
 | |
| 
 | |
| #cryptopp
 | |
| (
 | |
| cd cryptopp
 | |
| make -j$(nproc)
 | |
| make install
 | |
| )
 | |
| 
 | |
| #gcrypt
 | |
| (
 | |
| cd libgpg-error
 | |
| ./autogen.sh
 | |
| if [ "$ARCHITECTURE" = 'i386' ]; then
 | |
|     ./configure -host=i386 --disable-doc --enable-static --disable-shared
 | |
| else
 | |
|     ./configure --disable-doc --enable-static --disable-shared
 | |
| fi
 | |
| make -j$(nproc)
 | |
| make install
 | |
| cd ../gcrypt
 | |
| ./autogen.sh
 | |
| if [ "$ARCHITECTURE" = 'i386' ]; then
 | |
|     ./configure -host=i386 --enable-static --disable-shared --disable-doc --enable-maintainer-mode
 | |
| else
 | |
|     ./configure --enable-static --disable-shared --disable-doc --enable-maintainer-mode
 | |
| fi
 | |
| make -j$(nproc)
 | |
| make install
 | |
| )
 | |
| 
 | |
| #mbedtls
 | |
| (
 | |
| cd mbedtls
 | |
| cmake . -DENABLE_PROGRAMS=0 -DENABLE_TESTING=0
 | |
| make -j$(nproc) all
 | |
| make install
 | |
| )
 | |
| 
 | |
| #openssl
 | |
| (
 | |
| cd openssl
 | |
| #option to not have the same exported function poly1305_blocks as in gcrypt
 | |
| if [ "$ARCHITECTURE" = 'i386' ]; then
 | |
|     setarch i386 ./config no-poly1305 no-shared no-threads -m32
 | |
| else
 | |
|     ./config no-poly1305 no-shared no-threads
 | |
| fi
 | |
| make build_generated libcrypto.a
 | |
| make install
 | |
| )
 | |
| 
 | |
| #libecc
 | |
| (
 | |
| cd libecc
 | |
| #required by libecc
 | |
| (export CFLAGS="$CFLAGS -fPIC"; make; cp build/*.a /usr/local/lib; cp -r src/* /usr/local/include/)
 | |
| )
 | |
| 
 | |
| #botan
 | |
| (
 | |
| cd botan
 | |
| if [ "$ARCHITECTURE" = 'i386' ]; then
 | |
|     ./configure.py --cc-bin=$CXX --cc-abi-flags="$CXXFLAGS" \
 | |
|                --disable-shared --disable-modules=locking_allocator --disable-shared-library \
 | |
|                --without-os-features=getrandom,getentropy --cpu x86_32
 | |
| else
 | |
|     ./configure.py --cc-bin=$CXX --cc-abi-flags="$CXXFLAGS" \
 | |
|                --disable-shared --disable-modules=locking_allocator --disable-shared-library \
 | |
|                --without-os-features=getrandom,getentropy
 | |
| fi
 | |
| make -j$(nproc)
 | |
| make install
 | |
| )
 | |
| 
 | |
| #quickjs
 | |
| (
 | |
| cd quickjs
 | |
| if [ "$ARCHITECTURE" = 'i386' ]; then
 | |
|     make qjsc
 | |
|     cp qjsc /usr/local/bin/
 | |
|     make clean
 | |
|     # Makefile should not override CFLAGS
 | |
|     sed -i -e 's/CFLAGS=/CFLAGS+=/' Makefile
 | |
|     CFLAGS="-m32" make libquickjs.a
 | |
| else
 | |
|     make && make install
 | |
| fi
 | |
| cp quickjs*.h /usr/local/include/
 | |
| cp libquickjs.a /usr/local/lib/
 | |
| )
 | |
| 
 | |
| export CARGO_BUILD_TARGET="x86_64-unknown-linux-gnu"
 | |
| #build fuzz target
 | |
| cd ecfuzzer
 | |
| if [ "$ARCHITECTURE" = 'i386' ]; then
 | |
|     export GOARCH=386
 | |
| #needed explicitly because of cross compilation cf https://golang.org/cmd/cgo/
 | |
|     export CGO_ENABLED=1
 | |
|     export CARGO_BUILD_TARGET=i686-unknown-linux-gnu
 | |
| fi
 | |
| zip -r fuzz_ec_seed_corpus.zip corpus/
 | |
| cp fuzz_ec_seed_corpus.zip $OUT/
 | |
| cp fuzz_ec.dict $OUT/
 | |
| cp fuzz_ec.dict $OUT/fuzz_ec_noblocker.dict
 | |
| 
 | |
| mkdir build
 | |
| cd build
 | |
| #no afl with long javascript initialization
 | |
| if [ "$FUZZING_ENGINE" != 'afl' ]; then
 | |
|     cmake ..
 | |
|     make -j$(nproc)
 | |
|     cp ecfuzzer $OUT/fuzz_ec
 | |
|     rm -Rf *
 | |
| fi
 | |
| 
 | |
| #another target without javascript
 | |
| cmake -DDISABLE_JS=ON ..
 | |
| make -j$(nproc)
 | |
| cp ecfuzzer $OUT/fuzz_ec_noblocker
 |