use crate::error::WedprError;
pub trait Hash {
fn hash<T: ?Sized + AsRef<[u8]>>(&self, input: &T) -> Vec<u8>;
}
pub trait Coder {
fn encode<T: ?Sized + AsRef<[u8]>>(&self, input: &T) -> String;
fn decode(&self, input: &str) -> Result<Vec<u8>, WedprError>;
}
pub trait Ecies {
fn encrypt<T: ?Sized + AsRef<[u8]>>(
&self,
public_key: &T,
message: &T,
) -> Result<Vec<u8>, WedprError>;
fn decrypt<T: ?Sized + AsRef<[u8]>>(
&self,
private_key: &T,
ciphertext: &T,
) -> Result<Vec<u8>, WedprError>;
}
pub trait Signature {
fn sign<T: ?Sized + AsRef<[u8]>>(
&self,
private_key: &T,
msg_hash: &T,
) -> Result<Vec<u8>, WedprError>;
fn verify<T: ?Sized + AsRef<[u8]>>(
&self,
public_key: &T,
msg_hash: &T,
signature: &T,
) -> bool;
fn generate_keypair(&self) -> (Vec<u8>, Vec<u8>);
}
pub trait Vrf {
fn encode_proof(&self) -> Vec<u8>;
fn decode_proof<T: ?Sized + AsRef<[u8]>>(
proof: &T,
) -> Result<Self, WedprError>
where Self: Sized;
fn prove<T: ?Sized + AsRef<[u8]>>(
private_key: &T,
message: &T,
) -> Result<Self, WedprError>
where
Self: Sized;
fn prove_fast<T: ?Sized + AsRef<[u8]>>(
private_key: &T,
public_key: &T,
message: &T,
) -> Result<Self, WedprError>
where
Self: Sized;
fn verify<T: ?Sized + AsRef<[u8]>>(
&self,
public_key: &T,
message: &T,
) -> bool;
fn derive_public_key<T: ?Sized + AsRef<[u8]>>(private_key: &T) -> Vec<u8>;
fn proof_to_hash(&self) -> Result<Vec<u8>, WedprError>;
fn is_valid_public_key<T: ?Sized + AsRef<[u8]>>(public_key: &T) -> bool;
}
pub trait BlockCipher {
fn encrypt<T: ?Sized + AsRef<[u8]>>(
&self,
message: &T,
key: &T,
iv: &T,
) -> Result<Vec<u8>, WedprError>;
fn decrypt<T: ?Sized + AsRef<[u8]>>(
&self,
ciphertext: &T,
key: &T,
iv: &T,
) -> Result<Vec<u8>, WedprError>;
fn generate_key(&self) -> Vec<u8>;
fn generate_iv(&self) -> Vec<u8>;
}