use core::{error, fmt};
pub(crate) mod ec;
pub(crate) mod hmac;
pub(crate) mod okp;
pub(crate) mod rsa;
pub(crate) trait Backend {
type Error: fmt::Debug + fmt::Display + error::Error;
type HmacKey: hmac::Key;
type RsaPrivateKey: rsa::PrivateKey;
type RsaPublicKey: rsa::PublicKey;
type EcPublicKey: ec::PublicKey;
type EcPrivateKey: ec::PrivateKey;
type EdPublicKey: okp::PublicKey;
type EdPrivateKey: okp::PrivateKey;
fn fill_random(buf: &mut [u8]) -> Result<(), Self::Error>;
fn sha256(data: &[u8]) -> [u8; 32];
fn sha384(data: &[u8]) -> [u8; 48];
fn sha512(data: &[u8]) -> [u8; 64];
}