#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
#pragma warning disable
using System;
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto
{
    /// Base interface for a message digest.
    public interface IDigest
    {
        /// The algorithm name.
        string AlgorithmName { get; }
        /// Return the size, in bytes, of the digest produced by this message digest.
        /// the size, in bytes, of the digest produced by this message digest.
        int GetDigestSize();
        /// Return the size, in bytes, of the internal buffer used by this digest.
        /// the size, in bytes, of the internal buffer used by this digest.
        int GetByteLength();
        /// Update the message digest with a single byte.
        /// the input byte to be entered.
        void Update(byte input);
        /// Update the message digest with a block of bytes.
        /// the byte array containing the data.
        /// the offset into the byte array where the data starts.
        /// the length of the data.
        void BlockUpdate(byte[] input, int inOff, int inLen);
#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_
        /// Update the message digest with a span of bytes.
        /// the span containing the data.
        void BlockUpdate(ReadOnlySpan input);
#endif
        /// Close the digest, producing the final digest value.
        /// This call leaves the digest reset.
        /// the byte array the digest is to be copied into.
        /// the offset into the byte array the digest is to start at.
        /// the number of bytes written
        int DoFinal(byte[] output, int outOff);
#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_
        /// Close the digest, producing the final digest value.
        /// This call leaves the digest reset.
        /// the span the digest is to be copied into.
        /// the number of bytes written
        int DoFinal(Span output);
#endif
        /// Reset the digest back to its initial state.
        void Reset();
    }
}
#pragma warning restore
#endif