@@ -566,35 +566,29 @@ ckms sym keys set-rotation-policy \
566566
567567## Implementation roadmap
568568
569- This feature is delivered as a cascade of five stacked pull requests, each
569+ This feature is delivered as a cascade of four stacked pull requests, each
570570building on the previous one:
571571
572572``` text
573- develop ← PR 1 ← PR 2 ← PR 3 ← PR 4 ← PR 5
573+ develop ← PR 1 ← PR 2 ← PR 3 ← PR 4
574574```
575575
576- ### PR 1 — Specification (this document )
576+ ### PR 1 — Specification + manual rotation for all key types ( # 968 )
577577
578- Publish the complete key auto-rotation specification so reviewers and
579- subsequent PRs have a stable reference. Standardise terminology: ** Key
580- Rotation** for symmetric/asymmetric re-keying, ** Certificate Renewal** for
581- certificate operations.
578+ Publish the complete key auto-rotation specification and implement all
579+ manual-rotation flows:
582580
583- ### PR 2 — Manual rotation for all key types + test vectors
581+ - Standardise terminology: ** Key Rotation** for symmetric/asymmetric
582+ re-keying, ** Certificate Renewal** for certificate operations
583+ - ` Re-Key ` implementation for all six symmetric/asymmetric scenarios
584+ - ` Re-Key Key Pair ` for all curve types (RSA, EC, ML-KEM, ML-DSA, SLH-DSA,
585+ X25519, secp256k1, CoverCrypt)
586+ - ` ReCertify ` (KMIP §6.1.45) for self-signed and CA-signed certificate renewal
587+ - Offset-based ` PreActive ` state for keys/certificates with future activation
588+ dates
589+ - 344 test vectors (non-regression coverage for all flows)
584590
585- Implement ` Re-Key ` and ` Re-Key Key Pair ` for all six scenarios described
586- in this document:
587-
588- 1 . Plain symmetric key
589- 2 . Wrapping key (rotate + re-wrap all dependants)
590- 3 . Wrapped key (unwrap → new material → re-wrap)
591- 4 . Asymmetric key pair (new private key + new public key UIDs)
592- 5 . Wrapped private key / CoverCrypt
593- 6 . Server-wide KEK (transparent — validated via test configuration variant)
594-
595- All test vectors green at merge time. No auto-rotation scheduler in this PR.
596-
597- ### PR 3 — Auto-rotation scheduler + deadline detection
591+ ### PR 2 — Auto-rotation scheduler + deadline detection (#970 )
598592
599593Background cron that finds due keys and rotates them automatically:
600594
@@ -603,25 +597,27 @@ Background cron that finds due keys and rotates them automatically:
603597 ` x-rotate-interval = 0 ` on old key)
604598- ` --auto-rotation-check-interval-secs ` server config flag + wizard step
605599- Approaching-deadline detection (30 / 7 / 1 days before next scheduled
606- rotation) emitting events via a ` Notifier ` trait (no-op stub until PR 4 )
600+ rotation) emitting events via a ` Notifier ` trait (no-op stub until PR 3 )
607601- OTel counter ` kms.key.auto_rotation ` on every successful rotation
608602
609- ### PR 4 — Notification system (webhooks )
603+ ### PR 3 — Notification system (SMTP email) ( # 971 )
610604
611- First concrete ` Notifier ` implementation — POST JSON to configured URLs:
605+ First concrete ` Notifier ` implementation — sends HTML/plain-text emails
606+ via SMTP (` lettre ` 0.11):
612607
613608- ** Events** : ` rotation_success ` , ` rotation_failure ` , ` approaching_deadline `
614- - Exponential-backoff retry; failures logged but never block rotation
615- - Configuration designed as an extensible enum for future sinks (email,
616- Slack, cloud pub/sub)
617- - Wizard step for notification endpoint setup
609+ - Threshold-based dedup: warning emitted once per threshold per key
610+ - Failures are logged at ` warn! ` level and never block rotation
611+ - ` NotificationsStore ` trait backed by SQLite, PostgreSQL, and MySQL
612+ - HTTP API for reading notifications from the UI
613+ - ` SmtpConfig ` wizard step for notification endpoint setup
618614
619- ### PR 5 — UI and CLI features
615+ ### PR 4 — UI and CLI features ( # 973 )
620616
621617Mirror rotation features in the Web UI and ` ckms ` CLI:
622618
623- - Wire existing ` SetRotationPolicy ` and ` KeysReKey ` UI components (routes +
624- menu entries)
625- - New ` GetRotationPolicy ` page (display policy + computed next rotation date )
626- - ` ckms sym keys get-rotation-policy ` CLI command
619+ - ` set-rotation-policy ` and ` get-rotation-policy ` subcommands under
620+ ` ckms sym keys `
621+ - Re-Key, Set/Get Rotation Policy pages in the Web UI (Symmetric Keys section )
622+ - ` NotificationsBell ` component with unread count badge and drawer
627623- Playwright E2E tests for all rotation UI flows
0 commit comments