3 个版本
0.1.2 | 2019 年 9 月 4 日 |
---|---|
0.1.1 | 2019 年 9 月 3 日 |
0.1.0 | 2019 年 9 月 3 日 |
#83 在 #external
7KB
58 行
exrng
rust RNG crate,具有本地特性,但使用外部 RNG 源
lib.rs
:
exrng
这个 crate 包含了 CryptoRNG 和 RngCore 的所有功能,但只是用外部的 32 字节输入填充 rng 缓冲区。对于不支持 RUST rng 的平台,可以满足其他 crypto crate 对 RNG 的需求,因此 crate 可以编译。请确保输入是真实且良好的随机数。
简单调用示例
use exrng::ExternalRng;
use rand_core::RngCore;
let rng_bytes:[u8;32] = [1u8;32];
let mut rng = ExternalRng {rng_bytes,len:32};
let mut zero = [0u8; 32];
rng.fill_bytes(&mut zero);
我们构建此 crate 的原因
以下是在 crate schnorrkel 中提出此问题的参考。将 CryptoRng
连接到 SigningTranscript
以替换默认的 ThreadRng
。例如,有 attach_rng(t,ChaChaRng::from_seed([0u8; 32]))
这样的技巧用于确定性测试。然而,我们警告不要在生产环境中这样做,因为尽管这种去随机化会产生安全的 Schnorr 签名,但我们还实现了诸如多重签名之类的协议,这些协议在去随机化后可能会变得脆弱。
// pub fn attach_rng<T,R>(t: T, rng: R) -> SigningTranscriptWithRng<T,R>
// where T: SigningTranscript, R: RngCore+CryptoRng
// {
// SigningTranscriptWithRng {
// t, rng: RefCell::new(rng)
// }
// }
schnorrkel 调用示例
// rand_core = {version="0.4.2"} //!!! must 0.4.x
// let trng_bytes = slice::from_raw_parts(random, PUB_KEY_LEN);
// let signature: Signature = keypair.sign(
// attach_rng(
// context.bytes(&message_bytes[..]),
// exrng::ExternalRng{
// rng_bytes:ExternalRng::copy_into_array(trng_bytes),
// len:32}
// ));
依赖项
~63KB