magus v0.4.2 is out. See what's new
¶ View markdown source · ✎ Suggest an edit
2 min read

Verify a release

Alongside the binary tarballs, each release ships SHA256SUMS (the manifest) and SHA256SUMS.sig (its Ed25519 signature). All artifacts, plus the signing key, are attached to each GitHub release; /public/ indexes the releases and the machine-readable manifest.

Already running magus? Use the built-in verifier:

magus self update --dry-run

The trust chain runs through your already-trusted binary. Nothing else to do.

First install - verify by hand. Do not verify a fresh magus with itself: a tampered build carries the attacker's key and self-reports success. Use OpenSSL with the key served from this HTTPS page.

  1. Save the key. Either download magus-release.pem, or copy the PEM block below into magus-release.pem.

  2. Verify the manifest signature (requires OpenSSL 3.0+):

    openssl pkeyutl -verify -pubin -inkey magus-release.pem \
      -rawin -in SHA256SUMS -sigfile SHA256SUMS.sig
    # Signature Verified Successfully
    
  3. Only if the signature verifies, check the artifact hash:

    sha256sum --ignore-missing -c SHA256SUMS
    # macOS: shasum -a 256 --ignore-missing -c SHA256SUMS
    

    --ignore-missing skips manifest entries for artifacts you did not download, so the output stays limited to the file you fetched - without piping through grep, which would replace the command's exit status with grep's and let a failed check report success.

Order matters. Checking a hash against an unverified manifest proves nothing. The whole procedure in one picture - each merged cell consumes everything beside it, and the tarball deliberately skips the first step, because nothing signs the tarball directly:

Have OpenSSL 3.0+ with Ed25519 support on PATH
magus-release.pem - the key, from this HTTPS page verify the signature
openssl pkeyutl -verify
check the hash
sha256sum -c
a release
you can trust
SHA256SUMS - the manifest, from the release
SHA256SUMS.sig - its signature, from the release
magus-<os>-<arch>.tar.gz - the artifact you downloaded

Release signing key (Ed25519)

-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEA/7uPpvNidN79EoiAk8ajIsJTK8VFAW9JWrSVXey2Z3k=
-----END PUBLIC KEY-----

Raw base64 (32 bytes):

/7uPpvNidN79EoiAk8ajIsJTK8VFAW9JWrSVXey2Z3k=

The key is embedded in every magus binary via //go:embed, so magus self update trusts it transitively. A planned rotation first ships a release signed by the current key that embeds the replacement key; later releases can use the replacement. Older binaries cannot be remotely revoked if the current key is compromised. The maintainer procedure is in the contributing guide.

verifysignatureed25519sha256opensslreleasesecurity
Last updated (4f8cc295)
Earlier changes on this page (1)

Full history ↗ · Blame source ↗

Glossary

Op

A single tool-native command a target composes (long form: operation); the middle of the work hierarchy (Spell to Op to Target). See operations.

Ward

A coded diagnostic that inspects a resolved op and nudges or blocks an anti-pattern before it runs. See wards.

Span

OpenTelemetry's name for one unit of work under a trace - a target execution, whose sub-operations are child spans. An output reference points at a span's captured output. See telemetry.

Lease

One row of the lease ledger: a piece of work an orchestrating agent handed out, with its goal, the checkpoint it was cut against, and the paths it owns or must not touch. The ledger records; the agent guard is what reads those facts back when grading a write. See doctrine.

Conventions

Placeholders

Angle brackets mark a value you replace with your own - never type the brackets:

magus run <target>
magus completion <shell>    # e.g. bash, zsh, fish

<target>, <path>, <shell>, <name> and the like are stand-ins, not literal text.