anubis-wormhole 1.0.0

A post-quantum secure file transfer tool based on the Magic Wormhole protocol.
Documentation
#![cfg(feature = "providers-pqclean")]
use crate::traits::Kem;
use pqcrypto_kyber::kyber1024;
use pqcrypto_traits::kem::{PublicKey as _, SecretKey as _, Ciphertext as _, SharedSecret as _};

#[derive(Clone, Copy, Debug, Default)]
pub struct MlKem1024;

impl Kem for MlKem1024 {
    type PublicKey = Vec<u8>;
    type SecretKey = Vec<u8>;
    type Ciphertext = Vec<u8>;
    type SharedSecret = Vec<u8>;

    fn keypair(&self) -> (Self::PublicKey, Self::SecretKey) {
        let (pk, sk) = kyber1024::keypair();
        (pk.as_bytes().to_vec(), sk.as_bytes().to_vec())
    }

    fn encapsulate(&self, pk: &Self::PublicKey) -> (Self::Ciphertext, Self::SharedSecret) {
        let pk = kyber1024::PublicKey::from_bytes(pk).expect("valid kyber pk");
        let (ss, ct) = kyber1024::encapsulate(&pk);
        (ct.as_bytes().to_vec(), ss.as_bytes().to_vec())
    }

    fn decapsulate(&self, sk: &Self::SecretKey, ct: &Self::Ciphertext) -> Self::SharedSecret {
        let sk = kyber1024::SecretKey::from_bytes(sk).expect("valid kyber sk");
        let ct = kyber1024::Ciphertext::from_bytes(ct).expect("valid kyber ct");
        let ss = kyber1024::decapsulate(&ct, &sk);
        ss.as_bytes().to_vec()
    }
}