5个版本
0.1.5 | 2021年10月24日 |
---|---|
0.1.4 | 2021年7月20日 |
0.1.3 | 2021年6月18日 |
0.1.1 | 2021年5月24日 |
0.1.0 | 2021年5月24日 |
#1162 in 密码学
331 每月下载量
用于 kem
29KB
611 代码行
x3dh-ke
X3DH的实现
基于 Rust 编写的扩展三重Diffie-Hellman实现,如Signal文档所述。警告!这个crate尚未经过审查,可能包含严重错误。请谨慎使用。
示例使用
标准
use x3dh_ke::{IdentityKey, SignedPreKey, EphemeralKey, OneTimePreKey, Key, x3dh_a, x3dh_b};
let ika = IdentityKey::default();
let ikas = ika.strip();
let ikb = IdentityKey::default();
let ikbs = ikb.strip();
let spkb = SignedPreKey::default();
let spkbs = spkb.strip();
let eka = EphemeralKey::default();
let ekas = eka.strip();
let opkb = OneTimePreKey::default();
let opkbs = opkb.strip();
let signature = ikb.sign(&spkbs.pk_to_bytes());
let cka = x3dh_a(&signature, &ika, &spkbs, &eka, &ikbs, &opkbs).unwrap();
let ckb = x3dh_b(&ikas, &spkb, &ekas, &ikb, &opkb);
assert_eq!(cka, ckb)
序列化和反序列化
该库描述的每个密钥都可以转换为字节并从它们创建。
use x3dh_ke::{IdentityKey, Key};
let ika = IdentityKey::default();
let data = ika.to_bytes();
let ikr = IdentityKey::from_bytes(&data).unwrap();
assert_eq!(ika.to_bytes(), ikr.to_bytes())
移除私钥
要共享密钥,必须先从其中移除私钥部分。
use x3dh_ke::{IdentityKey, Key};
let ika = IdentityKey::default();
let _iks = ika.strip(); // Without private key
WASM
此crate支持WASM。为此,启用 wasm
功能。
当前版本:0.1.3
许可证:MIT
依赖项
~3MB
~63K SLoC