4 个版本
0.0.4 | 2023年12月1日 |
---|---|
0.0.3 | 2023年10月2日 |
0.0.2 | 2022年2月25日 |
0.0.1 | 2020年9月24日 |
#3 in #pre
260KB
3K SLoC
Umbral-rs
umbral-rs
是 Umbral 阈值代理重加密方案的实施,使用 Rust 构建,以 Umbral 作者创建的 Python 版本为参考。
Umbral 包含一个代理重加密方案,其中数据持有者可以将解密权限委派给数据消费者,以任何为其加密的文本。这是通过一系列半可信代理执行的重新加密过程来实现的。当这些代理中的阈值参与重新加密并创建一些份额时,消费者可以结合这些独立的重新加密份额,并使用其私钥解密原始消息。
加密/解密示例
use umbral_rs::pre::*;
let params = new_standard_params();
let alice = KeyPair::new(¶ms);
let signer = Signer::new(¶ms);
let bob = KeyPair::new(¶ms);
let plaintext = b"Hello, umbral!".to_vec();
let (ciphertext, mut capsule) = encrypt(&alice.public_key(), &plaintext).unwrap();
capsule.set_correctness_keys(&alice.public_key(), &bob.public_key(), &signer.public_key());
let threshold = 2;
let nodes_number = 5;
let kfrags = generate_kfrags(
&alice,
&bob.public_key(),
threshold,
nodes_number,
&signer,
KFragMode::DelegatingAndReceiving,
).unwrap();
for kfrag in kfrags {
let cfrag = reencrypt(&kfrag, &capsule, true, None, true).unwrap();
capsule.attach_cfrag(&cfrag).unwrap();
}
let plaintext_bob = decrypt(ciphertext, &capsule, &bob, true).unwrap();
assert_eq!(plaintext, plaintext_bob);
println!("{:?}", String::from_utf8(plaintext_bob.to_owned()).unwrap());
文件文档
源代码位于 src
文件夹中,文档位于 docs
文件夹中。简要来说,在 src/internal
文件夹中有以下文件
keys.rs
包含KeyPair
结构体,用于生成公钥和私钥。capsule.rs
包含Capsule
结构体,用于封装密文。kfrag.rs
包含KFrag
结构体,用于委派重新加密权限。curve.rs
包含Curve
结构体,用于生成曲线参数。errors.rs
包含UmbralError
枚举,用于返回错误。scheme.rs
包含方案中使用的哈希函数。utils.rs
包含工具函数,如poly_eval
,用于在点上评估多项式。
在 src
文件夹中,有以下的文件
pre.rs
包含使用库的主要函数,例如encrypt
、decrypt
、reencrypt
、generate_kfrags
等。lib.rs
包含了prelude
模块,该模块用于导入库的主要函数。main.rs
包含了main
函数,该函数用于运行测试。
依赖项
~5.5MB
~92K SLoC