diff -r 675a964f4eb5 -r 35751d3474b7 crypto/weakcryptospi/inc/spi/plugincharacteristics.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crypto/weakcryptospi/inc/spi/plugincharacteristics.h Thu Sep 10 14:01:51 2009 +0300 @@ -0,0 +1,515 @@ +/* +* 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 characteristic definition +* +*/ + + +/** + @file + @publishedAll + @released +*/ + +#ifndef __CRYPTOAPI_PLUGINCHARACTERISTICS_H__ +#define __CRYPTOAPI_PLUGINCHARACTERISTICS_H__ + +#include +#include +#include + +// Forward declarations +struct TRomLitC16; + + +namespace CryptoSpi + { + const TInt32 KInterfaceType = 0x10283527; + const TInt32 KAlgorithmType = 0x10283528; + const TInt32 KImplementationType = 0x10283529; + const TInt32 KCreatorNameType = 0x1028352A; + const TInt32 KIsFIPSApprovedType = 0x1028352B; + const TInt32 KIsHardwareSupportedType = 0x1028352C; + const TInt32 KMaxConcurrencySupportedType = 0x1028352D; + const TInt32 KLatencyType = 0x1028352E; + const TInt32 KThroughputType = 0x1028352F; + const TInt32 KBlockSizeType = 0x10283530; + const TInt32 KOutputSizeType = 0x10283531; + const TInt32 KSupportedOperationModesType = 0x10283532; + const TInt32 KBlockingModeType = 0x10283533; + const TInt32 KMaximumKeyLengthType = 0x10283534; + const TInt32 KSupportedPaddingModesType = 0x10283535; + const TInt32 KKeySupportModeType = 0x10283536; + const TInt32 KConcurrencyType = 0x10283537; + const TInt32 KExclusiveUseType = 0x10283538; + + /** + The following are the characteristic UIDs which should be used for Rules-based Selector + */ + const TUid KNoneUid = {0x00000000}; + const TUid KInterfaceTypeUid = {KInterfaceType}; + const TUid KAlgorithmTypeUid = {KAlgorithmType}; + const TUid KImplementationTypeUid = {KImplementationType}; + const TUid KCreatorNameTypeUid = {KCreatorNameType}; + const TUid KIsFIPSApprovedTypeUid = {KIsFIPSApprovedType}; + const TUid KIsHardwareSupportedTypeUid = {KIsHardwareSupportedType}; + const TUid KMaxConcurrencySupportedTypeUid = {KMaxConcurrencySupportedType}; + const TUid KLatencyTypeUid = {KLatencyType}; + const TUid KThroughputTypeUid = {KThroughputType}; + const TUid KBlockSizeTypeUid = {KBlockSizeType}; + const TUid KOutputSizeTypeUid = {KOutputSizeType}; + const TUid KSupportedOperationModesTypeUid = {KSupportedOperationModesType}; + const TUid KBlockingModeTypeUid = {KBlockingModeType}; + const TUid KMaximumKeyLengthTypeUid = {KMaximumKeyLengthType}; + const TUid KSupportedPaddingModesTypeUid = {KSupportedPaddingModesType}; + const TUid KKeySupportModeTypeUid = {KKeySupportModeType}; + const TUid KConcurrencyTypeUid = {KConcurrencyType}; + const TUid KExclusiveUseTypeUid = {KExclusiveUseType}; + +#ifdef SYMBIAN_SDP_IPSEC_VOIP_SUPPORT + const TInt32 KMacModeType = 0x2001ED9F; + const TUid KMacModeTypeUid = {KMacModeType}; +#endif + + + typedef TAny TCharacteristics; + + /** + Common characteristics for all plug-in interface types. + + This MUST be the first element of each characteristics "sub-class" to + allow sub-classes to be cast directly to a TCommonCharacteristics. This + is used instead of inheritance because it enables arrays of characteristics + objects to be defined as static constant data. + */ + class TCommonCharacteristics + { + public: + + /** + * @internalComponent + * + * Externalises common characteristics to a write stream. + * + * @param aStream Stream to which the object should be externalised. + */ + void ExternalizeL(RWriteStream& aStream) const; + + public: + /** + Interface UID, e.g hash, symmetric cipher + */ + TInt32 iInterfaceUID; + + /** + Algorithm UID, e.g MD2, 3DES + */ + TInt32 iAlgorithmUID; + + /** + Implementaion UID + */ + TInt32 iImplementationUID; + + /** + Creator name + */ + const TRomLitC16* 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 + */ + const TRomLitC16* iAlgorithmName; + + /** + The Latency + */ + TInt iLatency; + + /** + the Throughput + */ + TInt iThroughput; + }; + + /** + Hash Characteristics + */ + class THashCharacteristics + { + public: + /** + * @internalComponent + * + * Externalises hash characteristics to a write stream. + * + * @param aStream Stream to which the object should be externalised. + **/ + void ExternalizeL(RWriteStream& aStream) const; + + /** + * @deprecated + * + * 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. + */ + IMPORT_C TBool IsOperationModeSupported(TUid aOperationMode) const; + + public: + /** + Common characteristics + */ + TCommonCharacteristics cmn; + + /** + The internal block size of the hash in bits + */ + TUint iBlockSize; + + /** + the output size of the hash in bits + */ + TUint iOutputSize; + + /** + The list of supported Operation modes + */ + const TInt32* iSupportedOperationModes; + + /** + Number of the supported Operation mode + */ + TUint iOperationModeNum; + }; + + /** + Random Characteristics + */ + class TRandomCharacteristics + { + public: + /** + * @internalComponent + * + * Externalises random characteristics to a write stream. + * + * @param aStream Stream to which the object should be externalised. + **/ + void ExternalizeL(RWriteStream& aStream) const; + public: + /** + Common characteristics + */ + TCommonCharacteristics cmn; + + /** + The bit map of blocking non-blocking mode + */ + TUint iBlockingMode; + }; + + + /** + Symmetric Cipher Chararcteristics + */ + class TSymmetricCipherCharacteristics + { + public: + /** + * @internalComponent + * + * Externalises symmetric cipher characteristics to a write stream. + * + * @param aStream Stream to which the object should be externalised. + **/ + void ExternalizeL(RWriteStream& aStream) const; + + /** + Determines whether an operation mode (e.g. CBC) 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. + */ + IMPORT_C TBool IsOperationModeSupported(TUid aOperationMode) const; + + /** + 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. + */ + IMPORT_C TBool IsPaddingModeSupported(TUid aPaddingMode) const; + + public: + /** + Common characteristics + */ + TCommonCharacteristics cmn; + + /** + The maximum key length in bits + */ + TUint iMaximumKeyLength; + + /** + The block size of the cipher in bits + */ + TUint iBlockSize; + + /** + The list of supported padding modes + */ + const TInt32* iSupportedPaddingModes; + + /** + Number of the supported padding mode + */ + TUint iPaddingModeNum; + + /** + The list of supported Operation modes + */ + const TInt32* iSupportedOperationModes; + + /** + Number of the supported Operation mode + */ + TUint iOperationModeNum; + + /** + The supported key mode bit map. e.g. extern key, internal key or both + */ + TInt iKeySupportMode; + }; + + /** + Asymmetric Cipher Characteristics + */ + class TAsymmetricCipherCharacteristics + { + public: + /** + * @internalComponent + * + * Externalises asymmetric cipher characteristics to a write stream. + * + * @param aStream Stream to which the object should be externalised. + **/ + void ExternalizeL(RWriteStream& aStream) const; + + /** + 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. + */ + IMPORT_C TBool IsPaddingModeSupported(TUid aPaddingMode) const; + + public: + /** + Common characteristics + */ + TCommonCharacteristics cmn; + /** + The maximum key length in bits + */ + TUint iMaximumKeyLength; + + /** + The list of supported padding modes + */ + const TInt32* iSupportedPaddingModes; + + /** + Number of the supported padding mode + */ + TInt iPaddingModeNum; + + /** + The supported key mode bit map. e.g. extern key, internal key or both + */ + TInt iKeySupportMode; + }; + + /** + Signature Characteristics + */ + class TAsymmetricSignatureCharacteristics + { + public: + /** + * @internalComponent + * + * Externalises signature characteristics to a write stream. + * + * @param aStream Stream to which the object should be externalised. + **/ + void ExternalizeL(RWriteStream& aStream) const; + + /** + 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. + */ + IMPORT_C TBool IsPaddingModeSupported(TUid aPaddingMode) const; + + public: + /** + Common characteristics + */ + TCommonCharacteristics cmn; + + /** + The maximum key length in bits + */ + TUint iMaximumKeyLength; + + /** + The list of supported padding modes + */ + const TInt32* iSupportedPaddingModes; + + /** + Number of the supported padding mode + */ + TInt iPaddingModeNum; + + /** + The supported key mode bit map. e.g. extern key, internal key or both + */ + TInt iKeySupportMode; + }; + + + /** + Key Agreement Characteristics + */ + class TKeyAgreementCharacteristics + { + public: + /** + * @internalComponent + * + * Externalises key agreement characteristics to a write stream. + * + * @param aStream Stream to which the object should be externalised. + **/ + void ExternalizeL(RWriteStream& aStream) const; + + public: + /** + Common characteristics + */ + TCommonCharacteristics cmn; + }; + + /** + Asymmetric Keypair Generator Characteristics + */ + class TAsymmetricKeypairGeneratorCharacteristics + { + public: + /** + * @internalComponent + * + * Externalises key pair generator characteristics to a write stream. + * + * @param aStream Stream to which the object should be externalised. + **/ + void ExternalizeL(RWriteStream& aStream) const; + + public: + /** + Common characteristics + */ + TCommonCharacteristics cmn; + + /** + The maximum key length that may be generarted in bits + */ + TUint iMaximumKeyLength; + }; + +#ifdef SYMBIAN_SDP_IPSEC_VOIP_SUPPORT + /** + * Mac Characteristics + */ + class TMacCharacteristics + { + public: + /** + * @internalComponent + * + * Externalises hash characteristics to a write stream. + * + * @param aStream Stream to which the object should be externalised. + */ + void ExternalizeL(RWriteStream& aStream) const; + + public: + + /** + * Common Characteristics + */ + TCommonCharacteristics iMacChar; + + /** + * Mac Mode Type UID will be used to select the plug-in implementations. + * The mode can be either hash or symmetric cipher based. + */ + TInt32 iMacMode; + + /** + * The following pointers are mutually exclusive in their usage and anytime + * only one will be initialised depending upon the Mac mode type the plug-in + * supports, those not supported will be NULL. + */ + + /** + * Initialised if 'iMacMode' is Hash based otherwise will be NULL. + */ + const THashCharacteristics* iHashAlgorithmChar; + /** + * Initialised if 'iMacMode' is Symmetric Cipher based otherwise will be NULL. + */ + const TSymmetricCipherCharacteristics* iCipherAlgorithmChar; + }; +#endif + } +#endif //__CRYPTOAPI_PLUGINCHARACTERISTICS_H__