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

Streams and packed interfaces

Signer input

The production signer accepts one job through a ready/valid handshake. The payload contains a profile-specific private seed, the already-hashed message, and an opaque job identifier. An offer remains stable until accepted.

Profile selection is a build/type boundary. There is no runtime profile mux in the SHA-256 production top.

Signer output

One fused result is 2,208 bytes:

FieldBytes
WOTS signature2,144
Public seed32
Public-key endpoint hash32
Total2,208

At 64 bytes per transfer this is 35 beats. The last beat has only the remaining bytes marked valid by its keep mask. The job and cluster identity remain fixed for the entire frame; frames never interleave.

Verifier input

One verifier frame is also 35 beats but has a different payload:

FieldBytes
WOTS signature2,144
Public seed32
Expected public-key hash32
Message digest32
Total2,240

Every verifier byte lane is valid. last is canonical only on beat 34.

Backpressure

Ready/valid transfer occurs only when both signals are asserted. A producer holds valid data stable while ready is low. The global signer output is a registered elastic slot, so output backpressure must not mutate data, identity, keep, or last.

Packed Verilog ports

RHDL flattens typed Rust structures into packed Verilog vectors. The RTL generator derives bit ranges from Digital metadata and records widths in the manifest; testbenches must not duplicate handwritten offsets. The generated signer clock/reset is a two-bit packed port whose bit zero is clock and bit one is active-high synchronous reset.