Skip to content

Commit 4fec432

Browse files
committed
Fix all utilities
1 parent 77d3a6b commit 4fec432

File tree

9 files changed

+73
-237
lines changed

9 files changed

+73
-237
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/build
1+
build/
22
/target
33
/tests/failed_txs
44
/test-vector*

contracts/c-sphincs-all-in-one-lock/.gitignore

Lines changed: 0 additions & 56 deletions
This file was deleted.

tests/sphincsplus/fuzzer/Makefile

Lines changed: 17 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,38 @@
1+
cur_dir = $(dir $(abspath $(firstword $(MAKEFILE_LIST))))
2+
TOP := $(cur_dir)/../../..
13

24
# Generate code, user performance analysis
3-
CC=clang
4-
LLVM_PROFDATA=llvm-profdata
5-
LLVM_COV=llvm-cov
5+
CC := clang-18
6+
LLVM_PROFDATA := $(subst clang,llvm-profdata,$(CC))
7+
LLVM_COV := $(subst clang,llvm-cov,$(CC))
68

79
NPROC?=16
810

911
PARAMS = sphincs-shake-256f
1012
THASH = robust
1113

12-
SOURCES_DIR = ref
1314
COVERAGE_DIR=coverage
1415
CORPUS_DIR=corpus
1516

16-
SPHINCS_PLUS_DIR = ../../../deps/sphincsplus/ref/
17-
18-
SOURCES = \
19-
$(SPHINCS_PLUS_DIR)address.c \
20-
$(SPHINCS_PLUS_DIR)merkle.c \
21-
$(SPHINCS_PLUS_DIR)wots.c \
22-
$(SPHINCS_PLUS_DIR)wotsx1.c \
23-
$(SPHINCS_PLUS_DIR)utils.c \
24-
$(SPHINCS_PLUS_DIR)utilsx1.c \
25-
$(SPHINCS_PLUS_DIR)fors.c \
26-
$(SPHINCS_PLUS_DIR)sign.c \
27-
$(SPHINCS_PLUS_DIR)randombytes.c \
28-
../../../c/ckb-sphincsplus.c
29-
30-
HEADERS = \
31-
$(SPHINCS_PLUS_DIR)params.h \
32-
$(SPHINCS_PLUS_DIR)address.h \
33-
$(SPHINCS_PLUS_DIR)merkle.h \
34-
$(SPHINCS_PLUS_DIR)wots.h \
35-
$(SPHINCS_PLUS_DIR)wotsx1.h \
36-
$(SPHINCS_PLUS_DIR)utils.h \
37-
$(SPHINCS_PLUS_DIR)utilsx1.h \
38-
$(SPHINCS_PLUS_DIR)fors.h \
39-
$(SPHINCS_PLUS_DIR)api.h \
40-
$(SPHINCS_PLUS_DIR)hash.h \
41-
$(SPHINCS_PLUS_DIR)thash.h \
42-
$(SPHINCS_PLUS_DIR)randombytes.h \
43-
../../../c/ckb-sphincsplus.h
44-
45-
ifneq (,$(findstring shake,$(PARAMS)))
46-
SOURCES += \
47-
$(SPHINCS_PLUS_DIR)fips202.c \
48-
$(SPHINCS_PLUS_DIR)hash_shake.c \
49-
$(SPHINCS_PLUS_DIR)thash_shake_$(THASH).c
50-
HEADERS += $(SPHINCS_PLUS_DIR)fips202.h
51-
endif
52-
ifneq (,$(findstring haraka,$(PARAMS)))
53-
SOURCES += \
54-
$(SPHINCS_PLUS_DIR)haraka.c \
55-
$(SPHINCS_PLUS_DIR)hash_haraka.c \
56-
$(SPHINCS_PLUS_DIR)thash_haraka_$(THASH).c
57-
HEADERS += $(SPHINCS_PLUS_DIR)haraka.h
58-
endif
59-
ifneq (,$(findstring sha2,$(PARAMS)))
60-
SOURCES += \
61-
$(SPHINCS_PLUS_DIR)sha2.c \
62-
$(SPHINCS_PLUS_DIR)hash_sha2.c \
63-
$(SPHINCS_PLUS_DIR)thash_sha2_$(THASH).c
64-
HEADERS += $(SPHINCS_PLUS_DIR)sha2.h
65-
endif
17+
LOCK_DIR := $(TOP)/contracts/c-sphincs-all-in-one-lock
18+
SPHINCS_PLUS_DIR := $(TOP)/deps/sphincsplus/ref
19+
CKB_STDLIB_DIR := $(TOP)/deps/ckb-c-stdlib
20+
21+
include $(TOP)/mk/files.mk
22+
23+
SOURCES = $(COMPILING_SOURCES_BY_PARAMS) $(SPHINCS_PLUS_DIR)/randombytes.c
6624

