diff --git a/release.ps1 b/release.ps1 index 854a3c4..52659f4 100644 --- a/release.ps1 +++ b/release.ps1 @@ -3,14 +3,14 @@ # powershell -ExecutionPolicy Bypass -File release.ps1 -Product mod -File bin\Release\MSCO.dll # # Braucht den Release-Token des Keymasters (RELEASE_TOKEN in dessen .env), lokal verschlüsselt in -# %AppData%\MSCO\release-token.dpapi (Windows DPAPI, nur dein Windows-Konto kann ihn lesen - anlegen mit +# %USERPROFILE%\.msco\release-token.dpapi (Windows DPAPI, nur dein Windows-Konto kann ihn lesen - anlegen mit # "release.ps1 -SaveToken"), sonst als Umgebungsvariable MSCO_RELEASE_TOKEN. Ohne Token wird nichts hochgeladen. # MSCO_NO_RELEASE=1 schaltet das Hochladen ab (Test-Builds). # # Signatur: jede Datei wird mit dem privaten Release-Schlüssel signiert (RSA-3072, SHA-256) - der Launcher und das Setup # installieren nur, was zu ihrem eingebauten öffentlichen Schlüssel passt. Selbst wer den Keymaster oder den Token # übernimmt, kann so keine fremde Datei als MSCO-Update verteilen. Der Schlüssel liegt DPAPI-verschlüsselt in -# %AppData%\MSCO\release-signing-key.dpapi (einmal anlegen: "release.ps1 -NewSigningKey"; SICHERN: "-ExportSigningKey"). +# %USERPROFILE%\.msco\release-signing-key.dpapi (einmal anlegen: "release.ps1 -NewSigningKey"; SICHERN: "-ExportSigningKey"). # Gibt es die Version auf dem Keymaster schon, passiert nichts - also einfach die Version erhöhen und bauen. param( [ValidateSet("mod", "launcher", "installer")][string]$Product, @@ -27,7 +27,17 @@ $here = Split-Path -Parent $MyInvocation.MyCommand.Path Add-Type -AssemblyName System.Security $entropy = [Text.Encoding]::UTF8.GetBytes("MSCO release token v1") $scope = [Security.Cryptography.DataProtectionScope]::CurrentUser -$tokenDpapi = Join-Path $env:APPDATA "MSCO\release-token.dpapi" +# Geheimnisse in %USERPROFILE%\.msco - nicht in AppData: das virtualisieren App-Pakete (z.B. die Claude-App), dann sähe +# ein normales Terminal die Dateien nicht. Die alte Ablage in AppData wird noch gelesen. +$secretDir = Join-Path $env:USERPROFILE ".msco" +function Find-Secret([string]$name) { + $new = Join-Path $secretDir $name + if (Test-Path $new) { return $new } + $old = Join-Path $env:APPDATA "MSCO\$name" + if (Test-Path $old) { return $old } + return $new +} +$tokenDpapi = Find-Secret "release-token.dpapi" # Token einmal verschlüsselt ablegen: fragt verdeckt danach (oder nimmt MSCO_RELEASE_TOKEN) if ($SaveToken) { @@ -44,7 +54,7 @@ if ($SaveToken) { exit 0 } $keyEntropy = [Text.Encoding]::UTF8.GetBytes("MSCO release signing key v1") -$keyFile = Join-Path $env:APPDATA "MSCO\release-signing-key.dpapi" +$keyFile = Find-Secret "release-signing-key.dpapi" # Neues Schlüsselpaar (nur einmal - der öffentliche Schlüssel ist in Launcher und Setup eingebaut) if ($NewSigningKey) {