Exemple #1
0
        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));
            }
        }
Exemple #2
0
 private static IEnumerable <SubresourceIntegrityHashAlgorithm> GetFlags(SubresourceIntegrityHashAlgorithm enumeration)
 {
     foreach (var value in (IEnumerable <SubresourceIntegrityHashAlgorithm>)Enum.GetValues(enumeration.GetType()))
     {
         if (enumeration.HasFlag(value))
         {
             yield return(value);
         }
     }
 }
Exemple #3
0
        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));
        }
Exemple #5
0
        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));
            }
        }