use crate::error::PakeError;
use alloc::vec::Vec;
use rand_core::CryptoRng;
use zeroize::{Zeroize, Zeroizing};
pub trait OprfClientState: Sized + Zeroize {
fn finalize(
&self,
password: &[u8],
evaluated_bytes: &[u8],
) -> Result<Zeroizing<Vec<u8>>, PakeError>;
}
pub trait Oprf {
type ClientState: OprfClientState;
fn client_blind(
password: &[u8],
rng: &mut impl CryptoRng,
) -> Result<(Self::ClientState, Vec<u8>), PakeError>;
fn server_evaluate(oprf_key: &[u8], blinded_bytes: &[u8]) -> Result<Vec<u8>, PakeError>;
fn derive_key(seed: &[u8], info: &[u8]) -> Result<Zeroizing<Vec<u8>>, PakeError>;
}