1 个不稳定版本

0.1.0 2022年4月12日

#1941密码学

Apache-2.0

120KB
2K SLoC

临时阈值多重签名 CI工作流程 crates.io

概念验证实现。这个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库需要一个工作状态的clanggtest安装。为此,您可以检查您的包管理器的文档,以获取系统依赖的安装说明。

注意:对于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