#![deny(unsafe_code)]
#![deny(missing_docs)]
#![deny(clippy::unwrap_used)]
#![deny(clippy::panic)]
use crate::prelude::error::Result;
use zeroize::Zeroizing;
pub(super) mod sealed {
pub trait Sealed {}
}
pub trait EcKeyPair: Send + Sync + sealed::Sealed {
fn generate() -> Result<Self>
where
Self: Sized;
fn from_secret_key(secret_key: &[u8]) -> Result<Self>
where
Self: Sized;
fn public_key_bytes(&self) -> Vec<u8>;
fn secret_key_bytes(&self) -> Zeroizing<Vec<u8>>;
}
pub trait EcSignature: Send + Sync + sealed::Sealed {
type Signature: Clone + Send + Sync;
fn verify(public_key: &[u8], message: &[u8], signature: &Self::Signature) -> Result<()>;
fn signature_len() -> usize;
fn signature_bytes(signature: &Self::Signature) -> Vec<u8>;
fn signature_from_bytes(bytes: &[u8]) -> Result<Self::Signature>;
}