metalssh 0.0.1

Experimental SSH implementation
//! Key exchange (kex) algorithms.

use crate::types::Result;
use crate::types::Vec;

pub mod curve25519_sha256;
pub mod mlkem768x25519_sha256;

const SHARED_SECRET_MAX: usize = 128;
const PUBLIC_KEY_MAX: usize = 2048;

pub trait Initiate {
    fn new() -> Result<Self>
    where
        Self: Sized;

    fn public_key(&self) -> &[u8];

    fn agree(self, peer_public_key: &[u8]) -> Result<Vec<u8, SHARED_SECRET_MAX>>;
}

pub trait Reply {
    fn agree(
        peer_public_key: &[u8],
    ) -> Result<(Vec<u8, SHARED_SECRET_MAX>, Vec<u8, PUBLIC_KEY_MAX>)>;
}