6725
FUZZER_FLAGS=-g -O1 -fsanitize=fuzzer,address,undefined -fsanitize-recover=address -DPARAMS=$(PARAMS) -DTEST_DATA=$(PARAMS)-$(THASH)
68-
FUZZER_FLAGS := $(FUZZER_FLAGS) -I ../../../c -I ../../../deps/sphincsplus/ref
26+
FUZZER_FLAGS := $(FUZZER_FLAGS) -I $(LOCK_DIR) -I $(SPHINCS_PLUS_DIR)
6927

7028
COVERAGE_FLAGS=-fprofile-instr-generate -fcoverage-mapping -DPARAMS=$(PARAMS) -DTEST_DATA=$(PARAMS)-$(THASH)
71-
COVERAGE_FLAGS := $(COVERAGE_FLAGS) -I ../../../c -I ../../../deps/sphincsplus/ref
29+
COVERAGE_FLAGS := $(COVERAGE_FLAGS) -I $(LOCK_DIR) -I $(SPHINCS_PLUS_DIR)
7230

7331
ifeq ($(OS),MacOS)
7432
COVERAGE_FLAGS+=-Wl,-U,_LLVMFuzzerCustomMutator -Wl,-U,_LLVMFuzzerInitialize
7533
endif
7634

77-
EXTERNAL_HEADERS=../../../deps/ckb-c-stdlib-20210801/ckb_exec.h
35+
EXTERNAL_HEADERS=$(TOP)/deps/ckb-c-stdlib/ckb_exec.h
7836

7937
all: build/fuzzer build/cover
8038

@@ -94,7 +52,7 @@ show: build/$(COVERAGE_DIR)/fuzzer.profdata
9452
cd build && $(LLVM_COV) show --instr-profile=$(COVERAGE_DIR)/fuzzer.profdata cover
9553

9654
report: build/$(COVERAGE_DIR)/fuzzer.profdata build/cover $(EXTERNAL_HEADERS)
97-
$(LLVM_COV) report --show-functions --instr-profile=$(COVERAGE_DIR)/fuzzer.profdata build/cover $(EXTERNAL_HEADERS)
55+
$(LLVM_COV) report --instr-profile=build/$(COVERAGE_DIR)/fuzzer.profdata build/cover $(EXTERNAL_HEADERS)
9856

