Private/ConvertTo-NSPSslPrivateKeyPem.ps1
|
function ConvertTo-NSPSslPrivateKeyPem { # RSA private key -> unencrypted PKCS#8 PEM (BEGIN PRIVATE KEY), the format openssl 3 genrsa writes. # Windows PowerShell's .NET has no PEM export, so the ASN.1 is built here. [CmdletBinding()] [OutputType([string])] param([Parameter(Mandatory)][System.Security.Cryptography.RSAParameters]$Parameters) $p = $Parameters $integers = foreach ($value in @([byte[]]@(0), $p.Modulus, $p.Exponent, $p.D, $p.P, $p.Q, $p.DP, $p.DQ, $p.InverseQ)) { New-NSPSslDerInteger -Value $value } $rsaPrivateKey = New-NSPSslDerElement -Tag 0x30 -Content ([byte[]]($integers | ForEach-Object { $_ })) # AlgorithmIdentifier: rsaEncryption (1.2.840.113549.1.1.1), NULL parameters. $algorithm = [byte[]](0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00) $content = [byte[]]((New-NSPSslDerInteger -Value ([byte[]]@(0))) + $algorithm + (New-NSPSslDerElement -Tag 0x04 -Content $rsaPrivateKey)) ConvertTo-NSPSslPem -Label 'PRIVATE KEY' -Bytes (New-NSPSslDerElement -Tag 0x30 -Content $content) } |