Skip to content
Tenzro
Documentation menu
Start here

Verify your download

Check a Tenzro release before you install it: the signed SHA-256 manifest, the archive digest, the release key, and how to rebuild a release to compare.

Every Tenzro release is a set of archives plus a manifest of their SHA-256 digests, and the manifest is signed. Check both before you unpack or install anything.

What a release contains

FileWhat it is
tenzro-node-<platform>-<variant>.tar.gz or .zipThe archive you install
SHA256SUMSOne line per archive: its SHA-256 digest and name
SHA256SUMS.sigA cosign signature over SHA256SUMS
tenzro-release.pubThe public key that verifies the signatures
matrix.jsonHow each archive was built: commit, toolchain, features, lockfile digest
sbom-<commit>.spdx.json, provenance-<commit>.intoto.jsonThe software bill of materials and the build provenance statement (unsigned; the signed object is SHA256SUMS)

The installer does this for you

curl -fsSL https://downloads.tenzro.com/install.sh | sh (and install.ps1 on Windows) runs the same two checks before it installs anything: the signature on SHA256SUMS against the release key embedded in the script, whose fingerprint (c88aaee70b3c0bf17a994bad44963a6a72359b2e1497df9a15a40ed099aeb72d) it checks first, and the archive's SHA-256 against that signed list. It uses openssl, not cosign, and stops at the first failure. The script itself is covered by TLS only; its hash is published beside it (install.sh.sha256). If you would rather trust nothing but the release key, do the steps below. See Install and first run.

You can do the same check by hand with openssl:

bash
openssl pkey -pubin -in tenzro-release.pub -outform DER | sha256sum        # c88aaee7...aeb72d
base64 -d SHA256SUMS.sig > sig.der
openssl dgst -sha256 -verify tenzro-release.pub -signature sig.der SHA256SUMS   # Verified OK

Linux and macOS

Install cosign 3.x, then in the folder where you downloaded the release:

bash
# 1. The manifest is signed by the release key.
cosign verify-blob --key tenzro-release.pub --insecure-ignore-tlog=true --signature SHA256SUMS.sig SHA256SUMS

# 2. Your archive matches the manifest (on macOS: shasum -a 256 -c ...).
sha256sum -c SHA256SUMS --ignore-missing

The release signature is made with a hardware-held key and is not uploaded to a transparency log, so --insecure-ignore-tlog=true is required: without it cosign 3 looks for a log entry and fails with "signature not found in transparency log". The check against the public key is complete without the log. Step 1 prints Verified OK. Step 2 prints <archive>: OK for each archive you downloaded. If either step prints anything else, delete the download and do not install it.

The signature is a classical ECDSA P-256 signature from a hardware-held key. A post-quantum signature is planned as a follow-up; no quantum resistance is claimed. Archives have no signature of their own: SHA256SUMS is the signed object, and each archive is checked against it.

Windows

In PowerShell, with cosign installed:

powershell
cosign verify-blob --key tenzro-release.pub --insecure-ignore-tlog=true --signature SHA256SUMS.sig SHA256SUMS
(Get-FileHash -Algorithm SHA256 .\tenzro-node-windows-x86_64-cuda.zip).Hash

Compare the printed hash, ignoring case, with the line for that archive in SHA256SUMS.

Where the public key lives

The release signing key is a P-256 key created inside the TPM 2.0 of a Tenzro-operated machine. It is non-exportable: the private key cannot leave the chip, is never on a build machine, and every use needs a passphrase typed by the release signer, who reads the manifest before signing it. The public half is published as tenzro-release.pub in each release, next to the manifest.

Release key fingerprint (SHA-256 of the DER encoding of the public key):

c88aaee70b3c0bf17a994bad44963a6a72359b2e1497df9a15a40ed099aeb72d

Compute it from the file you downloaded and compare:

bash
openssl pkey -pubin -in tenzro-release.pub -outform DER | sha256sum

Windows code signing

The Windows archives and the Windows control app are not Authenticode-signed unless the build machine was configured with a code-signing certificate. A release that was not so configured makes Windows SmartScreen warn about an unknown publisher. That warning is expected for an unsigned build and is not a verdict on the archive: the cosign signature and the SHA-256 check above are the verification. The macOS app is checked with codesign --verify --deep --strict at build time.

Rebuilding to compare

matrix.json records the commit, toolchain, features and lockfile digest of each archive. A release can be rebuilt from that commit and its digest compared with the published one.

ExploreJoin the network