Helpers/Certificate/Write-CertificateDerIntegerBigEndian.ps1
|
<# .SYNOPSIS Writes a DER-encoded integer in big-endian format to a binary writer. #> function Write-CertificateDerIntegerBigEndian { param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [System.IO.BinaryWriter] $Writer, [Parameter(Mandatory = $true)] [System.Byte[]] $Value, [Parameter(Mandatory = $false)] [System.Boolean] $ForceUnsigned = $true ) process { $Writer.Write([System.Byte]0x02) # INTEGER $prefixZeros = 0 for ($i = 0; $i -lt $Value.Length; $i++) { if ($Value[$i] -ne 0) { break } $prefixZeros++ } if (($Value.Length - $prefixZeros) -eq 0) { Write-CertificateDerLength -Writer $Writer -Length 1 $Writer.Write([System.Byte]0) return } if ($ForceUnsigned -and $Value[$prefixZeros] -gt 0x7F) { # Add prefix 0x00 when highest bit is set. Write-CertificateDerLength -Writer $Writer -Length ($Value.Length - $prefixZeros + 1) $Writer.Write([System.Byte]0) } else { Write-CertificateDerLength -Writer $Writer -Length ($Value.Length - $prefixZeros) } for ($i = $prefixZeros; $i -lt $Value.Length; $i++) { $Writer.Write($Value[$i]) } } } |