use crate::core::{CheckpointSigner, Digest, KeyId, SignError, Signer, Verifier};
#[derive(Debug, Clone)]
pub struct StubSigner {
key_id: KeyId,
}
impl StubSigner {
#[must_use]
pub fn new(key_id: impl Into<KeyId>) -> Self {
Self {
key_id: key_id.into(),
}
}
}
impl Default for StubSigner {
fn default() -> Self {
Self::new("testkit://stub")
}
}
impl Signer for StubSigner {
fn key_id(&self) -> KeyId {
self.key_id.clone()
}
fn sign(&self, hash: &Digest) -> Vec<u8> {
let mut out = Vec::with_capacity(33);
out.push(0xAB);
out.extend_from_slice(hash.as_bytes());
out
}
}
#[async_trait::async_trait]
impl CheckpointSigner for StubSigner {
fn key_id(&self) -> KeyId {
self.key_id.clone()
}
async fn sign(&self, message: &[u8]) -> Result<Vec<u8>, SignError> {
let mut out = Vec::with_capacity(33);
out.push(0xAB);
out.extend_from_slice(Digest::of(message).as_bytes());
Ok(out)
}
}
impl Verifier for StubSigner {
fn verify(&self, key_id: &str, hash: &Digest, signature: &[u8]) -> bool {
key_id == self.key_id && signature == Signer::sign(self, hash)
}
}