Skip to content

Commit ae08554

Browse files
authored
Validate Signature RSA (nervosnetwork#6)
Validate signature RSA
1 parent 8cbe3db commit ae08554

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+10801
-1
lines changed

.github/workflows/rust.yml

+2
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ jobs:
1313
run: git submodule update --init
1414
- name: Build contract
1515
run: make all-via-docker
16+
- name: Run simulator tests
17+
run: bash tests/validate_signature_rsa/run.sh
1618
- name: Run tests
1719
run: cargo test

.gitignore

+9
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
11
target/
22
build/
33
!build/.gitkeep
4+
cmake-build-debug
5+
tests/validate_signature_rsa/build.simulator
6+
tests/validate_signature_rsa/corpus
7+
tests/validate_signature_rsa/dlopen_fuzzer.dSYM
8+
tests/validate_signature_rsa/dlopen_coverage
9+
tests/validate_signature_rsa/dlopen_fuzzer
10+
tests/validate_signature_rsa/coverage
11+
tests/validate_signature_rsa/fuzz-*.log
12+

.gitmodules

+6
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,9 @@
44
[submodule "deps/ckb-c-std-lib"]
55
path = deps/ckb-c-std-lib
66
url = https://github.com/nervosnetwork/ckb-c-stdlib.git
7+
[submodule "deps/mbedtls"]
8+
path = deps/mbedtls
9+
url = https://github.com/nervosnetwork/mbedtls.git
10+
[submodule "deps/ckb-c-stdlib-simulator-only"]
11+
path = deps/ckb-c-stdlib-simulator-only
12+
url = https://github.com/nervosnetwork/ckb-c-stdlib.git

CMakeLists.txt

+105
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
cmake_minimum_required(VERSION 3.12)
2+
project(ckb_production_scripts_simulator C)
3+
4+
set(CMAKE_C_STANDARD 11)
5+
# uncomment it for sanitize
6+
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fsanitize=undefined")
7+
8+
# uncomment it for coverage test
9+
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage")
10+
#add_definitions(-DCKB_COVERAGE)
11+
add_definitions(-DCKB_SIMULATOR)
12+
add_definitions(-D__SHARED_LIBRARY__)
13+
add_definitions(-DCKB_DECLARATION_ONLY)
14+
add_definitions(-DCKB_USE_SIM)
15+
16+
include_directories(tests/validate_signature_rsa)
17+
include_directories(deps/ckb-c-stdlib-simulator-only/simulator)
18+
include_directories(deps/ckb-c-stdlib-simulator-only)
19+
# include_directories(deps/ckb-c-stdlib/libc)
20+
# on simulator, we don't use own "libc"
21+
include_directories(deps)
22+
include_directories(deps/ckb-c-stdlib-simulator-only/molecule)
23+
include_directories(c)
24+
include_directories(build)
25+
include_directories(deps/secp256k1/src)
26+
include_directories(deps/secp256k1)
27+
include_directories(deps/mbedtls)
28+
include_directories(deps/mbedtls/include)
29+
30+
add_library(mbedtls
31+
deps/mbedtls/library/aes.c
32+
deps/mbedtls/library/aesni.c
33+
deps/mbedtls/library/arc4.c
34+
deps/mbedtls/library/aria.c
35+
deps/mbedtls/library/asn1parse.c
36+
deps/mbedtls/library/asn1write.c
37+
deps/mbedtls/library/base64.c
38+
deps/mbedtls/library/bignum.c
39+
deps/mbedtls/library/blowfish.c
40+
deps/mbedtls/library/camellia.c
41+
deps/mbedtls/library/ccm.c
42+
deps/mbedtls/library/chacha20.c
43+
deps/mbedtls/library/chachapoly.c
44+
deps/mbedtls/library/cipher.c
45+
deps/mbedtls/library/cipher_wrap.c
46+
deps/mbedtls/library/cmac.c
47+
deps/mbedtls/library/ctr_drbg.c
48+
deps/mbedtls/library/des.c
49+
deps/mbedtls/library/dhm.c
50+
deps/mbedtls/library/ecdh.c
51+
deps/mbedtls/library/ecdsa.c
52+
deps/mbedtls/library/ecjpake.c
53+
deps/mbedtls/library/ecp.c
54+
deps/mbedtls/library/ecp_curves.c
55+
deps/mbedtls/library/entropy.c
56+
deps/mbedtls/library/entropy_poll.c
57+
deps/mbedtls/library/error.c
58+
deps/mbedtls/library/gcm.c
59+
deps/mbedtls/library/havege.c
60+
deps/mbedtls/library/hkdf.c
61+
deps/mbedtls/library/hmac_drbg.c
62+
deps/mbedtls/library/md.c
63+
deps/mbedtls/library/md2.c
64+
deps/mbedtls/library/md4.c
65+
deps/mbedtls/library/md5.c
66+
deps/mbedtls/library/memory_buffer_alloc.c
67+
deps/mbedtls/library/nist_kw.c
68+
deps/mbedtls/library/oid.c
69+
deps/mbedtls/library/padlock.c
70+
deps/mbedtls/library/pem.c
71+
deps/mbedtls/library/pk.c
72+
deps/mbedtls/library/pk_wrap.c
73+
deps/mbedtls/library/pkcs12.c
74+
deps/mbedtls/library/pkcs5.c
75+
deps/mbedtls/library/pkparse.c
76+
deps/mbedtls/library/pkwrite.c
77+
deps/mbedtls/library/platform.c
78+
deps/mbedtls/library/platform_util.c
79+
deps/mbedtls/library/poly1305.c
80+
deps/mbedtls/library/psa_crypto.c
81+
deps/mbedtls/library/psa_crypto_se.c
82+
deps/mbedtls/library/psa_crypto_slot_management.c
83+
deps/mbedtls/library/psa_crypto_storage.c
84+
deps/mbedtls/library/psa_its_file.c
85+
deps/mbedtls/library/ripemd160.c
86+
deps/mbedtls/library/rsa.c
87+
deps/mbedtls/library/rsa_internal.c
88+
deps/mbedtls/library/sha1.c
89+
deps/mbedtls/library/sha256.c
90+
deps/mbedtls/library/sha512.c
91+
deps/mbedtls/library/threading.c
92+
deps/mbedtls/library/timing.c
93+
deps/mbedtls/library/version.c
94+
deps/mbedtls/library/version_features.c
95+
deps/mbedtls/library/xtea.c)
96+
97+
add_executable(validate_signature_rsa tests/validate_signature_rsa/validate_signature_rsa_sim.c c/validate_signature_rsa.h)
98+
target_compile_definitions(validate_signature_rsa PUBLIC -D_FILE_OFFSET_BITS=64 -DCKB_DECLARATION_ONLY)
99+
target_include_directories(validate_signature_rsa PUBLIC deps/ckb-c-stdlib-simulator-only/libc)
100+
target_link_libraries(validate_signature_rsa mbedtls)
101+
102+
103+
add_executable(dlopen_sim tests/validate_signature_rsa/dlopen_sim.c)
104+
target_compile_definitions(dlopen_sim PUBLIC -D_FILE_OFFSET_BITS=64 -DCKB_DECLARATION_ONLY)
105+
#target_include_directories(dlopen_sim PUBLIC deps/ckb-c-stdlib-simulator-only/libc)

Makefile

+46-1
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,15 @@ PROTOCOL_SCHEMA := c/blockchain.mol
1010
PROTOCOL_VERSION := d75e4c56ffa40e17fd2fe477da3f98c5578edcd1
1111
PROTOCOL_URL := https://raw.githubusercontent.com/nervosnetwork/ckb/${PROTOCOL_VERSION}/util/types/schemas/blockchain.mol
1212

13+
# RSA/mbedtls
14+
CFLAGS_MBEDTLS := $(CFLAGS) -I deps/mbedtls/include
15+
LDFLAGS_MBEDTLS := $(LDFLAGS)
16+
PASSED_MBEDTLS_CFLAGS := -O3 -fPIC -nostdinc -nostdlib -DCKB_DECLARATION_ONLY -I ../../ckb-c-std-lib/libc -fdata-sections -ffunction-sections
17+
1318
# docker pull nervos/ckb-riscv-gnu-toolchain:gnu-bionic-20191012
1419
BUILDER_DOCKER := nervos/ckb-riscv-gnu-toolchain@sha256:aae8a3f79705f67d505d1f1d5ddc694a4fd537ed1c7e9622420a470d59ba2ec3
1520

16-
all: build/simple_udt build/anyone_can_pay build/always_success
21+
all: build/simple_udt build/anyone_can_pay build/always_success build/validate_signature_rsa
1722

1823
all-via-docker: ${PROTOCOL_HEADER}
1924
docker run --rm -v `pwd`:/code ${BUILDER_DOCKER} bash -c "cd /code && make"
@@ -46,6 +51,43 @@ $(SECP256K1_SRC):
4651
CC=$(CC) LD=$(LD) ./configure --with-bignum=no --enable-ecmult-static-precomputation --enable-endomorphism --enable-module-recovery --host=$(TARGET) && \
4752
make src/ecmult_static_pre_context.h src/ecmult_static_context.h
4853

54+
deps/mbedtls/library/libmbedcrypto.a:
55+
cp deps/mbedtls-config-template.h deps/mbedtls/include/mbedtls/config.h
56+
make -C deps/mbedtls/library CC=${CC} LD=${LD} CFLAGS="${PASSED_MBEDTLS_CFLAGS}" libmbedcrypto.a
57+
58+
build/impl.o: deps/ckb-c-std-lib/libc/src/impl.c
59+
$(CC) -c $(filter-out -DCKB_DECLARATION_ONLY, $(CFLAGS_MBEDTLS)) $(LDFLAGS_MBEDTLS) -o $@ $^
60+
61+
validate_signature_rsa-via-docker:
62+
docker run --rm -v `pwd`:/code ${BUILDER_DOCKER} bash -c "cd /code && make build/validate_signature_rsa"
63+
64+
build/validate_signature_rsa: c/validate_signature_rsa.c deps/mbedtls/library/libmbedcrypto.a
65+
$(CC) $(CFLAGS_MBEDTLS) $(LDFLAGS_MBEDTLS) -D__SHARED_LIBRARY__ -fPIC -fPIE -pie -Wl,--dynamic-list c/rsa.syms -o $@ $^
66+
$(OBJCOPY) --only-keep-debug $@ $@.debug
67+
$(OBJCOPY) --strip-debug --strip-all $@
68+
69+
validate_signature_rsa_sim-via-docker:
70+
docker run --rm -v `pwd`:/code ${BUILDER_DOCKER} bash -c "cd /code && make build/validate_signature_rsa_sim"
71+
72+
# for test only
73+
CFLAGS_MBEDTLS2:=$(filter-out -Werror,$(CFLAGS_MBEDTLS))
74+
CFLAGS_MBEDTLS2:=$(filter-out -Wno-nonnull,$(CFLAGS_MBEDTLS2))
75+
CFLAGS_MBEDTLS2:=$(filter-out -Wno-nonnull-compare,$(CFLAGS_MBEDTLS2))
76+
CFLAGS_MBEDTLS2:=$(filter-out -Wno-unused-function,$(CFLAGS_MBEDTLS2))
77+
CFLAGS_MBEDTLS2:=$(filter-out -Wall,$(CFLAGS_MBEDTLS2))
78+
build/validate_signature_rsa_sim: tests/validate_signature_rsa/validate_signature_rsa_sim.c deps/mbedtls/library/libmbedcrypto.a
79+
$(CC) $(CFLAGS_MBEDTLS2) $(LDFLAGS_MBEDTLS) -DCKB_RUN_IN_VM -o $@ $^
80+
81+
82+
validate_signature_rsa_clean:
83+
make -C deps/mbedtls/library clean
84+
rm -f build/validate_signature_rsa
85+
rm -f build/*.o
86+
87+
fmt:
88+
clang-format -i -style=Google $(wildcard c/validate_signature_rsa.h c/validate_signature_rsa.c tests/validate_signature_rsa/*.c tests/validate_signature_rsa/*.h)
89+
git diff --exit-code $(wildcard c/validate_signature_rsa.h c/validate_signature_rsa.c tests/validate_signature_rsa/*.c tests/validate_signature_rsa/*.h)
90+
4991
${PROTOCOL_SCHEMA}:
5092
curl -L -o $@ ${PROTOCOL_URL}
5193

@@ -74,6 +116,9 @@ clean:
74116
rm -rf build/secp256k1_data
75117
rm -rf build/*.debug
76118
cd deps/secp256k1 && [ -f "Makefile" ] && make clean
119+
make -C deps/mbedtls/library clean
120+
rm -f build/validate_signature_rsa
121+
rm -f build/validate_signature_rsa_sim
77122
cargo clean
78123

79124
dist: clean all

build.rs

+4
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ const BINARIES: &[(&str, &str)] = &[
2525
"simple_udt",
2626
"e1e354d6d643ad42724d40967e334984534e0367405c5ae42a9d7d63d77df419",
2727
),
28+
(
29+
"validate_signature_rsa",
30+
"a7d3c232c78a3dca841a997606e553f6fc6cab3d3e8e4e8984129752900512a2",
31+
)
2832
];
2933

3034
fn main() {

c/rsa.syms

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
load_prefilled_data;
3+
validate_signature;
4+
};
5+
6+

0 commit comments

Comments
 (0)