test: clé de licence dont l’exp dépasse 2^32 (licences de 100 ans) #363

Closed
opened 2026-09-27 19:53:26 +00:00 by maximus · 2 comments
Owner

Suivi de maximus/maximus-api#63 (licences de 100 ans, PR maximus-api#72). Priorité basse, à faire avant le go-live si possible.

Contexte vérifié (2026-09-27)

  • Les clés émises par maximus-api dureront 36525 jours. Leur claim exp vaut alors environ 4,94 milliards de secondes, au-delà de 2^32. Les clés émises jusqu'ici (10 ans) restaient sous 2^31 : cette frontière n'a jamais été exercée par un test du client.
  • src-tauri/src/commands/license_commands.rs : LicenseClaims.exp et ActivationClaims.exp sont des i64 dans toutes les versions publiées qui valident une licence (v0.7.0 à v0.15.0). jsonwebtoken 9 valide exp en u64. Builds x86_64 seulement. Le front rend new Date(expires_at * 1000).
  • La lecture du code dit donc que tout tient. Aucun test ne le prouve : un refactor des structures de claims (passage à u32, usize sur une cible 32 bits, conversion as i32 pour un affichage) casserait les clés de 100 ans sans qu'aucun test ne rougisse.

Tâches

  • Test Rust : une licence signée avec exp = now + 36525 * 86400 est acceptée par validate_with_key (et par le chemin d'activation), et expires_at rendu au front vaut bien cette valeur.
  • Test Rust : la même clé avec exp dans le passé reste refusée (la validation stricte n'est pas affaiblie).
  • Test front : l'échéance d'une clé de 100 ans s'affiche sans erreur. À coordonner avec #347, qui affiche « Sans échéance » au-delà de 50 ans.
  • cargo test et vitest verts.

Critères d'acceptation

  • Remplacer le type de exp par un entier 32 bits fait rougir au moins un test.
  • Une clé émise par maximus-api après #63 s'active dans un build local.

Coordination

  • Le skill /issue-license de ce dépôt plafonne encore la durée à l'ancienne valeur : à passer à 36525 une fois maximus-api#63 déployée.
Suivi de maximus/maximus-api#63 (licences de 100 ans, PR maximus-api#72). Priorité basse, à faire avant le go-live si possible. ## Contexte vérifié (2026-09-27) - Les clés émises par maximus-api dureront 36525 jours. Leur claim `exp` vaut alors environ 4,94 milliards de secondes, **au-delà de 2^32**. Les clés émises jusqu'ici (10 ans) restaient sous 2^31 : cette frontière n'a jamais été exercée par un test du client. - `src-tauri/src/commands/license_commands.rs` : `LicenseClaims.exp` et `ActivationClaims.exp` sont des `i64` dans toutes les versions publiées qui valident une licence (v0.7.0 à v0.15.0). `jsonwebtoken` 9 valide `exp` en `u64`. Builds x86_64 seulement. Le front rend `new Date(expires_at * 1000)`. - La lecture du code dit donc que tout tient. Aucun test ne le prouve : un refactor des structures de claims (passage à `u32`, `usize` sur une cible 32 bits, conversion `as i32` pour un affichage) casserait les clés de 100 ans sans qu'aucun test ne rougisse. ## Tâches - [ ] Test Rust : une licence signée avec `exp = now + 36525 * 86400` est acceptée par `validate_with_key` (et par le chemin d'activation), et `expires_at` rendu au front vaut bien cette valeur. - [ ] Test Rust : la même clé avec `exp` dans le passé reste refusée (la validation stricte n'est pas affaiblie). - [ ] Test front : l'échéance d'une clé de 100 ans s'affiche sans erreur. À coordonner avec #347, qui affiche « Sans échéance » au-delà de 50 ans. - [ ] `cargo test` et vitest verts. ## Critères d'acceptation - [ ] Remplacer le type de `exp` par un entier 32 bits fait rougir au moins un test. - [ ] Une clé émise par maximus-api après #63 s'active dans un build local. ## Coordination - Le skill `/issue-license` de ce dépôt plafonne encore la durée à l'ancienne valeur : à passer à 36525 une fois maximus-api#63 déployée.
maximus added this to the spec-paiements milestone 2026-09-27 19:53:26 +00:00
maximus added the
status:ready
type:refactor
source:analyste
labels 2026-09-27 19:53:26 +00:00
Author
Owner

Les tests de cette issue sont absorbés par #347 (analyse du 2026-09-29) : une clé avec exp = now + 36525 * 86400 acceptée par validate_with_key avec expires_at intact, la même clé expirée refusée, et « Sans échéance » pour une échéance à 100 ans côté carte (src/shared/licenseExpiry.ts). Un passage de exp à un entier 32 bits ferait rougir le premier.

Restent ici : le plafond de /issue-license à 36525 jours une fois maximus-api#63 déployée, et l'essai d'une vraie clé émise après #63 dans un build local.

Les tests de cette issue sont absorbés par #347 (analyse du 2026-09-29) : une clé avec `exp = now + 36525 * 86400` acceptée par `validate_with_key` avec `expires_at` intact, la même clé expirée refusée, et « Sans échéance » pour une échéance à 100 ans côté carte (`src/shared/licenseExpiry.ts`). Un passage de `exp` à un entier 32 bits ferait rougir le premier. Restent ici : le plafond de `/issue-license` à 36525 jours une fois maximus-api#63 déployée, et l'essai d'une vraie clé émise après #63 dans un build local.
Author
Owner

Fermée le 2026-10-10, sur décision de Max.

Les tests demandés ont été absorbés par #347 (voir le commentaire du 2026-09-30) et livrés dans la v0.16.0 du 2026-10-03 : clé avec exp à 100 ans acceptée avec expires_at intact, même clé expirée refusée, « Sans échéance » côté carte. Plus rien à faire ici ; la milestone spec-paiements de ce dépôt est fermée dans la foulée.

**Fermée le 2026-10-10, sur décision de Max.** Les tests demandés ont été absorbés par #347 (voir le commentaire du 2026-09-30) et livrés dans la v0.16.0 du 2026-10-03 : clé avec `exp` à 100 ans acceptée avec `expires_at` intact, même clé expirée refusée, « Sans échéance » côté carte. Plus rien à faire ici ; la milestone `spec-paiements` de ce dépôt est fermée dans la foulée.
maximus removed the
status:ready
label 2026-10-10 19:47:55 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/Simpl-Resultat#363
No description provided.