cryptoplugins/cryptospiplugins/test/h4drv/crypto_h4/cryptodriver.h
changeset 8 35751d3474b7
--- /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 <e32cmn.h>
+#include <e32ver.h>
+#ifndef __KERNEL_MODE__
+#include <e32std.h>
+#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<TConfig> 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<THwVersions> 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<<ENumRequests)-1
+        };
+
+    /**
+    Structure for holding driver configuration data
+    */
+    class TAesConfig
+        {
+    public:
+		TBool iEncrypt;
+		TChainingMode iMode;
+		const TDesC8 *iKey;
+		const TDesC8 *iIV;
+        };
+    typedef TPckgBuf<TAesConfig> 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