polysig_node_bindings/signers/
eddsa.rsuse anyhow::Error;
use polysig_driver::signers::eddsa::{self, Signature};
use napi::JsError;
use napi_derive::napi;
use std::borrow::Cow;
#[napi]
pub struct EddsaSigner {
inner: eddsa::EddsaSigner<'static>,
}
#[napi]
impl EddsaSigner {
#[napi(constructor)]
pub fn new(signing_key: Vec<u8>) -> Result<EddsaSigner, JsError> {
let signing_key: [u8; 32] =
signing_key.as_slice().try_into().map_err(Error::new)?;
let signing_key =
eddsa::EddsaSigner::from_bytes(&signing_key);
Ok(Self {
inner: eddsa::EddsaSigner::new(Cow::Owned(signing_key)),
})
}
#[napi]
pub fn random() -> Vec<u8> {
eddsa::EddsaSigner::random().to_bytes().as_slice().to_vec()
}
#[napi]
pub fn sign(&self, message: Vec<u8>) -> Vec<u8> {
let result = self.inner.sign(&message);
result.to_bytes().as_slice().to_vec()
}
#[napi(js_name = "verifyingKey")]
pub fn verifying_key(&self) -> Vec<u8> {
self.inner.verifying_key().to_bytes().to_vec()
}
#[napi]
pub fn verify(
&self,
message: Vec<u8>,
signature: Vec<u8>,
) -> Result<(), JsError> {
let signature: Signature =
signature.as_slice().try_into().map_err(Error::new)?;
Ok(self
.inner
.verify(&message, &signature)
.map_err(Error::new)?)
}
}