Skip to content

Commit fa12cc6

Browse files
committed
docs(key-auto-rotation): update implementation roadmap from 5 PRs to 4 (merge spec+manual into PR1)
1 parent 758f463 commit fa12cc6

1 file changed

Lines changed: 29 additions & 33 deletions

File tree

documentation/docs/kmip_support/key_auto_rotation.md

Lines changed: 29 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -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
570570
building 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

599593
Background 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

621617
Mirror 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

Comments
 (0)