SHA-256 and HMAC from scratch
Stage 5 of 7v2 · 645e2bee

Complete digest

Chain all 64 rounds and validate the complete SHA-256 digest.

Complete digest

Chain all 64 rounds and validate the complete SHA-256 digest. This stage adds one observable capability to the project; keep every operation from earlier stages working.

Model and contract

The harness reads one JSON request from stdin. Bytes are represented as UTF-8 text or hexadecimal, and all binary output uses lowercase hexadecimal.

Representative input:

{ "op": "sha256", "text": "abc" }

Exact output:

{ "hex": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" }

The output ends with a newline. For an invalid request, leave stdout empty, write a diagnostic containing error to stderr, and exit with a non-zero status.

How to approach it

Keep input parsing, core logic, and output serialization separate. First write down the invariants behind “complete digest”, walk through the example by hand, and exercise boundaries before optimizing. Do not replace the mechanism taught by this stage with a library function that solves it completely.

Pay particular attention to empty inputs, index or length boundaries, and malformed data. The result must be deterministic: preserve the ordering required by the request and emit compact JSON.

Acceptance criteria

  • The representative input produces exactly the output shown.
  • Invalid input follows the stderr and exit-status contract.
  • Capabilities from earlier stages keep working.