#![forbid(unsafe_code)]
#[cfg(feature = "archive")]
pub mod archive;
#[cfg(feature = "verify-cli")]
pub mod cli;
#[cfg(feature = "create")]
pub mod create;
#[cfg(feature = "discovery")]
pub mod discovery;
pub mod dsse;
pub mod fingerprint;
pub mod forge;
#[cfg(feature = "install-cli")]
pub mod install;
#[cfg(feature = "install-extract")]
pub mod install_extract;
#[cfg(feature = "install-fs")]
pub mod install_fs;
#[cfg(feature = "install-host")]
pub mod install_host;
#[cfg(feature = "install-launcher")]
pub mod install_launcher;
#[cfg(feature = "install-policy")]
pub mod install_policy;
#[cfg(any(
all(feature = "install-launcher", windows),
all(feature = "install-launcher", test)
))]
mod launcher_payload;
#[cfg(feature = "linkage")]
pub mod linkage;
#[cfg(feature = "manifest")]
pub mod manifest;
pub mod minisign;
pub mod model;
pub mod sigstore;
#[cfg(feature = "trust-root")]
pub mod trust_root;
pub mod verify;
pub use fingerprint::Fingerprint;
#[cfg(feature = "manifest")]
pub use manifest::Manifest;
#[cfg(feature = "schema")]
pub use model::verify_report_schema;
pub use model::{
Artifact, Attestor, Bin, Evidence, Host, Identity, Predicate, ReleaseList,
ReleaseListStatement, ReleaseRef, ReleaseStatus, Requires, Resource, ResourceIdentity,
ResourceSource, Scheme, Selection, Source, Statement, Subject, command_name, github_list_path,
list_url, select_artifact, select_resources, tag_version,
};
#[cfg(feature = "sign")]
pub use sigstore::Signer;
pub use sigstore::{Policy, Trust};
pub use verify::{
Claimed, ForgeError, ForgeVerified, Options, Verified, VerifiedArtifact, VerifiedList,
VerifyReport, peek_unverified, verify, verify_forge, verify_forge_release_list,
verify_release_list,
};
pub fn digest_file(path: &std::path::Path) -> std::io::Result<(String, u64)> {
let all = digest_file_all(path)?;
Ok((all.sha256, all.size))
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Digests {
pub sha256: String,
pub sha512: String,
pub size: u64,
}
pub fn digest_file_all(path: &std::path::Path) -> std::io::Result<Digests> {
use sha2::Digest as _;
use std::io::Read as _;
let mut file = std::fs::File::open(path)?;
let mut sha256 = sha2::Sha256::new();
let mut sha512 = sha2::Sha512::new();
let mut size = 0u64;
let mut buf = vec![0u8; 1 << 16];
loop {
let n = file.read(&mut buf)?;
if n == 0 {
break;
}
sha256.update(&buf[..n]);
sha512.update(&buf[..n]);
size += n as u64;
}
Ok(Digests {
sha256: hex::encode(sha256.finalize()),
sha512: hex::encode(sha512.finalize()),
size,
})
}