use thiserror::Error;
#[derive(Debug, Error)]
pub enum SignatureError {
#[error("Invalid public key format")]
InvalidPublicKey,
#[error("Invalid secret key format")]
InvalidSecretKey,
#[error("Invalid signature format")]
InvalidSignature,
#[error("Signature verification failed")]
VerificationFailed,
#[error("Key generation failed")]
KeyGenerationFailed,
}
#[derive(Debug, Clone)]
pub struct PublicKey(#[allow(dead_code)] Vec<u8>);
#[derive(Debug, Clone)]
pub struct SecretKey(#[allow(dead_code)] Vec<u8>);
#[derive(Debug, Clone)]
pub struct Signature(#[allow(dead_code)] Vec<u8>);
pub trait DigitalSignature {
fn keygen() -> Result<(PublicKey, SecretKey), SignatureError>;
fn sign(secret_key: &SecretKey, message: &[u8]) -> Result<Signature, SignatureError>;
fn verify(
public_key: &PublicKey,
message: &[u8],
signature: &Signature,
) -> Result<bool, SignatureError>;
}