rxwing 0.1.0-draft10

Minimalist pure Rust implementation of the X-Wing Key Encapsulation Mechanism (draft 10)
Documentation
use rxwing::{decaps, encaps, generate_keypair, SHAREDSECRET,
    XWINGCIPHERTEXT, XWINGDECAPSKEY, XWINGENCAPSKEY};

fn main() {
    let mut ek: XWINGENCAPSKEY = Default::default();
    let mut dk: XWINGDECAPSKEY = Default::default();
    let mut ct: XWINGCIPHERTEXT = Default::default();
    let mut key_b: SHAREDSECRET = Default::default();
    let mut key_a: SHAREDSECRET = Default::default();

    generate_keypair(&mut ek, &mut dk);
    encaps(&mut key_b, &mut ct, &ek);

    // transfer ct over the network or something...
    // maybe receive it from someone who encapsulated it for you

    decaps(&mut key_a, &ct, &dk);

    assert_eq!(key_a, key_b, "X-Wing equal key test");
    print!("Our shared secret is: ");
    for i in 0..32 {
        let j = key_b.ss_hat[i];
        print!("{}", format!("{j:02x}").as_str());
    }
    print!("\n");
    println!("But you should not print out secrets like this!");
}