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

Download history 5782/week @ 2024-04-23 6093/week @ 2024-04-30 5886/week @ 2024-05-07 9804/week @ 2024-05-14 9801/week @ 2024-05-21 9768/week @ 2024-05-28 5055/week @ 2024-06-04 4865/week @ 2024-06-11 4856/week @ 2024-06-18 3325/week @ 2024-06-25 2106/week @ 2024-07-02 3250/week @ 2024-07-09 4212/week @ 2024-07-16 4619/week @ 2024-07-23 4173/week @ 2024-07-30 4984/week @ 2024-08-06

每月下载量 18,835
25 个crate中使用(直接使用3个)

MIT/Apache 许可协议

105KB
1.5K SLoC

用于Zcash的RedDSA的最小实现

在Zcash中使用了RedDSA的两个特殊化:RedJubjub和RedPallas。对于这些,使用了两个参数化,一个用于BindingSig,另一个用于SpendAuthSig。这个库在类型系统中区分这些,使用密封SigType特质作为一个类型级别的枚举。

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