Skip to content

Commit edc0155

Browse files
committed
Add fuzzing setup to quantum resistant lock
1 parent bf2ab2a commit edc0155

File tree

21 files changed

+725
-374
lines changed

21 files changed

+725
-374
lines changed

.gitignore

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,12 @@ build/
22
/target
33
/tests/failed_txs
44
/test-vector*
5+
6+
/fuzzing/fuzzing_syscalls_all_in_one.h
7+
/fuzzing/dumps
8+
/fuzzing/corpus*
9+
/fuzzing/*.o
10+
/fuzzing/leaf*.complete
11+
/fuzzing/leaf*intermediate/
12+
/fuzzing/*_fuzzer
13+
/fuzzing/binary_to_text_converter

Cargo.lock

Lines changed: 18 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ members = [
55
"contracts/hybrid-sphincs-all-in-one-lock",
66
"contracts/sphincs-all-in-one-lock",
77
"crates/ckb-fips205-utils",
8+
"crates/fuzzing-corpus-generator",
89
"crates/intermediate-source-generator",
910
"crates/script-merge-tool",
1011
"tests/multisig-tests",
@@ -15,6 +16,10 @@ members = [
1516
"tools/ckb-sphincs-utils",
1617
]
1718

19+
exclude = [
20+
"fuzzing/ckb-script-fuzzing-toolkit/tools/flattener"
21+
]
22+
1823
[profile.release]
1924
overflow-checks = true
2025
strip = false

contracts/c-sphincs-all-in-one-lock/Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,14 @@ $(CUR_BUILD)/nist-vector-tester: nist-vector-tester.c $(CUR_BUILD)/params-finder
6868
--root-actual $@-root.debug \
6969
--leaves $(CUR_BUILD)/leaves_debug \
7070
--output $@.debug \
71+
--metadata-file $@_metadata_debug.json \
7172
--merge
7273
$(TOP)/target/$(MODE)/script-merge-tool --prefix CKB_ merge \
7374
--root-debug $@-root.debug \
7475
--root-actual $@-root.stripped \
7576
--leaves $(CUR_BUILD)/leaves_stripped \
7677
--output $@ \
78+
--metadata-file $@_metadata_stripped.json \
7779
--merge
7880

7981
$(CUR_BUILD)/$(BINARY): $(CUR_BUILD)/root.complete $(CUR_BUILD)/leaf.complete $(HEADERS)
@@ -82,12 +84,14 @@ $(CUR_BUILD)/$(BINARY): $(CUR_BUILD)/root.complete $(CUR_BUILD)/leaf.complete $(
8284
--root-actual $(CUR_BUILD)/root.debug \
8385
--leaves $(CUR_BUILD)/leaves_debug \
8486
--output $@.debug \
87+
--metadata-file $@_metadata_debug.json \
8588
--merge
8689
$(TOP)/target/$(MODE)/script-merge-tool --prefix CKB_ merge \
8790
--root-debug $(CUR_BUILD)/root.debug \
8891
--root-actual $(CUR_BUILD)/root.stripped \
8992
--leaves $(CUR_BUILD)/leaves_stripped \
9093
--output $@ \
94+
--metadata-file $@_metadata_stripped.json \
9195
--merge
9296

9397
$(CUR_BUILD)/root.complete: ckb-sphincsplus-root-lock.c $(CUR_BUILD)/params-finder.h $(CUR_BUILD)/leaf-vars.h

contracts/c-sphincs-all-in-one-lock/ckb-sphincsplus-leaf-lock.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
#ifdef FUZZING
2+
#define mol2_printf(...)
3+
#include <fuzzing_syscalls_all_in_one.h>
4+
#else
15
/*
26
* Leaf lock takes calculated message hash, together with a range in
37
* witness as input. It runs sphincs+ signature verifications based on
@@ -20,6 +24,8 @@
2024
#undef CKB_DECLARATION_ONLY
2125
#include "entry.h"
2226
#define CKB_DECLARATION_ONLY
27+
#include <ckb_syscalls.h>
28+
#endif
2329

2430
#include "ckb-sphincsplus-common.h"
2531

contracts/c-sphincs-all-in-one-lock/ckb-sphincsplus-root-lock.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
#ifdef FUZZING
2+
#define mol2_printf(...)
3+
#include <fuzzing_syscalls_all_in_one.h>
4+
#else
15
/*
26
* Root lock calculates signing message hash, validates multisig
37
* structure & logics, ensures multisig config hash is correctly calculated.
@@ -16,11 +20,12 @@
1620
#undef CKB_DECLARATION_ONLY
1721
#include "entry.h"
1822
#define CKB_DECLARATION_ONLY
23+
#include <ckb_syscalls.h>
24+
#endif
1925

2026
#include "ckb-sphincsplus-common.h"
2127

2228
#include <blake2b.h>
23-
#include <ckb_syscalls.h>
2429
#include <molecule/blockchain-api2.h>
2530

2631
#define CKB_SCRIPT_MERGE_TOOL_DEFINE_VARS
@@ -292,14 +297,17 @@ int main(int argc, char *argv[]) {
292297
CHECK(mol2_read_and_advance(&signatures, &flag, 1));
293298

294299
uint8_t param_index = MULTISIG_FLAG_TO_PARAM_INDEX(flag);
300+
CHECK2(
301+
param_index >= 0 && param_index < CKB_SPHINCS_SUPPORTED_PARAMS_COUNT,
302+
ERROR_SPHINCSPLUS_WITNESS);
295303
if (all_params[param_index] == NULL) {
296304
CHECK(fetch_params(MULTISIG_FLAG_TO_PARAM_ID(flag),
297305
&all_params[param_index]));
298306
}
299307
uint32_t pk_size = all_params[param_index]->pk_bytes;
300308
uint32_t sign_size = all_params[param_index]->sign_bytes;
301309
CHECK2(pk_size + sign_size + 1 == (size_t)pk_size + (size_t)sign_size + 1,
302-
ERROR_SPHINCSPLUS_WITNESS;);
310+
ERROR_SPHINCSPLUS_WITNESS);
303311

304312
if (MULTISIG_HAS_SIGNATURE(flag)) {
305313
/*

contracts/c-sphincs-all-in-one-lock/ckb-sphincsplus.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ uint32_t sphincs_plus_get_seed_size() { return CRYPTO_SEEDBYTES; }
6363

6464
#endif // CKB_VM
6565

66-
#include <stdio.h>
6766
int sphincs_plus_verify(const uint8_t *sign, uint32_t sign_size,
6867
const uint8_t *message, uint32_t message_size,
6968
const uint8_t *pubkey, uint32_t pubkey_size) {
@@ -75,7 +74,6 @@ int sphincs_plus_verify(const uint8_t *sign, uint32_t sign_size,
7574
int err = crypto_sign_verify(sign, SPHINCS_PLUS_SIGN_SIZE, message,
7675
message_size, pubkey);
7776
if (err != 0) {
78-
printf("Verify faliure: %d\n", err);
7977
return SphincsPlusError_Verify;
8078
}
8179

contracts/c-sphincs-all-in-one-lock/utils/ckb_tx_message_all.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#ifndef CKB_CKB_TX_MESSAGE_ALL_H_
22
#define CKB_CKB_TX_MESSAGE_ALL_H_
33

4-
#include <ckb_syscalls.h>
4+
#include <ckb_syscall_utils.h>
55

66
#include "witness_args_lazy_utils.h"
77

contracts/c-sphincs-all-in-one-lock/utils/witness_args_lazy_utils.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
* and cursor has been provided.
2424
*/
2525

