use crate::CoreError;
pub fn secret_key_sign(secret_key_bytes: &[u8; 32], data: &[u8]) -> Result<[u8; 64], CoreError> {
std::panic::catch_unwind(|| {
let key = iroh::SecretKey::from_bytes(secret_key_bytes);
key.sign(data).to_bytes()
})
.map_err(|_| CoreError::internal("secret_key_sign panicked"))
}
pub fn public_key_verify(public_key_bytes: &[u8; 32], data: &[u8], sig_bytes: &[u8; 64]) -> bool {
std::panic::catch_unwind(|| {
let Ok(key) = iroh::PublicKey::from_bytes(public_key_bytes) else {
return false;
};
let sig = iroh::Signature::from_bytes(sig_bytes);
key.verify(data, &sig).is_ok()
})
.unwrap_or(false)
}
pub fn generate_secret_key() -> Result<[u8; 32], CoreError> {
std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| {
iroh::SecretKey::generate().to_bytes()
}))
.map_err(|_| CoreError::internal("generate_secret_key panicked"))
}