crates/installer/nordisk-narrate/Cargo.toml
[package]
name = "nordisk-narrate"
# 0.1.0 (2026-09-30, owner + coordinator): the DEV-NARRATE early-boot channel.
# A box's boot log (korp-start, the kernel, the product) reaches the installer
# as SEALED UDP datagrams from the moment its NIC has an address — before the
# installer's WireGuard link and mutual TLS exist, and whether or not they ever
# do. Only a DEV build carries the sender (feature `dev-narrate`); the installer
# side (`receiver`) is always here, it lives on the operator's machine.
version = "0.1.2"
edition = "2021"
description = "DEV-NARRATE: a box's early boot log, sealed to the installer's X25519 key (NaCl crypto_box, per-boot ephemeral sender key) and streamed over UDP to the address an authenticated installer hello came from (NAT-friendly). The sender exists only under the `dev-narrate` feature; a release build links none of it."
license = "MIT OR Apache-2.0"
repository = "https://git.gunnar.rs/nordisk/Skidbladnir"
keywords = ["narration", "boot-log", "crypto_box", "installer", "udp"]
categories = ["network-programming"]
[dependencies]
# NaCl `crypto_box` (X25519 + XSalsa20-Poly1305) from RustCrypto — audited by
# Cure53 (2022, v0.7.1, no significant findings). Pure Rust. `getrandom` for
# the per-boot ephemeral key and every nonce.
crypto_box = { version = "0.9", default-features = false, features = ["alloc", "getrandom", "salsa20"] }
# The seed is TOML; the sender reads ONE value out of it (the installer's
# public key), leniently, so a seed that fails its own check still narrates.
toml = "1"
base64 = "0.23"
# The box's boot log is nordisk-pairing's `BootLog` (feature `bootlog`): the
# same lines, the same sequence numbers, the same redaction the log door reads.
nordisk-pairing = { path = "../nordisk-pairing", version = "0.5.10", optional = true }
[features]
default = []
# **The box-side SENDER** (and the kernel-log follower). OFF by default and in
# every release build: a product enables it only through its OWN `dev-narrate`
# feature, and the product's release rows never name that feature. The recipe's
# `dev-narrate` option lists `nordisk_narrate` as a FORBIDDEN symbol when off.
dev-narrate = []
# `Source` for nordisk-pairing's `BootLog`.
bootlog = ["dep:nordisk-pairing"]
[dev-dependencies]
crypto_box = { version = "0.9", default-features = false, features = ["alloc", "getrandom", "salsa20"] }
# The loopback test drives the SENDER, which exists only under `dev-narrate`:
# `required-features`, so a default `cargo test` does not build it at all
# (a cfg-ed out test file would report `ok, 0 passed` — a green nobody can tell
# from a real one).
[[test]]
name = "loopback"
path = "tests/loopback.rs"
required-features = ["dev-narrate"]