use async_trait::async_trait;
use bsv::wallet::error::WalletError;
use bsv::wallet::interfaces::{
CreateHmacArgs, CreateHmacResult, CreateSignatureArgs, CreateSignatureResult, DecryptArgs,
DecryptResult, EncryptArgs, EncryptResult, GetPublicKeyArgs, GetPublicKeyResult,
RevealCounterpartyKeyLinkageArgs, RevealCounterpartyKeyLinkageResult,
RevealSpecificKeyLinkageArgs, RevealSpecificKeyLinkageResult, VerifyHmacArgs, VerifyHmacResult,
VerifySignatureArgs, VerifySignatureResult,
};
#[async_trait]
pub trait PrivilegedKeyManager: Send + Sync {
async fn get_public_key(
&self,
args: GetPublicKeyArgs,
) -> Result<GetPublicKeyResult, WalletError>;
async fn encrypt(&self, args: EncryptArgs) -> Result<EncryptResult, WalletError>;
async fn decrypt(&self, args: DecryptArgs) -> Result<DecryptResult, WalletError>;
async fn create_hmac(&self, args: CreateHmacArgs) -> Result<CreateHmacResult, WalletError>;
async fn verify_hmac(&self, args: VerifyHmacArgs) -> Result<VerifyHmacResult, WalletError>;
async fn create_signature(
&self,
args: CreateSignatureArgs,
) -> Result<CreateSignatureResult, WalletError>;
async fn verify_signature(
&self,
args: VerifySignatureArgs,
) -> Result<VerifySignatureResult, WalletError>;
async fn reveal_counterparty_key_linkage(
&self,
args: RevealCounterpartyKeyLinkageArgs,
) -> Result<RevealCounterpartyKeyLinkageResult, WalletError>;
async fn reveal_specific_key_linkage(
&self,
args: RevealSpecificKeyLinkageArgs,
) -> Result<RevealSpecificKeyLinkageResult, WalletError>;
async fn destroy_key(&self) -> Result<(), WalletError>;
}
pub struct NoOpPrivilegedKeyManager;
#[async_trait]
impl PrivilegedKeyManager for NoOpPrivilegedKeyManager {
async fn get_public_key(
&self,
_args: GetPublicKeyArgs,
) -> Result<GetPublicKeyResult, WalletError> {
Err(WalletError::NotImplemented(
"NoOpPrivilegedKeyManager".into(),
))
}
async fn encrypt(&self, _args: EncryptArgs) -> Result<EncryptResult, WalletError> {
Err(WalletError::NotImplemented(
"NoOpPrivilegedKeyManager".into(),
))
}
async fn decrypt(&self, _args: DecryptArgs) -> Result<DecryptResult, WalletError> {
Err(WalletError::NotImplemented(
"NoOpPrivilegedKeyManager".into(),
))
}
async fn create_hmac(&self, _args: CreateHmacArgs) -> Result<CreateHmacResult, WalletError> {
Err(WalletError::NotImplemented(
"NoOpPrivilegedKeyManager".into(),
))
}
async fn verify_hmac(&self, _args: VerifyHmacArgs) -> Result<VerifyHmacResult, WalletError> {
Err(WalletError::NotImplemented(
"NoOpPrivilegedKeyManager".into(),
))
}
async fn create_signature(
&self,
_args: CreateSignatureArgs,
) -> Result<CreateSignatureResult, WalletError> {
Err(WalletError::NotImplemented(
"NoOpPrivilegedKeyManager".into(),
))
}
async fn verify_signature(
&self,
_args: VerifySignatureArgs,
) -> Result<VerifySignatureResult, WalletError> {
Err(WalletError::NotImplemented(
"NoOpPrivilegedKeyManager".into(),
))
}
async fn reveal_counterparty_key_linkage(
&self,
_args: RevealCounterpartyKeyLinkageArgs,
) -> Result<RevealCounterpartyKeyLinkageResult, WalletError> {
Err(WalletError::NotImplemented(
"NoOpPrivilegedKeyManager".into(),
))
}
async fn reveal_specific_key_linkage(
&self,
_args: RevealSpecificKeyLinkageArgs,
) -> Result<RevealSpecificKeyLinkageResult, WalletError> {
Err(WalletError::NotImplemented(
"NoOpPrivilegedKeyManager".into(),
))
}
async fn destroy_key(&self) -> Result<(), WalletError> {
Ok(())
}
}