From fc945ac6abc3e3e869851820c88c2b2b83bfd3bb Mon Sep 17 00:00:00 2001 From: r-zakarya <82443831+r-zakarya@users.noreply.github.com> Date: Sat, 5 Sep 2026 17:50:14 +0100 Subject: [PATCH] fix(licence): nouvelle paire, et la privee ne nait plus dans le depot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La premiere privee a ete supprimee sans copie : plus aucune licence nouvelle n'etait emettable. Regeneration + reemission, indolore aujourd'hui parce qu'une seule licence circulait. licence.ps1 ecrit desormais la cle dans %USERPROFILE%\Documents, hors du depot. Elle vivait dans tools\, ou elle n'attendait qu'un menage : le .gitignore la protegeait du depot, rien ne la protegeait de son proprietaire. Verifie : la licence de la nouvelle paire passe, celle de la paire perdue tombe — la regeneration a bien remplace, pas ajoute. Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 12 ++++++++++++ delphi-backend/Source/PM.Licence.pas | 23 ++++++++++++++--------- tools/licence.ps1 | 6 +++++- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 867664d..2ca9eda 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -300,6 +300,18 @@ tools\licence.ps1 -For "a@b.com" -Name "Ami" # une licence magic `ECS1` + longueur(32) + X(32) + Y(32). **Livre a zero** — tant qu'on n'y a pas colle la sortie de `-Init`, aucune licence n'est valide. Ne jamais regenerer la paire ensuite : toutes les licences deja emises tomberaient. +- **La cle privee s'ecrit dans `%USERPROFILE%\Documents\pmserver-licence-private.key`, + hors du depot par construction.** Elle a d'abord vecu dans `tools\`, ou elle + n'attendait qu'un menage pour disparaitre — ce qui est arrive le 2026-09-05, + sans copie, obligeant a regenerer la paire et a reemettre. Le `.gitignore` la + protegeait du depot ; rien ne la protegeait de son proprietaire. Sa vraie + place est un coffre ; le fichier n'est qu'un intermediaire, et `-KeyFile` + permet de la relire d'ou on l'a mise. +- **Perdre la privee et perdre la publique n'ont pas le meme effet** : sans la + privee on ne peut plus emettre AUCUNE licence nouvelle (les existantes + continuent — l'exe n'a que la publique) ; la reparation est de regenerer, + reconstruire et reemettre chacune. Indolore avec une licence en circulation, + ingerable avec vingt. - **Aucun ASN.1 nulle part.** .NET sur Windows EST CNG : la signature produite par le script (`r||s` brut, 64 octets) est deja celle qu'attend `BCryptVerifySignature`, et les coordonnees exportees se rangent telles diff --git a/delphi-backend/Source/PM.Licence.pas b/delphi-backend/Source/PM.Licence.pas index 18bdaa2..049108c 100644 --- a/delphi-backend/Source/PM.Licence.pas +++ b/delphi-backend/Source/PM.Licence.pas @@ -73,16 +73,21 @@ const // // BCRYPT_ECCPUBLIC_BLOB : magic 'ECS1' + longueur(32) + X(32) + Y(32). // - // Posee le 2026-09-05. NE JAMAIS REGENERER LA PAIRE : toutes les licences - // deja emises tomberaient d'un coup. Un blob a zero refuse tout, ce qui est - // le bon defaut — un defaut qui accepterait quelque chose serait pire. + // Posee le 2026-09-05, REFAITE le meme jour : la premiere privee a ete + // supprimee sans copie. Une paire perdue interdit toute nouvelle licence a + // jamais, et la seule reparation est celle-ci — regenerer et reemettre. + // C'etait sans douleur avec une licence en circulation ; ca ne le sera plus. + // + // NE JAMAIS REGENERER SANS RAISON : toutes les licences deja emises + // tomberaient d'un coup. Un blob a zero refuse tout, ce qui est le bon + // defaut — un defaut qui accepterait quelque chose serait pire. LicencePublicKeyBlob: array[0..71] of Byte = ( - $45, $43, $53, $31, $20, $00, $00, $00, $AA, $6D, $66, $6E, - $3E, $43, $61, $20, $5D, $4B, $DC, $C4, $7E, $07, $D1, $71, - $78, $5D, $F1, $45, $9A, $90, $70, $E5, $A2, $62, $28, $52, - $49, $96, $F2, $88, $20, $17, $E6, $42, $3F, $B0, $DF, $73, - $D2, $5E, $AA, $DF, $92, $4D, $51, $C8, $86, $1E, $26, $29, - $05, $43, $E4, $18, $80, $9C, $E2, $E6, $04, $20, $3C, $56 + $45, $43, $53, $31, $20, $00, $00, $00, $E3, $7A, $24, $23, + $B3, $90, $E4, $5C, $02, $7F, $49, $17, $9F, $1E, $BA, $96, + $18, $54, $BF, $9A, $F4, $42, $E9, $1E, $A4, $AD, $32, $DF, + $82, $7E, $54, $F4, $E7, $04, $5E, $FE, $84, $AA, $FA, $A3, + $3F, $78, $26, $6E, $C3, $67, $8A, $2A, $F2, $B4, $CD, $0D, + $EA, $2E, $96, $CB, $99, $71, $70, $DC, $E7, $C5, $40, $E7 ); // ===== CNG =================================================================== diff --git a/tools/licence.ps1 b/tools/licence.ps1 index 6784c4d..4399892 100644 --- a/tools/licence.ps1 +++ b/tools/licence.ps1 @@ -15,7 +15,11 @@ param( [string]$For, [string]$Name = '', [string]$Machine, - [string]$KeyFile = "$PSScriptRoot\licence-private.key" + # HORS DU DEPOT PAR CONSTRUCTION. Elle a d'abord vecu dans tools\, ou elle + # n'attendait qu'un menage pour disparaitre - ce qui est arrive, et une cle + # privee perdue interdit toute nouvelle licence a jamais. Le .gitignore la + # protegeait du depot, rien ne la protegeait de son proprietaire. + [string]$KeyFile = "$env:USERPROFILE\Documents\pmserver-licence-private.key" ) $ErrorActionPreference = 'Stop'