vpnengine/pkiservice/inc/keyoperationprovider.h
changeset 0 33413c0669b9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/pkiservice/inc/keyoperationprovider.h	Thu Dec 17 09:14:51 2009 +0200
@@ -0,0 +1,151 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:   PKI server main module
+*
+*/
+
+
+
+
+#ifndef C_KEYOPERATIONPROVIDER_H
+#define C_KEYOPERATIONPROVIDER_H
+
+#include <e32base.h>
+#include <f32file.h>
+#include <unifiedkeystore.h>
+#include "pkidefs.h"
+
+class CUnifiedKeyStore;
+class CPKISession;
+class CPkiServiceSigner;
+class CPkiServiceDecryptor;
+class CLogonServices;
+class CKeyManager;
+class CKeyOperationQueue;
+    
+/**
+* A class that collects all the keyoperation functionality.
+*
+* The instance of this class is owned by CKeyOperationQueue, which
+* calls the methods according to the client request. When an operation
+* is completed the CKeyPairOperationProvider calls the associated callback
+* from CKeyOperationQueue.
+*
+* The Initialize operation must be completed succesfully, before any other
+* requests can be made to this class.
+*
+* Any current time, there can be only one request under process.
+*/
+class CKeyPairOperationProvider : public CActive
+    {
+public:
+    static CKeyPairOperationProvider* NewL(CKeyOperationQueue& aKeyOperationQueue);
+     ~CKeyPairOperationProvider();
+
+    /**
+     * Initializes the keystore.
+     * This is an asynchronous method. 
+     * CPKISession::KeyStoreInitComplete is called when this
+     * request is completed.
+     */
+    void Initialize();         
+    void GetKeyPairList(const TPKIKeyIdentifier& aKeyId, TInt aUsedKeyStore);
+                   
+    /**
+     * Decrypts the data using key specified in aKeyId.
+     * The key has to be stored in the store defined by
+     * method SetKeyStore.
+     */
+    void Decrypt(const TPKIKeyIdentifier& aKeyId,
+                 TInt aUsedKeyStore,
+                 HBufC8* aEncryptedData,
+                 TInt aOutputLength);  
+                 
+    void Sign(const TPKIKeyIdentifier& aKeyId,
+              TInt aUsedKeyStore,
+              HBufC8* aDataToBeSigned);  
+       
+    void GetPublicKey(const TPKIKeyIdentifier& aKeyId, TInt aUsedKeyStore);        
+            
+    void Logon();
+    void Logoff();
+    void ChangePassword();
+    
+    void RemoveKeyPair(const TPKIKeyIdentifier& aKeyId, TInt aUsedKeyStore);        
+    void GenerateKeyPair(const TUint aKeySize, TPKIKeyAlgorithm aKeyAlgorithm, TInt aUsedKeyStore);   
+            
+    void ImportKeyPair(HBufC8* aKeyData, TInt aUsedKeyStore);   //Takes the ownership of the data
+    
+protected:
+	void RunL();
+	void DoCancel();
+	TInt RunError(TInt aError);
+    
+private:
+	enum TKeyOperation
+		{
+		EKeyOperationIdle = 0,
+		EKeyOperationInitialize,
+		EKeyOperationSetPassPhraseTimeout,
+		EKeyOperationGetKeyList,
+		EKeyOperationGetKeyDetails,
+		EKeyOperationDecrypting,
+		EKeyOperationSigning,		
+		EKeyOperationPublicKeyExport,
+		EKeyOperationLogon,
+		EKeyOperationLogoff,
+		EKeyOperationLogonForChangePassword,
+		EKeyOperationChangingPassword,
+		EKeyOperationRemoveKeyPair,
+		EKeyOperationGeneratingKeyPair,
+		EKeyOperationImportingKeyPair
+		};
+
+    CKeyPairOperationProvider(CKeyOperationQueue& aKeyOperationQueue);
+    void ConstructL();
+
+
+    void DecryptL(const TPKIKeyIdentifier& aKeyId,
+                  TInt aUsedKeyStore,
+                  HBufC8* aEncryptedData,
+                  TInt aOutputLength);                                    
+
+    void CleanupCryptoOperation();
+
+    CArrayFixFlat<TKeyListEntry>* MakeKeyEntryListL(RMPointerArray<CCTKeyInfo> aKeysList,
+                                                    TInt aUsedKeyStore) const;
+
+    TBool 				 iIsInitialized;
+    TKeyOperation        iKeyOperation;
+
+    CKeyOperationQueue&     iKeyOperationQueue;
+    RFs 				    iFileServer;
+    CUnifiedKeyStore* 	    iUnifiedKeyStore; 
+    TInt                    iUsedKeyStore; //Not owned by this instance.
+    
+    RMPointerArray<CCTKeyInfo> iKeysList;
+    
+    HBufC8*                    iInputData;  //Used by Decrypt and Sign operations.
+    HBufC8*                    iOutputData; //Used by Decrypt and Sign operations.
+    TPtr8                      iOutputDataPtr;
+    
+    TPKIKeyIdentifier          iKeyId; //Used by store and generate keypair
+    
+    CPkiServiceDecryptor*      iPkiDecryptor;    
+    CPkiServiceSigner*         iPkiSigner;
+    CLogonServices*            iLogonService;
+    CKeyManager*               iKeyManager;
+    };
+
+#endif // C_KEYOPERATIONPROVIDER_H