@@ -0,0 +1,23 @@
|
||||
# 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"
|
||||
Reference in New Issue
Block a user