/** 
@page SS_Cryptalg_cryptography_overview Cryptography overview

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

@section purpose Purpose 

Provides cryptographic services to the user software through a standard Symbian OS interface.

The cryptography module is the basis of the Symbian OS security system. The services provided by this module are used by 
Certificate Management, Software Installation, secure communication protocols (@ref SSL, @ref TLS, @ref IPSec) and 
@ref WTLS.

These services include:
@li symmetric encryption-decryption
@li asymmetric encryption-decryption
@li integrity checking and signature verification
@li key exchange
@li message digests

The interface for cryptography services hides the implementation details of particular algorithms. No detailed knowledge 
of the cryptographic algorithms is needed to use the cryptography services.

<hr>

@section description Description

The cryptography module encapsulates the following significant components:
@li cryptography algorithms
@li hash algorithms
@li random number generator (RNG)

--------------------------------------------------------------------------------

@section cryptography_algorithms Cryptography algorithms

These algorithms allow data to be encrypted and decrypted, they include:
@li @ref SS_Cryptalg_symmetric_ciphers -- algorithms that require communicating parties to hold a shared secret. They are fast and used for
	the transmission of bulk data.
@li @ref SS_Cryptalg_asymmetric_ciphers -- algorithms which have two keys, one private to the keys' owner and one that can be published. 
	They are slow compared to symmetric ciphers and are used to exchange a symmetric key before transmission of data 
	encrypted using that key.

The classes implementing the symmetric and asymmetric ciphers are provided in \c cryptalg.dll.

@subsection public_and_private_key_operations Public and private key operations

\c cryptalg is used for handling public key operations. Private key operations, however, are handled separately, by what 
is known as the private key extension, see @ref SS_Cryptalg_private_key_interface for more information.


--------------------------------------------------------------------------------

@subsection hash_algorithms Hash algorithms

@ref SS_Cryptalg_hash_algorithms compact a message down to a short series of bytes from which it is impossible to regenerate the message. 
They are used with an asymmetric cipher to generate signatures.

The classes implementing the hash algorithms are provided in \c hash.dll.


--------------------------------------------------------------------------------

@subsection rng Random Number Generator (RNG)

RNG is the basis for the cryptographic key generation, it uses the RANROT algorithm seeded by random data available on the
target hardware (e.g. free running counters available on ARM processers).


--------------------------------------------------------------------------------

@subsection supporting_classes Supporting classes

There are a number of supporting classes:
@li Padding 	--	defines the way blocks are filled with data when the data to be encrypted is smaller than the block 
					size. Padding is added at encryption and checked on decryption.
@li @ref SS_Cryptalg_signature_classes 	-- 	created and checked by asymmetric algorithms.
@li @ref SS_Cryptalg_parameter_classes 	-- 	used by some of the asymmetric algorithms to define some common mathematical structures used by the 
					encryption or signature processes.

*/