epoc32/include/cryptospi/pluginselectorbase.h
branchSymbian3
changeset 4 837f303aceeb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/epoc32/include/cryptospi/pluginselectorbase.h	Wed Mar 31 12:33:34 2010 +0100
@@ -0,0 +1,392 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* plugin selector interface
+*
+*/
+
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+#ifndef __CRYPTOAPI_PLUGINSELECTORBASE_H__
+#define __CRYPTOAPI_PLUGINSELECTORBASE_H__
+
+#include <e32base.h>
+
+
+namespace CryptoSpi
+	{
+	class CHash;
+	class CRandom;
+	class CSymmetricCipher;
+	class CAsymmetricCipher;
+	class CSigner;
+	class CVerifier;
+	class CKeyAgreement;
+	class CKeyPairGenerator;
+	class CAsyncHash;
+	class CAsyncRandom;
+	class CAsyncSymmetricCipher;
+	class CAsyncAsymmetricCipher;
+	class CAsyncSigner;
+	class CAsyncVerifier;
+	class CAsyncKeyAgreement;
+	class CAsyncKeyPairGenerator;
+	class CKey;
+	class CCryptoParams;
+	
+
+#ifdef SYMBIAN_SDP_IPSEC_VOIP_SUPPORT
+	class CMac;
+	class CAsyncMac;
+#endif
+	
+	/**
+	Base class for the selectors
+	*/
+	class MPluginSelector
+		{
+	public:
+		/**
+		Destructor
+		*/
+		inline virtual ~MPluginSelector() = 0;
+		
+		/**
+		 * @deprecated
+		 * 
+		 * Create a new instance of a hash object
+		 * 
+		 * @param 	aHash The pointer to CHash
+		 * @param 	aAlgorithmUid The specific hash algorithm e.g. MD2, SHA1
+		 * @param 	aOperationMode The operation mode of the hash e.g. Hash mode, Hmac mode
+		 * @param 	aKey The key for Hmac mode, which should be NULL in Hash mode
+		 * @param 	aAlgorithmParams The parameters that are specific to a particular 
+		 * 			algorithm. This is for extendibility and will normally be null.
+		 * @leave 	KErrNone if successful; otherwise, a system wide error code.
+		 */
+		virtual void CreateHashL(CHash*& aHash,
+								TUid aAlgorithmUid,
+								TUid aOperationMode,
+								const CKey* aKey,
+								const CCryptoParams* aAlgorithmParams) = 0;
+		
+		/**
+		Creates a new instance of a Random object.
+
+		@param aRandom A reference to a pointer that should be set to point to the new CRandom object.
+		@param aAlgorithmUid The algorithm to use
+		@param aAlgorithmParams Parameters that are specific this algorithm.
+	    @leave KErrNone if successful; otherwise, a system wide error code.
+		*/		
+		virtual void CreateRandomL(CRandom*& aRandom,
+									TUid aAlgorithmUid,
+									const CCryptoParams* aAlgorithmParams) = 0;
+		
+		/**
+		Creates a new synchronous instance of a symmetric cipher
+		
+		@param aCipher	A reference to a pointer that should be set to point to the new symmetric object.
+		@param aAlgorithmUid The algorithm to use
+		@param aKey The encryption/decryption key.
+		@param aCryptoMode The Symmetric cipher mode.
+		@param aOperationMode The Symmetric cipher operation mode.
+		@param aPaddingMode The Symmetric cipher padding mode.
+		@param aAlgorithmParams Parameters that are specific to a particular algorithm. This is for extendibility and will normally be null.
+		@leave	KErrNone if successful; otherwise, a system wide error code.
+		*/
+		virtual void CreateSymmetricCipherL(CSymmetricCipher*& aCipher,
+											TUid aAlgorithmUid,
+											const CKey& aKey,
+											TUid aCryptoMode,
+											TUid aOperationMode,
+											TUid aPaddingMode,
+											const CCryptoParams* aAlgorithmParams) = 0;
+
+		/**
+		Creates a new instance of an asymmetric cipher
+		
+		@param aCipher A reference to a pointer that should be set to point to the new asymmetric cipher object.
+		@param aAlgorithmUid The asymmetric cipher algorithm to use (e.g. KRsaCipherUid)
+		@param aKey The encryption/decryption key.
+		@param aCryptoMode whether to encrypt or decrypt
+		@param aPaddingMode The padding mode to use
+		@param aAlgorithmParams Parameters that are specific to a particular algorithm. This is for extendibility and will normally be null.
+		@leave	KErrNone if successful; otherwise, a system wide error code.
+		*/
+		virtual void CreateAsymmetricCipherL(CAsymmetricCipher*& aCipher,
+											TUid aAlgorithmUid,
+											const CKey& aKey,
+											TUid aCryptoMode,
+											TUid aPaddingMode,									
+											const CCryptoParams* aAlgorithmParams) = 0;
+
+		/**
+		Creates a new instance of a synchronous signer.
+
+		@param aSigner A reference to a pointer that should be set to point to the new signer object.
+		@param aAlgorithmUid The algorithm to use.
+		@param aKey The signing key.
+		@param aPaddingMode The padding mode of the signer.
+		@param aAlgorithmParams Parameters that are specific to a particular algorithm. This is for extendibility and will normally be null.
+		@leave	KErrNone if successful; otherwise, a system wide error code.
+		*/
+		virtual void CreateSignerL(CSigner*& aSigner,
+									TUid aAlgorithmUid,
+									const CKey& aKey,
+									TUid aPaddingMode,
+									const CCryptoParams* aAlgorithmParams) = 0;
+
+		/**
+		Creates a new instance of a verifier.
+		
+		@param aVerifier A reference to a pointer that should be set to point to the new verifier object.
+		@param aAlgorithmUid The algorithm to use
+		@param aKey The key to verify the signature with.
+		@param aPaddingMode The padding mode of the signer.
+		@param aAlgorithmParams Parameters that are specific to a particular algorithm. This is for extendibility and will normally be null.
+		@leave	KErrNone if successful; otherwise, a system wide error code.
+		*/
+		virtual void CreateVerifierL(CVerifier*& aVerifier,
+									TUid aAlgorithmUid,
+									const CKey& aKey,
+									TUid aPaddingMode,
+									const CCryptoParams* aAlgorithmParams) = 0;
+
+		/**
+		Creates a new instance of a key pair generator.
+
+		@param aKeyPairGenerator A reference to a pointer that should be set to point to the new asymmetric key pair generator object.
+		@param aKeyAlgorithmUid	The algorithm UID
+		@param aAlgorithmParams	The parameters that are specific to a particular algorithm. This is for extendibility and will normally be null.
+		@leave	KErrNone if successful; otherwise, a system wide error code.
+		*/
+		virtual void CreateKeyPairGeneratorL(CKeyPairGenerator*& aKeyPairGenerator,
+											TUid aKeyAlgorithmUid,
+											const CCryptoParams* aAlgorithmParams) = 0;
+
+
+		/**
+		Creates a new instance of a key agreement system.
+
+		@param aKeyAgreement A reference to a pointer that should be set to point to the new key agreement object.
+		@param aAlgorithmUid The algorithm to use
+		@param aPrivateKey The private key to combine with the other parties public key during the agreement.
+		@param aAlgorithmParams The parameters that are specific to a particular algorithm. This is for extendibility and will normally be null.
+		@leave	KErrNone if successful; otherwise, a system wide error code.
+		*/
+		virtual void CreateKeyAgreementL(CKeyAgreement*& aKeyAgreement,
+										TUid aAlgorithmUid,
+										const CKey& aPrivateKey,
+										const CCryptoParams* aAlgorithmParams) = 0;
+
+		/**
+		 * @deprecated
+		 * 
+		 * Create a new instance of a asynchronous hash object
+		 *
+		 * @param 	aHash The pointer to CHash
+		 * @param 	aAlgorithmUid The specific hash algorithm e.g. MD2, SHA1
+		 * @param 	aOperationMode The operation mode of the hash e.g. Hash mode, Hmac mode
+		 * @param 	aKey The key for Hmac mode, which should be NULL in Hash mode
+		 * @param 	aAlgorithmParams The parameters that are specific to a particular 
+		 * 			algorithm. This is for extendibility and will normally be null.
+		 * @leave	KErrNone if successful; otherwise, a system wide error code.
+		 */										
+		virtual void CreateAsyncHashL(CAsyncHash*& aHash,
+										TUid aAlgorithmUid,
+										TUid aOperationMode,
+										const CKey* aKey,
+										const CCryptoParams* aAlgorithmParams) = 0;
+		/**
+		Creates a new instance of a asynchronous random object.
+
+		@param aRandom A reference to a pointer that should be set to point to the new CRandom object.
+		@param aAlgorithmUid The algorithm to use
+		@param aAlgorithmParams Parameters that are specific this algorithm.
+		@leave	KErrNone if successful; otherwise, a system wide error code.
+		*/
+		virtual void CreateAsyncRandomL(CAsyncRandom*& aRandom,
+										TUid aAlgorithmUid,
+										const CCryptoParams* aAlgorithmParams) = 0;
+		/**
+		Creates a new synchronous instance of a asynchronous symmetric cipher
+		
+		@param aCipher	A reference to a pointer that should be set to point to the new symmetric object.
+		@param aAlgorithmUid The algorithm to use
+		@param aKey The encryption/decryption key.
+		@param aCryptoMode The Symmetric cipher mode.
+		@param aOperationMode The Symmetric cipher operation mode.
+		@param aPaddingMode The Symmetric cipher padding mode.
+		@param aAlgorithmParams Parameters that are specific to a particular algorithm. This is for extendibility and will normally be null.
+		@leave	KErrNone if successful; otherwise, a system wide error code.
+		*/
+		virtual void CreateAsyncSymmetricCipherL(CAsyncSymmetricCipher*& aCipher,
+										TUid aAlgorithmUid,
+										const CKey& aKey,
+										TUid aCryptoMode,
+										TUid aOperationMode,
+										TUid aPaddingMode,
+										const CCryptoParams* aAlgorithmParams) = 0;
+
+		/**
+		Creates a new instance of an asynchronous asymmetric cipher
+		
+		@param aCipher A reference to a pointer that should be set to point to the new asymmetric cipher object.
+		@param aAlgorithmUid The asymmetric cipher algorithm to use (e.g. KRsaCipherUid)
+		@param aKey The encryption/decryption key.
+		@param aCryptoMode whether to encrypt or decrypt
+		@param aPaddingMode The padding mode to use
+		@param aAlgorithmParams Parameters that are specific to a particular algorithm. This is for extendibility and will normally be null.
+		@leave	KErrNone if successful; otherwise, a system wide error code.
+		*/
+		virtual void CreateAsyncAsymmetricCipherL(CAsyncAsymmetricCipher*& aCipher,
+										TUid aAlgorithmUid,
+										const CKey& aKey,
+										TUid aCryptoMode,
+										TUid aPaddingMode,																						
+										const CCryptoParams* aAlgorithmParams) = 0;
+		/**
+		Creates a new instance of a asynchronous signer.
+
+		@param aSigner A reference to a pointer that should be set to point to the new signer object.
+		@param aAlgorithmUid The algorithm to use.
+		@param aKey The signing key.
+		@param aPaddingMode The padding mode of the signer.
+		@param aAlgorithmParams Parameters that are specific to a particular algorithm. This is for extendibility and will normally be null.
+		@leave	KErrNone if successful; otherwise, a system wide error code.
+		*/
+		virtual void CreateAsyncSignerL(CAsyncSigner*& aSigner,
+										TUid aAlgorithmUid,
+										const CKey& aKey,
+										TUid aPaddingMode,
+										const CCryptoParams* aAlgorithmParams) = 0;
+		/**
+		Creates a new instance of a asynchronous verifier.
+		
+		@param aVerifier A reference to a pointer that should be set to point to the new verifier object.
+		@param aAlgorithmUid The algorithm to use
+		@param aKey The key to verify the signature with.
+		@param aPaddingMode The padding mode of the signer.
+		@param aAlgorithmParams Parameters that are specific to a particular algorithm. This is for extendibility and will normally be null.
+		@leave	KErrNone if successful; otherwise, a system wide error code.
+		*/		
+		virtual void CreateAsyncVerifierL(CAsyncVerifier*& aVerifier,
+										TUid aAlgorithmUid,
+										const CKey& aKey,
+										TUid aPaddingMode,
+										const CCryptoParams* aAlgorithmParams) = 0;
+
+		/**
+		Creates a new instance of a asynchronous key pair generator.
+
+		@param aKeyPairGenerator A reference to a pointer that should be set to point to the new asymmetric key pair generator object.
+		@param aKeyAlgorithmUid	The algorithm UID
+		@param aAlgorithmParams	The parameters that are specific to a particular algorithm. This is for extendibility and will normally be null.
+		@leave	KErrNone if successful; otherwise, a system wide error code.
+		*/
+		virtual void CreateAsyncKeyPairGeneratorL(CAsyncKeyPairGenerator*& aKeyPairGenerator,
+										TUid aAlgorithmUid,
+										const CCryptoParams* aAlgorithmParams) = 0;
+
+		/**
+		Creates a new instance of a asynchronous key agreement system.
+
+		@param aKeyAgreement A reference to a pointer that should be set to point to the new key agreement object.
+		@param aAlgorithmUid The algorithm to use
+		@param aPrivateKey The private key to combine with the other parties public key during the agreement.
+		@param aAlgorithmParams The parameters that are specific to a particular algorithm. This is for extendibility and will normally be null.
+		@leave	KErrNone if successful; otherwise, a system wide error code.
+		*/
+		virtual void CreateAsyncKeyAgreementL(CAsyncKeyAgreement*& aKeyAgreement,
+										TUid aAlgorithmUid,
+										const CKey& aPrivateKey,
+										const CCryptoParams* aAlgorithmParams) = 0;		
+
+#ifdef SYMBIAN_SDP_IPSEC_VOIP_SUPPORT		
+
+		/**
+		 * Create a CMac instance (for software based MAC plug-in dll implementation)
+		 *
+		 * @param aMac           	The pointer to CMac. This will be initialised with 
+		 * 						  	the plug-in implementation of the desired MAC algorithm.
+		 * @param aAlgorithmUid  	The specific MAC algorithm desired for evaluation of MAC value.
+		 *                       	e.g. MD2, SHA1 or AES-XCBC-MAC-96, AES-XCBC-PRF-128
+		 * @param aKey           	Symmetric key for calculating message authentication code value. 
+		 * @param aAlgorithmParams  The parameters those are specific to a particular MAC algorithm.
+		 * 							This is for extendibility and will normally be null.                     	
+		 * @leave	              	KErrNone if successful; otherwise, leaves with a system wide error code.
+		 */
+		virtual void CreateMacL(CMac*& aMac,
+								const TUid aAlgorithmUid,
+								const CKey& aKey,
+								const CCryptoParams* aAlgorithmParams) = 0;
+				
+		/**
+		 * Create a CAsyncMac instance (for hardware based MAC plug-in dll implementation)
+		 *
+		 * @param aMac           	The pointer to CMac. This will be initialised with 
+		 * 						  	the plug-in implementation of the desired MAC algorithm.
+		 * @param aAlgorithmUid  	The specific MAC algorithm desired for evaluation of MAC value.
+		 *                       	e.g. MD2, SHA1 or AES-XCBC-MAC-96, AES-XCBC-PRF-128
+		 * @param aKey           	Symmetric key for calculating message authentication code value. 
+		 * @param aAlgorithmParams  The parameters those are specific to a particular MAC algorithm.
+		 * 							This is for extendibility and will normally be null.                     	
+		 * @leave	             	KErrNone if successful; otherwise, leaves with a system wide error code.
+		 */
+		virtual void CreateAsyncMacL(CAsyncMac*& aMac,
+								const TUid aAlgorithmUid,
+								const CKey& aKey,
+								const CCryptoParams* aAlgorithmParams) = 0;
+		
+		/**
+		 * Create a CHash instance
+		 * 
+		 * @param 	aHash The pointer to CHash
+		 * @param 	aAlgorithmUid The specific hash algorithm e.g. MD2, SHA1, MD4
+		 * @param 	aAlgorithmParams The parameters that are specific to a particular 
+		 * 			algorithm. This is for extendibility and will normally be null.
+		 * @leave 	KErrNone if successful; otherwise, a system wide error code.
+		 */
+		virtual void CreateHashL(CHash*& aHash,
+								TUid aAlgorithmUid,
+								const CCryptoParams* aAlgorithmParams) = 0;
+
+		/**
+		 * Create a CAsyncHash instance
+		 * 	
+		 * @param 	aAsyncHash The pointer to CAsyncHash
+		 * @param 	aAlgorithmUid The specific hash algorithm e.g. MD2, SHA1, MD4
+		 * @param 	aAlgorithmParams The parameters that are specific to a particular 
+		 * 			algorithm. This is for extendibility and will normally be null.
+		 * @leave 	KErrNone if successful; otherwise, a system wide error code.
+		 */
+		virtual void CreateAsyncHashL(CAsyncHash*& aAsyncHash, 
+								TUid aAlgorithmUid,
+								const CCryptoParams* aAlgorithmParams) = 0;
+		
+#endif		
+		};
+			
+	MPluginSelector::~MPluginSelector()
+		{
+		}
+	}
+#endif //__CRYPTOAPI_PLUGINSELECTORBASE_H__
+
+