26-
#include <ckb_syscalls.h>
26+
#include <ckb_syscall_utils.h>
2727
#include <molecule/blockchain-api2.h>
2828

2929
void mol2_advance(mol2_cursor_t *cursor, uint32_t len) {

contracts/hybrid-sphincs-all-in-one-lock/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,14 @@ build: src/generated/sizes.rs src/generated/offsets.rs src/generated/params.rs
5252
--root-actual build/$${binary}_root.debug \
5353
--leaves $(C_BUILD_DIR)/leaves_debug \
5454
--output build/$${binary}.debug \
55+
--metadata-file build/$${binary}_metadata_debug.json \
5556
--merge; \
5657
$(TOP)/target/$(MODE)/script-merge-tool --prefix CKB_ merge \
5758
--root-debug build/$${binary}_root.debug \
5859
--root-actual build/$${binary}_root.stripped \
5960
--leaves $(C_BUILD_DIR)/leaves_stripped \
6061
--output build/$${binary} \
62+
--metadata-file build/$${binary}_metadata_stripped.json \
6163
--merge; \
6264
cp build/$${binary}.debug $(TOP)/$(BUILD_DIR)/$${binary}.debug; \
6365
cp build/$${binary} $(TOP)/$(BUILD_DIR)/$${binary}; \

0 commit comments

Comments
 (0)