use crate::{kdf::Kdf as KdfTrait, util::KemSuiteId, Deserializable, Serializable};
use core::fmt::Debug;
pub(crate) const MAX_PUBKEY_SIZE: usize = 133;
#[doc(hidden)]
#[derive(Debug)]
pub struct DhError;
pub trait DhKeyExchange {
type PublicKey: Clone + Debug + PartialEq + Eq + Serializable + Deserializable;
type PrivateKey: Clone + Serializable + Deserializable;
#[doc(hidden)]
type KexResult: Serializable;
#[doc(hidden)]
fn sk_to_pk(sk: &Self::PrivateKey) -> Self::PublicKey;
#[doc(hidden)]
fn dh(sk: &Self::PrivateKey, pk: &Self::PublicKey) -> Result<Self::KexResult, DhError>;
#[doc(hidden)]
fn derive_keypair<Kdf: KdfTrait>(
suite_id: &KemSuiteId,
ikm: &[u8],
) -> (Self::PrivateKey, Self::PublicKey);
}
#[cfg(feature = "secp")]
pub(crate) mod secp256k1;