pub(crate) mod private {
use crate::errors::UnknownCryptoError;
use crate::hazardous::hpke::mode::private::HpkeMode;
use crate::hazardous::hpke::private::{HpkeEncapKey, HpkePrivateKey, HpkePublicKey};
pub trait Suite {
type PrivateKey: HpkePrivateKey;
type PublicKey: HpkePublicKey;
type EncapsulatedKey: HpkeEncapKey;
fn key_schedule(
mode: &HpkeMode,
shared_secret: &[u8],
info: &[u8],
psk: &[u8],
psk_id: &[u8],
) -> Result<Self, UnknownCryptoError>
where
Self: Sized;
fn labeled_extract(
salt: &[u8],
label: &[u8],
ikm: &[u8],
out: &mut [u8],
) -> Result<(), UnknownCryptoError>;
fn labeled_expand(
prk: &[u8],
label: &[u8],
info: &[u8],
out: &mut [u8],
) -> Result<(), UnknownCryptoError>;
#[cfg(feature = "safe_api")]
fn setup_base_sender(
pubkey_r: &Self::PublicKey,
info: &[u8],
) -> Result<(Self, Self::EncapsulatedKey), UnknownCryptoError>
where
Self: Sized;
fn setup_base_sender_deterministic(
pubkey_r: &Self::PublicKey,
info: &[u8],
secret_ephemeral: Self::PrivateKey,
) -> Result<(Self, Self::EncapsulatedKey), UnknownCryptoError>
where
Self: Sized;
fn setup_base_recipient(
enc: &Self::EncapsulatedKey,
secret_key_r: &Self::PrivateKey,
info: &[u8],
) -> Result<Self, UnknownCryptoError>
where
Self: Sized;
#[cfg(feature = "safe_api")]
fn setup_psk_sender(
pubkey_r: &Self::PublicKey,
info: &[u8],
psk: &[u8],
psk_id: &[u8],
) -> Result<(Self, Self::EncapsulatedKey), UnknownCryptoError>
where
Self: Sized;
fn setup_psk_sender_deterministic(
pubkey_r: &Self::PublicKey,
info: &[u8],
psk: &[u8],
psk_id: &[u8],
secret_ephemeral: Self::PrivateKey,
) -> Result<(Self, Self::EncapsulatedKey), UnknownCryptoError>
where
Self: Sized;
fn setup_psk_recipient(
enc: &Self::EncapsulatedKey,
secret_key_r: &Self::PrivateKey,
info: &[u8],
psk: &[u8],
psk_id: &[u8],
) -> Result<Self, UnknownCryptoError>
where
Self: Sized;
#[cfg(feature = "safe_api")]
fn setup_auth_sender(
pubkey_r: &Self::PublicKey,
info: &[u8],
secrety_key_s: &Self::PrivateKey,
) -> Result<(Self, Self::EncapsulatedKey), UnknownCryptoError>
where
Self: Sized;
fn setup_auth_sender_deterministic(
pubkey_r: &Self::PublicKey,
info: &[u8],
secrety_key_s: &Self::PrivateKey,
secret_ephemeral: Self::PrivateKey,
) -> Result<(Self, Self::EncapsulatedKey), UnknownCryptoError>
where
Self: Sized;
fn setup_auth_recipient(
enc: &Self::EncapsulatedKey,
secret_key_r: &Self::PrivateKey,
info: &[u8],
pubkey_s: &Self::PublicKey,
) -> Result<Self, UnknownCryptoError>
where
Self: Sized;
#[cfg(feature = "safe_api")]
fn setup_authpsk_sender(
pubkey_r: &Self::PublicKey,
info: &[u8],
psk: &[u8],
psk_id: &[u8],
secrety_key_s: &Self::PrivateKey,
) -> Result<(Self, Self::EncapsulatedKey), UnknownCryptoError>
where
Self: Sized;
fn setup_authpsk_sender_deterministic(
pubkey_r: &Self::PublicKey,
info: &[u8],
psk: &[u8],
psk_id: &[u8],
secrety_key_s: &Self::PrivateKey,
secret_ephemeral: Self::PrivateKey,
) -> Result<(Self, Self::EncapsulatedKey), UnknownCryptoError>
where
Self: Sized;
fn setup_authpsk_recipient(
enc: &Self::EncapsulatedKey,
secret_key_r: &Self::PrivateKey,
info: &[u8],
psk: &[u8],
psk_id: &[u8],
pubkey_s: &Self::PublicKey,
) -> Result<Self, UnknownCryptoError>
where
Self: Sized;
fn seal(
&mut self,
plaintext: &[u8],
aad: &[u8],
out: &mut [u8],
) -> Result<(), UnknownCryptoError>;
fn open(
&mut self,
ciphertext: &[u8],
aad: &[u8],
out: &mut [u8],
) -> Result<(), UnknownCryptoError>;
fn export(&self, exporter_context: &[u8], out: &mut [u8])
-> Result<(), UnknownCryptoError>;
}
}