28 Commits

Author SHA1 Message Date
leora
35fc6373a6 Close three review blockers: rekey, dual-enrol race, redeem quotas
- put_agent is INSERT OR IGNORE (enrol create-if-absent); update_agent_key
  preserves revocation columns so rekey cannot un-revoke
- enrol_rekey and seed_bootstrap refuse while the agent is revoked
- redeem_code uses per-agent code_redeem / code_redeem_fail; anonymous
  guesses no longer lock valid codes for other agents
- remove dead duplicate revoke_agent; tests for each finding (111 total)

Do not merge to main yet: independent crypto review, off-box chain head,
sealed store, and platform glue still open.
2026-10-05 23:27:33 +08:00
01279f6282 Document the second pass and what is still open 2026-10-05 21:51:25 +08:00
b24236f740 Document the second pass and what is still open 2026-10-05 21:51:23 +08:00
a59e668ca2 Route the human-session tests through the real code path 2026-10-05 21:51:21 +08:00
9ce8da7573 One test per finding in the second review pass 2026-10-05 21:51:18 +08:00
e784be8d3f Document revocation and bump to 0.3.0 2026-10-05 21:51:15 +08:00
806a97437e Expose checkpoint, revoke, reinstate and sweep on the CLI 2026-10-05 21:51:13 +08:00
57708eb7ac Close the second round of review findings: public_from_private 2026-10-05 21:51:10 +08:00
fc7858ef82 Close the second round of review findings: no credentials in the audit log 2026-10-05 21:51:08 +08:00
8ead217556 Close the second round of review findings: GrantedCode, no minting from a name 2026-10-05 21:51:06 +08:00
d402d7e498 Close the second round of review findings: revoke, reinstate, expiry 2026-10-05 21:51:03 +08:00
b3b154fe3c Close the second round of review findings: checkpoints, revocation, WAL, sweep 2026-10-05 21:51:01 +08:00
ea827c8e42 Harden Sigil: tests/test_hardening.py 2026-10-05 21:26:17 +08:00
47abc7d717 Harden Sigil: tests/helpers.py 2026-10-05 21:26:15 +08:00
9cbc3f5122 probe 2026-10-05 21:25:47 +08:00
908ea0439f Harden Sigil: tests/test_viewcodes.py 2026-10-05 21:24:53 +08:00
f1ad41f6d9 Harden Sigil: tests/test_sessions.py 2026-10-05 21:24:50 +08:00
01a8f5bbe2 Harden Sigil: sigil/viewcodes.py 2026-10-05 21:24:48 +08:00
a3c6c8d5c6 Harden Sigil: sigil/store.py 2026-10-05 21:24:45 +08:00
128a8db763 Harden Sigil: sigil/sessions.py 2026-10-05 21:24:43 +08:00
854db7c6a7 Harden Sigil: sigil/keys.py 2026-10-05 21:24:40 +08:00
995920321a Harden Sigil: sigil/identity.py 2026-10-05 21:24:38 +08:00
f720814b56 Harden Sigil: sigil/errors.py 2026-10-05 21:24:35 +08:00
05e376f5a2 Harden Sigil: sigil/__init__.py 2026-10-05 21:24:33 +08:00
e894d838a5 Harden Sigil: sigil.py 2026-10-05 21:24:31 +08:00
57c07758ce Harden Sigil: DESIGN.md 2026-10-05 21:24:28 +08:00
a3dbdb4812 Harden Sigil: README.md 2026-10-05 21:24:19 +08:00
4d9e101f54 Sigil: agent identity for the new internet
Replace passcode identity with Ed25519 challenge-response.

- Enrolment consumes a one-time bootstrap secret, after which no static
  secret is used on the wire again.
- Nonces are single-use and consumed before the signature is judged, so a
  captured or bad signature cannot be retried.
- Sessions are short-lived, scoped, and typed agent vs human_via_agent.
- Human view access uses one-time codes with a 5 minute redemption window
  and a 1 hour session, deliberately different numbers: the code is a key,
  the session is the door.
- Invariant: only an agent signature may act as an agent. Enforced and tested.
- Append-only audit trail.

54 tests, covering refusals rather than only the happy path.

Reference implementation, not reviewed or hardened. See README Status.
2026-10-05 20:43:50 +08:00