9957
%.profraw: build/cover
10058
LLVM_PROFILE_FILE=$@ build/cover build/$(CORPUS_DIR)/*
@@ -109,4 +67,4 @@ clean:
10967

11068
clean-fuzzer:
11169
rm -rf build/corpus
112-
rm -rf build/fuzz-*.log
70+
rm -rf build/fuzz-*.log

tests/sphincsplus/fuzzer/sphincs_plus_fuzzer.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ size_t fill_buf(uint8_t *buf, size_t buf_size, uint8_t *data, size_t size) {
2222
int LLVMFuzzerTestOneInput(uint8_t *data, size_t size) {
2323
uint8_t message[SPX_MLEN];
2424

25-
uint32_t pubkey_size = sphincs_plus_get_pk_size();
25+
uint32_t pubkey_size = SPHINCS_PLUS_PK_SIZE;
2626
uint8_t pubkey[pubkey_size];
2727

28-
uint32_t sign_size = sphincs_plus_get_sign_size();
28+
uint32_t sign_size = SPHINCS_PLUS_SIGN_SIZE;
2929
uint8_t sign[sign_size];
3030

3131
size_t offset = fill_buf(message, SPX_MLEN, data, size);
@@ -47,4 +47,4 @@ int LLVMFuzzerTestOneInput(uint8_t *data, size_t size) {
4747
};
4848

4949
return 0;
50-
}
50+
}
Lines changed: 22 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,91 +1,48 @@
1-
TARGET := riscv64-unknown-linux-gnu-
2-
CC := $(TARGET)gcc
3-
LD := $(TARGET)gcc
1+
cur_dir = $(dir $(abspath $(firstword $(MAKEFILE_LIST))))
2+
TOP := $(cur_dir)/../../..
3+
4+
CC := clang-18
45

56
PARAMS = sphincs-shake-128f
67
THASH = simple
78

8-
CFLAGS := -fPIC -O3 -fno-builtin-printf -fno-builtin-memcmp -nostdinc -nostartfiles -fvisibility=hidden -fdata-sections -ffunction-sections -nostdlib -Wno-nonnull-compare -DCKB_VM -DCKB_DECLARATION_ONLY -g -DCKB_C_STDLIB_PRINTF
9+
CFLAGS := -fPIC -Os -g -fno-builtin-printf -fno-builtin-memcmp \
10+
-fvisibility=hidden -fdata-sections -ffunction-sections \
11+
-Wno-nonnull-compare
12+
CFLAGS += --target=riscv64 -march=rv64imc_zba_zbb_zbc_zbs \
13+
-nostdinc -nostdlib -nostartfiles -DCKB_VM -DCKB_DECLARATION_ONLY
14+
CFLAGS += -DCKB_C_STDLIB_PRINTF
915
LDFLAGS := -fdata-sections -ffunction-sections
1016

1117
# Using a new version of gcc will have a warning of ckb-c-stdlib
1218
CFLAGS := $(CFLAGS) -w
1319
# CFLAGS := $(CFLAGS) -Wall -Werror -Wno-nonnull -Wno-unused-function
1420
LDFLAGS := $(LDFLAGS) -Wl,-static -Wl,--gc-sections
1521

16-
CFLAGS := $(CFLAGS) -I ../../../c -I ../../../deps/ckb-c-stdlib/libc -I ../../../deps/ckb-c-stdlib -I ../../../deps/ckb-c-stdlib/molecule -I ../
17-
CFLAGS := $(CFLAGS) -I ../../../deps/sphincsplus/ref -DPARAMS=$(PARAMS) -DTEST_DATA=$(PARAMS)-$(THASH)
18-
19-
SPHINCS_PLUS_DIR = ../../../deps/sphincsplus/ref/
20-
21-
SOURCES = \
22-
$(SPHINCS_PLUS_DIR)address.c \
23-
$(SPHINCS_PLUS_DIR)merkle.c \
24-
$(SPHINCS_PLUS_DIR)wots.c \
25-
$(SPHINCS_PLUS_DIR)wotsx1.c \
26-
$(SPHINCS_PLUS_DIR)utils.c \
27-
$(SPHINCS_PLUS_DIR)utilsx1.c \
28-
$(SPHINCS_PLUS_DIR)fors.c \
29-
$(SPHINCS_PLUS_DIR)sign.c \
30-
../../../c/ckb-sphincsplus.c
22+
LOCK_DIR := $(TOP)/contracts/c-sphincs-all-in-one-lock
23+
SPHINCS_PLUS_DIR := $(TOP)/deps/sphincsplus/ref
24+
CKB_STDLIB_DIR := $(TOP)/deps/ckb-c-stdlib
3125

32-
HEADERS = \
33-
$(SPHINCS_PLUS_DIR)params.h \
34-
$(SPHINCS_PLUS_DIR)address.h \
35-
$(SPHINCS_PLUS_DIR)merkle.h \
36-
$(SPHINCS_PLUS_DIR)wots.h \
37-
$(SPHINCS_PLUS_DIR)wotsx1.h \
38-
$(SPHINCS_PLUS_DIR)utils.h \
39-
$(SPHINCS_PLUS_DIR)utilsx1.h \
40-
$(SPHINCS_PLUS_DIR)fors.h \
41-
$(SPHINCS_PLUS_DIR)api.h \
42-
$(SPHINCS_PLUS_DIR)hash.h \
43-
$(SPHINCS_PLUS_DIR)thash.h \
44-
$(SPHINCS_PLUS_DIR)randombytes.h \
45-
../../../c/ckb-sphincsplus.h
26+
CFLAGS := $(CFLAGS) -I $(LOCK_DIR) -I $(CKB_STDLIB_DIR) -I $(CKB_STDLIB_DIR)/libc -I $(CKB_STDLIB_DIR)/molecule -I ../
27+
CFLAGS := $(CFLAGS) -I $(SPHINCS_PLUS_DIR) -DPARAMS=$(PARAMS) -DTEST_DATA=$(PARAMS)-$(THASH)
4628

47-
ifneq (,$(findstring shake,$(PARAMS)))
48-
SOURCES += \
49-
$(SPHINCS_PLUS_DIR)fips202.c \
50-
$(SPHINCS_PLUS_DIR)hash_shake.c \
51-
$(SPHINCS_PLUS_DIR)thash_shake_$(THASH).c
52-
HEADERS += $(SPHINCS_PLUS_DIR)fips202.h
53-
endif
54-
ifneq (,$(findstring haraka,$(PARAMS)))
55-
SOURCES += \
56-
$(SPHINCS_PLUS_DIR)haraka.c \
57-
$(SPHINCS_PLUS_DIR)hash_haraka.c \
58-
$(SPHINCS_PLUS_DIR)thash_haraka_$(THASH).c
59-
HEADERS += $(SPHINCS_PLUS_DIR)haraka.h
60-
endif
61-
ifneq (,$(findstring sha2,$(PARAMS)))
62-
SOURCES += \
63-
$(SPHINCS_PLUS_DIR)sha2.c \
64-
$(SPHINCS_PLUS_DIR)hash_sha2.c \
65-
$(SPHINCS_PLUS_DIR)thash_sha2_$(THASH).c
66-
HEADERS += $(SPHINCS_PLUS_DIR)sha2.h
67-
endif
68-
69-
# docker pull nervos/ckb-riscv-gnu-toolchain:gnu-jammy-20230214
70-
BUILDER_DOCKER := nervos/ckb-riscv-gnu-toolchain@sha256:7601a814be2595ad471288fefc176356b31101837a514ddb0fc93b11c1cf5135
29+
include $(TOP)/mk/files.mk
7130

7231
all: build/verify
7332

74-
all-via-docker:
75-
cd ../../../ && docker run --rm -v `pwd`:/code ${BUILDER_DOCKER} bash -c "cd /code/tests/sphincsplus/optimization && make PARAMS=$(PARAMS) THASH=$(THASH)"
76-
77-
build/verify: optimization-sphincsplus.c $(SOURCES) $(HEADERS)
78-
$(CC) $(CFLAGS) -o $@ $(SOURCES) $<
33+
build/verify: optimization-sphincsplus.c $(COMPILING_SOURCES_BY_PARAMS) $(HEADERS)
34+
mkdir -p build
35+
$(CC) $(CFLAGS) -o $@ $(COMPILING_SOURCES_BY_PARAMS) $<
7936

8037
run: build/verify
8138
export RUST_LOG=debug
8239
ckb-debugger --bin $< --max-cycles=10000000000
8340

84-
FLAME_GRAPH_DIR := ~/code/tmp/FlameGraph/
41+
FLAME_GRAPH_BIN := ~/code/tmp/FlameGraph/flamegraph.pl
8542

8643
ppref: build/verify
8744
ckb-debugger --bin $< --max-cycles=10000000000 --pprof build/sphincsplus.pref
88-
$(FLAME_GRAPH_DIR)/flamegraph.pl build/sphincsplus.pref > build/sphincsplus.svg
45+
$(FLAME_GRAPH_BIN) build/sphincsplus.pref > build/sphincsplus.svg
8946

9047
clean:
91-
rm -rf build/*
48+
rm -rf build/*

tests/sphincsplus/optimization/optimization-sphincsplus.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ void randombytes(unsigned char *x, unsigned long long xlen) { ASSERT(0); }
1616

1717
int main() {
1818
int err =
19-
sphincs_plus_verify(G_TEST_DATA_SIGN, sizeof(G_TEST_DATA_SIGN),
19+
sphincs_plus_verify(G_TEST_DATA_SIGN, SPHINCS_PLUS_SIGN_SIZE,
2020
G_TEST_DATA_MSG, sizeof(G_TEST_DATA_MSG),
2121
G_TEST_DATA_PUB_KEY, sizeof(G_TEST_DATA_PUB_KEY));
2222
if (err != 0) {
2323
return 2;
2424
}
2525

2626
printf("PubKey size: %d, Sign size: %d\n", sizeof(G_TEST_DATA_PUB_KEY),
27-
sizeof(G_TEST_DATA_SIGN));
27+
SPHINCS_PLUS_SIGN_SIZE);
2828
// printf("Done");
2929
return 0;
3030
}

tests/sphincsplus_rust/run_benchmark.sh

Lines changed: 14 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,37 @@
1+
#!/usr/bin/env bash
2+
3+
workdir=$(
4+
cd $(dirname $0)
5+
pwd
6+
)
7+
18
if [ ! -n "$1" ] ;then
29
HASH_NAME="shake"
310
HASH_SIZE="256"
4-
THASH="robust"
11+
THASH="simple"
512
HASH_OPTION="f"
613
else
714
HASH_NAME=$1
815
HASH_SIZE=$2
916
THASH=$3
1017
HASH_OPTION=$4
1118
fi
12-
PARAMS="sphincs-$HASH_NAME-$HASH_SIZE$HASH_OPTION"
1319

14-
#!/bin/bash
15-
workdir=$(
16-
cd $(dirname $0)/../../
17-
pwd
18-
)
19-
20-
export BENCH_ARGS=`./target/debug/generate_fix_infos`
20+
export TOP="${TOP:-$workdir/../..}"
2121

22-
cd $workdir
23-
rm -rf build/*
24-
mkdir -p build
25-
make -f Makefile.clang all PARAMS=$PARAMS THASH=$THASH
22+
cd $TOP
23+
make build
2624
if (($? == 0)); then
2725
echo "make success"
2826
else
2927
exit 1
3028
fi
31-
cd $workdir/tests/sphincsplus_rust
32-
cargo clean
33-
cargo build --no-default-features --features "serialize_key $HASH_NAME hash_$HASH_SIZE hash_options_$HASH_OPTION thashes_$THASH"
34-
./target/debug/run_brenchmark $BENCH_ARGS
35-
if (($? == 0)); then
36-
echo "success"
37-
else
38-
exit 1
39-
fi
4029

4130
cd $workdir
42-
rm -rf build/*
43-
mkdir -p build
44-
make all-via-docker PARAMS=$PARAMS THASH=$THASH
45-
if (($? == 0)); then
46-
echo "make success"
47-
else
48-
exit 1
49-
fi
50-
cd $workdir/tests/sphincsplus_rust
5131
cargo build --no-default-features --features "serialize_key $HASH_NAME hash_$HASH_SIZE hash_options_$HASH_OPTION thashes_$THASH"
52-
./target/debug/run_brenchmark $BENCH_ARGS
32+
cd $TOP
33+
echo $HASH_NAME-$HASH_SIZE$HASH_OPTION $THASH
34+
./target/debug/run_brenchmark `./target/debug/generate_fix_infos`
5335
if (($? == 0)); then
5436
echo "success"
5537
else

0 commit comments

Comments
 (0)