53 lines
1.9 KiB
PowerShell
53 lines
1.9 KiB
PowerShell
################################################################################
|
|
## File: Install-OpenSSL.ps1
|
|
## Desc: Install win64-openssl.
|
|
## Supply chain security: checksum validation
|
|
################################################################################
|
|
|
|
$arch = 'INTEL'
|
|
$bits = '64'
|
|
$light = $false
|
|
$installer = "exe"
|
|
$version = (Get-ToolsetContent).openssl.version
|
|
$installDir = "$Env:ProgramFiles\OpenSSL"
|
|
|
|
# Fetch available installers list
|
|
$jsonUrl = 'https://raw.githubusercontent.com/slproweb/opensslhashes/master/win32_openssl_hashes.json'
|
|
|
|
$installersAvailable = (Invoke-RestMethod $jsonUrl).files
|
|
|
|
$distributor_file_hash = $null
|
|
$installerUrl = $null
|
|
$installerName = $null
|
|
|
|
$installersAvailable | Get-Member -MemberType NoteProperty | ForEach-Object {
|
|
$key = $_.Name
|
|
if(($installersAvailable.$key.light -eq $light) -and ($installersAvailable.$key.arch -eq $arch) -and ($installersAvailable.$key.bits -eq $bits) -and ($installersAvailable.$key.installer -eq $installer) -and ($installersAvailable.$key.basever -eq $version)) {
|
|
$installerUrl = $installersAvailable.$key.url
|
|
$installerName = $key
|
|
$distributor_file_hash = $installersAvailable.$key.sha512
|
|
}
|
|
}
|
|
|
|
# Invoke installation
|
|
|
|
$installerArgs = '/silent', '/sp-', '/suppressmsgboxes', "/DIR=`"$installDir`""
|
|
Install-Binary -Url "$installerUrl" -Name "$installerName" -ArgumentList $installerArgs
|
|
|
|
#region Supply chain security
|
|
Write-Verbose "Performing checksum verification"
|
|
$local_file_hash = (Get-FileHash -Path (Join-Path ${env:TEMP} $installerName) -Algorithm SHA512).Hash
|
|
|
|
if ($local_file_hash -ne $distributor_file_hash) {
|
|
Write-Host "hash must be equal to: ${distributor_file_hash}"
|
|
Write-Host "actual hash is: ${local_file_hash}"
|
|
throw 'Checksum verification failed, please rerun install'
|
|
}
|
|
#endregion
|
|
|
|
# Update PATH
|
|
Add-MachinePathItem "$installDir\bin"
|
|
$env:Path = Get-MachinePath
|
|
|
|
Invoke-PesterTests -TestFile "Tools" -TestName "OpenSSL"
|