|
1 |
| -function Download-File { |
| 1 | +function Verify-Or-Delete-File { |
2 | 2 | param (
|
3 | 3 | [Parameter(Mandatory)]
|
4 |
| - [string]$Url, |
| 4 | + [string]$File, |
5 | 5 | [Parameter(Mandatory)]
|
6 |
| - [string]$ExpectedDigest, |
7 |
| - [Parameter(Mandatory)] |
8 |
| - [string]$OutFile |
| 6 | + [string]$ExpectedDigest |
9 | 7 | )
|
10 |
| - $TmpFile = New-TemporaryFile |
11 |
| - Invoke-WebRequest -Uri $Url -OutFile $TmpFile.FullName |
12 |
| - $ActualDigest = ( Get-FileHash -Algorithm SHA256 $TmpFile ).Hash |
| 8 | + $ActualDigest = ( Get-FileHash -Algorithm SHA256 $File ).Hash |
13 | 9 | if ( $ActualDigest -eq $ExpectedDigest )
|
14 | 10 | {
|
15 |
| - Move-Item -Force $TmpFile $OutFile |
16 | 11 | return
|
17 | 12 | }
|
18 |
| - |
| 13 | + rm $File |
19 | 14 | echo "Digest verification failed for $Url; actual $ActualDigest, expected $ExpectedDigest"
|
20 |
| - rm $TmpFile |
21 | 15 | exit 1
|
22 | 16 | }
|
23 | 17 |
|
| 18 | +function Download-Zip-and-Extract-File { |
| 19 | + param ( |
| 20 | + [Parameter(Mandatory)] |
| 21 | + [string]$Uri, |
| 22 | + [Parameter(Mandatory)] |
| 23 | + [string]$ZipExpectedDigest, |
| 24 | + [Parameter(Mandatory)] |
| 25 | + [string]$PathWithinZip, |
| 26 | + [Parameter(Mandatory)] |
| 27 | + [string]$FileExpectedDigest, |
| 28 | + [Parameter(Mandatory)] |
| 29 | + [string]$OutFile |
| 30 | + ) |
| 31 | + $TmpZip = New-TemporaryFile |
| 32 | + Invoke-WebRequest -Uri $Uri -OutFile $TmpZip.FullName |
| 33 | + echo $TmpZip |
| 34 | + Verify-Or-Delete-File -File $TmpZip.FullName -ExpectedDigest $ZipExpectedDigest |
| 35 | + |
| 36 | + Add-Type -AssemblyName System.IO.Compression.FileSystem |
| 37 | + $zip = [System.IO.Compression.ZipFile]::OpenRead($TmpZip) |
| 38 | + $zip.Entries | |
| 39 | + Where-Object { $_.FullName -eq $PathWithinZip } | |
| 40 | + ForEach-Object { |
| 41 | + $TmpFile = New-TemporaryFile |
| 42 | + # extract the selected items from the ZIP archive |
| 43 | + # and copy them to the out folder |
| 44 | + $FileName = $_.Name |
| 45 | + [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_, "$TmpFile", $true) |
| 46 | + Verify-Or-Delete-File -File $TmpFile -ExpectedDigest $FileExpectedDigest |
| 47 | + Move-Item -Force $TmpFile $OutFile |
| 48 | + } |
| 49 | + $zip.Dispose() |
| 50 | +} |
| 51 | + |
24 | 52 | $tools_dir = "target/tools"
|
25 | 53 | mkdir -Force $tools_dir
|
26 | 54 |
|
27 |
| -Download-File ` |
28 |
| - -Url 'https://www.tortall.net/projects/yasm/releases/yasm-1.3.0-win64.exe' ` |
29 |
| - -ExpectedDigest D160B1D97266F3F28A71B4420A0AD2CD088A7977C2DD3B25AF155652D8D8D91F ` |
30 |
| - -OutFile $tools_dir/yasm.exe |
| 55 | +# This is the file BoringSSL refers to in |
| 56 | +# https://boringssl.googlesource.com/boringssl/+/26f8297177ad8033cc39de84afe9c2000430a66d. |
| 57 | +$nasm_version = "nasm-2.13.03" |
| 58 | +$nasm_zip = "$nasm_version-win64.zip" |
| 59 | +$nasm_zip_sha256 = "B3A1F896B53D07854884C2E0D6BE7DEFBA7EBD09B864BBB9E6D69ADA1C3E989F" |
| 60 | +$nasm_exe = "nasm.exe" |
| 61 | +$nasm_exe_sha256 = "D8A933BF5CC3597C56193135CB78B225AB225E1F611D2FDB51EF6E3F555B21E3" |
| 62 | +Download-Zip-and-Extract-File ` |
| 63 | + -Uri "https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/win64/$nasm_zip" ` |
| 64 | + -ZipExpectedDigest "$nasm_zip_sha256" ` |
| 65 | + -PathWithinZip "$nasm_version/$nasm_exe" ` |
| 66 | + -FileExpectedDigest "$nasm_exe_sha256" ` |
| 67 | + -OutFile "$tools_dir/$nasm_exe" |
0 commit comments