10个版本 (6个破坏性)

0.7.0 2023年3月30日
0.6.0 2023年2月3日
0.5.0 2022年5月17日
0.4.0 2021年4月3日
0.1.0 2019年12月9日

#1290 in 加密学

Download history 5368/week @ 2024-03-14 4977/week @ 2024-03-21 3195/week @ 2024-03-28 4032/week @ 2024-04-04 4919/week @ 2024-04-11 4665/week @ 2024-04-18 4795/week @ 2024-04-25 5820/week @ 2024-05-02 4361/week @ 2024-05-09 4783/week @ 2024-05-16 3013/week @ 2024-05-23 3102/week @ 2024-05-30 3832/week @ 2024-06-06 4397/week @ 2024-06-13 2953/week @ 2024-06-20 2302/week @ 2024-06-27

13,972 每月下载量
用于 21 个crate(4个直接使用)

MIT/Apache

71KB
228

用于Zebra的RedJubjub最小实现。

Zcash中使用了两种RedJubjub参数化,一种用于BindingSig,另一种用于SpendAuthSig。此库通过使用密封SigType特质作为类型枚举来区分这些。

除了SignatureSigningKeyVerificationKey类型外,此库还提供了VerificationKeyBytes,这是一个精炼类型,表示一个[u8; 32],表示字节表示了RedJubjub验证键的编码。这允许VerificationKey类型缓存与验证键编码相关的验证检查。

示例

创建一个BindingSig、序列化和反序列化它,以及验证签名

# use std::convert::TryFrom;
use rand::thread_rng;
use redjubjub::*;

let msg = b"Hello!";

// Generate a secret key and sign the message
let sk = SigningKey::<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<Binding> = sig_bytes.into();
assert!(
    VerificationKey::try_from(pk_bytes)
        .and_then(|pk| pk.verify(msg, &sig))
        .is_ok()
);

文档

cargo doc --features "nightly" --open

依赖关系

~4MB
~81K SLoC