Host-side capsule signer and verifier for the NONOS microkernel (Ed25519 + ML-DSA-65 hybrid trust chain)
  • Rust 99.3%
  • C 0.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
eKisNonos 4cd694d7cd docs: the policy is unsigned by design, and carries flags
The spec claimed the root self-signs, which a byte walk of the real
encoder disproves: a root signature would only chain to itself, and
the policy's integrity is the baking, kernel image, boot verification
and ledger. The reserved flags field joins the table.
2026-09-03 14:33:41 +02:00
.github/workflows ci: drop global deny-warnings, install pinned toolchain explicitly 2026-06-26 12:28:33 +02:00
docs docs: the policy is unsigned by design, and carries flags 2026-09-03 14:33:41 +02:00
src verify-manifest: an optional --elf pins the payload binding 2026-09-03 12:06:55 +02:00
tests tests: the payload binding, four ways to be a different binary 2026-09-03 13:46:12 +02:00
.gitignore build: ignore target/ artifacts 2026-05-21 01:18:21 +02:00
build.rs build: pin toolchain to stable 1.88.0 and format the tree 2026-06-26 12:18:19 +02:00
Cargo.lock tools: split into nonos-sign / nonos-mk / nonos-ci / nonos-utils / nonos-data peers 2026-05-09 20:03:27 +02:00
Cargo.toml ci: pin uninlined_format_args lint policy 2026-06-26 12:43:39 +02:00
README.md docs: a real README 2026-09-03 13:29:25 +02:00
rust-toolchain.toml build: pin toolchain to stable 1.88.0 and format the tree 2026-06-26 12:18:19 +02:00
rustfmt.toml ci: add rustfmt config so formatting is self-contained 2026-06-26 12:37:06 +02:00

nonos-sign

The NONOS trust-chain toolchain: the code that mints, signs, and verifies every identity in the system. The capsule-sign binary drives it from the command line; the nonos_capsule_sign library is linked by nonos-verify in CI and mirrors the verification the kernel and bootloader perform.

What it produces

The trust chain is three artifacts per capsule plus one policy at the root, all hybrid-signed with Ed25519 and ML-DSA-65:

Artifact Made by Bound to
trust-anchor policy mk-trust-policy the anchor's two public keys and an epoch
NONOS-ID certificate sign-id-cert a publisher's keys, namespace globs, a capability ceiling
capsule manifest sign-manifest the certificate and the exact BLAKE3 of one capsule ELF

Verification is the same chain run backwards: verify-manifest checks the certificate against the policy, the manifest against the certificate, and, with --elf, that a given binary measures to the manifest's enrolled payload hash. That last check is the reuse gate: a build pipeline that holds no seeds proves a rebuilt capsule is the enrolled capsule instead of re-signing it.

Key handling

keygen writes a seed and a public key as self-tagged binary blobs. Seeds never belong in a repository or a pipeline: publisher seeds and the trust-anchor seed live offline with their owners, and everything a verifier needs is public material. The custody and rotation ceremony is documented in the trust keystore repository.

Building

Plain cargo. cargo build --release --bin capsule-sign produces the tool; the workspace tests cover encode and decode round-trips, the signature chain, and refusal paths.

License

AGPL-3.0, like the rest of NONOS.