#后量子密码学 #后量子 #混合 #curve25519 #kyber

xwing-kem

Xwing混合组合密钥封装机制KEM,利用MLKEM/Kyber和X25519。见https://eprint.iacr.org/2024/039。

1个不稳定版本

0.1.0 2024年2月11日

#2346 in 加密学

BSD-3-Clause

20KB
238

Rust的Xwing KEM

这是一个使用Kyber768(后量子)和x25519(前量子)的混合Xwing KEM的Rust实现。对于原语,它使用PQCleanx25519-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