<Type Name="HashAlgorithm" FullName="System.Security.Cryptography.HashAlgorithm">
  <TypeSignature Maintainer="auto" Language="C#" Value="public abstract class HashAlgorithm : System.Security.Cryptography.ICryptoTransform" />
  <AssemblyInfo>
    <AssemblyName>mscorlib</AssemblyName>
    <AssemblyPublicKey>[00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00]</AssemblyPublicKey>
    <AssemblyVersion>2.0.0.0</AssemblyVersion>
  </AssemblyInfo>
  <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the &lt;link location="node:gtk-sharp/programming/threads"&gt;Gtk# Thread Programming&lt;/link&gt; for details.</ThreadSafetyStatement>
  <Base>
    <BaseTypeName>System.Object</BaseTypeName>
  </Base>
  <Interfaces>
    <Interface>
      <InterfaceName>System.Security.Cryptography.ICryptoTransform</InterfaceName>
    </Interface>
  </Interfaces>
  <Docs>
    <summary>Common base class for all hash algorithm implementations. Available algorithms include:
<list type="bullet"><item><term><see cref="T:System.Security.Cryptography.MD5" /></term></item><item><term><see cref="T:System.Security.Cryptography.SHA1" /></term></item><item><term><see cref="T:System.Security.Cryptography.SHA256" /></term></item><item><term><see cref="T:System.Security.Cryptography.SHA384" /></term></item><item><term><see cref="T:System.Security.Cryptography.SHA512" /></term></item></list></summary>
    <remarks>To be added</remarks>
  </Docs>
  <Members>
    <Member MemberName=".ctor">
      <MemberSignature Language="C#" Value="protected HashAlgorithm ();" />
      <MemberType>Constructor</MemberType>
      <ReturnValue />
      <Parameters />
      <Docs>
        <summary>To be added</summary>
        <remarks>Called from constructor of derived class.</remarks>
      </Docs>
    </Member>
    <Member MemberName="CanReuseTransform">
      <MemberSignature Language="C#" Value="public virtual bool CanReuseTransform { get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Specify if the current transform object can be reused.</summary>
        <value>True if the transform can be reused by calling <see cref="M:System.Security.Cryptography.HashAlgorithm.Initialize" />. False if a new transform must be created for a new operation.</value>
        <remarks>You should never assume that a specific algorithm can be reused without checking this property. A cryptographic implementation can be changed by modifying the machine.config file and by using, directly or indirectly, the <see cref="T:System.Security.Cryptography.CryptoConfig" /> class. The new implementation could behave differently than the old one.</remarks>
      </Docs>
    </Member>
    <Member MemberName="CanTransformMultipleBlocks">
      <MemberSignature Language="C#" Value="public virtual bool CanTransformMultipleBlocks { get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Specify if the current transform object can process multiple blocks in a single call.</summary>
        <value>True if a single call to either <see cref="M:System.Security.Cryptography.HashAlgorithm.TransformBlock" /> or <see cref="M:System.Security.Cryptography.HashAlgorithm.TransformFinalBlock" /> can process more than one block at the time. False if the data must be processed block per block.</value>
        <remarks>You should never assume that a specific algorithm can transform multiple blocks without checking this property. A cryptographic implementation can be changed by modifying the machine.config file and by using, directly or indirectly, the <see cref="T:System.Security.Cryptography.CryptoConfig" /> class. The new implementation could behave differently than the old one.</remarks>
      </Docs>
    </Member>
    <Member MemberName="Clear">
      <MemberSignature Language="C#" Value="public void Clear ();" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>To be added</summary>
        <remarks>To be added</remarks>
      </Docs>
    </Member>
    <Member MemberName="ComputeHash">
      <MemberSignature Language="C#" Value="public byte[] ComputeHash (byte[] input);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Byte[]</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="input" Type="System.Byte[]" />
      </Parameters>
      <Docs>
        <param name="input">The data buffer to be hashed by the algorithm.</param>
        <summary>Process the hash algorithm on the complete buffer specified.</summary>
        <returns>The hash value of the processed buffer.</returns>
        <remarks>A copy of the return value is kept in the <see cref="P:System.Security.Cryptography.HashAlgorithm.Hash" /> property until the <see cref="M:System.Security.Cryptography.HashAlgorithm.Initialize" /> method is called.</remarks>
      </Docs>
    </Member>
    <Member MemberName="ComputeHash">
      <MemberSignature Language="C#" Value="public byte[] ComputeHash (System.IO.Stream inputStream);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Byte[]</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="inputStream" Type="System.IO.Stream" />
      </Parameters>
      <Docs>
        <param name="inputStream">The data stream to be hashed by the algorithm. </param>
        <summary>Process the hash algorithm on the specified stream.</summary>
        <returns>The hash value of the processed stream.</returns>
        <remarks>A copy of the return value is kept in the <see cref="P:System.Security.Cryptography.HashAlgorithm.Hash" /> property until the <see cref="M:System.Security.Cryptography.HashAlgorithm.Initialize" /> method is called.</remarks>
      </Docs>
    </Member>
    <Member MemberName="ComputeHash">
      <MemberSignature Language="C#" Value="public byte[] ComputeHash (byte[] buffer, int offset, int count);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Byte[]</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="buffer" Type="System.Byte[]" />
        <Parameter Name="offset" Type="System.Int32" />
        <Parameter Name="count" Type="System.Int32" />
      </Parameters>
      <Docs>
        <param name="buffer">The data buffer to be hashed by the algorithm. </param>
        <param name="offset">To be added: an object of type 'int'</param>
        <param name="count">To be added: an object of type 'int'</param>
        <summary>Process the hash algorithm on a subset of the buffer specified. </summary>
        <returns>The hash value of the processed buffer.</returns>
        <remarks>A copy of the return value is kept in the <see cref="P:System.Security.Cryptography.HashAlgorithm.Hash" /> property until the <see cref="M:System.Security.Cryptography.HashAlgorithm.Initialize" /> method is called.</remarks>
      </Docs>
    </Member>
    <Member MemberName="Create">
      <MemberSignature Language="C#" Value="public static System.Security.Cryptography.HashAlgorithm Create ();" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Security.Cryptography.HashAlgorithm</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>Return an instance of the default HashAlgorithm defined on the system.</summary>
        <returns>An instance of the default HashAlgorithm implementation, <see cref="T:System.Security.Cryptography.SHA1CryptoServiceProvider" />.</returns>
        <remarks>The machine.config file can be used to change the default implementation to any other HashAlgorithm derived class in any assembly.</remarks>
      </Docs>
    </Member>
    <Member MemberName="Create">
      <MemberSignature Language="C#" Value="public static System.Security.Cryptography.HashAlgorithm Create (string hashName);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Security.Cryptography.HashAlgorithm</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="hashName" Type="System.String" />
      </Parameters>
      <Docs>
        <param name="hashName">Specifies which derived class to create.</param>
        <summary>Return an instance of the specified HashAlgorithm. </summary>
        <returns>An instance of the specified HashAlgorithm or null if the name isn't a well known name or defined in machine.config. </returns>
        <remarks>To be added</remarks>
      </Docs>
    </Member>
    <Member MemberName="Dispose">
      <MemberSignature Language="C#" Value="protected virtual void Dispose (bool disposing);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="disposing" Type="System.Boolean" />
      </Parameters>
      <Docs>
        <param name="disposing">To be added: an object of type 'bool'</param>
        <summary>To be added</summary>
        <remarks>Any further call to the object will throw a <see cref="T:System.ObjectDisposedException" />.</remarks>
      </Docs>
    </Member>
    <Member MemberName="Hash">
      <MemberSignature Language="C#" Value="public virtual byte[] Hash { get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Byte[]</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Gets the previously computed hash.</summary>
        <value>To be added: an object of type 'byte []'</value>
        <remarks>To be added</remarks>
      </Docs>
    </Member>
    <Member MemberName="HashCore">
      <MemberSignature Language="C#" Value="protected abstract void HashCore (byte[] rgb, int start, int size);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="rgb" Type="System.Byte[]" />
        <Parameter Name="start" Type="System.Int32" />
        <Parameter Name="size" Type="System.Int32" />
      </Parameters>
      <Docs>
        <param name="rgb">To be added.</param>
        <param name="start">To be added.</param>
        <param name="size">To be added.</param>
        <summary>When overridden in a derived class, drives the hashing function.</summary>
        <remarks>To be added</remarks>
      </Docs>
    </Member>
    <Member MemberName="HashFinal">
      <MemberSignature Language="C#" Value="protected abstract byte[] HashFinal ();" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Byte[]</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>When overridden in a derived class, this pads and hashes whatever data might be left in the buffers and then returns the hash created.</summary>
        <returns>To be added: an object of type 'byte []'</returns>
        <remarks>To be added</remarks>
      </Docs>
    </Member>
    <Member MemberName="HashSize">
      <MemberSignature Language="C#" Value="public virtual int HashSize { get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Int32</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>Returns the size in bits of the hash.</summary>
        <value>To be added: an object of type 'int'</value>
        <remarks>To be added</remarks>
      </Docs>
    </Member>
    <Member MemberName="HashSizeValue">
      <MemberSignature Language="C#" Value="protected int HashSizeValue;" />
      <MemberType>Field</MemberType>
      <ReturnValue>
        <ReturnType>System.Int32</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>The size of the hash in bits.</summary>
        <remarks>To be added</remarks>
      </Docs>
    </Member>
    <Member MemberName="HashValue">
      <MemberSignature Language="C#" Value="protected byte[] HashValue;" />
      <MemberType>Field</MemberType>
      <ReturnValue>
        <ReturnType>System.Byte[]</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>Caches the hash after it is calculated.  Accessed through the Hash property.</summary>
        <remarks>To be added</remarks>
      </Docs>
    </Member>
    <Member MemberName="Initialize">
      <MemberSignature Language="C#" Value="public abstract void Initialize ();" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>When overridden in a derived class, initializes the object to prepare for hashing.</summary>
        <remarks>A newly created instance doesn't have to be initialized.</remarks>
      </Docs>
    </Member>
    <Member MemberName="InputBlockSize">
      <MemberSignature Language="C#" Value="public virtual int InputBlockSize { get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Int32</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>To be added</summary>
        <value>To be added: an object of type 'int'</value>
        <remarks>Must be overriden if not 1</remarks>
      </Docs>
    </Member>
    <Member MemberName="OutputBlockSize">
      <MemberSignature Language="C#" Value="public virtual int OutputBlockSize { get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Int32</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>To be added</summary>
        <value>To be added: an object of type 'int'</value>
        <remarks>Must be overriden if not 1</remarks>
      </Docs>
    </Member>
    <Member MemberName="State">
      <MemberSignature Language="C#" Value="protected int State;" />
      <MemberType>Field</MemberType>
      <ReturnValue>
        <ReturnType>System.Int32</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>To be added</summary>
        <remarks>Non-zero when in use, zero when not in use.</remarks>
      </Docs>
    </Member>
    <Member MemberName="System.IDisposable.Dispose">
      <MemberSignature Language="C#" Value="void IDisposable.Dispose ();" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>To be added.</summary>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="TransformBlock">
      <MemberSignature Language="C#" Value="public int TransformBlock (byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Int32</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="inputBuffer" Type="System.Byte[]" />
        <Parameter Name="inputOffset" Type="System.Int32" />
        <Parameter Name="inputCount" Type="System.Int32" />
        <Parameter Name="outputBuffer" Type="System.Byte[]" />
        <Parameter Name="outputOffset" Type="System.Int32" />
      </Parameters>
      <Docs>
        <param name="inputBuffer">The buffer from which to grab the data to be copied.</param>
        <param name="inputOffset">The offset into the input buffer to start reading at.</param>
        <param name="inputCount">The number of bytes to be copied.</param>
        <param name="outputBuffer">The buffer to write the copied data to.</param>
        <param name="outputOffset">At what point in the outputBuffer to write the data at.</param>
        <summary>To be added</summary>
        <returns>To be added: an object of type 'int'</returns>
        <remarks>Used for stream chaining.  Computes hash as data passes through it.</remarks>
      </Docs>
    </Member>
    <Member MemberName="TransformFinalBlock">
      <MemberSignature Language="C#" Value="public byte[] TransformFinalBlock (byte[] inputBuffer, int inputOffset, int inputCount);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Byte[]</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="inputBuffer" Type="System.Byte[]" />
        <Parameter Name="inputOffset" Type="System.Int32" />
        <Parameter Name="inputCount" Type="System.Int32" />
      </Parameters>
      <Docs>
        <param name="inputBuffer">The buffer from which to grab the data to be copied.</param>
        <param name="inputOffset">The offset into the input buffer to start reading at.</param>
        <param name="inputCount">The number of bytes to be copied.</param>
        <summary>Implements <see cref="T:System.Security.Cryptography.ICryptoTransform" />.<see cref="M:System.Security.Cryptography.ICryptoTransform.TransformFinalBlock" /> method.</summary>
        <returns>Return a byte array containing the last processed block. </returns>
        <remarks>Note that the last processed block isn't the hash result of the processed data. The <see cref="P:System.Security.Cryptography.HashAlgorithm.Hash" /> property contains the hash results after this operation.</remarks>
      </Docs>
    </Member>
  </Members>
  <Attributes>
    <Attribute>
      <AttributeName>System.Runtime.InteropServices.ComVisible(true)</AttributeName>
    </Attribute>
  </Attributes>
</Type>
