7 个版本 (重大变更)
0.5.1 | 2023年7月12日 |
---|---|
0.5.0 | 2023年3月9日 |
0.4.0 | 2023年1月31日 |
0.3.0 | 2022年5月10日 |
0.0.0 | 2021年1月8日 |
在 密码学 类别中排名第 263
每月下载量 18,835
在 25 个crate中使用(直接使用3个)
105KB
1.5K SLoC
用于Zcash的RedDSA的最小实现
在Zcash中使用了RedDSA的两个特殊化:RedJubjub和RedPallas。对于这些,使用了两个参数化,一个用于BindingSig
,另一个用于SpendAuthSig
。这个库在类型系统中区分这些,使用密封的SigType
特质作为一个类型级别的枚举。
除了Signature、
SigningKey、
VerificationKey
类型外,该库还提供了VerificationKeyBytes
,它是[u8; 32]
的细化,表示字节表示RedDSA验证键的编码。这允许VerificationKey
类型缓存与验证键编码相关的验证检查。对于Zcash中使用的所有RedDSA特殊化,签名和验证键的编码都是32字节。
示例
创建一个BindingSig
,对其进行序列化和反序列化,并验证签名
# use std::convert::TryFrom;
use rand::thread_rng;
use reddsa::*;
let msg = b"Hello!";
// Generate a secret key and sign the message
let sk = SigningKey::<sapling::Binding>::new(thread_rng());
let sig = sk.sign(thread_rng(), msg);
// Types can be converted to raw byte arrays using From/Into
let sig_bytes: [u8; 64] = sig.into();
let pk_bytes: [u8; 32] = VerificationKey::from(&sk).into();
// Deserialize and verify the signature.
let sig: Signature<sapling::Binding> = sig_bytes.into();
assert!(
VerificationKey::try_from(pk_bytes)
.and_then(|pk| pk.verify(msg, &sig))
.is_ok()
);
FROST
您可以使用frost
功能启用ZIP-312重新随机化FROST支持。由于ZIP-312仍然是一个草案,这仍然是一个实验性的功能。
文档
cargo doc --features "nightly" --open
依赖项
~3MB
~60K SLoC