#![forbid(unsafe_code)]
use std::path::Path;
use anyhow::Result;
use crate::manifest::{self, PackSignature};
pub mod canon;
pub mod signer;
pub mod verify;
pub use canon::{CanonicalizedPack, canonicalize_pack_dir};
pub use verify::VerificationError;
#[derive(Debug, Clone, Copy, Default)]
pub struct VerifyOptions<'a> {
pub public_key_pem: Option<&'a str>,
pub allow_unsigned: bool,
}
pub fn sign_pack_dir(
pack_dir: &Path,
private_key_pem: &str,
key_id: Option<&str>,
) -> Result<PackSignature> {
let outcome = signer::sign_pack(pack_dir, private_key_pem, key_id)?;
manifest::write_signature(pack_dir, &outcome.signature, None)?;
Ok(outcome.signature)
}
pub fn verify_pack_dir(pack_dir: &Path, opts: VerifyOptions<'_>) -> Result<PackSignature> {
verify::verify_pack(pack_dir, opts).map_err(anyhow::Error::new)
}