Keys: legacy-key coverage scan + rotation lifecycle tab (#348, ADR 0002) #409
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "keyscan"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The verify half of ADR 0002's rotate → drain → verify → discard cycle, per the approved variant-B mockups.
Backend:
internal/keyscan— background scan over the bare base driver (belowreserved/encrypt, so.cairn-stateobjects are included). Classification by trial-unwrap: the first 64 KiB goes toage.Decryptper identity set;NoIdentityMatchError= not covered, payload never read. Report: active / retired-only / neither counts, PQ-flavour split (mlkem stanza sniff), retired-only paths grouped by two-segment prefix (max 50 rows), neither-paths capped at 100. Generic over retained identities —deploymentIdentityLegacyrides the same scanner.GET/POST/DELETE /api/v1/admin/keyscan, wired in main.go only when a*Legacyidentity parses.Frontend: Encryption & keys gains a Rotation tab (hidden unless a retired key is configured) with the four-step lifecycle stepper, key rows (public halves + flavour chips), scan/rescan/cancel, 3s polling while running, the amber report grid, and the green "covers nothing — remove
recoveryIdentityLegacy" verdict. The Re-encrypt action's home is reserved for the drain follow-up. i18n ×4.Docs: handbook retirement section now points at the scan; CHANGELOG v0.6.115.
Tests: scanner classification (active/retired/neither/skipped + flavour + neither-paths) and prefix grouping; full gate green on the runner (vet, build, keyscan/api/webcheck tests, web extract + tests).