williamr@4: /* williamr@4: * Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@4: * All rights reserved. williamr@4: * This component and the accompanying materials are made available williamr@4: * under the terms of the License "Eclipse Public License v1.0" williamr@4: * which accompanies this distribution, and is available williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: * williamr@4: * Initial Contributors: williamr@4: * Nokia Corporation - initial contribution. williamr@4: * williamr@4: * Contributors: williamr@4: * williamr@4: * Description: williamr@4: * crypto characteristics williamr@4: * williamr@4: */ williamr@4: williamr@4: williamr@4: /** williamr@4: @file williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: williamr@4: #ifndef __CRYPTOCHARACTERISTICS_H__ williamr@4: #define __CRYPTOCHARACTERISTICS_H__ williamr@4: williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: williamr@4: williamr@4: namespace CryptoSpi williamr@4: { williamr@4: williamr@4: /** williamr@4: The class holds the common characteristics of an interface. williamr@4: which is used for internalization. williamr@4: */ williamr@4: NONSHARABLE_CLASS(CCharacteristics) : public CBase williamr@4: { williamr@4: public: williamr@4: /** williamr@4: Destructor williamr@4: */ williamr@4: virtual ~CCharacteristics(); williamr@4: williamr@4: /** williamr@4: Internalize this object from the supplied stream. williamr@4: williamr@4: @param aStream Stream to read CCharacteristics from. williamr@4: */ williamr@4: virtual void InternalizeL(RReadStream& aStream); williamr@4: williamr@4: protected: williamr@4: /** williamr@4: * @internalComponent williamr@4: * williamr@4: * Constructor williamr@4: */ williamr@4: CCharacteristics(); williamr@4: williamr@4: public: williamr@4: /** williamr@4: Interface UID, e.g hash, symmetric cipher williamr@4: */ williamr@4: TInt32 iInterfaceUid; williamr@4: williamr@4: /** williamr@4: Algorithm UID, e.g MD2, 3DES williamr@4: */ williamr@4: TInt32 iAlgorithmUid; williamr@4: williamr@4: /** williamr@4: Implementaion UID williamr@4: */ williamr@4: TInt32 iImplementationUid; williamr@4: williamr@4: /** williamr@4: Creator name williamr@4: */ williamr@4: RBuf iCreatorName; williamr@4: williamr@4: /** williamr@4: whether the implementation is FIPS compliant williamr@4: */ williamr@4: TBool iIsFIPSApproved; williamr@4: williamr@4: /** williamr@4: whether the implementation is a hardware one williamr@4: */ williamr@4: TBool iIsHardwareSupported; williamr@4: williamr@4: /** williamr@4: the Maximum concurrent operation supported williamr@4: */ williamr@4: TUint iMaxConcurrencySupported; williamr@4: williamr@4: /** williamr@4: the Algorithm Name williamr@4: */ williamr@4: RBuf iAlgorithmName; williamr@4: williamr@4: /** williamr@4: The Latency williamr@4: */ williamr@4: TInt iLatency; williamr@4: williamr@4: /** williamr@4: the Throughput williamr@4: */ williamr@4: TInt iThroughput; williamr@4: }; williamr@4: williamr@4: /** williamr@4: The class holds the hash characteristics. williamr@4: which is used for internalization. williamr@4: */ williamr@4: NONSHARABLE_CLASS(CHashCharacteristics) : public CCharacteristics williamr@4: { williamr@4: public: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Create a new instance of CHashCharacteristics. williamr@4: williamr@4: @return the pointer of the hash characteristic williamr@4: */ williamr@4: static CHashCharacteristics* NewL(); williamr@4: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Create a new instance of CHashCharacteristics, williamr@4: Leave it on the cleanup stack. williamr@4: williamr@4: @return the pointer of the hash characteristic williamr@4: */ williamr@4: static CHashCharacteristics* NewLC(); williamr@4: williamr@4: /** williamr@4: Destructor williamr@4: */ williamr@4: virtual ~CHashCharacteristics(); williamr@4: williamr@4: /** williamr@4: Internalize this object from the supplied stream. williamr@4: williamr@4: @param aStream Stream to read CHashCharacteristics from. williamr@4: */ williamr@4: virtual void InternalizeL(RReadStream& aStream); williamr@4: williamr@4: /** williamr@4: * @internalComponent williamr@4: * williamr@4: * Determines whether an operation mode (e.g. HMAC) is supported by the plug-in williamr@4: * by searching through iSupportedOperationModes for the UID value corresponding williamr@4: * to the aOperationMode parameter. williamr@4: * @param aOperationMode The UID of the operation mode to test williamr@4: * @return ETrue if the operation mode is supported; otherwise, EFalse is returned. williamr@4: */ williamr@4: TBool IsOperationModeSupported(TUid aOperationMode) const; williamr@4: williamr@4: private: williamr@4: /** williamr@4: Constructor williamr@4: */ williamr@4: CHashCharacteristics(); williamr@4: public: williamr@4: /** williamr@4: The internal block size of the hash in bits williamr@4: */ williamr@4: TUint iBlockSize; williamr@4: williamr@4: /** williamr@4: the output size of the hash in bytes williamr@4: */ williamr@4: TUint iOutputSize; williamr@4: williamr@4: /** williamr@4: The list of supported Operation modes williamr@4: */ williamr@4: RArray iSupportedOperationModes; williamr@4: }; williamr@4: williamr@4: williamr@4: #ifdef SYMBIAN_SDP_IPSEC_VOIP_SUPPORT williamr@4: williamr@4: /** williamr@4: * The class holds MAC characteristics which is used for internalization williamr@4: * in CryptoSpi framework. williamr@4: */ williamr@4: NONSHARABLE_CLASS(CMacCharacteristics) : public CCharacteristics williamr@4: { williamr@4: public: williamr@4: /** williamr@4: * @internalComponent williamr@4: * williamr@4: * Create a new instance of CMacCharacteristics. williamr@4: * williamr@4: * @return the pointer of the Mac characteristic williamr@4: */ williamr@4: static CMacCharacteristics* NewL(); williamr@4: williamr@4: /** williamr@4: * @internalComponent williamr@4: * williamr@4: * Create a new instance of CMacCharacteristics, Leave it on the cleanup stack. williamr@4: * williamr@4: * @return the pointer of the Mac characteristic williamr@4: */ williamr@4: static CMacCharacteristics* NewLC(); williamr@4: williamr@4: /** williamr@4: * Destructor williamr@4: */ williamr@4: virtual ~CMacCharacteristics(); williamr@4: williamr@4: /** williamr@4: * Internalize this object from the supplied stream. williamr@4: * williamr@4: * @param aStream Stream to read CMacCharacteristics from. williamr@4: */ williamr@4: virtual void InternalizeL(RReadStream& aStream); williamr@4: williamr@4: private: williamr@4: /** williamr@4: * Constructor williamr@4: */ williamr@4: CMacCharacteristics(); williamr@4: williamr@4: public: williamr@4: /** williamr@4: * The Mac mode : Hash based, Cipher based etc. williamr@4: */ williamr@4: TInt32 iMacMode; williamr@4: williamr@4: /** williamr@4: * Characteristics of the underlying MAC algorithm williamr@4: */ williamr@4: CCharacteristics* iAlgorithmChar; williamr@4: }; williamr@4: williamr@4: #endif williamr@4: williamr@4: /** williamr@4: The class holds the random characteristics. williamr@4: which is used for internalization. williamr@4: */ williamr@4: NONSHARABLE_CLASS(CRandomCharacteristics) : public CCharacteristics williamr@4: { williamr@4: public: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Create a new instance of CRandomCharacteristics. williamr@4: williamr@4: @return the pointer of the random characteristic williamr@4: */ williamr@4: static CRandomCharacteristics* NewL(); williamr@4: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Create a new instance of CRandomCharacteristics, williamr@4: and leave it on the cleanup stack. williamr@4: williamr@4: @return the pointer of the random characteristic williamr@4: */ williamr@4: static CRandomCharacteristics* NewLC(); williamr@4: williamr@4: /** williamr@4: Destructor williamr@4: */ williamr@4: virtual ~CRandomCharacteristics(); williamr@4: williamr@4: /** williamr@4: Internalize this object from the supplied stream. williamr@4: williamr@4: @param aStream Stream to read CRandomCharacteristics from. williamr@4: */ williamr@4: virtual void InternalizeL(RReadStream& aStream); williamr@4: williamr@4: private: williamr@4: /** williamr@4: Constructor williamr@4: */ williamr@4: CRandomCharacteristics(); williamr@4: williamr@4: public: williamr@4: /** williamr@4: The bit map of blocking non-blocking mode williamr@4: */ williamr@4: TUint iBlockingMode; williamr@4: }; williamr@4: williamr@4: /** williamr@4: The class holds the symmetric cipher characteristics. williamr@4: which is used for internalization. williamr@4: */ williamr@4: NONSHARABLE_CLASS(CSymmetricCipherCharacteristics) : public CCharacteristics williamr@4: { williamr@4: public: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Create a new instance of CSymmetricCipherCharacteristics. williamr@4: williamr@4: @return the pointer of the symmetric cipher characteristic williamr@4: */ williamr@4: static CSymmetricCipherCharacteristics* NewL(); williamr@4: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Create a new instance of CSymmetricCipherCharacteristics. williamr@4: Leave it on the cleanup stack. williamr@4: williamr@4: @return the pointer of the symmetric cipher characteristic williamr@4: */ williamr@4: static CSymmetricCipherCharacteristics* NewLC(); williamr@4: williamr@4: /** williamr@4: Destructor williamr@4: */ williamr@4: virtual ~CSymmetricCipherCharacteristics(); williamr@4: williamr@4: /** williamr@4: Internalize this object from the supplied stream. williamr@4: williamr@4: @param aStream Stream to read CSymmetricCipherCharacteristics from. williamr@4: */ williamr@4: virtual void InternalizeL(RReadStream& aStream); williamr@4: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Determines whether a padding mode (e.g. PKCS7) is supported by the plug-in williamr@4: by searching through iSupportedPaddingModes for the UID value corresponding williamr@4: to the aPaddingMode parameter. williamr@4: @param aPaddingMode The UID of the padding mode to test. williamr@4: @return ETrue if the padding mode is supported; otherwise, EFalse is returned. williamr@4: */ williamr@4: TBool IsPaddingModeSupported(TUid aPaddingMode) const; williamr@4: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Determines whether an operation mode (e.g. HMAC) is supported by the plug-in williamr@4: by searching through iSupportedOperationModes for the UID value corresponding williamr@4: to the aOperationMode parameter. williamr@4: @param aOperationMode The UID of the operation mode to test williamr@4: @return ETrue if the operation mode is supported; otherwise, EFalse is returned. williamr@4: */ williamr@4: TBool IsOperationModeSupported(TUid aOperationMode) const; williamr@4: williamr@4: private: williamr@4: /** williamr@4: Constructor williamr@4: */ williamr@4: CSymmetricCipherCharacteristics(); williamr@4: williamr@4: public: williamr@4: /** williamr@4: The maximum key length in bits williamr@4: */ williamr@4: TUint iMaximumKeyLength; williamr@4: williamr@4: /** williamr@4: The block size of the cipher in bytes williamr@4: */ williamr@4: TUint iBlockSize; williamr@4: williamr@4: /** williamr@4: The list of supported padding modes williamr@4: */ williamr@4: RArray iSupportedPaddingModes; williamr@4: williamr@4: /** williamr@4: The list of supported Operation modes williamr@4: */ williamr@4: RArray iSupportedOperationModes; williamr@4: williamr@4: /** williamr@4: The supported key mode bit map. e.g. extern key, internal key or both williamr@4: */ williamr@4: TInt iKeySupportMode; williamr@4: }; williamr@4: williamr@4: /** williamr@4: The class holds the asymmetric cipher characteristics. williamr@4: which is used for internalization. williamr@4: */ williamr@4: NONSHARABLE_CLASS(CAsymmetricCipherCharacteristics) : public CCharacteristics williamr@4: { williamr@4: public: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Create a new instance of CAsymmetricCipherCharacteristics. williamr@4: williamr@4: @return the pointer of the asymmetric cipher characteristic williamr@4: */ williamr@4: static CAsymmetricCipherCharacteristics* NewL(); williamr@4: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Create a new instance of CAsymmetricCipherCharacteristics. williamr@4: Leave it on the cleanup stack. williamr@4: williamr@4: @return the pointer of the asymmetric cipher characteristic williamr@4: */ williamr@4: static CAsymmetricCipherCharacteristics* NewLC(); williamr@4: williamr@4: /** williamr@4: Destructor williamr@4: */ williamr@4: virtual ~CAsymmetricCipherCharacteristics(); williamr@4: williamr@4: /** williamr@4: Internalize this object from the supplied stream. williamr@4: williamr@4: @param aStream Stream to read CAsymmetricCipherCharacteristics from. williamr@4: */ williamr@4: virtual void InternalizeL(RReadStream& aStream); williamr@4: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Determines whether a padding mode (e.g. PKCS7) is supported by the plug-in williamr@4: by searching through iSupportedPaddingModes for the UID value corresponding williamr@4: to the aPaddingMode parameter. williamr@4: @param aPaddingMode The UID of the padding mode to test. williamr@4: @return ETrue if the padding mode is supported; otherwise, EFalse is returned. williamr@4: */ williamr@4: TBool IsPaddingModeSupported(TUid aPaddingMode) const; williamr@4: williamr@4: private: williamr@4: /** williamr@4: Constructor williamr@4: */ williamr@4: CAsymmetricCipherCharacteristics(); williamr@4: williamr@4: public: williamr@4: /** williamr@4: The maximum key length in bits williamr@4: */ williamr@4: TUint iMaximumKeyLength; williamr@4: williamr@4: /** williamr@4: The list of supported padding modes williamr@4: */ williamr@4: RArray iSupportedPaddingModes; williamr@4: williamr@4: /** williamr@4: The supported key mode bit map. e.g. extern key, internal key or both williamr@4: */ williamr@4: TInt iKeySupportMode; williamr@4: }; williamr@4: williamr@4: williamr@4: /** williamr@4: The class holds the signature characteristics. williamr@4: which is used for internalization. williamr@4: */ williamr@4: NONSHARABLE_CLASS(CAsymmetricSignatureCharacteristics) : public CCharacteristics williamr@4: { williamr@4: public: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Create a new instance of CAsymmetricSignatureCharacteristics. williamr@4: williamr@4: @return the pointer of the asymmetric signature characteristic williamr@4: */ williamr@4: static CAsymmetricSignatureCharacteristics* NewL(); williamr@4: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Create a new instance of CAsymmetricSignatureCharacteristics. williamr@4: Leave it on the cleanup stack. williamr@4: williamr@4: @return the pointer of the asymmetric signature characteristic williamr@4: */ williamr@4: static CAsymmetricSignatureCharacteristics* NewLC(); williamr@4: williamr@4: /** williamr@4: Destructor williamr@4: */ williamr@4: virtual ~CAsymmetricSignatureCharacteristics(); williamr@4: williamr@4: /** williamr@4: Internalize this object from the supplied stream. williamr@4: williamr@4: @param aStream Stream to read CAsymmetricSignatureCharacteristics from. williamr@4: */ williamr@4: virtual void InternalizeL(RReadStream& aStream); williamr@4: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Determines whether a padding mode (e.g. PKCS7) is supported by the plug-in williamr@4: by searching through iSupportedPaddingModes for the UID value corresponding williamr@4: to the aPaddingMode parameter. williamr@4: @param aPaddingMode The UID of the padding mode to test. williamr@4: @return ETrue if the padding mode is supported; otherwise, EFalse is returned. williamr@4: */ williamr@4: TBool IsPaddingModeSupported(TUid aPaddingMode) const; williamr@4: williamr@4: private: williamr@4: /** williamr@4: Constructor williamr@4: */ williamr@4: CAsymmetricSignatureCharacteristics(); williamr@4: williamr@4: public: williamr@4: /** williamr@4: The maximum key length in bits williamr@4: */ williamr@4: TUint iMaximumKeyLength; williamr@4: williamr@4: /** williamr@4: The list of supported padding modes williamr@4: */ williamr@4: RArray iSupportedPaddingModes; williamr@4: williamr@4: /** williamr@4: The supported key mode bit map. e.g. extern key, internal key or both williamr@4: */ williamr@4: TInt iKeySupportMode; williamr@4: }; williamr@4: williamr@4: /** williamr@4: The class holds the key agreement characteristics. williamr@4: which is used for internalization. williamr@4: */ williamr@4: NONSHARABLE_CLASS(CKeyAgreementCharacteristics) : public CCharacteristics williamr@4: { williamr@4: public: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Create a new instance of CKeyAgreementCharacteristics. williamr@4: williamr@4: @return the pointer of the key agreement characteristic williamr@4: */ williamr@4: static CKeyAgreementCharacteristics* NewL(); williamr@4: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Create a new instance of CKeyAgreementCharacteristics. williamr@4: Leave it on the cleanup stack. williamr@4: williamr@4: @return the pointer of the key agreement characteristic williamr@4: */ williamr@4: static CKeyAgreementCharacteristics* NewLC(); williamr@4: williamr@4: /** williamr@4: Destructor williamr@4: */ williamr@4: virtual ~CKeyAgreementCharacteristics(); williamr@4: williamr@4: /** williamr@4: Internalize this object from the supplied stream. williamr@4: williamr@4: @param aStream Stream to read CKeyAgreementCharacteristics from. williamr@4: */ williamr@4: virtual void InternalizeL(RReadStream& aStream); williamr@4: williamr@4: private: williamr@4: /** williamr@4: Constructor williamr@4: */ williamr@4: CKeyAgreementCharacteristics(); williamr@4: }; williamr@4: williamr@4: /** williamr@4: The class holds the key pair generator characteristics. williamr@4: which is used for internalization. williamr@4: */ williamr@4: NONSHARABLE_CLASS(CKeypairGeneratorCharacteristics) : public CCharacteristics williamr@4: { williamr@4: public: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Create a new instance of CKeypairGeneratorCharacteristics. williamr@4: williamr@4: @return the pointer of the keypair generator characteristic williamr@4: */ williamr@4: static CKeypairGeneratorCharacteristics* NewL(); williamr@4: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Create a new instance of CKeypairGeneratorCharacteristics. williamr@4: Leave it on the cleanup stack. williamr@4: williamr@4: @return the pointer of the keypair generator characteristic williamr@4: */ williamr@4: static CKeypairGeneratorCharacteristics* NewLC(); williamr@4: williamr@4: /** williamr@4: Destructor williamr@4: */ williamr@4: virtual ~CKeypairGeneratorCharacteristics(); williamr@4: williamr@4: /** williamr@4: Internalize this object from the supplied stream. williamr@4: williamr@4: @param aStream Stream to read CKeyAgreementCharacteristics from. williamr@4: */ williamr@4: virtual void InternalizeL(RReadStream& aStream); williamr@4: williamr@4: private: williamr@4: /** williamr@4: Constructor williamr@4: */ williamr@4: CKeypairGeneratorCharacteristics(); williamr@4: public: williamr@4: /** williamr@4: The maximum key length in bits williamr@4: */ williamr@4: TUint iMaximumKeyLength; williamr@4: }; williamr@4: williamr@4: /** williamr@4: The class holds characteristics and dll index. williamr@4: which is used for internalization. williamr@4: */ williamr@4: NONSHARABLE_CLASS(CCharacteristicsAndPluginName) : public CBase williamr@4: { williamr@4: public: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Create a new instance of CKeypairGeneratorCharacteristics. williamr@4: williamr@4: @param aInterface the interface uid williamr@4: @return the pointer of the keypair generator characteristic williamr@4: */ williamr@4: static CCharacteristicsAndPluginName* NewL(TInt32 aInterface); williamr@4: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Create a new instance of CKeypairGeneratorCharacteristics. williamr@4: Leave it on the cleanup stack. williamr@4: williamr@4: @param aInterface the interface uid williamr@4: @return the pointer of the keypair generator characteristic williamr@4: */ williamr@4: static CCharacteristicsAndPluginName* NewLC(TInt32 aInterface); williamr@4: williamr@4: /** williamr@4: Destructor williamr@4: */ williamr@4: virtual ~CCharacteristicsAndPluginName(); williamr@4: williamr@4: /** williamr@4: @internalComponent williamr@4: williamr@4: Internalize this object from the supplied stream. williamr@4: williamr@4: @param aStream Stream to read CCharacteristicsAndPluginName from. williamr@4: */ williamr@4: void InternalizeL(RReadStream& aStream); williamr@4: williamr@4: protected: williamr@4: /** williamr@4: * @internalComponent williamr@4: * williamr@4: * Constructors williamr@4: */ williamr@4: CCharacteristicsAndPluginName(); williamr@4: /** @internalComponent */ williamr@4: void ConstructL(TInt32 aInterface); williamr@4: williamr@4: public: williamr@4: /** williamr@4: The characteristic of the crypto implementation williamr@4: */ williamr@4: CCharacteristics* iCharacteristic; williamr@4: williamr@4: /** williamr@4: The extended characteristic of the crypto implementation williamr@4: */ williamr@4: CExtendedCharacteristics* iExtendedCharacteristic; williamr@4: williamr@4: /** williamr@4: The name of the plugin dll which contains this implementation williamr@4: */ williamr@4: TFileName iDllName; williamr@4: }; williamr@4: } williamr@4: #endif //__CRYPTOCHARACTERISTICS_H__ williamr@4: williamr@4: williamr@4: