diff -r 675a964f4eb5 -r 35751d3474b7 cryptoplugins/cryptospiplugins/test/h4drv/crypto_h4/cryptodriver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cryptoplugins/cryptospiplugins/test/h4drv/crypto_h4/cryptodriver.h Thu Sep 10 14:01:51 2009 +0300 @@ -0,0 +1,217 @@ +/* +* 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: +* +*/ + + +/** + @file + @internalComponent + @released +*/ +#ifndef CRYPTODRIVER_H +#define CRYPTODRIVER_H + +#include +#include +#ifndef __KERNEL_MODE__ +#include +#endif + +/** +User interface for crypto hw +*/ +class RCryptoDriver : public RBusLogicalChannel + { +public: + /** + Structure for holding driver capabilities information + */ + class TCaps + { + public: + TVersion iVersion; + }; + + /** + Structure for holding driver configuration data + */ + class TConfig + { + public: + TInt iFakeDriverSetting; + }; + /** + Typedef used for passing TConfig structure to GetConfig and SetConfig APIs + */ + typedef TPckgBuf TConfigBuf; + + /** + Structure for holding h/w version information + */ + class THwVersions + { + public: + TUint32 iRngHwVersion; ///< RNG h/w version number + TUint32 iDes3DesHwVersion; ///< 3DES h/w version number + TUint32 iSha1Md5HwVersion; ///< SHA1 h/w version number + TUint32 iAesHwVersion; ///< AES h/w version number + TUint32 iPkaHwVersion; ///< PKA h/w version number + }; + typedef TPckgBuf THwVersionsBuf; + +public: + IMPORT_C TInt Open(); + IMPORT_C TInt GetHwVersions(THwVersionsBuf& aHwVersionsBuf); + + IMPORT_C TInt GetConfig(TConfigBuf& aConfig); + IMPORT_C TInt SetConfig(const TConfigBuf& aConfig); + + inline static const TDesC& Name(); + inline static TVersion VersionRequired(); + + /** + Fill buffer with random data + Only one "random" request may be pending at any time. + + @param aStatus The request to be signalled when the data has been received. + The result value will be set to KErrNone on success; + or set to one of the system wide error codes when an error occurs. + + @param aData Fills the descriptor up to its current length with + random data. Any existing contents are lost. + */ + IMPORT_C void Random(TRequestStatus& aStatus, TDes8& aDestination); + /** + Causes the current Random request to cancel synchronously. + */ + IMPORT_C void RandomCancel(); + + enum TChainingMode {EEcbMode, ECbcMode, ECntrMode}; + /** + @param aEncrypt ETrue for encryption + @param aMode See TChainingMode + @param aKey Must be one of the following lengths - 128, 192 or 256 bits (16, 24 or 32 bytes). + @param aIV Initialisation Vector, Length must be, 0 for ECB mode, or 16 bytes (all other mdoes) + */ + IMPORT_C TInt SetAesConfig(TBool aEncrypt, TChainingMode aMode, const TDesC8& aKey, const TDesC8& aIV); + + /** + Any length of data may be written, but the h/w will only + process the data in multiples of 16 bytes. Any remainder will + be buffered pending future writes. + + Padding is NOT done by this function. + + Output + + @param aStatus + @param aBuffer + */ + IMPORT_C void AesWrite(TRequestStatus& aStatus, TDesC8& aBuffer); + + /** + Causes the current "to hw" requests to cancel synchronously. + */ + IMPORT_C void AesCancelWrite(); + + /** + The destination buffer is overwritten. This call will block + until the specified number of bytes have been read (the max + length of aBuffer). + + The length is not required to be a multiple of the block size + (16 bytes), but note that written data is only processed in + multiples of the block size. + + Data is appended to the supplied buffer. + + @param aStatus + @param aBuffer + @param aLength + */ + IMPORT_C void AesRead(TRequestStatus& aStatus, TDes8& aBuffer, TUint32 aLenth); + + /** + Causes the current "from hw" requests to cancel synchronously. + */ + IMPORT_C void AesCancelRead(); + + +private: + /** + Enumeration of Control messages. + */ + enum TControl + { + EGetHwVersions, + EAesSetConfig, + EGetConfig, + ESetConfig + }; + + /** + Enumeration of Request messages. + */ + enum TRequest + { + ERandom, + EAesWrite, + EAesRead, + ENumRequests, + EAllRequests = (1< TAesConfigBuf; + + // Kernel side LDD channel is a friend + friend class DCryptoLddChannel; + friend class DLddChanAes; + }; + + +/** + Returns the driver's name +*/ +inline const TDesC& RCryptoDriver::Name() + { + _LIT(KDriver1Name,"crypto"); + return KDriver1Name; + } + +/** + Returns the version number of the driver +*/ +inline TVersion RCryptoDriver::VersionRequired() + { + const TInt KMajorVersionNumber=1; + const TInt KMinorVersionNumber=0; + const TInt KBuildVersionNumber=KE32BuildVersionNumber; + return TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber); + } + + +#endif