cryptoservices/filebasedcertificateandkeystores/test/keytool/keytool_commands.h
changeset 8 35751d3474b7
parent 0 2c201484c85f
child 19 ece3df019add
--- a/cryptoservices/filebasedcertificateandkeystores/test/keytool/keytool_commands.h	Tue Jul 21 01:04:32 2009 +0100
+++ b/cryptoservices/filebasedcertificateandkeystores/test/keytool/keytool_commands.h	Thu Sep 10 14:01:51 2009 +0300
@@ -1,267 +1,352 @@
-/*
-* Copyright (c) 2004-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: 
-*
-*/
-
-
-#ifndef __KEYTOOL_COMMANDS_H_
-#define __KEYTOOL_COMMANDS_H_
-
-#include <e32base.h>
-#include <ct/rmpointerarray.h>
-#include <mctkeystore.h>
-#include <unifiedkeystore.h>
-#include <badesca.h>
-//#include <e32cmn.h>
-
-
-class CController;
-class CKeyToolController;
-
-
-/** 
- * This class wraps up the command line parameters
- * which affect the keystore command to be executed.
- * E.g. the key label we refer to, the key store to use, etc.
- */
-class CKeyToolParameters : public CBase
-	{
-	public:
-		static CKeyToolParameters* NewLC();
-		~CKeyToolParameters();
-	enum TSetPolicy
-		{
-		ENone =0,
-		ESetUserPolicy,
-		ESetManagerPolicy,
-		ERemoveUserPolicy,
-		ESetAllUsersPolicy,
-		};	
-	protected:
-		void ConstructL();
-
-	private:
-		CKeyToolParameters();
-
-	public:
-		TBool						iIsDetailed;
-		HBufC* 						iPrivate;
-		HBufC* 						iLabel;
-		HBufC* 						iDefault;
-		TInt 						iKeystoreIndex;
-		TInt 						iCertstoreIndex;
-		TKeyUsagePKCS15	 			iUsage;
-		CKeyInfoBase::EKeyAccess	iAccess;
-		TTime						iEndDate;
-		RArray<TUid>				iUIDs;
-		HBufC* 						iOwnerType;
-		TBool 						iPageWise;
-		TBool						iRemoveKey;
-		TSetPolicy					iPolicy;
-	};
-
-
-/**
- * Interface that every keytool command class must implement.
- */
-class CKeyToolCommand : public CActive
-	{
-	public:
-		virtual void DoCommandL(CUnifiedKeyStore& aKeyStore, CKeyToolParameters* aParam) = 0;
-		
-	protected:
-		CKeyToolCommand(CController* aController);
-
-	protected:
-		CController* iController;
-		CKeyToolParameters* iParams; // we do not own this!		
-	};
-	
-	
-/**
- * Implements the keytool list action. This is an active object as listing is asynchronous.
- */
-class CKeytoolUsage : public CKeyToolCommand
-	{
-public:
-	static CKeytoolUsage* NewLC(CKeyToolController* aController);
-	static CKeytoolUsage* NewL(CKeyToolController* aController);
-	~CKeytoolUsage();
-	void ConstructL();
-
-public: // From CKeyToolCommand
-	void DoCommandL(CUnifiedKeyStore& aKeyStore, CKeyToolParameters* aParam);
-	
-public: // From CActive
-	void RunL();
-	void DoCancel();
-	
-protected:
-	CKeytoolUsage(CKeyToolController* aController);			
-	};
-	
-
-/**
- * Implements the keytool list action. This is an active object as listing is asynchronous.
- */
-class CKeytoolList : public CKeyToolCommand
-	{
-public:
-	static CKeytoolList* NewLC(CKeyToolController* aController);
-	static CKeytoolList* NewL(CKeyToolController* aController);
-	~CKeytoolList();
-	void ConstructL();
-
-public: // From CKeyToolCommand
-	void DoCommandL(CUnifiedKeyStore& aKeyStore, CKeyToolParameters* aParam);
-	
-public: // From CActive
-	void RunL();
-	void DoCancel();
-	TInt RunError(TInt aError);	
-	
-protected:
-	CKeytoolList(CKeyToolController* aController);
-
-protected:
-	RMPointerArray<CCTKeyInfo> iKeys;
-	CUnifiedKeyStore* iKeyStore;
-	TCTKeyAttributeFilter iFilter;
-	MKeyStore* iKeyStoreImp;
-	
-	enum TState
-		{
-		EListKeys,
-		EFinished,
-		EIntermediate
-		} iState;			
-	};
-	
-
-
-
-/**
- * Implements the keytool import action.
- */
-class CKeytoolImport : public CKeyToolCommand
-	{
-public:
-	static CKeytoolImport* NewLC(CController* aController);
-	static CKeytoolImport* NewL(CController* aController);
-	~CKeytoolImport();
-	void ConstructL();
-
-public: // From CKeyToolCommand
-	void DoCommandL(CUnifiedKeyStore& aKeyStore, CKeyToolParameters* aParam);
-	
-public: // From CActive
-	void RunL();
-	void DoCancel();
-	TInt RunError(TInt aError);
-	
-protected:	
-	/**
-	 * Given some (supposed) pkcs8 data, tells you whether we are dealing with 
-	 * a PrivateKeyInfo or EncryptedPrivateKeyInfo ASN1 type.
-	 */
-	TBool IsPkcs8EncryptedL(TDesC8& aBinaryData);
-	
-private:
-	CKeytoolImport(CController* aController);
-	void Pkcs8PreprocessorL();
-	
-private:
-	HBufC8* iKeyData;
-	CCTKeyInfo* iKeyInfo;	
-	};
-
-
-
-
-/**
- * Implements the keytool remove action. 
- */
-class CKeytoolRemove : public CKeytoolList
-	{
-public:
-	static CKeytoolRemove* NewLC(CKeyToolController* aController);
-	static CKeytoolRemove* NewL(CKeyToolController* aController);
-	~CKeytoolRemove();
-	
-public: // From CActive
-	void RunL();
-	
-protected:
-
-private:
-	CKeytoolRemove(CKeyToolController* aController);
-
-private:
-	RArray<CCTKeyInfo*> iKeyList;
-	TInt idx;
-	};
-
-
-
-/**
- */
-class CKeyToolListStores : public CKeyToolCommand
-	{
-public:
-	static CKeyToolListStores* NewLC(CKeyToolController* aController);
-	static CKeyToolListStores* NewL(CKeyToolController* aController);
-	~CKeyToolListStores();
-	void ConstructL();
-
-public: // From CCertToolCommand
-	void DoCommandL(CUnifiedKeyStore& aKeyStore, CKeyToolParameters* aParam);
-	
-public: // From CActive
-	void RunL();
-	void DoCancel();	
-	
-protected:
-	CKeyToolListStores(CKeyToolController* aController);			
-	
-private:
-	RArray<MCTKeyStore> iCertStoreList; 
-	};
-
-
-/**
- * Implements the keytool set policy action. 
- */
-class CKeytoolSetPolicy : public CKeytoolList
-	{
-public:
-	static CKeytoolSetPolicy* NewLC(CKeyToolController* aController);
-	static CKeytoolSetPolicy* NewL(CKeyToolController* aController);
-	~CKeytoolSetPolicy();
-	
-public: // From CActive
-	void RunL();
-	TInt RunError(TInt aError);
-protected:
-
-private:
-	CKeytoolSetPolicy(CKeyToolController* aController);
-
-private:
-	CCTKeyInfo* iKey;
-	TInt idx;
-	};
-
-
-#endif
+/*
+* Copyright (c) 2004-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: 
+*
+*/
+
+
+#ifndef __KEYTOOL_COMMANDS_H_
+#define __KEYTOOL_COMMANDS_H_
+
+#include <e32base.h>
+#include <ct/rmpointerarray.h>
+#include <mctkeystore.h>
+#include <unifiedkeystore.h>
+#include <badesca.h>
+
+#ifdef KEYTOOL
+#include <authserver/authtypes.h>
+#include <authserver/identity.h>
+#include <authserver/authclient.h>
+#endif // KEYTOOL
+
+class CController;
+class CKeyToolController;
+#ifdef KEYTOOL
+class CKeyInfo;
+class CFileKeyData;
+class CPermanentFileStore;
+class CKeyStoreCenrep;
+class CPassphrase;
+#endif // KEYTOOL
+
+/** 
+ * This class wraps up the command line parameters
+ * which affect the keystore command to be executed.
+ * E.g. the key label we refer to, the key store to use, etc.
+ */
+class CKeyToolParameters : public CBase
+	{
+	public:
+		static CKeyToolParameters* NewLC();
+		~CKeyToolParameters();
+#ifdef KEYTOOL
+		enum TErrors
+			{
+			EMandatoryArgumentMissing=1,
+			};
+#endif // KEYTOOL
+	enum TSetPolicy
+		{
+		ENone =0,
+		ESetUserPolicy,
+		ESetManagerPolicy,
+		ERemoveUserPolicy,
+		ESetAllUsersPolicy,
+		};	
+	protected:
+		void ConstructL();
+
+	private:
+		CKeyToolParameters();
+
+	public:
+		TBool						iIsDetailed;
+		HBufC* 						iPrivate;
+		HBufC* 						iLabel;
+		HBufC* 						iDefault;
+		TInt 						iKeystoreIndex;
+		TInt 						iCertstoreIndex;
+		TKeyUsagePKCS15	 			iUsage;
+		CKeyInfoBase::EKeyAccess	iAccess;
+		TTime						iEndDate;
+		RArray<TUid>				iUIDs;
+		HBufC* 						iOwnerType;
+		TBool 						iPageWise;
+		TBool						iRemoveKey;
+		TSetPolicy					iPolicy;
+#ifdef KEYTOOL
+		HBufC*						iOldKeyFile;
+		HBufC*						iNewKeyFile;
+		HBufC* 						iAuthExpression;
+		TInt						iFreshness;
+		HBufC*						iPassphrase;
+#endif // KEYTOOL
+	};
+
+
+/**
+ * Interface that every keytool command class must implement.
+ */
+class CKeyToolCommand : public CActive
+	{
+	public:
+		virtual void DoCommandL(CUnifiedKeyStore& aKeyStore, CKeyToolParameters* aParam) = 0;
+		
+	protected:
+		CKeyToolCommand(CController* aController);
+
+	protected:
+		CController* iController;
+		CKeyToolParameters* iParams; // we do not own this!		
+	};
+	
+	
+/**
+ * Implements the keytool list action. This is an active object as listing is asynchronous.
+ */
+class CKeytoolUsage : public CKeyToolCommand
+	{
+public:
+	static CKeytoolUsage* NewLC(CKeyToolController* aController);
+	static CKeytoolUsage* NewL(CKeyToolController* aController);
+	~CKeytoolUsage();
+	void ConstructL();
+
+public: // From CKeyToolCommand
+	void DoCommandL(CUnifiedKeyStore& aKeyStore, CKeyToolParameters* aParam);
+	
+public: // From CActive
+	void RunL();
+	void DoCancel();
+	
+protected:
+	CKeytoolUsage(CKeyToolController* aController);			
+	};
+	
+
+/**
+ * Implements the keytool list action. This is an active object as listing is asynchronous.
+ */
+class CKeytoolList : public CKeyToolCommand
+	{
+public:
+	static CKeytoolList* NewLC(CKeyToolController* aController);
+	static CKeytoolList* NewL(CKeyToolController* aController);
+	~CKeytoolList();
+	void ConstructL();
+
+public: // From CKeyToolCommand
+	void DoCommandL(CUnifiedKeyStore& aKeyStore, CKeyToolParameters* aParam);
+	
+public: // From CActive
+	void RunL();
+	void DoCancel();
+	TInt RunError(TInt aError);	
+	
+protected:
+	CKeytoolList(CKeyToolController* aController);
+
+protected:
+	RMPointerArray<CCTKeyInfo> iKeys;
+	CUnifiedKeyStore* iKeyStore;
+	TCTKeyAttributeFilter iFilter;
+	MKeyStore* iKeyStoreImp;
+	
+	enum TState
+		{
+		EListKeys,
+		EFinished,
+		EIntermediate
+		} iState;			
+	};
+	
+
+
+
+/**
+ * Implements the keytool import action.
+ */
+class CKeytoolImport : public CKeyToolCommand
+	{
+public:
+	static CKeytoolImport* NewLC(CController* aController);
+	static CKeytoolImport* NewL(CController* aController);
+	~CKeytoolImport();
+	void ConstructL();
+
+public: // From CKeyToolCommand
+	void DoCommandL(CUnifiedKeyStore& aKeyStore, CKeyToolParameters* aParam);
+	
+public: // From CActive
+	void RunL();
+	void DoCancel();
+	TInt RunError(TInt aError);
+	
+protected:	
+	/**
+	 * Given some (supposed) pkcs8 data, tells you whether we are dealing with 
+	 * a PrivateKeyInfo or EncryptedPrivateKeyInfo ASN1 type.
+	 */
+	TBool IsPkcs8EncryptedL(TDesC8& aBinaryData);
+	
+private:
+	CKeytoolImport(CController* aController);
+	void Pkcs8PreprocessorL();
+	
+private:
+	HBufC8* iKeyData;
+	CCTKeyInfo* iKeyInfo;	
+	};
+
+
+
+
+/**
+ * Implements the keytool remove action. 
+ */
+class CKeytoolRemove : public CKeytoolList
+	{
+public:
+	static CKeytoolRemove* NewLC(CKeyToolController* aController);
+	static CKeytoolRemove* NewL(CKeyToolController* aController);
+	~CKeytoolRemove();
+	
+public: // From CActive
+	void RunL();
+	
+protected:
+
+private:
+	CKeytoolRemove(CKeyToolController* aController);
+
+private:
+	RArray<CCTKeyInfo*> iKeyList;
+	TInt idx;
+	};
+
+
+
+/**
+ */
+class CKeyToolListStores : public CKeyToolCommand
+	{
+public:
+	static CKeyToolListStores* NewLC(CKeyToolController* aController);
+	static CKeyToolListStores* NewL(CKeyToolController* aController);
+	~CKeyToolListStores();
+	void ConstructL();
+
+public: // From CCertToolCommand
+	void DoCommandL(CUnifiedKeyStore& aKeyStore, CKeyToolParameters* aParam);
+	
+public: // From CActive
+	void RunL();
+	void DoCancel();	
+	
+protected:
+	CKeyToolListStores(CKeyToolController* aController);			
+	
+private:
+	RArray<MCTKeyStore> iCertStoreList; 
+	};
+
+
+/**
+ * Implements the keytool set policy action. 
+ */
+class CKeytoolSetPolicy : public CKeytoolList
+	{
+public:
+	static CKeytoolSetPolicy* NewLC(CKeyToolController* aController);
+	static CKeytoolSetPolicy* NewL(CKeyToolController* aController);
+	~CKeytoolSetPolicy();
+	
+public: // From CActive
+	void RunL();
+	TInt RunError(TInt aError);
+protected:
+
+private:
+	CKeytoolSetPolicy(CKeyToolController* aController);
+
+private:
+	CCTKeyInfo* iKey;
+	TInt idx;
+	};
+
+
+#ifdef KEYTOOL
+
+/**
+ * Implements the migration of old keystore to the new keystore format 
+ * which uses the authentication server. 
+ */
+class CKeytoolMigrateStore : public CActive
+	{
+	
+private:
+	enum TMigrateStoreState
+		{
+		EAfterAuthentication,
+		
+		};
+public:
+	static CKeytoolMigrateStore* NewLC(CKeyToolParameters* aParams);
+	static CKeytoolMigrateStore* NewL(CKeyToolParameters* aParams);
+	~CKeytoolMigrateStore();
+	void ConstructL(CKeyToolParameters* aParams);
+
+public: // From CKeyToolCommand
+	void DoCommandL();
+
+public: // From CActive
+	void RunL();
+	void DoCancel();
+	TInt RunError(TInt aError);	
+	
+private:
+	CKeytoolMigrateStore();
+	void WriteKeyL(	const CKeyInfo& aKeyInfo, 
+					RStoreWriteStream& aWriteInfoStream );
+
+	void WriteAuthDetailsL( RStoreWriteStream& aWriteInfoStream );
+	void RevertStore(TAny* aStore);
+	void InitializeDefaultParams();
+	void WriteKeyInformationL();
+	template <class T> inline void EncryptAndStoreL(const T& aKey, RStoreWriteStream& aStream );
+	void StoreKeyL(const TDesC8& aKeyData, RStoreWriteStream& aStream);
+	template <class T> void RetrieveAndStorePublicKeyL( CFileKeyData* aKeyData, T* aPublicKey );
+	template <class T> void RetrieveAndStorePrivateKeyL( CFileKeyData* aKeyData, T* aPrivateKey );
+	static void CleanKeyInfo(TAny* aKeyInfo);
+	
+private:
+	AuthServer::TIdentityId iIdentityId;
+	AuthServer::RAuthClient iAuthClient; 
+	CPermanentFileStore* iWriteFileStore;
+	CPermanentFileStore* iReadFileStore;
+	TStreamId iWriteLookupStreamId;
+	CKeyToolParameters* iParams;
+	RFs iFs;
+	CKeyStoreCenrep* iKeyStoreCenrep;
+	CPassphrase* iPassphrase;
+	AuthServer::CIdentity* iUserIdentity;
+	TMigrateStoreState iState;
+	
+	RPointerArray<CFileKeyData> iKeyList;
+	};
+
+#endif // KEYTOOL
+#endif
+