1 个不稳定版本
0.1.0 | 2022年4月12日 |
---|
#1941 在 密码学
120KB
2K SLoC
临时阈值多重签名
概念验证实现。这个crate是正在进行的工作,尚未经过审计,API绝对不是最终的。请勿使用。
ATMS签名的Rust实现
atms
实现了Ad-Hoc阈值多重签名(ATMS),使用Boldyreva多重签名方案,如Gazi、Kiayias和Zindros在Proof-of-Stake Sidechains的第5.2节中所述。椭圆曲线密码学以及基本的签名程序使用supranational的blst
库实现,该库在BLS12-381曲线上实现BLS签名。
该库公开了一个C API,以促进与其他语言的结合使用。
ATMS C库使用
环境
编译和测试C库需要一个工作状态的clang和gtest安装。为此,您可以检查您的包管理器的文档,以获取系统依赖的安装说明。
注意:对于MacOS,我通过将-std=c++<VERSION>
添加到以下clang
命令中来实现,在按照此处指定的方式安装gtest
之后。<VERSION>
需要是11或更高。
编译库和头文件
首先,需要编译库,运行
cargo build --release
然后,我们需要使用cbindgen
来构建头文件。为此,首先安装cbindgen
cargo install cbindgen
然后,从父目录运行以下命令来构建头文件(需要nightly版本)
rustup run nightly cbindgen ./ --config cbindgen.toml --crate atms --output target/include/atms.h
运行测试
对于运行rust测试,只需运行(推荐使用--release
,否则会花费较长时间)
cargo test --release
对于c测试,我们首先构建测试可执行文件。首先进入c-tests
文件夹,然后运行
clang -x c++ tests.c stms.c atms.c -g -o tests -L ../target/release -lmithril -lstdc++ -lgtest -lgtest_main
注意:不要使用g++,它虽然可以编译,但在运行测试时会导致段错误。
要执行测试
./tests
[==========] Running 5 tests from 2 test suites.
[----------] Global test environment set-up.
[----------] 3 tests from atms
[ RUN ] atms.produceAndVerifyAggregateSignature
[ OK ] atms.produceAndVerifyAggregateSignature (27 ms)
[ RUN ] atms.testingErrors
[ OK ] atms.testingErrors (29 ms)
[ RUN ] atms.serdeAtms
[ OK ] atms.serdeAtms (14 ms)
[----------] 3 tests from atms (71 ms total)
[----------] 2 tests from multisig
[ RUN ] multisig.produceAndVerifyMultiSignature
[ OK ] multisig.produceAndVerifyMultiSignature (2 ms)
[ RUN ] multisig.serdeMultiSignature
[ OK ] multisig.serdeMultiSignature (2 ms)
[----------] 2 tests from multisig (4 ms total)
[----------] Global test environment tear-down
[==========] 5 tests from 2 test suites ran. (76 ms total)
[ PASSED ] 5 tests.
依赖项
约4.5MB
约155K SLoC