@@ -77,13 +77,7 @@ public static IEnumerable<object[]> SubresourceIntegrityCheckLinkData
77
77
[ MemberData ( nameof ( SubresourceIntegrityCheckScriptData ) ) ]
78
78
public async Task CheckScriptSubresourceIntegrity ( ScriptTag scriptTag )
79
79
{
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 ) ;
87
81
88
82
if ( ! expectedIntegrity . Equals ( scriptTag . Integrity , StringComparison . OrdinalIgnoreCase ) )
89
83
{
@@ -95,13 +89,7 @@ public async Task CheckScriptSubresourceIntegrity(ScriptTag scriptTag)
95
89
[ MemberData ( nameof ( SubresourceIntegrityCheckLinkData ) ) ]
96
90
public async Task CheckLinkSubresourceIntegrity ( LinkTag linkTag )
97
91
{
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 ) ;
105
93
106
94
if ( ! expectedIntegrity . Equals ( linkTag . Integrity , StringComparison . OrdinalIgnoreCase ) )
107
95
{
@@ -162,6 +150,27 @@ public override string ToString()
162
150
}
163
151
}
164
152
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
+
165
174
private static string GetFileContentFromArchive ( ScriptTag scriptTag , string relativeFilePath )
166
175
{
167
176
var file = Path . Combine ( _artifactsDir , scriptTag . FileName ) ;
0 commit comments