feat(license): rotate Ed25519 public key for maximus-api (#49) #137
No reviewers
Labels
No labels
autopilot:pending-human
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-clarification
status:needs-fix
status:ready
status:review
status:triage
type:bug
type:feature
type:infra
type:refactor
type:schema
type:security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/Simpl-Resultat#137
Loading…
Reference in a new issue
No description provided.
Delete branch "issue-49-rotate-pubkey"
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?
Rotates the embedded Ed25519 public key in
license_commands.rs:27-29to match themaximus-apilicense server scaffolded for #49.Context
maximus-api(https://git.lacompagniemaximus.com/maximus/maximus-api) was scaffolded on 2026-04-25 with a freshly generated Ed25519 keypair. The matching private key is held only on the server (env varED25519_PRIVATE_KEY_PEM). For activations to work, the desktop client must embed the matching public key.The previous public key had no production licenses signed against it — the server did not exist — so this rotation is invisible to existing users.
Verification
cargo checkcleancargo test --lib: 34 tests pass, including:embedded_public_key_pem_parses(confirms the new PEM is well-formed)license_commands::tests::*(they use ad-hoc test keypairs, not the embedded one)Merge timing
Hold this PR until
maximus-apiis deployed atapi.lacompagniemaximus.com. Merging earlier is safe (auto-update is temporarily open to FREE perentitlements.rs:17, no licenses to validate yet) but pointless — once merged and a release is cut, every user pulls the new public key, and we want the server to be answering by then.After merge:
/releaseskill).maximus-apiso/licenses/activateis reachable when the new build ships.Refs #49
Verdict: APPROVE
Cleanly rotates the embedded Ed25519 license-verification public key to match the freshly-scaffolded
maximus-apiserver. I derived the public key from the server's private key locally and confirmed it matches the PEM in this PR exactly. No existing licenses were issued against the old key, so the rotation is invisible to users.Verified
openssl pkey -puboutproduces from the server'sED25519_PRIVATE_KEY_PEM:MCowBQYDK2VwAyEAmUTcl7xjt01uc2FhPgvP0at0I/Pie0JLh73AApNy+o8=.cargo test --lib license_commands: 9/9 pass, includingembedded_public_key_pem_parses.src-tauri/src/commands/license_commands.rs:25-27updated with the new generation date and a pointer tomaximus-api/.envon Coolify.Changed/Modifie, referencing #49.entitlements.rs:17, so merging before the API is live is safe but pointless.Suggestions (non-blocking)
license_commands.rs:25— consider keeping a one-line history of past rotations (e.g.// Rotations: 2026-04-10 (initial, never used in prod), 2026-04-25 (current)) so future rotations have a precedent for traceability withoutgit blame.Changedentry is technically accurate but invisible to users. The user-facing story is really "activations now work end-to-end" once the API is deployed. Could be deferred to the release-notes write-up rather than fixed in this PR.MCowBQYDK2VwAyEAis present inPUBLIC_KEY_PEMwould catch an accidental clobber on a future merge. Cheap, optional.Reviewed via the
pr-reviewskill.49dec51062to97680417ee