round constant generation

Hemera generates her own round constants. No external primitives.

The permutation structure (S-box x^7, matrices M_E and M_I, round flow 4+16+4) is fully defined before constants exist. With all constants set to zero, the permutation is still a well-defined nonlinear function. We call this Hemera_0.

1. Define Hemera_0 = Hemera permutation with all 144 round constants = 0
2. Feed the genesis word through Hemera_0 as a sponge:

   input = [0x63, 0x79, 0x62, 0x65, 0x72]    — "cyber" as raw bytes

   state = [0; 16]
   absorb input into state using Hemera_0
   squeeze 144 field elements from state using Hemera_0

3. First 128 elements → RC_FULL[128]
   Next 16 elements   → RC_PARTIAL[16]

4. Hemera = Hemera_0 + these constants. Freeze forever.

seed

Five bytes [0x63, 0x79, 0x62, 0x65, 0x72]. Not "UTF-8 encoding of cyber" — the bytes themselves are the specification. No character set, no encoding, no text convention.

The parameters do not appear in the seed because they are not data — they are the structure of Hemera_0 itself.

zero-state fixed point

The all-zero state is a fixed point of Hemera_0. This does not affect constant generation because the sponge absorbs the seed first. After absorbing one non-zero byte, the state is non-zero.

Do not use Hemera_0 for any purpose other than constant generation from non-trivial seeds.

reproducibility

The procedure is fully deterministic. Same S-box, same matrices, same round structure, same sponge, same seed — same 144 field elements.

Dimensions

bootstrap
cyber/research/bootstrap
bootstrap plan three-stage bootstrap for the cyber execution stack. like GCC: system compiler → self-host → proven self-host. each stage upgrades trust level. Rust = untrusted bootstrap + fast jets. Trident = proven canonical implementation. dual-language invariant at every level: `∀ f, x:…

Local Graph