1param(
2 [Parameter(Mandatory = $true)][string]$OutputRoot,
3 [Parameter(Mandatory = $true)][string]$PublicKeyFile,
4 [string]$PhpBinary = 'php'
5)
6
7$signingDirectory = Join-Path $OutputRoot '.signing'
8$privateKeyFile = Join-Path $signingDirectory 'private.pem'
9if ((Test-Path -LiteralPath $privateKeyFile) -and (Get-Item -LiteralPath $privateKeyFile).Length -gt 0) {
10 throw 'The private signing key already exists.'
11}
12
13New-Item -ItemType Directory -Path $signingDirectory -Force | Out-Null
14$randomFile = Join-Path $signingDirectory '.rnd'
15$rng = [System.Security.Cryptography.RandomNumberGenerator]::Create()
16$bytes = New-Object byte[] 256
17$rng.GetBytes($bytes)
18[System.IO.File]::WriteAllBytes($randomFile, $bytes)
19$rng.Dispose()
20
21$env:OPENSSL_CONF = Join-Path $PSScriptRoot 'openssl.cnf'
22$env:RANDFILE = $randomFile
23& $PhpBinary (Join-Path $PSScriptRoot 'generate-release-key.php') $OutputRoot $PublicKeyFile
24if ($LASTEXITCODE -ne 0) {
25 throw 'The release signing key could not be generated.'
26}
27Remove-Item -LiteralPath $randomFile -Force
28