private static void AppendSri( StringBuilder stringBuilder, byte[] bytes, SubresourceIntegrityHashAlgorithm hashAlgorithm) { switch (hashAlgorithm) { case SubresourceIntegrityHashAlgorithm.SHA256: stringBuilder.Append("sha256-"); stringBuilder.Append(GetHash <SHA256>(bytes)); break; case SubresourceIntegrityHashAlgorithm.SHA384: stringBuilder.Append("sha384-"); stringBuilder.Append(GetHash <SHA384>(bytes)); break; case SubresourceIntegrityHashAlgorithm.SHA512: stringBuilder.Append("sha512-"); stringBuilder.Append(GetHash <SHA512>(bytes)); break; default: throw new ArgumentException( FormattableString.Invariant($"Hash algorithm not recognized. HashAlgorithm<{hashAlgorithm}>."), nameof(hashAlgorithm)); } }
private static IEnumerable <SubresourceIntegrityHashAlgorithm> GetFlags(SubresourceIntegrityHashAlgorithm enumeration) { foreach (var value in (IEnumerable <SubresourceIntegrityHashAlgorithm>)Enum.GetValues(enumeration.GetType())) { if (enumeration.HasFlag(value)) { yield return(value); } } }
private string GetSubresourceIntegrityFromContentFile( string contentPath, SubresourceIntegrityHashAlgorithm hashAlgorithms) { var filePath = Path.Combine( this.webHostEnvironment.ContentRootPath, this.urlHelper.Content(contentPath).TrimStart('/')); var bytes = this.ReadAllBytes(filePath); return(GetSpaceDelimetedSri(bytes, hashAlgorithms)); }
private static string GetSpaceDelimetedSri(byte[] bytes, SubresourceIntegrityHashAlgorithm hashAlgorithms) { List <string> items = new List <string>(3); foreach (SubresourceIntegrityHashAlgorithm hashAlgorithm in GetFlags(hashAlgorithms)) { items.Add(GetSri(bytes, hashAlgorithm)); } return(string.Join(" ", items)); }
private static string GetSpaceDelimetedSri(byte[] bytes, SubresourceIntegrityHashAlgorithm hashAlgorithms) { var stringBuilder = new StringBuilder(); foreach (var hashAlgorithm in GetFlags(hashAlgorithms)) { if (stringBuilder.Length > 0) { stringBuilder.Append(' '); } AppendSri(stringBuilder, bytes, hashAlgorithm); } return(stringBuilder.ToString()); }
private static string GetSri(byte[] bytes, SubresourceIntegrityHashAlgorithm hashAlgorithm) { switch (hashAlgorithm) { case SubresourceIntegrityHashAlgorithm.SHA256: return("sha256-" + GetHash <SHA256>(bytes)); case SubresourceIntegrityHashAlgorithm.SHA384: return("sha384-" + GetHash <SHA384>(bytes)); case SubresourceIntegrityHashAlgorithm.SHA512: return("sha512-" + GetHash <SHA512>(bytes)); default: throw new ArgumentException( $"Hash algorithm not recognized. HashAlgorithm<{hashAlgorithm}>.", nameof(hashAlgorithm)); } }