Expand description
packslip: a vendor publishes one signed, machine-readable document per release that says what the artifacts are and how to verify them. Consumers pin one identity and get checksums, platform mapping, executables, provenance links, and a signed manifest without per-vendor logic or a registry entry.
The document is a sigstore bundle carrying an in-toto statement. It is
signed keylessly with a CI job’s OIDC identity or with a long-lived
Ed25519 key, and either way logged to Rekor (sigstore). The same
shape carries a project’s release list. This crate holds the schema,
the verifier, and the generator. See https://packslip.dev/release/v1/.
Everything is on by default. A consumer that only verifies takes the
crate with default-features = false, which keeps model, [verify],
and sigstore and drops the archive readers, the executable decoder,
the signing path, and the CLI.
Re-exports§
pub use fingerprint::Fingerprint;pub use manifest::Manifest;pub use model::verify_report_schema;pub use model::Artifact;pub use model::Attestor;pub use model::Bin;pub use model::Evidence;pub use model::Host;pub use model::Identity;pub use model::Predicate;pub use model::ReleaseList;pub use model::ReleaseListStatement;pub use model::ReleaseRef;pub use model::ReleaseStatus;pub use model::Requires;pub use model::Resource;pub use model::ResourceIdentity;pub use model::ResourceSource;pub use model::Scheme;pub use model::Selection;pub use model::Source;pub use model::Statement;pub use model::Subject;pub use model::command_name;pub use model::github_list_path;pub use model::list_url;pub use model::select_artifact;pub use model::select_resources;pub use model::tag_version;pub use sigstore::Signer;pub use sigstore::Policy;pub use sigstore::Trust;pub use verify::Claimed;pub use verify::ForgeError;pub use verify::ForgeVerified;pub use verify::Options;pub use verify::Verified;pub use verify::VerifiedArtifact;pub use verify::VerifiedList;pub use verify::VerifyReport;pub use verify::peek_unverified;pub use verify::verify;pub use verify::verify_forge;pub use verify::verify_forge_release_list;pub use verify::verify_release_list;
Modules§
- archive
- Reading the archives
packslip createis given, so the executables it records are the paths that are really inside them. Paths in a packslip count from the true archive root: a vendor that says--bin toolfor an archive holdingtool-1.2.3-linux-x64/toolgets that path written, not the bare name. - cli
- Glue for the binary: turn a usage-rs parse result into either the parsed command or the help, version, or failure text a user expects, with clap’s exit codes.
- create
- Creating the statements: a release from its artifact files, and a
release list from released packslips. Signing is
sigstore::sign. - discovery
- Bootstrap discovery and HTTPS transport. Fetched documents remain untrusted until the caller verifies the bundle, project, version, and list digest.
- dsse
- DSSE envelopes: the signing envelope in-toto statements travel in. A signature covers the pre-authentication encoding (PAE) of the payload type and payload, so the type cannot be swapped under a signature.
- fingerprint
- The signer fingerprint: a short, pasteable name for the repository a
keyless project is signed from, such as
ps1_snirenkjwr7m5ozgcufameodnm. - forge
- Forge identity: a GitHub or GitLab project’s name locates it, and the forge’s immutable repository ID pins it.
- install
- Command-scoped bootstrap orchestration. Discovery never supplies policy; authenticated lists and releases are checked under the persistent scope lock.
- install_
extract - Whole-artifact extraction into a destination-local, private staging tree. No archive entry is trusted to choose an absolute path or permission mode.
- install_
fs - Locked, journaled replacement of an installation and its command exports.
- install_
host - Host preflight after deterministic artifact selection. Never execute an artifact, install dependencies, or switch builds to make a requirement pass.
- install_
launcher - Export declared commands without exposing the artifact’s runtime directory. Windows uses a small native executable with an embedded absolute UTF-16 target. Each launcher is a single transaction entry: no sidecar, symlink privilege, shell, or Developer Mode is required.
- install_
policy - Conjunctive bootstrap policy and explicit, context-bound trust transitions. Signature verification precedes every use of document policy. Filesystem replacement options have no place in this API.
- linkage
- What an artifact’s executables load from the host: the shared
libraries named in an ELF’s
DT_NEEDEDentries, a Mach-O’s load commands, or a PE’s import table, read out of the artifact so thatrequires.libsis a fact about the bytes rather than a claim. Archives are decoded bycrate::archive. - manifest
- A release manifest for
packslip create --manifest: what the command line cannot say per artifact. Executables that live at different paths in different archives, a format the file name gets wrong, host requirements, an artifact that runs anywhere, and the resources the release ships, all in one TOML file a vendor keeps in its repository. - minisign
- minisign-compatible Ed25519 signatures, so a vendor can sign a packslip
with the
minisignthey already use and a consumer can verify it withminisign -Vas well as with this crate. - model
- The packslip documents: in-toto statements whose predicates say what a
release shipped (
release/v1) and which releases a project has (releases/v1). Seedocs/spec/packslip.md. - sigstore
- Signing and verification through sigstore. A packslip is a sigstore bundle carrying the statement as an in-toto DSSE envelope. It is signed either keylessly, with an ephemeral key certified by Fulcio for an OIDC identity, or with a long-lived Ed25519 key; either way the signature is logged to Rekor, and the bundle carries the log entry.
- trust_
root - Fresh Sigstore verification keys authenticated from a pinned TUF root.
- verify
- Verifying a packslip: the bundle against what the consumer pinned, then the statement, then the digests of any artifacts at hand. And the same for a release list.
Structs§
- Digests
- Every digest of a file, in one pass.
Functions§
- digest_
file - The sha256 of a file, lowercase hex, and its size.
- digest_
file_ all - The sha256 and sha512 of a file, lowercase hex, and its size.