AI Initiative logoAI Initiative
Reading room / Manthan

T-001 — Ed25519 test vectors for HERALD v0.2

T-001 — Ed25519 test vectors for HERALD v0.2. Covers Files; Canonical seed values; The vectors; How to regenerate.

Conformance method / historical test inventory
This is the retained source text, not a new validation of its claims. Numerical results and comparative claims require the accompanying source review before public reuse.

Read the connected case study or article →

Not explicitly stated in source · Date not established

Provenance, authorship and editorial notes

T-001 — Ed25519 test vectors for HERALD v0.2

Id

manthan-herald-protocol-test-vectors-v0-2-readme

Project

Manthan

Source path

manthan/herald-protocol/test-vectors/v0.2/README.md

Source sha256

377c4de545755d082c29710a114f6fda43acba4ff9196af55b3a2ca6ba43af64

Local copy sha256

377c4de545755d082c29710a114f6fda43acba4ff9196af55b3a2ca6ba43af64

Repo head

3a94084024a3434cef331fecac91c2c3b43f0313

Date
Not recorded
Date basis

Original publication date not established; Git revision date retained separately.

Author

Not explicitly stated in source

Author basis

Unknown; Git committer not substituted for document author.

Last source commit

8b75d1b0157c20a0a463f0e31008ef9f73099beb

Last source commit date

2026-06-08T07:40:14Z

Document status

Conformance method / historical test inventory

Summary

T-001 — Ed25519 test vectors for HERALD v0.2. Covers Files; Canonical seed values; The vectors; How to regenerate.

Topics
  • Protocol and verification
  • Files
  • Canonical seed values
  • The vectors
Theme

Protocol and verification

Priority

reference

Related ids
  • manthan-herald-protocol-spec
  • manthan-herald-protocol-threats
Evidence concerns
  • Recovered source text is preserved verbatim. Assertions, comparisons, commands and results belong to its original context; they were not re-executed or externally re-verified during this corpus review.
  • Historical record: current deployment, task completion and test status must not be inferred from this date-bound document.
Word count

571

Bytes

4854

Source relative

herald-protocol/test-vectors/v0.2/README.md

Remote mirror

manthan/herald-protocol/test-vectors/v0.2/README.md

Full text preserved

True

T-001 — Ed25519 test vectors for HERALD v0.2

Output path declared in TODO.md: test-vectors/v0.2/
Submission location (manthan sandbox): learning/herald-protocol/manthan/state/findings/T-001/

These are the canonical test vectors a HERALD v0.2 implementation MUST be
able to round-trip: same canonical CBOR-deterministic bytes, same id,
same Ed25519 signatures, and the same verifier verdict for each scenario.

Files

FilePurpose
generate.pyDeterministic vector generator. Re-running it produces a byte-identical vectors.json.
vectors.jsonThe vectors themselves (keypairs + 7 envelope scenarios).
verify.pyLoads vectors.json and verifies each vector against its declared expected result. Exits non-zero on any mismatch.
RECEIPT.mdQuotes the SPEC sections each vector exercises.
INTERPRETATION.mdDocuments the spec ambiguities resolved (genesis trace fixed-point, deterministic nonce, dom-sep tag version).

Canonical seed values

The three keypairs are derived deterministically from fixed 32-byte seeds:

Sigil nameSeed (hex)Public key (hex)Sigil (128-bit, base32 lower, no padding)
alpha0x01 × 328a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5csigil:gr2q7gf5lh6pzfdnurnkvputhm
beta0x02 × 328139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b394sigil:ni4ahvpqlgicuhdnv66jxjdssi
gamma0x03 × 32ed4928c628d1c2c6eae90338905995612959273a5c63f93636c14614ac8737d1sigil:wyxim75c6m5p4ywv22ywilqwee

Sigil derivation per SPEC §2.1:

sigil:<base32(sha256(pubkey)[0..16])>

128-bit truncation, RFC 4648 §6 alphabet, lower-case, no padding.

The vectors

#NameExpected verifier resultSpec sections
1genesis-alpha-validvalid§3.1, §3.2, §3.5, §3.6
2reply-beta-validvalid§3.1, §3.2, §3.3a, §3.5, §3.6
3tampered-genesistampered§3.5, §6
4replay-genesisreplayed-nonce§3.7, §6
5cross-trace-replayparent-trace-mismatch§3.3a, §6
6wrong-parentorphaned§6
7lineage-cycle-birthrejected-lineage-cycle§2.3

How to regenerate

Requires Python 3.9+ with cryptography and cbor2 installed.

pip install --user cryptography cbor2   # (or --break-system-packages on macOS Homebrew)
cd manthan/state/findings/T-001
python3 generate.py

Re-running produces a byte-identical vectors.json. Verified:

python3 generate.py /tmp/v.json && diff vectors.json /tmp/v.json && echo "deterministic"

How to verify

cd manthan/state/findings/T-001
python3 verify.py

Output is per-vector pass/fail with details. Exits 0 if every vector
matches its declared expected result, non-zero otherwise. Current run:

✓ genesis-alpha-valid          expected=valid                  observed=valid
✓ reply-beta-valid             expected=valid                  observed=valid
✓ tampered-genesis             expected=tampered               observed=tampered
✓ replay-genesis               expected=replayed-nonce         observed=replayed-nonce
✓ cross-trace-replay           expected=parent-trace-mismatch  observed=parent-trace-mismatch
✓ wrong-parent                 expected=orphaned               observed=orphaned
✓ lineage-cycle-birth          expected=rejected-lineage-cycle observed=rejected-lineage-cycle
OK: all 7 vectors verified against expected results

Canonicalisation

Per SPEC §3.5 (RFC 8949 §4.2.1 + HERALD profile):

in any vector).

encoding of the envelope *with id omitted and signatures
replaced by an empty array
*.

Domain separation

Per SPEC §3.6: origin-scope signatures are computed over

"herald.envelope.v2" || canonical_body

(The task brief mentioned herald.envelope.v1; we follow the SPEC as
currently written. See INTERPRETATION.md.)

Nonces

Per SPEC §3.7 production senders MUST use a CSPRNG. For test-vector
reproducibility we derive nonces deterministically from a label:

nonce = sha256(b"herald.testvector.nonce/" + label)[:16]

This is a test-vector accommodation only and is documented in
INTERPRETATION.md. Implementations consuming these vectors should
treat the nonces as opaque 16-byte values.

Continue exploring