Fix SHA calculations (#7804)

Fix SHA calculations
This commit is contained in:
Ryan Brandenburg 2019-02-21 15:19:02 -08:00 committed by GitHub
parent 82c323f599
commit ae0c3dc42a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 23 additions and 14 deletions

View File

@ -77,13 +77,7 @@ namespace Templates.Test
[MemberData(nameof(SubresourceIntegrityCheckScriptData))]
public async Task CheckScriptSubresourceIntegrity(ScriptTag scriptTag)
{
string expectedIntegrity;
using (var responseStream = await _httpClient.GetStreamAsync(scriptTag.Src))
using (var alg = SHA256.Create())
{
var hash = alg.ComputeHash(responseStream);
expectedIntegrity = "sha256-" + Convert.ToBase64String(hash);
}
var expectedIntegrity = await GetShaIntegrity(scriptTag);
if (!expectedIntegrity.Equals(scriptTag.Integrity, StringComparison.OrdinalIgnoreCase))
{
@ -95,13 +89,7 @@ namespace Templates.Test
[MemberData(nameof(SubresourceIntegrityCheckLinkData))]
public async Task CheckLinkSubresourceIntegrity(LinkTag linkTag)
{
string expectedIntegrity;
using (var responseStream = await _httpClient.GetStreamAsync(linkTag.HRef))
using (var alg = SHA256.Create())
{
var hash = alg.ComputeHash(responseStream);
expectedIntegrity = "sha256-" + Convert.ToBase64String(hash);
}
var expectedIntegrity = await GetShaIntegrity(linkTag);
if (!expectedIntegrity.Equals(linkTag.Integrity, StringComparison.OrdinalIgnoreCase))
{
@ -162,6 +150,27 @@ namespace Templates.Test
}
}
private Task<string> GetShaIntegrity(ScriptTag scriptTag)
{
return GetShaIntegrity(scriptTag.Integrity, scriptTag.Src);
}
private Task<string> GetShaIntegrity(LinkTag linkTag)
{
return GetShaIntegrity(linkTag.Integrity, linkTag.HRef);
}
private async Task<string> GetShaIntegrity(string integrity, string src)
{
var prefix = integrity.Substring(0, 6);
using (var respStream = await _httpClient.GetStreamAsync(src))
using (HashAlgorithm alg = string.Equals(prefix, "sha256") ? (HashAlgorithm)SHA256.Create() : (HashAlgorithm)SHA384.Create())
{
var hash = alg.ComputeHash(respStream);
return $"{prefix}-" + Convert.ToBase64String(hash);
}
}
private static string GetFileContentFromArchive(ScriptTag scriptTag, string relativeFilePath)
{
var file = Path.Combine(_artifactsDir, scriptTag.FileName);