use super::utils::*;
use crate::rhai_engine::RhaiEngine;
use hdi::prelude::{debug, verify_signature};
use rhai::{Array, Dynamic, EvalAltResult, Map, Position};
pub fn hdi_verify_record_signature(record: Map) -> Result<bool, Box<EvalAltResult>> {
let record = try_into_record(record)?;
let signature = record.signature().to_owned();
let data = record.signed_action().hashed.content.to_owned();
let signer = record.action().author().to_owned();
verify_signature(signer, signature, data).map_err(|e| {
Box::new(EvalAltResult::ErrorRuntime(
format!("Signature verification failed: {e}").into(),
Position::NONE,
))
})
}
pub fn hdi_verify_signature(
signer: String,
signature: Array,
data: Dynamic,
) -> Result<bool, Box<EvalAltResult>> {
let signer = try_from_string_to_agent_pubkey(signer)?;
let signature = try_into_signature(signature)?;
let payload = RhaiEngine::rhai_dynamic_to_json(data);
let result = verify_signature(signer, signature, payload).map_err(|e| {
Box::new(EvalAltResult::ErrorRuntime(
format!("Signature verification failed: {e}").into(),
Position::NONE,
))
})?;
debug!("Result of hdi_verify_signature: {:?}", result);
Ok(result)
}