--- /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__