use rsa::{pkcs1v15::Signature, RsaPublicKey};
pub trait AuthProvider: Send + Sync + 'static {
fn password(&mut self, host: &str) -> String;
fn signature(&mut self, host: &str, sign_message: &[u8]) -> Option<(Signature, RsaPublicKey)>;
}
pub trait PasswordVerifier: Send + Sync + 'static {
fn verify(&self, password: &str) -> bool;
}
pub trait SignatureVerifier: Send + Sync + 'static {
fn verify(&self, public_key: &RsaPublicKey) -> bool;
}
pub enum AuthVerifier {
Password(Box<dyn PasswordVerifier>),
Signature(Box<dyn SignatureVerifier>),
}