use anyhow::anyhow; use flutter_rust_bridge::frb; use arbiter_crypto::authn::{self, USERAGENT_CONTEXT}; #[frb(opaque)] pub struct MldsaKey(authn::SigningKey); impl MldsaKey { pub fn from_bytes(bytes: &[u8]) -> anyhow::Result { let bytes: [u8; 32] = bytes.try_into().map_err(|_| anyhow!("Invalid key length"))?; Ok(Self(authn::SigningKey::from_seed(bytes))) } pub fn to_bytes(&self) -> Vec { self.0.to_seed().to_vec() } pub fn sign(&self, message: &[u8]) -> anyhow::Result> { Ok(self.0.sign_message(message, USERAGENT_CONTEXT)?.to_bytes()) } pub fn generate() -> Self { Self(authn::SigningKey::generate()) } pub fn get_public_key(&self) -> Vec { self.0.public_key().to_bytes().to_vec() } }