magus v0.3.0 is out. See what's new
¶ View markdown source · ✎ Suggest an edit
1 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 -c SHA256SUMS 2>/dev/null | grep magus_
    # macOS: shasum -a 256 -c SHA256SUMS
    

Order matters. Checking a hash against an unverified manifest proves nothing.

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 (5118dbc9)
Glossary

Ward

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

Conventions

This page uses none of the site's convention markers. The full set is on the conventions page.