# 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, '".*?"', '"' + $public + '"') [IO.File]::WriteAllText($code, $text) Write-Host "Release-Schluessel angelegt: $keyFile" Write-Host "Oeffentlicher Schluessel eingetragen in $code"