Skip to content

Commit ae0c3dc

Browse files
Fix SHA calculations (#7804)
Fix SHA calculations
1 parent 82c323f commit ae0c3dc

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

src/Templating/test/Templates.Test/CdnScriptTagTests.cs

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,7 @@ public static IEnumerable<object[]> SubresourceIntegrityCheckLinkData
7777
[MemberData(nameof(SubresourceIntegrityCheckScriptData))]
7878
public async Task CheckScriptSubresourceIntegrity(ScriptTag scriptTag)
7979
{
80-
string expectedIntegrity;
81-
using (var responseStream = await _httpClient.GetStreamAsync(scriptTag.Src))
82-
using (var alg = SHA256.Create())
83-
{
84-
var hash = alg.ComputeHash(responseStream);
85-
expectedIntegrity = "sha256-" + Convert.ToBase64String(hash);
86-
}
80+
var expectedIntegrity = await GetShaIntegrity(scriptTag);
8781

8882
if (!expectedIntegrity.Equals(scriptTag.Integrity, StringComparison.OrdinalIgnoreCase))
8983
{
@@ -95,13 +89,7 @@ public async Task CheckScriptSubresourceIntegrity(ScriptTag scriptTag)
9589
[MemberData(nameof(SubresourceIntegrityCheckLinkData))]
9690
public async Task CheckLinkSubresourceIntegrity(LinkTag linkTag)
9791
{
98-
string expectedIntegrity;
99-
using (var responseStream = await _httpClient.GetStreamAsync(linkTag.HRef))
100-
using (var alg = SHA256.Create())
101-
{
102-
var hash = alg.ComputeHash(responseStream);
103-
expectedIntegrity = "sha256-" + Convert.ToBase64String(hash);
104-
}
92+
var expectedIntegrity = await GetShaIntegrity(linkTag);
10593

10694
if (!expectedIntegrity.Equals(linkTag.Integrity, StringComparison.OrdinalIgnoreCase))
10795
{
@@ -162,6 +150,27 @@ public override string ToString()
162150
}
163151
}
164152

153+
private Task<string> GetShaIntegrity(ScriptTag scriptTag)
154+
{
155+
return GetShaIntegrity(scriptTag.Integrity, scriptTag.Src);
156+
}
157+
158+
private Task<string> GetShaIntegrity(LinkTag linkTag)
159+
{
160+
return GetShaIntegrity(linkTag.Integrity, linkTag.HRef);
161+
}
162+
163+
private async Task<string> GetShaIntegrity(string integrity, string src)
164+
{
165+
var prefix = integrity.Substring(0, 6);
166+
using (var respStream = await _httpClient.GetStreamAsync(src))
167+
using (HashAlgorithm alg = string.Equals(prefix, "sha256") ? (HashAlgorithm)SHA256.Create() : (HashAlgorithm)SHA384.Create())
168+
{
169+
var hash = alg.ComputeHash(respStream);
170+
return $"{prefix}-" + Convert.ToBase64String(hash);
171+
}
172+
}
173+
165174
private static string GetFileContentFromArchive(ScriptTag scriptTag, string relativeFilePath)
166175
{
167176
var file = Path.Combine(_artifactsDir, scriptTag.FileName);

0 commit comments

Comments
 (0)