#签名方案 #验证密钥 # #decaf377 #字节 # #签名密钥

无std decaf377-rdsa

decaf377-rdsa 是一种使用 decaf377 群的随机化签名方案

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 加密学

Download history 1726/week @ 2024-04-15 993/week @ 2024-04-22 868/week @ 2024-04-29 877/week @ 2024-05-06 530/week @ 2024-05-13 771/week @ 2024-05-20 665/week @ 2024-05-27 999/week @ 2024-06-03 966/week @ 2024-06-10 619/week @ 2024-06-17 730/week @ 2024-06-24 1095/week @ 2024-07-01 686/week @ 2024-07-08 1190/week @ 2024-07-15 1079/week @ 2024-07-22 1232/week @ 2024-07-29

每月4,239次下载

MIT/Apache

37KB
714

decaf377-rdsa

Crates.io

decaf377-rdsa 是 RedDSA 的一个变种,使用 decaf377 群实例化。

签名通过域(例如,BindingSpendAuth)进行参数化;该库使用 SigType 特性作为类型级枚举来区分类型系统中的不同域。

除了 SignatureSigningKeyVerificationKey 类型外,该库还提供 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