docsv0.5.1

Verify what you installed

Check urna release files with SHA-256 digests, GitHub attestations and the signed tag, and see which checks each channel and artifact actually has.

This page lists what each urna release artifact can be checked against and the command that checks it. The coverage is not uniform: build provenance exists for the five binary archives only, and the npm package and the PyPI wheels have no provenance at all. The examples use v0.5.1.

A matching digest proves the bytes are the ones the release published. An attestation proves which repository and workflow produced them. Neither says anything about a .urna file you open later; that is what urna validate and the citation hashes are for.

What each artifact has

ArtifactPer-file .sha256In sha256.sumSLSA build provenanceGitHub release attestation
the five archives (urna-<target>.tar.xz, urna-x86_64-pc-windows-msvc.zip)yesyesyesyes
urna-embedder-payload.tar.gzyesnonoyes
urna.cdx.xml (CycloneDX SBOM)nononoyes
urna-npm-package.tar.gznoyesnoyes
urna.rb, sha256.sum, dist-manifest.jsonnononoyes

What each install channel checks on its own:

ChannelWhat it checksProvenance
install.sh, install.ps1archive and payload against their .sha256, before writingnot checked; verify the archive yourself
urna setuppayload against its .sha256, while streamingnot checked
Homebrewthe archive against the SHA-256 pinned in the formulanot checked
npm @urna/clinothing beyond HTTPS; the wrapper checks no digestnone exists: @urna/cli@0.5.1 has registry signatures but no npm provenance
cargo binstallnothing beyond HTTPSnot checked
cargo installcrates.io registry checksumsnot applicable (built from source on your machine)
PyPI wheelspip's hashesnone exists: 0.5.0 and 0.5.1 carry no PEP 740 attestations

The payload and the SBOM have no build provenance

Only the five archives get a SLSA provenance attestation. The embedder payload, which carries Python code that runs at query time, and the SBOM have a release attestation and, for the payload, a checksum, but gh attestation verify finds nothing for them. Check them with gh release verify-asset as shown below. See known limits.

Check a digest

Each archive and the payload have a <name>.sha256 file in sha256sum format (<hex> *<name>):

sha256sum -c urna-x86_64-unknown-linux-musl.tar.xz.sha256
sha256sum -c urna-embedder-payload.tar.gz.sha256

On macOS, use shasum -a 256 -c with the same file. sha256.sum covers the five archives and the npm package in one file:

sha256sum -c --ignore-missing sha256.sum

A digest fetched from the same server as the file catches a corrupted or truncated download. It does not catch a file replaced together with its digest; the attestations below do.

Check build provenance for an archive

The release workflow signs a SLSA provenance statement for each archive with GitHub's attestation service. It binds the archive's digest to the workflow run in hoffresearch/urna that built it. Verify with the GitHub CLI:

gh attestation verify urna-x86_64-unknown-linux-musl.tar.xz --repo hoffresearch/urna

The statement's subjects also include the archive's .sha256, its README.md and the urna binary inside it, so the same command accepts an extracted binary.

Check the payload, the SBOM and the other assets

Every asset of the release is a subject of GitHub's release attestation. Verify any of them against the tag:

gh release verify-asset v0.5.1 urna-embedder-payload.tar.gz --repo hoffresearch/urna
gh release verify-asset v0.5.1 urna.cdx.xml --repo hoffresearch/urna

This proves the file is the one attached to the v0.5.1 release. It says nothing about how the file was built.

GitHub marks the v0.5.0 and v0.5.1 releases as immutable, a setting that locks a published release's assets and tag.

Read the dependency list out of the binary

The binaries are built with cargo-auditable, which embeds the resolved dependency tree in a .dep-v0 section. cargo audit reads it back and checks it against the RustSec advisory database:

cargo audit bin ~/.local/bin/urna

The full dependency list is also in the SBOM, urna.cdx.xml.

Check the release tag

Release tags are annotated and SSH-signed. The release workflow verifies the signature against .github/allowed_signers before anything builds. Check it yourself from a checkout:

git clone https://github.com/hoffresearch/urna && cd urna
git -c gpg.ssh.allowedSignersFile=.github/allowed_signers verify-tag v0.5.1

The pip wheel and the npm package

Neither has a provenance statement today. For the wheel, pip checks each file against the hash PyPI serves, and nothing ties the wheel to a workflow run. The npm wrapper downloads the release archive over HTTPS and checks no digest. When you need provenance, download the release archive yourself, verify it as above, and put the binary on PATH (see installation). You can also verify a binary installed by another channel against the attestation, since the provenance subjects include the binary.

To install on a machine with no network after verifying here, see air-gapped install.

On this page