24 lines
1.5 KiB
PowerShell
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"
|