diff -r 000000000000 -r 2c201484c85f cryptoservices/certificateandkeymgmt/certstore/CCheckedCertStore.h --- /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 +#include +#include +#include +#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& 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& 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& 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 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* 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__