Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Make a first change in 30 minutes

This path is for a small, reviewable Rust/RHDL change. It is an orientation exercise, not a promise that every hardware change can be completed in half an hour. Read Build and inspect locally first if the workspace is not already available.

Completion warning: the highest passed signer-performance tier is generated RTL. The reported 481.6875-cycle sustained interval and its 519,008.693-results/s normalization at 250 MHz are not measured U280 results. U280 synthesis, route, and card execution remain pending, so the project must not be described as hardware-complete.

Minute 0–5: choose the cryptographic contract

Choose the profile before interpreting a key, signature, or hash. The two profiles are separate Rust types and separate compatibility promises.

ProfileCompatibility promiseActive hardware boundaryNever infer
LEGACY_KECCAK / LegacyKeccakByte-compatible with pinned HashSigsRS commit 2d315dd4168804b7cbc51c51a1bf7ca27bf74140; legacy Keccak 0x01 domain byteKeccak compatibility engine; no active hardware verifierSHA3-256 behavior or compatibility with the SHA-256 profile
HASHSIGS_SHA256_GENERIC_V1 / HashSigsSha256GenericV1Deliberately incompatible SHA-256 profile using the same WOTS parametersActive 3×4 signer and fail-closed 3×4 verifierPinned HashSigsRS key or signature compatibility

There is no automatic profile fallback. A surrounding protocol must authenticate the profile before it parses untagged bytes. See Two incompatible profiles for the full boundary table and vector provenance.

Minute 5–10: find the owning source

Start at the narrowest owner. Do not edit generated Verilog; change its Rust/RHDL producer and regenerate only through the documented gate.

Intended changeOwning sourceFirst focused gate
Profile-safe wire typescrates/hashsigs-types/src/lib.rscargo test -p hashsigs-types --locked -j1
Legacy software compatibilitycrates/hashsigs-reference/src/lib.rscargo test -p hashsigs-reference --test upstream_compatibility --locked -j1
Legacy Keccak datapathcrates/keccak-rhdl/src/cargo test -p keccak-rhdl --test compatibility --locked -j1
SHA-256 primitive, lane, or farmcrates/sha256-rhdl/src/cargo test -p sha256-rhdl --locked -j1
WOTS digits, tags, or block constructioncrates/wots-rhdl/src/blocks.rscargo test -p wots-rhdl --test tag_and_blocks --locked -j1
Signer task graphcrates/wots-rhdl/src/engine.rscargo test -p wots-rhdl --test engine --locked -j1
Four-context signer clustercrates/wots-rhdl/src/cluster.rscargo test -p wots-rhdl --test cluster --locked -j1
Three-cluster signer topcrates/wots-rhdl/src/top.rscargo test -p wots-rhdl --test top --locked -j1
SHA-256 verifier context or topcrates/wots-rhdl/src/verify/cargo test -p wots-rhdl --test verify_sha --locked -j1 or --test verify_top
RTL registry and export gatescrates/rhdl-gen/src/cargo test -p rhdl-gen --test cli --locked -j1

Use the complete Source map when a change crosses one of these boundaries. U280 scripts and constraints live under fpga/u280/, but they are evidence infrastructure rather than a suitable first cryptographic change.

Minute 10–20: make one test-backed change

  1. Read the owning module’s public contract and its focused test.
  2. Add or update an expectation derived from a pinned vector or independent software oracle—not a second call into the datapath under test.
  3. Keep the cryptographic datapath in Rust/RHDL. Shell adapters, constraints, Tcl, and testbench wrappers are separate integration boundaries.
  4. Keep profile types explicit. A convenience conversion must not make legacy and SHA-256 keys or signatures interchangeable.
  5. Keep the patch inside one source owner unless the test demonstrates why a boundary must move.

Minute 20–30: run the narrow gate and report honestly

Run the focused command from the ownership table, then expand only as the change requires. The broader order is leaf crate, owning integration test, workspace tests, generated-RTL equivalence, synthesis, route, then card execution. Some full-lane and descriptor tests are intentionally ignored by default; a skipped expensive test is not a pass.

In the handoff, record:

  • the profile and source owner changed;
  • the exact commands actually run and their outcomes;
  • the highest evidence tier reached;
  • every relevant test or hardware gate not run; and
  • whether generated artifacts were refreshed.

The Evidence ladder defines what each result can establish. Do not promote a source-simulation result into an RTL claim or a normalized RTL rate into an FPGA claim.

Hardware target box

These are gates for a future exact U280 artifact chain, not properties already proved by the current evidence set.

GateExact project boundary
250 MHz basis4.000 ns; 500,000 fused results/s permits at most 500 cycles/result
Current generated-RTL interval23,121 cycles / 48 results = 481.6875 cycles/result; 519,008.693 results/s when normalized at 250 MHz only
Clock goal3.333 ns / 300 MHz in a separate run; the same rate target permits 600 cycles/result only after that clock is justified
LUT limitAt most 200,000
Register limitAt most 300,000
DSP limitAt most 4,000; this is the absolute project ceiling

The 250 MHz run is the normalization basis and first hardware gate. The 300 MHz goal does not replace it and cannot be claimed from synthesis estimates alone. Every future remote U280 Vivado, Vitis, XRT, or card flow must first have explicit ownership in both coordination ledgers and enter through the checked-in U280 lock wrapper. It ignores caller-controlled HOME, uses the effective user’s canonical passwd-home lock, and fails immediately rather than waiting. The ledger acknowledgment and same-UID advisory lock prevent accidental competing work; they are not cryptographic ledger proof or a boundary against a malicious same-UID process. If the lock cannot be acquired immediately, stop; do not wait, probe another owner’s work, or start a competing flow. See Read throughput correctly and the U280 evidence workflow before staging any hardware run.