sntrup-sys 0.1.2

Streamlined NTRU Prime, extracted from SUPERCOP with a deduplicated vendor tree, compiled via the cc crate
Documentation
// Roundtrip test for every enabled parameter set: keypair -> encapsulate ->
// decapsulate, checking the shared secret matches on both ends. Mirrors the
// plain-C validation already performed on vendor/ (see vendor/NOTICE.md).

#[cfg(feature = "sntrup653")]
#[test]
fn roundtrip_sntrup653() {
    let (pk, sk) = sntrup_sys::sntrup653::keypair();
    let (ct, ss1) = sntrup_sys::sntrup653::encapsulate(&pk);
    let ss2 = sntrup_sys::sntrup653::decapsulate(&ct, &sk);
    assert_eq!(ss1, ss2);
    assert_eq!(pk.len(), sntrup_sys::sntrup653::PUBLIC_KEY_BYTES);
    assert_eq!(sk.len(), sntrup_sys::sntrup653::SECRET_KEY_BYTES);
    assert_eq!(ct.len(), sntrup_sys::sntrup653::CIPHERTEXT_BYTES);
    assert_eq!(ss1.len(), sntrup_sys::sntrup653::SHARED_SECRET_BYTES);
}

#[cfg(feature = "sntrup761")]
#[test]
fn roundtrip_sntrup761() {
    let (pk, sk) = sntrup_sys::sntrup761::keypair();
    let (ct, ss1) = sntrup_sys::sntrup761::encapsulate(&pk);
    let ss2 = sntrup_sys::sntrup761::decapsulate(&ct, &sk);
    assert_eq!(ss1, ss2);
    assert_eq!(pk.len(), sntrup_sys::sntrup761::PUBLIC_KEY_BYTES);
    assert_eq!(sk.len(), sntrup_sys::sntrup761::SECRET_KEY_BYTES);
    assert_eq!(ct.len(), sntrup_sys::sntrup761::CIPHERTEXT_BYTES);
    assert_eq!(ss1.len(), sntrup_sys::sntrup761::SHARED_SECRET_BYTES);
}

#[cfg(feature = "sntrup857")]
#[test]
fn roundtrip_sntrup857() {
    let (pk, sk) = sntrup_sys::sntrup857::keypair();
    let (ct, ss1) = sntrup_sys::sntrup857::encapsulate(&pk);
    let ss2 = sntrup_sys::sntrup857::decapsulate(&ct, &sk);
    assert_eq!(ss1, ss2);
    assert_eq!(pk.len(), sntrup_sys::sntrup857::PUBLIC_KEY_BYTES);
    assert_eq!(sk.len(), sntrup_sys::sntrup857::SECRET_KEY_BYTES);
    assert_eq!(ct.len(), sntrup_sys::sntrup857::CIPHERTEXT_BYTES);
    assert_eq!(ss1.len(), sntrup_sys::sntrup857::SHARED_SECRET_BYTES);
}

#[cfg(feature = "sntrup953")]
#[test]
fn roundtrip_sntrup953() {
    let (pk, sk) = sntrup_sys::sntrup953::keypair();
    let (ct, ss1) = sntrup_sys::sntrup953::encapsulate(&pk);
    let ss2 = sntrup_sys::sntrup953::decapsulate(&ct, &sk);
    assert_eq!(ss1, ss2);
    assert_eq!(pk.len(), sntrup_sys::sntrup953::PUBLIC_KEY_BYTES);
    assert_eq!(sk.len(), sntrup_sys::sntrup953::SECRET_KEY_BYTES);
    assert_eq!(ct.len(), sntrup_sys::sntrup953::CIPHERTEXT_BYTES);
    assert_eq!(ss1.len(), sntrup_sys::sntrup953::SHARED_SECRET_BYTES);
}

#[cfg(feature = "sntrup1013")]
#[test]
fn roundtrip_sntrup1013() {
    let (pk, sk) = sntrup_sys::sntrup1013::keypair();
    let (ct, ss1) = sntrup_sys::sntrup1013::encapsulate(&pk);
    let ss2 = sntrup_sys::sntrup1013::decapsulate(&ct, &sk);
    assert_eq!(ss1, ss2);
    assert_eq!(pk.len(), sntrup_sys::sntrup1013::PUBLIC_KEY_BYTES);
    assert_eq!(sk.len(), sntrup_sys::sntrup1013::SECRET_KEY_BYTES);
    assert_eq!(ct.len(), sntrup_sys::sntrup1013::CIPHERTEXT_BYTES);
    assert_eq!(ss1.len(), sntrup_sys::sntrup1013::SHARED_SECRET_BYTES);
}

#[cfg(feature = "sntrup1277")]
#[test]
fn roundtrip_sntrup1277() {
    let (pk, sk) = sntrup_sys::sntrup1277::keypair();
    let (ct, ss1) = sntrup_sys::sntrup1277::encapsulate(&pk);
    let ss2 = sntrup_sys::sntrup1277::decapsulate(&ct, &sk);
    assert_eq!(ss1, ss2);
    assert_eq!(pk.len(), sntrup_sys::sntrup1277::PUBLIC_KEY_BYTES);
    assert_eq!(sk.len(), sntrup_sys::sntrup1277::SECRET_KEY_BYTES);
    assert_eq!(ct.len(), sntrup_sys::sntrup1277::CIPHERTEXT_BYTES);
    assert_eq!(ss1.len(), sntrup_sys::sntrup1277::SHARED_SECRET_BYTES);
}