7个版本 (破坏性更新)
0.6.2 | 2023年12月5日 |
---|---|
0.6.1 | 2023年7月19日 |
0.5.0 | 2023年3月3日 |
0.4.0 | 2023年1月21日 |
0.1.0 | 2020年11月6日 |
#739 在 密码学 中
40KB
505 行
drand verify
一个Rust编写的drand验证库。它可以被其他crate使用,也可以编译成带有JavaScript绑定的Wasm blob(< 500千字节)。
功能概述
- 支持经典的30秒主网/测试网 ✅
- 基于维护良好的pairing BLS12-381实现 ✅
- 支持unchained模式 ✅
- G1/G2交换 ✅
- API不公开BLS实现的类型 ✅
- 支持quicknet (bls-unchained-g1-rfc9380) ✅
接下来
- 添加BLS12-381的替代实现(特别是blst)
以下功能是故意不支持的
- 网络请求:我们不在这里进行网络操作。我们的调用者对自己的环境中的网络操作有更好的了解。
- JSON解析:我们不在这里进行解码。我们的调用者对自己的环境中的JSON(或protobuf)解码有更好的了解。
开发
使用以下方式编译
$ cargo test
$ cargo build --examples
运行示例
验证随机信标(轮次、前一个签名、签名)与熵联盟的公钥,并计算相应的随机数。
$ cargo run --example drand_verify 1337 80d95247ddf1bb3acf5738497a5f10406be283144603f63d714bb1a44ff6b93285ae2697fffeb50c68862bd9fbecd4b204b1798d2686b4ac5d573615031d9d67e6168bde9a7adf1161430a498ca701a25c216aee3e38ffd5290369034fa050a2 945b08dcb30e24da281ccf14a646f0630ceec515af5c5895e18cc1b19edd65d156b71c776a369af3487f1bc6af1062500b059e01095cc0eedce91713977d7735cac675554edfa0d0481bb991ed93d333d08286192c05bf6b65d20f23a37fc7bb
Verification succeeded
Randomness: 2660664f8d4bc401194d80d81da20a1e79480f65b8e2d205aecbd143b5bfb0d3
为JS构建
为了使JS/Wasm接口简单,在模块verify_js.rs
中有一个包装器,它以十六进制格式接收输入并使用u32轮次数字。使用wasm-bindgen创建JS/Wasm绑定。
对于Node.js
这创建了一个同步加载的CommonJS模块。
$ wasm-pack build --target nodejs -- --features js
$ node
> const { verify_beacon } = require('./pkg/drand_verify');
// all good
> verify_beacon("868f005eb8e6e4ca0a47c8a77ceaa5309a47978a7c71bc5cce96366b5d7a569937c529eeda66c7293784a9402801af31", 72785, "a609e19a03c2fcc559e8dae14900aaefe517cb55c840f6e69bc8e4f66c8d18e8a609685d9917efbfb0c37f058c2de88f13d297c7e19e0ab24813079efe57a182554ff054c7638153f9b26a60e7111f71a0ff63d9571704905d3ca6df0b031747", "82f5d3d2de4db19d40a6980e8aa37842a0e55d1df06bd68bddc8d60002e8e959eb9cfa368b3c1b77d18f02a54fe047b80f0989315f83b12a74fd8679c4f12aae86eaf6ab5690b34f1fddd50ee3cc6f6cdf59e95526d5a5d82aaa84fa6f181e42")
true
// wrong round
> verify_beacon("868f005eb8e6e4ca0a47c8a77ceaa5309a47978a7c71bc5cce96366b5d7a569937c529eeda66c7293784a9402801af31", 42, "a609e19a03c2fcc559e8dae14900aaefe517cb55c840f6e69bc8e4f66c8d18e8a609685d9917efbfb0c37f058c2de88f13d297c7e19e0ab24813079efe57a182554ff054c7638153f9b26a60e7111f71a0ff63d9571704905d3ca6df0b031747", "82f5d3d2de4db19d40a6980e8aa37842a0e55d1df06bd68bddc8d60002e8e959eb9cfa368b3c1b77d18f02a54fe047b80f0989315f83b12a74fd8679c4f12aae86eaf6ab5690b34f1fddd50ee3cc6f6cdf59e95526d5a5d82aaa84fa6f181e42")
false
// invalid pubkey length
> verify_beacon("868f", 72785, "a609e19a03c2fcc559e8dae14900aaefe517cb55c840f6e69bc8e4f66c8d18e8a609685d9917efbfb0c37f058c2de88f13d297c7e19e0ab24813079efe57a182554ff054c7638153f9b26a60e7111f71a0ff63d9571704905d3ca6df0b031747", "82f5d3d2de4db19d40a6980e8aa37842a0e55d1df06bd68bddc8d60002e8e959eb9cfa368b3c1b77d18f02a54fe047b80f0989315f83b12a74fd8679c4f12aae86eaf6ab5690b34f1fddd50ee3cc6f6cdf59e95526d5a5d82aaa84fa6f181e42")
Thrown: 'Invalid input length for point (must be in compressed format): Expected 48, actual: 2'
// unchained mode uses empty argument
> verify_beacon("8200fc249deb0148eb918d6e213980c5d01acd7fc251900d9260136da3b54836ce125172399ddc69c4e3e11429b62c11", 223344, "", "94f6b85df7cce7237e8e7df66d794ddad092de5d8bb6a791b97e905aa89852e506ac36a792eba7021e22eebf34891f8914bf9a8dd9233ea0a4c5ca00ef8404999f899073dd2eade61fe54077fee8168f83dcb61a758b6883b38904054e64a433")
true
对于浏览器和其他JS环境
您需要更改目标以获取合适的包。例如。
$ wasm-pack build --target web -- --features js
$ ls ./pkg
对于浏览器。请参阅wasm-bindgen手册了解有关目标的信息。
许可
依赖项
~1.5MB
~29K SLoC