#[cfg(feature = "bn254")]
pub mod bn254;
#[cfg(feature = "ecdsa")]
pub mod ecdsa;
#[cfg(feature = "evm")]
pub mod evm;
cfg_remote! {
pub mod remote;
}
use super::LocalStorageEntry;
use crate::error::Result;
use crate::storage::RawStorage;
use blueprint_crypto::IntoCryptoError;
use blueprint_crypto::KeyType;
use blueprint_std::{boxed::Box, vec::Vec};
use serde::de::DeserializeOwned;
pub enum BackendConfig {
Local(Box<dyn RawStorage>),
#[cfg(feature = "remote")]
Remote(remote::RemoteConfig),
}
pub trait Backend: Send + Sync {
fn generate<T: KeyType>(&self, seed: Option<&[u8]>) -> Result<T::Public>
where
T::Public: DeserializeOwned,
T::Secret: DeserializeOwned,
T::Error: IntoCryptoError;
fn insert<T: KeyType>(&self, secret: &T::Secret) -> Result<()>
where
T::Public: DeserializeOwned,
T::Secret: DeserializeOwned;
fn generate_from_string<T: KeyType>(&self, seed_str: &str) -> Result<T::Public>
where
T::Public: DeserializeOwned,
T::Secret: DeserializeOwned,
T::Error: IntoCryptoError;
fn sign_with_local<T: KeyType>(&self, public: &T::Public, msg: &[u8]) -> Result<T::Signature>
where
T::Public: DeserializeOwned,
T::Secret: DeserializeOwned,
T::Error: IntoCryptoError;
fn list_local<T: KeyType>(&self) -> Result<Vec<T::Public>>
where
T::Public: DeserializeOwned;
fn first_local<T: KeyType>(&self) -> Result<T::Public>
where
T::Public: DeserializeOwned;
fn get_public_key_local<T: KeyType>(&self, key_id: &str) -> Result<T::Public>
where
T::Public: DeserializeOwned;
fn contains_local<T: KeyType>(&self, public: &T::Public) -> Result<bool>;
fn remove<T: KeyType>(&self, public: &T::Public) -> Result<()>
where
T::Public: DeserializeOwned;
fn get_secret<T: KeyType>(&self, public: &T::Public) -> Result<T::Secret>
where
T::Public: DeserializeOwned,
T::Secret: DeserializeOwned;
fn get_storage_backends<T: KeyType>(&self) -> Result<&[LocalStorageEntry]>;
}