diff --git a/projects/cryptofuzz/Dockerfile b/projects/cryptofuzz/Dockerfile index 2d1178b04..9eac39872 100644 --- a/projects/cryptofuzz/Dockerfile +++ b/projects/cryptofuzz/Dockerfile @@ -34,5 +34,6 @@ RUN git clone --depth 1 https://github.com/jedisct1/libsodium.git RUN git clone --depth 1 https://github.com/weidai11/cryptopp/ RUN git clone --depth 1 https://dev.gnupg.org/source/libgcrypt.git RUN wget https://gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.36.tar.bz2 +RUN wget https://github.com/project-everest/hacl-star/archive/evercrypt-v0.1alpha1.tar.gz COPY build.sh $SRC/ diff --git a/projects/cryptofuzz/build.sh b/projects/cryptofuzz/build.sh index 71452a56b..c7b193ea0 100755 --- a/projects/cryptofuzz/build.sh +++ b/projects/cryptofuzz/build.sh @@ -19,6 +19,7 @@ # https://github.com/google/oss-fuzz/issues/2336 export LINK_FLAGS="" +export INCLUDE_PATH_FLAGS="" # Generate lookup tables. This only needs to be done once. cd $SRC/cryptofuzz @@ -93,6 +94,28 @@ then make -B fi +if [[ $CFLAGS != *sanitize=memory* ]] +then + # Compile EverCrypt (with assembly) + cd $SRC/ + tar zxvf evercrypt-v0.1alpha1.tar.gz + mv hacl-star-evercrypt-v0.1alpha1 evercrypt + + cd $SRC/evercrypt/dist/generic + make -j$(nproc) || true + + export CXXFLAGS="$CXXFLAGS -DCRYPTOFUZZ_EVERCRYPT" + export EVERCRYPT_A_PATH="$SRC/evercrypt/dist/generic/libevercrypt.a" + export KREMLIN_A_PATH="$SRC/evercrypt/dist/kremlin/kremlib/dist/minimal/*.o" + export EVERCRYPT_INCLUDE_PATH="$SRC/evercrypt/dist" + export KREMLIN_INCLUDE_PATH="$SRC/evercrypt/dist/kremlin/include" + export INCLUDE_PATH_FLAGS="$INCLUDE_PATH_FLAGS -I $EVERCRYPT_INCLUDE_PATH -I $KREMLIN_INCLUDE_PATH" + + # Compile Cryptofuzz EverCrypt (with assembly) module + cd $SRC/cryptofuzz/modules/evercrypt + make -B +fi + ############################################################################## # Compile Cryptofuzz reference (without assembly) module export CXXFLAGS="$CXXFLAGS -DCRYPTOFUZZ_REFERENCE" @@ -127,7 +150,7 @@ then # Compile Cryptofuzz cd $SRC/cryptofuzz - LIBFUZZER_LINK="$LIB_FUZZING_ENGINE" CXXFLAGS="$CXXFLAGS -I $SRC/libressl/include -DCRYPTOFUZZ_LIBRESSL" make -B -j$(nproc) + LIBFUZZER_LINK="$LIB_FUZZING_ENGINE" CXXFLAGS="$CXXFLAGS -I $SRC/libressl/include -DCRYPTOFUZZ_LIBRESSL $INCLUDE_PATH_FLAGS" make -B -j$(nproc) # Generate dictionary ./generate_dict @@ -154,7 +177,7 @@ then # Compile Cryptofuzz cd $SRC/cryptofuzz - LIBFUZZER_LINK="$LIB_FUZZING_ENGINE" CXXFLAGS="$CXXFLAGS -I $SRC/openssl/include" make -B -j$(nproc) + LIBFUZZER_LINK="$LIB_FUZZING_ENGINE" CXXFLAGS="$CXXFLAGS -I $SRC/openssl/include $INCLUDE_PATH_FLAGS" make -B -j$(nproc) # Generate dictionary ./generate_dict @@ -180,7 +203,7 @@ OPENSSL_INCLUDE_PATH="$SRC/openssl/include" OPENSSL_LIBCRYPTO_A_PATH="$SRC/opens # Compile Cryptofuzz cd $SRC/cryptofuzz -LIBFUZZER_LINK="$LIB_FUZZING_ENGINE" CXXFLAGS="$CXXFLAGS -I $SRC/openssl/include" make -B -j$(nproc) +LIBFUZZER_LINK="$LIB_FUZZING_ENGINE" CXXFLAGS="$CXXFLAGS -I $SRC/openssl/include $INCLUDE_PATH_FLAGS" make -B -j$(nproc) # Generate dictionary ./generate_dict @@ -208,7 +231,7 @@ then # Compile Cryptofuzz cd $SRC/cryptofuzz - LIBFUZZER_LINK="$LIB_FUZZING_ENGINE" CXXFLAGS="$CXXFLAGS -I $SRC/openssl/include" make -B -j$(nproc) + LIBFUZZER_LINK="$LIB_FUZZING_ENGINE" CXXFLAGS="$CXXFLAGS -I $SRC/openssl/include $INCLUDE_PATH_FLAGS" make -B -j$(nproc) # Generate dictionary ./generate_dict @@ -235,7 +258,7 @@ OPENSSL_INCLUDE_PATH="$SRC/boringssl/include" OPENSSL_LIBCRYPTO_A_PATH="$SRC/bor # Compile Cryptofuzz cd $SRC/cryptofuzz -LIBFUZZER_LINK="$LIB_FUZZING_ENGINE" CXXFLAGS="$CXXFLAGS -I $SRC/openssl/include" make -B -j$(nproc) +LIBFUZZER_LINK="$LIB_FUZZING_ENGINE" CXXFLAGS="$CXXFLAGS -I $SRC/openssl/include $INCLUDE_PATH_FLAGS" make -B -j$(nproc) # Generate dictionary ./generate_dict diff --git a/projects/cryptofuzz/project.yaml b/projects/cryptofuzz/project.yaml index b93bd1967..e22c59ca6 100644 --- a/projects/cryptofuzz/project.yaml +++ b/projects/cryptofuzz/project.yaml @@ -12,6 +12,9 @@ auto_ccs: - "kinichiro.inoguchi@gmail.com" - "github@pureftpd.org" - "jussi.kivilinna@gmail.com" + - "szanella@gmail.com" + - "karthik.bhargavan@gmail.com" + - "jonathan.protzenko@gmail.com" sanitizers: - address - undefined