6个版本 (破坏性更新)
0.11.0 | 2024年7月2日 |
---|---|
0.10.0 | 2024年4月19日 |
0.9.0 | 2023年11月15日 |
0.7.0 | 2023年8月9日 |
0.5.0 | 2023年4月27日 |
#575 in 加密学
每月4,239次下载
37KB
714 行
decaf377-rdsa
decaf377-rdsa
是 RedDSA 的一个变种,使用 decaf377
群实例化。
签名通过域(例如,Binding
和 SpendAuth
)进行参数化;该库使用 SigType
特性作为类型级枚举来区分类型系统中的不同域。
除了 Signature
、SigningKey
和 VerificationKey
类型外,该库还提供 VerificationKeyBytes
,这是对 [u8; 32]
的改进,表示字节表示 RedJubjub 验证密钥的编码。这使得 VerificationKey
类型可以缓存与验证密钥编码相关的验证检查。
警告
此代码正在开发中,整个规范仍然可能发生变化。特别是,随着 decaf377
规范的发展,用于绑定签名的基点很可能在未来发生变化。
示例
创建一个消费授权签名,序列化和反序列化它,并验证签名
# use std::convert::TryFrom;
use rand::thread_rng;
use decaf377_rdsa::*;
let msg = b"Hello!";
// Generate a secret key and sign the message
let sk = SigningKey::<SpendAuth>::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<SpendAuth> = sig_bytes.into();
assert!(
VerificationKey::try_from(pk_bytes)
.and_then(|pk| pk.verify(msg, &sig))
.is_ok()
);
关于
该库基于 redjubjub
包。
依赖项
~2.1–4MB
~88K SLoC