cryptoservices/certificateandkeymgmt/certstore/CCheckedCertStore.h
changeset 0 2c201484c85f
child 8 35751d3474b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/certificateandkeymgmt/certstore/CCheckedCertStore.h	Wed Jul 08 11:25:26 2009 +0100
@@ -0,0 +1,189 @@
+/*
+* 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: 
+* CCheckedCertStore class implementation
+*
+*/
+
+
+
+
+/**
+ @file 
+ @internalComponent 
+*/
+ 
+#ifndef __CCHECKEDCERTSTORE_H__
+#define __CCHECKEDCERTSTORE_H__
+
+#include <e32std.h>
+#include <ct.h>
+#include <e32property.h>
+#include <mctwritablecertstore.h>
+#include "unifiedkeystore.h"
+
+NONSHARABLE_CLASS(CCheckedCertStore) : public CActive, public MCTWritableCertStore
+{
+public:
+ 	static CCheckedCertStore* NewCheckedCertStoreL(MCTTokenInterface*, RProperty&);
+ 	static CCheckedCertStore* NewCheckedWritableCertStoreL(MCTTokenInterface*, RProperty&);
+public:
+	void ConstructL();
+public:	//	MCTTokenInterface
+	virtual MCTToken& Token();
+
+public:	//	MCTCertStore
+	virtual void List(RMPointerArray<CCTCertInfo>& aCerts, const CCertAttributeFilter& aFilter,
+						TRequestStatus& aStatus);
+	virtual void CancelList();
+	virtual void GetCert(CCTCertInfo*& aCertInfo, const TCTTokenObjectHandle& aHandle, 
+						TRequestStatus& aStatus);
+	virtual void CancelGetCert();
+	virtual void Applications(const CCTCertInfo& aCertInfo, RArray<TUid>& aApplications,
+						TRequestStatus& aStatus);
+	virtual void CancelApplications();
+	virtual void IsApplicable(const CCTCertInfo& aCertInfo, TUid aApplication, 
+						TBool& aIsApplicable, TRequestStatus& aStatus);
+	virtual void CancelIsApplicable();
+	virtual void Trusted(const CCTCertInfo& aCertInfo, TBool& aTrusted, 
+						TRequestStatus& aStatus);
+	virtual void CancelTrusted();
+	virtual void Retrieve(const CCTCertInfo& aCertInfo, TDes8& aEncodedCert, 
+						TRequestStatus& aStatus);
+	virtual void CancelRetrieve();
+
+	
+public:	//	MCTWritableCertStore
+
+	virtual void Add( const TDesC& aLabel, TCertificateFormat aFormat,
+						TCertificateOwnerType aCertificateOwnerType, 
+						const TKeyIdentifier* aSubjectKeyId,
+						const TKeyIdentifier* aIssuerKeyId,
+						const TDesC8& aCert, TRequestStatus& aStatus);
+	
+	// new Add(.., TBool aDeletable, ..) method from MCTWritableCertStore
+	virtual void Add( const TDesC& aLabel, 
+						TCertificateFormat aFormat,
+						TCertificateOwnerType aCertificateOwnerType, 
+						const TKeyIdentifier* aSubjectKeyId,
+						const TKeyIdentifier* aIssuerKeyId,
+						const TDesC8& aCert, 
+						const TBool aDeletable,
+						TRequestStatus& aStatus);
+												
+	virtual void CancelAdd();
+	virtual void Remove(const CCTCertInfo& aCertInfo, TRequestStatus& aStatus);
+	virtual void CancelRemove();
+	virtual void SetApplicability(const CCTCertInfo& aCertInfo, 
+						const RArray<TUid>& aApplications, TRequestStatus &aStatus);
+	virtual void CancelSetApplicability();
+	virtual void SetTrust(const CCTCertInfo& aCertInfo, TBool aTrusted, 
+						TRequestStatus& aStatus);
+	virtual void CancelSetTrust();
+protected:	//	From CActive
+	virtual void DoCancel();
+	virtual void RunL();
+	virtual TInt RunError(TInt aError);
+private:
+	enum TState
+	{
+		EIdleState = 0,
+		EList,
+		EAdd,					// attempts using new Add() with aDeletable param
+		EInitKeyStoreForAdd,
+		EInitKeyStoreForList,
+		EGetKeyInfosForAdd,
+		EGetKeyInfosForList,
+		EOldAdd,				// uses original Add() w/o aDeletable param
+								// if the new Add is not supported
+		ERemove,
+		ESetApplicability,
+		ESetTrust
+	};
+private:
+ 	CCheckedCertStore(MCTCertStore&, RProperty&);
+ 	CCheckedCertStore(MCTWritableCertStore&, RProperty&);
+	virtual ~CCheckedCertStore();
+private:
+    void Complete(TInt aError);
+	void Cleanup();
+	void InitialiseKeyStoreL(TState aNextState);
+	void BuildCheckedCertificateListL();
+	void ComputeAndCheckSubjectKeyIdL();
+	
+	void DoAddL( const TDesC& aLabel, 
+    				TCertificateFormat aFormat,
+                	TCertificateOwnerType aCertificateOwnerType, 
+                	const TKeyIdentifier* aSubjectKeyId,
+                	const TKeyIdentifier* aIssuerKeyId,
+                	const TDesC8& aCert,
+                	const TBool aDeletable,
+                	TRequestStatus& aStatus
+                	);
+
+	void CancelOutstandingRequest();
+
+private:  // Generic
+    
+    /// The certificate store we wrap, owned by us
+	MCTCertStore& iCertStore;
+    /// Pointer to the same object as iCertStore if it's writable, otherwise NULL
+	MCTWritableCertStore* iWritableCertStore;
+    /// File server session, used by unified key store
+	RFs iFs;
+    /// Unified keystore, created and destroyed on demand
+	CUnifiedKeyStore* iUnifiedKeyStore;
+    /// Current state of the active object
+	TState iState;
+    /// Request status of client request
+	TRequestStatus* iCallerStatus;
+    /// Key filter used for listing and adding certs
+	TCTKeyAttributeFilter iKeyFilter;
+    /// List of key infos returned by keystore
+	RMPointerArray<CCTKeyInfo> iKeyInfos;
+
+    //	For Add requests
+
+    /// Format of cert to add
+	TCertificateFormat iFormat;
+    /// Owner type of cert to add
+	TCertificateOwnerType iCertificateOwnerType;
+    /// Subject key id of cert to add, not owned by us
+	const TKeyIdentifier* iSubjectKeyId;
+    /// Issuer key id of cert to add, not owned by us
+	const TKeyIdentifier* iIssuerKeyId;
+	//  Deletable flag of cert to add	
+	TBool iDeletable;
+
+
+    /// Holds the subject key id extracted from the cert - used if the caller
+    /// doesn't supply it
+	TKeyIdentifier iComputedSubjectKeyId;
+    /// Label of the cert to add, owned by us
+	HBufC* iCertLabel;
+    /// Certificate data to add, owned by us
+	HBufC8* iCertificate;
+
+    // For List requests
+    
+    /// Pointer to client's cert list, used to return certs, not owned by us
+	RMPointerArray<CCTCertInfo>* iCallerCerts;
+    /// Pointer to client's cert filter, not owned by us
+	const CCertAttributeFilter* iCallerFilter;
+    // Reference for the certstore change notification property.
+	RProperty& iPSCertstoreChangePropertyRef;
+
+};
+
+#endif	//	__CCHECKEDCERTSTORE_H__