fix(licence): nouvelle paire, et la privee ne nait plus dans le depot

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 <noreply@anthropic.com>
This commit is contained in:
r-zakarya
2026-09-05 17:50:14 +01:00
parent 427d294b22
commit fc945ac6ab
3 changed files with 31 additions and 10 deletions
+12
View File
@@ -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 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 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. 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 - **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 par le script (`r||s` brut, 64 octets) est deja celle qu'attend
`BCryptVerifySignature`, et les coordonnees exportees se rangent telles `BCryptVerifySignature`, et les coordonnees exportees se rangent telles
+14 -9
View File
@@ -73,16 +73,21 @@ const
// //
// BCRYPT_ECCPUBLIC_BLOB : magic 'ECS1' + longueur(32) + X(32) + Y(32). // BCRYPT_ECCPUBLIC_BLOB : magic 'ECS1' + longueur(32) + X(32) + Y(32).
// //
// Posee le 2026-09-05. NE JAMAIS REGENERER LA PAIRE : toutes les licences // Posee le 2026-09-05, REFAITE le meme jour : la premiere privee a ete
// deja emises tomberaient d'un coup. Un blob a zero refuse tout, ce qui est // supprimee sans copie. Une paire perdue interdit toute nouvelle licence a
// le bon defaut — un defaut qui accepterait quelque chose serait pire. // 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 = ( LicencePublicKeyBlob: array[0..71] of Byte = (
$45, $43, $53, $31, $20, $00, $00, $00, $AA, $6D, $66, $6E, $45, $43, $53, $31, $20, $00, $00, $00, $E3, $7A, $24, $23,
$3E, $43, $61, $20, $5D, $4B, $DC, $C4, $7E, $07, $D1, $71, $B3, $90, $E4, $5C, $02, $7F, $49, $17, $9F, $1E, $BA, $96,
$78, $5D, $F1, $45, $9A, $90, $70, $E5, $A2, $62, $28, $52, $18, $54, $BF, $9A, $F4, $42, $E9, $1E, $A4, $AD, $32, $DF,
$49, $96, $F2, $88, $20, $17, $E6, $42, $3F, $B0, $DF, $73, $82, $7E, $54, $F4, $E7, $04, $5E, $FE, $84, $AA, $FA, $A3,
$D2, $5E, $AA, $DF, $92, $4D, $51, $C8, $86, $1E, $26, $29, $3F, $78, $26, $6E, $C3, $67, $8A, $2A, $F2, $B4, $CD, $0D,
$05, $43, $E4, $18, $80, $9C, $E2, $E6, $04, $20, $3C, $56 $EA, $2E, $96, $CB, $99, $71, $70, $DC, $E7, $C5, $40, $E7
); );
// ===== CNG =================================================================== // ===== CNG ===================================================================
+5 -1
View File
@@ -15,7 +15,11 @@ param(
[string]$For, [string]$For,
[string]$Name = '', [string]$Name = '',
[string]$Machine, [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' $ErrorActionPreference = 'Stop'