diff -r 675a964f4eb5 -r 35751d3474b7 crypto/weakcryptospi/inc/spi/cryptocharacteristics.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crypto/weakcryptospi/inc/spi/cryptocharacteristics.h Thu Sep 10 14:01:51 2009 +0300 @@ -0,0 +1,704 @@ +/* +* Copyright (c) 2007-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: +* crypto characteristics +* +*/ + + +/** + @file + @publishedAll + @released +*/ + +#ifndef __CRYPTOCHARACTERISTICS_H__ +#define __CRYPTOCHARACTERISTICS_H__ + +#include +#include +#include +#include + + +namespace CryptoSpi + { + + /** + The class holds the common characteristics of an interface. + which is used for internalization. + */ + NONSHARABLE_CLASS(CCharacteristics) : public CBase + { + public: + /** + Destructor + */ + virtual ~CCharacteristics(); + + /** + Internalize this object from the supplied stream. + + @param aStream Stream to read CCharacteristics from. + */ + virtual void InternalizeL(RReadStream& aStream); + + protected: + /** + * @internalComponent + * + * Constructor + */ + CCharacteristics(); + + public: + /** + Interface UID, e.g hash, symmetric cipher + */ + TInt32 iInterfaceUid; + + /** + Algorithm UID, e.g MD2, 3DES + */ + TInt32 iAlgorithmUid; + + /** + Implementaion UID + */ + TInt32 iImplementationUid; + + /** + Creator name + */ + RBuf iCreatorName; + + /** + whether the implementation is FIPS compliant + */ + TBool iIsFIPSApproved; + + /** + whether the implementation is a hardware one + */ + TBool iIsHardwareSupported; + + /** + the Maximum concurrent operation supported + */ + TUint iMaxConcurrencySupported; + + /** + the Algorithm Name + */ + RBuf iAlgorithmName; + + /** + The Latency + */ + TInt iLatency; + + /** + the Throughput + */ + TInt iThroughput; + }; + + /** + The class holds the hash characteristics. + which is used for internalization. + */ + NONSHARABLE_CLASS(CHashCharacteristics) : public CCharacteristics + { + public: + /** + @internalComponent + + Create a new instance of CHashCharacteristics. + + @return the pointer of the hash characteristic + */ + static CHashCharacteristics* NewL(); + + /** + @internalComponent + + Create a new instance of CHashCharacteristics, + Leave it on the cleanup stack. + + @return the pointer of the hash characteristic + */ + static CHashCharacteristics* NewLC(); + + /** + Destructor + */ + virtual ~CHashCharacteristics(); + + /** + Internalize this object from the supplied stream. + + @param aStream Stream to read CHashCharacteristics from. + */ + virtual void InternalizeL(RReadStream& aStream); + + /** + * @internalComponent + * + * Determines whether an operation mode (e.g. HMAC) is supported by the plug-in + * by searching through iSupportedOperationModes for the UID value corresponding + * to the aOperationMode parameter. + * @param aOperationMode The UID of the operation mode to test + * @return ETrue if the operation mode is supported; otherwise, EFalse is returned. + */ + TBool IsOperationModeSupported(TUid aOperationMode) const; + + private: + /** + Constructor + */ + CHashCharacteristics(); + public: + /** + The internal block size of the hash in bits + */ + TUint iBlockSize; + + /** + the output size of the hash in bytes + */ + TUint iOutputSize; + + /** + The list of supported Operation modes + */ + RArray iSupportedOperationModes; + }; + + +#ifdef SYMBIAN_SDP_IPSEC_VOIP_SUPPORT + + /** + * The class holds MAC characteristics which is used for internalization + * in CryptoSpi framework. + */ + NONSHARABLE_CLASS(CMacCharacteristics) : public CCharacteristics + { + public: + /** + * @internalComponent + * + * Create a new instance of CMacCharacteristics. + * + * @return the pointer of the Mac characteristic + */ + static CMacCharacteristics* NewL(); + + /** + * @internalComponent + * + * Create a new instance of CMacCharacteristics, Leave it on the cleanup stack. + * + * @return the pointer of the Mac characteristic + */ + static CMacCharacteristics* NewLC(); + + /** + * Destructor + */ + virtual ~CMacCharacteristics(); + + /** + * Internalize this object from the supplied stream. + * + * @param aStream Stream to read CMacCharacteristics from. + */ + virtual void InternalizeL(RReadStream& aStream); + + private: + /** + * Constructor + */ + CMacCharacteristics(); + + public: + /** + * The Mac mode : Hash based, Cipher based etc. + */ + TInt32 iMacMode; + + /** + * Characteristics of the underlying MAC algorithm + */ + CCharacteristics* iAlgorithmChar; + }; + +#endif + + /** + The class holds the random characteristics. + which is used for internalization. + */ + NONSHARABLE_CLASS(CRandomCharacteristics) : public CCharacteristics + { + public: + /** + @internalComponent + + Create a new instance of CRandomCharacteristics. + + @return the pointer of the random characteristic + */ + static CRandomCharacteristics* NewL(); + + /** + @internalComponent + + Create a new instance of CRandomCharacteristics, + and leave it on the cleanup stack. + + @return the pointer of the random characteristic + */ + static CRandomCharacteristics* NewLC(); + + /** + Destructor + */ + virtual ~CRandomCharacteristics(); + + /** + Internalize this object from the supplied stream. + + @param aStream Stream to read CRandomCharacteristics from. + */ + virtual void InternalizeL(RReadStream& aStream); + + private: + /** + Constructor + */ + CRandomCharacteristics(); + + public: + /** + The bit map of blocking non-blocking mode + */ + TUint iBlockingMode; + }; + + /** + The class holds the symmetric cipher characteristics. + which is used for internalization. + */ + NONSHARABLE_CLASS(CSymmetricCipherCharacteristics) : public CCharacteristics + { + public: + /** + @internalComponent + + Create a new instance of CSymmetricCipherCharacteristics. + + @return the pointer of the symmetric cipher characteristic + */ + static CSymmetricCipherCharacteristics* NewL(); + + /** + @internalComponent + + Create a new instance of CSymmetricCipherCharacteristics. + Leave it on the cleanup stack. + + @return the pointer of the symmetric cipher characteristic + */ + static CSymmetricCipherCharacteristics* NewLC(); + + /** + Destructor + */ + virtual ~CSymmetricCipherCharacteristics(); + + /** + Internalize this object from the supplied stream. + + @param aStream Stream to read CSymmetricCipherCharacteristics from. + */ + virtual void InternalizeL(RReadStream& aStream); + + /** + @internalComponent + + Determines whether a padding mode (e.g. PKCS7) is supported by the plug-in + by searching through iSupportedPaddingModes for the UID value corresponding + to the aPaddingMode parameter. + @param aPaddingMode The UID of the padding mode to test. + @return ETrue if the padding mode is supported; otherwise, EFalse is returned. + */ + TBool IsPaddingModeSupported(TUid aPaddingMode) const; + + /** + @internalComponent + + Determines whether an operation mode (e.g. HMAC) is supported by the plug-in + by searching through iSupportedOperationModes for the UID value corresponding + to the aOperationMode parameter. + @param aOperationMode The UID of the operation mode to test + @return ETrue if the operation mode is supported; otherwise, EFalse is returned. + */ + TBool IsOperationModeSupported(TUid aOperationMode) const; + + private: + /** + Constructor + */ + CSymmetricCipherCharacteristics(); + + public: + /** + The maximum key length in bits + */ + TUint iMaximumKeyLength; + + /** + The block size of the cipher in bytes + */ + TUint iBlockSize; + + /** + The list of supported padding modes + */ + RArray iSupportedPaddingModes; + + /** + The list of supported Operation modes + */ + RArray iSupportedOperationModes; + + /** + The supported key mode bit map. e.g. extern key, internal key or both + */ + TInt iKeySupportMode; + }; + + /** + The class holds the asymmetric cipher characteristics. + which is used for internalization. + */ + NONSHARABLE_CLASS(CAsymmetricCipherCharacteristics) : public CCharacteristics + { + public: + /** + @internalComponent + + Create a new instance of CAsymmetricCipherCharacteristics. + + @return the pointer of the asymmetric cipher characteristic + */ + static CAsymmetricCipherCharacteristics* NewL(); + + /** + @internalComponent + + Create a new instance of CAsymmetricCipherCharacteristics. + Leave it on the cleanup stack. + + @return the pointer of the asymmetric cipher characteristic + */ + static CAsymmetricCipherCharacteristics* NewLC(); + + /** + Destructor + */ + virtual ~CAsymmetricCipherCharacteristics(); + + /** + Internalize this object from the supplied stream. + + @param aStream Stream to read CAsymmetricCipherCharacteristics from. + */ + virtual void InternalizeL(RReadStream& aStream); + + /** + @internalComponent + + Determines whether a padding mode (e.g. PKCS7) is supported by the plug-in + by searching through iSupportedPaddingModes for the UID value corresponding + to the aPaddingMode parameter. + @param aPaddingMode The UID of the padding mode to test. + @return ETrue if the padding mode is supported; otherwise, EFalse is returned. + */ + TBool IsPaddingModeSupported(TUid aPaddingMode) const; + + private: + /** + Constructor + */ + CAsymmetricCipherCharacteristics(); + + public: + /** + The maximum key length in bits + */ + TUint iMaximumKeyLength; + + /** + The list of supported padding modes + */ + RArray iSupportedPaddingModes; + + /** + The supported key mode bit map. e.g. extern key, internal key or both + */ + TInt iKeySupportMode; + }; + + + /** + The class holds the signature characteristics. + which is used for internalization. + */ + NONSHARABLE_CLASS(CAsymmetricSignatureCharacteristics) : public CCharacteristics + { + public: + /** + @internalComponent + + Create a new instance of CAsymmetricSignatureCharacteristics. + + @return the pointer of the asymmetric signature characteristic + */ + static CAsymmetricSignatureCharacteristics* NewL(); + + /** + @internalComponent + + Create a new instance of CAsymmetricSignatureCharacteristics. + Leave it on the cleanup stack. + + @return the pointer of the asymmetric signature characteristic + */ + static CAsymmetricSignatureCharacteristics* NewLC(); + + /** + Destructor + */ + virtual ~CAsymmetricSignatureCharacteristics(); + + /** + Internalize this object from the supplied stream. + + @param aStream Stream to read CAsymmetricSignatureCharacteristics from. + */ + virtual void InternalizeL(RReadStream& aStream); + + /** + @internalComponent + + Determines whether a padding mode (e.g. PKCS7) is supported by the plug-in + by searching through iSupportedPaddingModes for the UID value corresponding + to the aPaddingMode parameter. + @param aPaddingMode The UID of the padding mode to test. + @return ETrue if the padding mode is supported; otherwise, EFalse is returned. + */ + TBool IsPaddingModeSupported(TUid aPaddingMode) const; + + private: + /** + Constructor + */ + CAsymmetricSignatureCharacteristics(); + + public: + /** + The maximum key length in bits + */ + TUint iMaximumKeyLength; + + /** + The list of supported padding modes + */ + RArray iSupportedPaddingModes; + + /** + The supported key mode bit map. e.g. extern key, internal key or both + */ + TInt iKeySupportMode; + }; + + /** + The class holds the key agreement characteristics. + which is used for internalization. + */ + NONSHARABLE_CLASS(CKeyAgreementCharacteristics) : public CCharacteristics + { + public: + /** + @internalComponent + + Create a new instance of CKeyAgreementCharacteristics. + + @return the pointer of the key agreement characteristic + */ + static CKeyAgreementCharacteristics* NewL(); + + /** + @internalComponent + + Create a new instance of CKeyAgreementCharacteristics. + Leave it on the cleanup stack. + + @return the pointer of the key agreement characteristic + */ + static CKeyAgreementCharacteristics* NewLC(); + + /** + Destructor + */ + virtual ~CKeyAgreementCharacteristics(); + + /** + Internalize this object from the supplied stream. + + @param aStream Stream to read CKeyAgreementCharacteristics from. + */ + virtual void InternalizeL(RReadStream& aStream); + + private: + /** + Constructor + */ + CKeyAgreementCharacteristics(); + }; + + /** + The class holds the key pair generator characteristics. + which is used for internalization. + */ + NONSHARABLE_CLASS(CKeypairGeneratorCharacteristics) : public CCharacteristics + { + public: + /** + @internalComponent + + Create a new instance of CKeypairGeneratorCharacteristics. + + @return the pointer of the keypair generator characteristic + */ + static CKeypairGeneratorCharacteristics* NewL(); + + /** + @internalComponent + + Create a new instance of CKeypairGeneratorCharacteristics. + Leave it on the cleanup stack. + + @return the pointer of the keypair generator characteristic + */ + static CKeypairGeneratorCharacteristics* NewLC(); + + /** + Destructor + */ + virtual ~CKeypairGeneratorCharacteristics(); + + /** + Internalize this object from the supplied stream. + + @param aStream Stream to read CKeyAgreementCharacteristics from. + */ + virtual void InternalizeL(RReadStream& aStream); + + private: + /** + Constructor + */ + CKeypairGeneratorCharacteristics(); + public: + /** + The maximum key length in bits + */ + TUint iMaximumKeyLength; + }; + + /** + The class holds characteristics and dll index. + which is used for internalization. + */ + NONSHARABLE_CLASS(CCharacteristicsAndPluginName) : public CBase + { + public: + /** + @internalComponent + + Create a new instance of CKeypairGeneratorCharacteristics. + + @param aInterface the interface uid + @return the pointer of the keypair generator characteristic + */ + static CCharacteristicsAndPluginName* NewL(TInt32 aInterface); + + /** + @internalComponent + + Create a new instance of CKeypairGeneratorCharacteristics. + Leave it on the cleanup stack. + + @param aInterface the interface uid + @return the pointer of the keypair generator characteristic + */ + static CCharacteristicsAndPluginName* NewLC(TInt32 aInterface); + + /** + Destructor + */ + virtual ~CCharacteristicsAndPluginName(); + + /** + @internalComponent + + Internalize this object from the supplied stream. + + @param aStream Stream to read CCharacteristicsAndPluginName from. + */ + void InternalizeL(RReadStream& aStream); + + protected: + /** + * @internalComponent + * + * Constructors + */ + CCharacteristicsAndPluginName(); + /** @internalComponent */ + void ConstructL(TInt32 aInterface); + + public: + /** + The characteristic of the crypto implementation + */ + CCharacteristics* iCharacteristic; + + /** + The extended characteristic of the crypto implementation + */ + CExtendedCharacteristics* iExtendedCharacteristic; + + /** + The name of the plugin dll which contains this implementation + */ + TFileName iDllName; + }; + } +#endif //__CRYPTOCHARACTERISTICS_H__ + + +