SPORE — Seed Sheet

A cold-start capsule. This side teaches the wire format by hand; the reverse side carries the full reimplementation guide as fountain-coded QR codes. Scan any ~32 of the 52 codes to rebuild it — a torn or partly-scanned sheet still recovers.

Primitives

PurposeAlgorithmReference
Signatures / identityEd25519RFC 8032
Key agreementX25519RFC 7748
Sealed-box AEADXSalsa20-Poly1305 (NaCl crypto_box)NaCl
Symmetric AEADChaCha20-Poly1305 / XChaCha20RFC 8439
Hashing (IDs, addresses)SHA-256FIPS 180-4
Ratchet KDFBLAKE2bRFC 7693

The envelope (all integers big-endian)

OffSizeFieldNotes
01ver0x01
11typ0 DATA · 1 INV · 2 WANT · 3 ANNOUNCE
21flags0x01 ENC · 0x02 SIGNED · 0x04 FRAG · 0x08 ACKREQ · 0x10 FLOOD · 0x20 SRC8
31hopsTTL, decremented by relays
44expiryunix seconds
88destaddress; all-zero = public
1632/8/0srcif SIGNED: 32-byte key (or 8-byte addr if SRC8)
2plenpayload length
plenpayload
64/0sigif SIGNED

Four rules

This seed

payload: REBUILD.md · original 9506 B, gzip 4740 B · fragments K=32, N=52, block 150 B ·
SHA-256(payload): d9a37e51e1f70901728bda1c3a2cd91aedbdcfa2dbd2f6a72bc349a409955a56

Decode: each QR is base64 of a binary fragment "SP" · ver(1) · origLen(4) · K(2) · B(2) · seed(4) · block(B). Any ~K independent fragments solve a K×K linear system over GF(256) (primitive poly 0x11d): derive each fragment's K coefficients from its seed (splitmix32), Gauss-Jordan eliminate, concatenate the K blocks, trim to origLen, gunzip, and check the SHA-256 above. The reference decoder is site/seed/decode-seedsheet.mjs.

Reverse — REBUILD.md as 52 fountain QR codes (any ~32 rebuild it)

#0
#1
#2
#3
#4
#5
#6
#7
#8
#9
#10
#11
#12
#13
#14
#15
#16
#17
#18
#19
#20
#21
#22
#23
#24
#25
#26
#27
#28
#29
#30
#31
#32
#33
#34
#35
#36
#37
#38
#39
#40
#41
#42
#43
#44
#45
#46
#47
#48
#49
#50
#51