/// <summary> /// Computes the HMAC of a stream using the MD5 algorithm. /// </summary> /// <param name="key">The HMAC key.</param> /// <param name="source">The stream to HMAC.</param> /// <returns>The HMAC 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 byte[] HashData(ReadOnlySpan<byte> key, Stream source) { ArgumentNullException.ThrowIfNull(source); if (!source.CanRead) throw new ArgumentException(SR.Argument_StreamNotReadable, nameof(source)); return LiteHashProvider.HmacStream(HashAlgorithmNames.MD5, HashSizeInBytes, key, source); }
/// <summary> /// Computes the HMAC of a stream using the MD5 algorithm. /// </summary> /// <param name="key">The HMAC key.</param> /// <param name="source">The stream to HMAC.</param> /// <param name="destination">The buffer to receive the HMAC value.</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 HMAC /// size. The MD5 algorithm always produces a 128-bit HMAC, or 16 bytes. /// </p> /// <p>-or-</p> /// <p> /// <paramref name="source" /> does not support reading. /// </p> /// </exception> public static int HashData(ReadOnlySpan<byte> key, Stream source, Span<byte> destination) { 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.HmacStream(HashAlgorithmNames.MD5, HashSizeInBytes, key, source, destination); }