mod keymap; mod sign; mod signature; mod util; pub use crate::keymap::KeyMap; use crate::sign::{ecdsaverify, EcdsaAlgorithm}; use crate::signature::{ CardEcSignResult, ScriptSignature, ScriptSignatureAlgorithm, ScriptSignatureVersion, SIGNATURE_PREFIX, }; use crate::util::current_time; use digest::Digest; use rust_util::{debugging, opt_result, simple_error, util_cmd, XResult}; use sha2::Sha256; use std::fs; #[derive(Debug)] pub struct Script { pub content_lines: Vec, pub signature: Option, } impl Script { pub fn verify_script_file_with_system_key_map(script_file: &str) -> XResult { Self::verify_script_file(script_file, &KeyMap::system()) } pub fn verify_script_file(script_file: &str, key_map: &KeyMap) -> XResult { let script_content = opt_result!( fs::read_to_string(script_file), "Read script file: {script_file} failed: {}" ); let script = opt_result!( Script::parse(&script_content), "Parse script file: {script_file} failed: {}" ); match &script.signature { None => Ok(false), Some(_) => script.verify(key_map), } } pub fn parse(script: &str) -> XResult