/**

@page SS_Cryptalg_hash_algorithms Hash algorithms
\n

<b>Pre-v.8.0</b>

Hash (or message digest) algorithms take a variable-length input (the message) and produce a fixed length output known as 
the hash (or digest) of the input.

Most Hash algorithms, such as @ref MD5 and @ref SHA, do not need keys at all, whereas others, like @ref HMAC (which is a 
hash algorithm built above another hash algorithm), need keys. The same interface is kept for both types of hash algorithms.
The implementation supplies default function parameters when there is a difference in the number of parameters for different 
algorithms.

They are one-way functions: so that it should not be possible to deduce the input from the digest, or even any part of 
the input. Even very small changes to the input will give rise to radical changes in the output. Also, it must be hard to 
find collisions: that is, two different inputs which produce the same output.

Hash algorithms are used in conjunction with asymmetric cryptography for signing. The reason for this is that signing by 
asymmetric cryptography alone is a slow process: e.g. encrypting the whole of a bank transaction using a private key would
be inefficient. So instead Alice (the sender) can create a hash of the transaction, encrypt that with her private key to 
make the signature, then send the transaction to Bob (the receiver) along with the signature. Bob hashes the transaction, 
decrypts the signature using Alice's public key and compares the 2 hash values: if they match the signature is valid.

There are a few different hash algorithms in use, the ones supported by the Symbian OS are given in the table below:
 
<table>
<tr><td><para>Hash algorithms</para></td>
<td><para>@ref MD5, @ref SHA "SHA-1", @ref HMAC</para></td></tr>
</table>

There is support for @ref MD2 and @ref SHA, which are there for backward compatibility, but they are not to be used in new code.


<hr>

@section base_class_and_its_derived_classes The base class and its derived classes

\c CMessageDigest is the base class which defines an interface for using the supported hash algorithms listed above.

The diagram below shows this base class and derived classes. For detailed information on each component see the 
Developer Library Cryptography API Reference material.

@image html asymmetric4.gif


These classes are all defined in \c hash.h and implemented in \c hash.dll.




*/