1个不稳定版本
0.1.0 | 2024年2月11日 |
---|
#2346 in 加密学
20KB
238 行
Rust的Xwing KEM
这是一个使用Kyber768(后量子)和x25519(前量子)的混合Xwing KEM的Rust实现。对于原语,它使用PQClean和x25519-dalek的包装。
Xwing的详细信息见
用法
该库公开了用于与缓冲区和一些包装结构一起使用的函数。
示例用法
use xwing_kem::{XwingKeyPair, XwingCiphertext};
fn main() {
// Using buffers
println!("Computing Keypair!");
let (sk, pk) = xwing_kem::generate_keypair();
println!("Encapsulating secret to be transmitted!");
let (shared_secret, ciphertext) = xwing_kem::encapsulate(pk);
println!("Decapsulating ciphertext with the secret key to get shared secret!");
let computed_shared_secret = xwing_kem::decapsulate(ciphertext, sk);
// Using structs
println!("Computing Keypair!");
let keypair = XwingKeyPair::generate();
println!("Encapsulating secret to be transmitted!");
let (ss, ct) = keypair.pk.encapsulate();
println!("Serializing ciphertext to be transmitted!");
let ct_bytes = ct.to_bytes();
println!("Deserializing ciphertext!");
let ct_res = XwingCiphertext::from(ct_bytes);
println!("Decapsulating ciphertext with the secret key to get shared secret!");
let ss_result = keypair.sk.decapsulate(ct_res);
assert_eq!(ss, ss_result);
println!("Shared secret is: {:x?}", ss_result)
}
示例
包含两个示例,alice直接使用Xwing和缓冲区,bob使用包装结构。
要运行示例,请调用
cargo run --example bob
依赖项
~24MB
~503K SLoC