diff -r e1b950c65cb4 -r 837f303aceeb epoc32/include/cryptospi/pluginselectorbase.h --- /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 + + +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__ + +