2023-03-13 10:45:02 +00:00
|
|
|
###############################################################################
|
|
|
|
# Configuration Options
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
CC = clang
|
|
|
|
|
|
|
|
FIELD_ELEMENTS_PER_BLOB ?= 4096
|
|
|
|
|
|
|
|
CFLAGS += -I../inc
|
2023-10-18 18:31:55 +00:00
|
|
|
CFLAGS += -Wall -Wextra -Werror -O0
|
2023-03-13 10:45:02 +00:00
|
|
|
CFLAGS += -DFIELD_ELEMENTS_PER_BLOB=$(FIELD_ELEMENTS_PER_BLOB)
|
|
|
|
CFLAGS += -g -fsanitize=fuzzer
|
|
|
|
|
|
|
|
BLST = -L../lib -lblst
|
|
|
|
LIBBLST = ../lib/libblst.a
|
|
|
|
|
|
|
|
# Default to no threads, to use all cores specify -1.
|
|
|
|
THREADS ?= 0
|
|
|
|
ifeq ($(THREADS), -1)
|
|
|
|
override THREADS = $(shell nproc --all)
|
|
|
|
endif
|
|
|
|
|
|
|
|
# On macOS, you need to use clang from the llvm package.
|
|
|
|
ifneq ($(OS),Windows_NT)
|
|
|
|
UNAME_S := $(shell uname -s)
|
|
|
|
ifeq ($(UNAME_S),Darwin)
|
|
|
|
ENV_OPTS += PATH=$(shell brew --prefix llvm)/bin:$(PATH)
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# Helper targets
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
.PHONY: targets
|
|
|
|
targets:
|
|
|
|
@echo Available targets:
|
|
|
|
@# List targets | filter fuzz targets | remove deps | add prefix
|
|
|
|
@make -qp | grep "^fuzz_" | sed 's/:.*//' | sed 's/^/ - /' | sort | uniq
|
|
|
|
|
|
|
|
$(LIBBLST):
|
|
|
|
@echo [+] Building blst
|
|
|
|
@make -C../src blst
|
|
|
|
|
|
|
|
.PRECIOUS: %/corpus
|
|
|
|
%/corpus:
|
|
|
|
@echo [+] Generating corpus
|
|
|
|
@cd gen_corpus && go run .
|
|
|
|
|
|
|
|
.PRECIOUS: %/fuzz
|
|
|
|
%/fuzz: %/fuzz.c ../src/c_kzg_4844.c %/corpus $(LIBBLST)
|
|
|
|
@echo [+] Compiling $* fuzzer
|
|
|
|
@$(ENV_OPTS) $(CC) $(CFLAGS) -o $@ $< $(BLST)
|
|
|
|
|
|
|
|
.PHONY: run_fuzz_%
|
|
|
|
run_fuzz_%: %/fuzz
|
|
|
|
@echo [+] Starting $* fuzzer
|
|
|
|
@-./$< \
|
|
|
|
-artifact_prefix=./$*/ \
|
|
|
|
-workers=$(THREADS) \
|
|
|
|
-jobs=$(THREADS) \
|
|
|
|
-max_len=$(LEN) \
|
|
|
|
./$*/corpus
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# Fuzzing targets
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
# Length is (4096 * 32).
|
|
|
|
fuzz_blob_to_kzg_commitment: LEN=131072
|
|
|
|
fuzz_blob_to_kzg_commitment: run_fuzz_blob_to_kzg_commitment
|
|
|
|
|
|
|
|
# Length is (4096 * 32) + 32.
|
|
|
|
fuzz_compute_kzg_proof: LEN=131104
|
|
|
|
fuzz_compute_kzg_proof: run_fuzz_compute_kzg_proof
|
|
|
|
|
|
|
|
# Length is (4096 * 32) + 48.
|
|
|
|
fuzz_compute_blob_kzg_proof: LEN=131120
|
|
|
|
fuzz_compute_blob_kzg_proof: run_fuzz_compute_blob_kzg_proof
|
|
|
|
|
|
|
|
# Length is 48 + 32 + 32 + 48.
|
|
|
|
fuzz_verify_kzg_proof: LEN=160
|
|
|
|
fuzz_verify_kzg_proof: run_fuzz_verify_kzg_proof
|
|
|
|
|
|
|
|
# Length is (4096 * 32) + 48 + 48.
|
|
|
|
fuzz_verify_blob_kzg_proof: LEN=131168
|
|
|
|
fuzz_verify_blob_kzg_proof: run_fuzz_verify_blob_kzg_proof
|
|
|
|
|
|
|
|
# Length is (3 * 4096 * 32) + (3 * 48) + (3 * 48).
|
|
|
|
fuzz_verify_blob_kzg_proof_batch: LEN=393504
|
|
|
|
fuzz_verify_blob_kzg_proof_batch: run_fuzz_verify_blob_kzg_proof_batch
|