Files
BSO-Launcher/new-release-key.ps1
MrMahoandClaude Opus 5.5 b69b9638ff Erste Version
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 17:26:25 +01:00

24 lines
1.5 KiB
PowerShell

# Legt den Release-Schluessel an (einmalig, wie bei MSCO): RSA 3072, der private Teil DPAPI-verschluesselt unter
# %APPDATA%\BSO\release-key.dpapi (nur dieser Windows-Benutzer kann ihn lesen). Den oeffentlichen Teil traegt das Skript in
# Services\ReleaseSignature.cs ein - danach installiert der Launcher nur noch damit signierte Releases.
# ACHTUNG: Neuer Schluessel = alte Launcher erkennen neue Releases nicht mehr. Den Schluessel also sichern, nicht neu anlegen.
param([switch]$Force)
$ErrorActionPreference = "Stop"
Add-Type -AssemblyName System.Security
$keyFile = Join-Path $env:APPDATA "BSO\release-key.dpapi"
if ((Test-Path $keyFile) -and -not $Force) { throw "Schluessel gibt es schon: $keyFile (mit -Force ueberschreiben - siehe ACHTUNG oben)" }
$rsa = [System.Security.Cryptography.RSA]::Create(3072)
$private = [Text.Encoding]::UTF8.GetBytes($rsa.ToXmlString($true))
$protected = [System.Security.Cryptography.ProtectedData]::Protect($private, $null, [System.Security.Cryptography.DataProtectionScope]::CurrentUser)
New-Item -ItemType Directory -Force (Split-Path $keyFile) | Out-Null
[IO.File]::WriteAllBytes($keyFile, $protected)
$public = $rsa.ToXmlString($false)
$code = Join-Path $PSScriptRoot "Services\ReleaseSignature.cs"
$text = [IO.File]::ReadAllText($code)
$text = [regex]::Replace($text, '"<RSAKeyValue>.*?</RSAKeyValue>"', '"' + $public + '"')
[IO.File]::WriteAllText($code, $text)
Write-Host "Release-Schluessel angelegt: $keyFile"
Write-Host "Oeffentlicher Schluessel eingetragen in $code"