public static Dictionary ComputeHashes()

in JetBrains.SbomUtils/src/JetBrains.SbomUtils/HashCalculator.cs [10:39]


  public static Dictionary<ChecksumAlgorithm, byte[]> ComputeHashes(Stream inputStream, IEnumerable<ChecksumAlgorithm> algorithms)
  {
    Dictionary<ChecksumAlgorithm, HashAlgorithm>? hashes = null;
    try
    {
      hashes = algorithms.ToDictionary(a => a, CreateHashAlgorithm);

      byte[] buffer = ArrayPool<byte>.Shared.Rent(4096);

      int bytesRead;
      while ((bytesRead = inputStream.Read(buffer, 0, buffer.Length)) > 0)
      {
        foreach (var hashAlgorithm in hashes.Values)
          hashAlgorithm.TransformBlock(buffer, 0, bytesRead, null, 0);
      }

      foreach (var hashAlgorithm in hashes.Values)
        hashAlgorithm.TransformFinalBlock(buffer, 0, 0);

      ArrayPool<byte>.Shared.Return(buffer, clearArray: true);

      return hashes.ToDictionary(a => a.Key, a => a.Value.Hash);
    }
    finally
    {
      if (hashes != null)
        foreach (var hashAlgorithm in hashes.Values)
          hashAlgorithm.Dispose();
    }
  }