/// <summary> /// Asynchronously computes the hash of a stream using the SHA512 algorithm. /// </summary> /// <param name="source">The stream to hash.</param> /// <param name="cancellationToken"> /// The token to monitor for cancellation requests. /// The default value is <see cref="System.Threading.CancellationToken.None" />. /// </param> /// <returns>The hash of the data.</returns> /// <exception cref="ArgumentNullException"> /// <paramref name="source" /> is <see langword="null" />. /// </exception> /// <exception cref="ArgumentException"> /// <paramref name="source" /> does not support reading. /// </exception> public static ValueTask <byte[]> HashDataAsync(Stream source, CancellationToken cancellationToken = default) { ArgumentNullException.ThrowIfNull(source); if (!source.CanRead) { throw new ArgumentException(SR.Argument_StreamNotReadable, nameof(source)); } return(LiteHashProvider.HashStreamAsync(HashAlgorithmNames.SHA512, HashSizeInBytes, source, cancellationToken)); }
/// <summary> /// Asynchronously computes the hash of a stream using the SHA512 algorithm. /// </summary> /// <param name="source">The stream to hash.</param> /// <param name="destination">The buffer to receive the hash value.</param> /// <param name="cancellationToken"> /// The token to monitor for cancellation requests. /// The default value is <see cref="System.Threading.CancellationToken.None" />. /// </param> /// <returns>The total number of bytes written to <paramref name="destination" />.</returns> /// <exception cref="ArgumentNullException"> /// <paramref name="source" /> is <see langword="null" />. /// </exception> /// <exception cref="ArgumentException"> /// <p> /// The buffer in <paramref name="destination"/> is too small to hold the calculated hash /// size. The SHA512 algorithm always produces a 512-bit hash, or 64 bytes. /// </p> /// <p>-or-</p> /// <p> /// <paramref name="source" /> does not support reading. /// </p> /// </exception> public static ValueTask <int> HashDataAsync( Stream source, Memory <byte> destination, CancellationToken cancellationToken = default) { ArgumentNullException.ThrowIfNull(source); if (destination.Length < HashSizeInBytes) { throw new ArgumentException(SR.Argument_DestinationTooShort, nameof(destination)); } if (!source.CanRead) { throw new ArgumentException(SR.Argument_StreamNotReadable, nameof(source)); } return(LiteHashProvider.HashStreamAsync( HashAlgorithmNames.SHA512, HashSizeInBytes, source, destination, cancellationToken)); }