use std::io::Result;
use async_trait::async_trait;
use libp2p_identity::{Keypair, PublicKey};
use crate::driver_wrapper;
pub mod keystore_syscall {
use std::io::Result;
use async_trait::async_trait;
use libp2p_identity::PublicKey;
#[async_trait]
pub trait DriverKeyStore: Sync + Send {
async fn public_key(&self) -> Result<PublicKey>;
async fn sign(&self, data: &[u8]) -> Result<Vec<u8>>;
}
}
driver_wrapper!(
["A type wrapper of [`DriverKeyStore`](keystore_syscall::DriverKeyStore)"]
KeyStore[keystore_syscall::DriverKeyStore]
);
pub struct MemoryKeyStore(Keypair);
impl From<Keypair> for MemoryKeyStore {
fn from(value: Keypair) -> Self {
Self(value)
}
}
impl MemoryKeyStore {
pub fn random() -> Self {
Self(Keypair::generate_ed25519())
}
}
#[async_trait]
impl keystore_syscall::DriverKeyStore for MemoryKeyStore {
async fn public_key(&self) -> Result<PublicKey> {
Ok(self.0.public())
}
async fn sign(&self, data: &[u8]) -> Result<Vec<u8>> {
self.0
.sign(&data)
.map_err(|err| std::io::Error::new(std::io::ErrorKind::Other, err))
}
}