5 个版本
0.1.1 | 2021 年 2 月 22 日 |
---|---|
0.1.0 | 2021 年 2 月 22 日 |
0.0.3 | 2017 年 12 月 2 日 |
0.0.2 | 2017 年 7 月 3 日 |
0.0.1 | 2017 年 6 月 26 日 |
#2135 在 加密学 分类中
27KB
512 行
fujisaki-ringsig
这是 Eiichiro Fujisaki 和 Koutarou Suzuki 提出的可追踪环签名算法(Traceable Ring Signature algorithm)的实现。此 crate 使用 curve25519-dalek
库。特别是,它使用 ristretto
模块来实现其椭圆曲线实现。
许可协议
以下任一许可协议均可:
- Apache 许可协议 2.0 版本,(LICENSE-APACHE)
- MIT 许可协议 (LICENSE-MIT)
由您选择。
警告
此 crate 不应在任何严肃的上下文中使用。它不安全。
lib.rs
:
WARNING: THIS CRATE SHOULD NOT BE USED IN ANY SERIOUS CONTEXTS. IT IS NOT SECURE.
这是 Eiichiro Fujisaki 和 Koutarou Suzuki 提出的可追踪环签名算法(Traceable Ring Signature algorithm)的实现。此 crate 使用 curve25519-dalek
库。特别是,它使用 ristretto
模块来实现其椭圆曲线实现。
示例用法
use fujisaki_ringsig::{gen_keypair, sign, trace, verify, Tag, Trace};
let msg1 = b"now that the party is jumping";
let msg2 = b"magnetized by the mic while I kick my juice";
let issue = b"testcase 12345".to_vec();
// Make some keypairs for our ring. Pretend we only have the private key of the first keypair
let (my_privkey, pubkey1) = gen_keypair(&mut rng);
let (_, pubkey2) = gen_keypair(&mut rng);
let (_, pubkey3) = gen_keypair(&mut rng);
let pubkeys = vec![pubkey1.clone(), pubkey2, pubkey3];
// Make the tag corresponding to this issue and ring
let tag = Tag {
issue,
pubkeys,
};
// Make two signatures. Sign different messages with the same key and the same tag. This is
// a no-no. We will get caught.
let sig1 = sign(&mut rng, &*msg1, &tag, &my_privkey);
let sig2 = sign(&mut rng, &*msg2, &tag, &my_privkey);
// The signatures are all valid
assert!(verify(&*msg1, &tag, &sig1));
assert!(verify(&*msg2, &tag, &sig2));
// Can't mix signatures
assert!(!verify(&*msg1, &tag, &sig2));
// But we have been caught double-signing!
assert_eq!(trace(&*msg1, &sig1, &*msg2, &sig2, &tag), Trace::Revealed(&pubkey1));
依赖项
~2MB
~41K SLoC