williamr@2: /* williamr@2: * Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@2: * under the terms of the License "Eclipse Public License v1.0" williamr@2: * which accompanies this distribution, and is available williamr@2: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: williamr@2: * UNIFIEDCERTSTORE.H williamr@2: * The unified certificate store implementation williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: /** williamr@2: @file williamr@4: @publishedAll williamr@2: @released williamr@2: */ williamr@2: williamr@2: #ifndef __UNIFIEDCERTSTORE_H__ williamr@2: #define __UNIFIEDCERTSTORE_H__ williamr@2: williamr@2: class CCertificate; williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: * williamr@2: * Publish and Subscribe - UnifiedCertSTore Category williamr@2: * Aliased here to System Category to prevent SC break. williamr@2: * williamr@2: */ williamr@2: const TUid KUnifiedCertStorePropertyCat = {KUidSystemCategoryValue}; williamr@2: williamr@2: /** williamr@2: * williamr@2: * Publish and subscribe key for UnifiedCertSTore. williamr@2: */ williamr@2: enum TUnifiedCertStoreKey williamr@2: { williamr@2: /** williamr@2: * williamr@2: * The Publish and subscribe key for the certstore changes. williamr@2: * If the client of the UnifiedCertstore needs to be notified when williamr@2: * certificate addition, removal and trust&application setting occurs, williamr@2: * the client needs to subscribe to KUnifiedCertStorePropertyCat and williamr@2: * EUnifiedCertStoreFlag. williamr@2: * williamr@2: * Aliased here to KUidUnifiedCertstore flag to avoid SC break. williamr@2: */ williamr@2: EUnifiedCertStoreFlag = KUidUnifiedCertstoreFlag williamr@2: }; williamr@2: williamr@2: /** williamr@2: * williamr@2: * The Unique ID for unknown hardware certstore, used as the input parameter when it is to be filtered. williamr@2: * @deprecated. Used only for Data compatibility. williamr@2: */ williamr@2: williamr@2: const TInt KUnknownHardwareCertStore = 0; williamr@2: williamr@2: williamr@2: /** williamr@2: * williamr@2: * The Unique ID for mutable software certstore, used as the input parameter when it is to be filtered. williamr@2: * williamr@2: */ williamr@2: williamr@2: const TInt KThirdPartyCertStore = 1; williamr@2: williamr@2: williamr@2: /** williamr@2: * williamr@2: * The Unique ID for SIM certstore, used as the input parameter when it is to be filtered. williamr@2: * williamr@2: */ williamr@2: williamr@2: const TInt KSIMCertStore = 2; williamr@2: williamr@2: /** williamr@2: * williamr@2: * The Unique ID for WIM certstore, used as the input parameter when it is to be filtered. williamr@2: * williamr@2: */ williamr@2: williamr@2: const TInt KWIMCertStore = 3; williamr@2: williamr@2: /** williamr@2: * williamr@2: * The Unique ID for UICC certstore, used as the input parameter when it is to be filtered. williamr@2: * williamr@2: */ williamr@2: const TInt KUICCCertStore = 4; williamr@2: williamr@2: /** williamr@2: * williamr@2: * The Unique ID for immutable software certstore, used as the input parameter when it is to be filtered. williamr@2: * williamr@2: */ williamr@2: williamr@2: const TInt KManufactureCertStore = 5; williamr@2: williamr@2: // Forward declarations williamr@2: class MCTCertStore; williamr@2: class MCTWritableCertStore; williamr@2: class MCTTokenInterface; williamr@2: class MCTToken; williamr@2: class MCTTokenType; williamr@2: class CCTCertInfo; williamr@2: class CCertAttributeFilter; williamr@2: class CCTTokenTypeInfo; williamr@2: class TCTTokenObjectHandle; williamr@2: class CCheckedCertStore; williamr@2: williamr@2: // This class is forward declared to avoid including its definition in this williamr@2: // exported header file because it must only be used internally. williamr@2: class CUnifiedCertStoreWorkingVars; williamr@2: class CX500DistinguishedName; williamr@2: williamr@2: /** williamr@2: * The unified certificate store. williamr@2: * williamr@2: * This class provides a certificate store whose contents are the sum of the williamr@2: * contents of all certificate store implementations on the device. It is williamr@2: * intended as the single point of access for clients wishing to use certificate williamr@2: * stores. williamr@2: * williamr@2: * Since this class is intended for widespread use, capability checks relating williamr@2: * to certificate access are documented here even though the checks are actually williamr@2: * made in the individual cert store implementations. williamr@2: * williamr@2: */ williamr@2: NONSHARABLE_CLASS(CUnifiedCertStore) : public CActive, public MCertStore williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * Creates a new CUnifiedCertStore williamr@2: * williamr@2: * @param aFs A file server session. It must already be open. williamr@2: * @param aOpenForWrite ETrue if the stores must be opened with write access williamr@2: * (e.g. for adding certificates) and EFalse if the user williamr@2: * only needs read-only access. williamr@2: * @return A pointer to an instance of the CUnifiedCertStore class. williamr@2: */ williamr@2: IMPORT_C static CUnifiedCertStore* NewL(RFs& aFs, TBool aOpenForWrite); williamr@2: williamr@2: /** williamr@2: * Creates a new CUnifiedCertStore and pushes it on the cleanup stack. williamr@2: * williamr@2: * @param aFs A file server session. It must already be open. williamr@2: * @param aOpenForWrite ETrue if the stores must be opened with write access williamr@2: * (e.g. for adding certificates) and EFalse if the user williamr@2: * only needs read-only access. williamr@2: * @return A pointer to an instance of the CUnifiedCertStore class. williamr@2: */ williamr@2: IMPORT_C static CUnifiedCertStore* NewLC(RFs& aFs, TBool aOpenForWrite); williamr@2: /** williamr@2: * Creates a new CUnifiedCertStore with the sequence filter, so that multiple certstores that are managed williamr@2: * by it will be filtered and ordered. williamr@2: * williamr@2: * @param aFs A file server session. It must already be open. williamr@2: * @param aOpenForWrite ETrue if the stores must be opened with write access williamr@2: * (e.g. for adding certificates) and EFalse if the user williamr@2: * only needs read-only access. Ownership is taken. williamr@2: * @param aOrderFilter An array of the unique sequence IDs specifying CertStore ordering. williamr@2: * @return A pointer to an instance of the CUnifiedCertStore class. williamr@2: */ williamr@2: IMPORT_C static CUnifiedCertStore* NewL(RFs& aFs, williamr@2: TBool aOpenForWrite, williamr@2: RArray& aOrderFilter); williamr@2: /** williamr@2: * Creates a new CUnifiedCertStore with the sequence filter, so that multiple certstores that are managed williamr@2: * by it will be filtered and ordered, and it is pushed on the cleanup stack. williamr@2: * williamr@2: * @param aFs A file server session. It must already be open. williamr@2: * @param aOpenForWrite ETrue if the stores must be opened with write access williamr@2: * (e.g. for adding certificates) and EFalse if the user williamr@2: * only needs read-only access. Ownership is taken. williamr@2: * @param aOrderFilter An array of the unique sequence IDs specifying CertStore ordering. williamr@2: * @return A pointer to an instance of the CUnifiedCertStore class. williamr@2: */ williamr@2: IMPORT_C static CUnifiedCertStore* NewLC(RFs& aFs, williamr@2: TBool aOpenForWrite, williamr@2: RArray& aOrderFilter); williamr@2: williamr@2: /** williamr@2: * The destructor destroys all the resources owned by this object. williamr@2: */ williamr@2: IMPORT_C ~CUnifiedCertStore(); williamr@2: williamr@2: /** williamr@2: * Initializes the manager. williamr@2: * williamr@2: * It must be called after the manager has been constructed williamr@2: * and before any call to the manager functions. williamr@2: * williamr@2: * This is an asynchronous request. williamr@2: * williamr@2: * @param aStatus The request status object; contains the result of the Initialize() williamr@2: * request when complete. Set to KErrCancel if any outstanding request is cancelled. williamr@2: */ williamr@2: IMPORT_C void Initialize(TRequestStatus& aStatus); williamr@2: williamr@2: /** williamr@2: * Cancels an ongoing Initialize() operation. williamr@2: * williamr@2: * The operation completes with KErrCancel. williamr@2: */ williamr@2: IMPORT_C void CancelInitialize(); williamr@2: williamr@2: public: // Implementation of MCertStore interface williamr@2: williamr@2: /** Lists all certificates that satisfy the supplied filter. williamr@2: * williamr@2: * @param aCertInfos An array that the returned certificates are added to . williamr@2: * @param aFilter A filter to restrict which certificates are returned. williamr@2: * @param aStatus The request status object. williamr@2: * williamr@2: */ williamr@2: virtual void List(RMPointerArray& aCertInfos, williamr@2: const CCertAttributeFilter& aFilter, TRequestStatus& aStatus); williamr@2: virtual void CancelList(); williamr@2: virtual void GetCert(CCTCertInfo*& aCertInfo, const TCTTokenObjectHandle& aHandle, williamr@2: TRequestStatus& aStatus); williamr@2: virtual void CancelGetCert(); williamr@2: williamr@2: /** Gets the list of applications . Applications are represented by UIDs . williamr@2: * williamr@2: * @param aCertInfos An array of certificates . williamr@2: * @param aApplications An array that the returned application UIDs are added to. williamr@2: * @param aStatus The request status object. williamr@2: * williamr@2: */ williamr@2: virtual void Applications(const CCTCertInfo& aCertInfo, williamr@2: RArray& aApplications, TRequestStatus &aStatus); williamr@2: virtual void CancelApplications(); williamr@2: virtual void IsApplicable(const CCTCertInfo& aCertInfo, TUid aApplication, williamr@2: TBool& aIsApplicable, TRequestStatus& aStatus); williamr@2: virtual void CancelIsApplicable(); williamr@2: virtual void Trusted(const CCTCertInfo& aCertInfo, TBool& aTrusted, williamr@2: TRequestStatus& aStatus); williamr@2: virtual void CancelTrusted(); williamr@2: virtual void Retrieve(const CCTCertInfo& aCertInfo, TDes8& aEncodedCert, williamr@2: TRequestStatus& aStatus); williamr@2: virtual void CancelRetrieve(); williamr@2: williamr@2: public: // Functions defined in MCTWritableCertStore except Add functions williamr@2: williamr@2: /** williamr@2: * Removes a certificate. williamr@2: * williamr@2: * @param aCertInfo The certificate to be removed. williamr@2: * @param aStatus The request status object; contains the result of the Remove() williamr@2: * request when complete. Set to KErrCancel if an outstanding request is cancelled. williamr@2: * williamr@2: * @capability WriteUserData This requires the WriteUserData capability when williamr@2: * applied to user certificates. williamr@2: * @capability WriteDeviceData This requires the WriteDeviceData capability williamr@2: * when applied to CA certificates. williamr@2: * @leave KErrPermissionDenied If the caller doesn't have the required williamr@2: * capabilities. williamr@2: */ williamr@2: IMPORT_C void Remove(const CCTCertInfo& aCertInfo, TRequestStatus& aStatus); williamr@2: williamr@2: /** williamr@2: * Cancels an ongoing Remove() operation. williamr@2: * williamr@2: * The operation completes with KErrCancel. williamr@2: */ williamr@2: IMPORT_C void CancelRemove(); williamr@2: williamr@2: /** williamr@2: * Replaces the current applicability settings with the settings in the williamr@2: * supplied array. williamr@2: * williamr@2: * This should only be called for CA certificates - it has no meaning for williamr@2: * user certificates. williamr@2: * williamr@2: * @param aCertInfo The certificate whose applicability should be updated. williamr@2: * @param aApplications The new applicability settings. Ownership of this williamr@2: * remains with the caller, and it must remain valid for the williamr@2: * lifetime of the call. williamr@2: * @param aStatus The request status object; contains the result of the SetApplicability() williamr@2: * request when complete. Set to KErrCancel, if an outstanding request is cancelled. williamr@2: * williamr@2: * @capability WriteDeviceData This requires the WriteDeviceData capability. williamr@2: * @leave KErrPermissionDenied If the caller doesn't have the required capabilities. williamr@2: */ williamr@2: IMPORT_C void SetApplicability(const CCTCertInfo& aCertInfo, williamr@2: const RArray& aApplications, TRequestStatus &aStatus); williamr@2: williamr@2: /** williamr@2: * Cancels an ongoing SetApplicability() operation. williamr@2: * williamr@2: * The operation completes with KErrCancel. williamr@2: */ williamr@2: IMPORT_C void CancelSetApplicability(); williamr@2: williamr@2: /** williamr@2: * Changes the trust settings. williamr@2: * williamr@2: * A CA certificate is trusted if the user is willing to use it for authenticating williamr@2: * servers. It has no meaning with other types of certificates. williamr@2: * williamr@2: * @param aCertInfo The certificate to be updated. williamr@2: * @param aTrusted ETrue, if trusted; EFalse, otherwise. williamr@2: * @param aStatus The request status object; contains the result of the SetTrust() williamr@2: * request when complete. Set to KErrCancel, if an outstanding request is cancelled. williamr@2: * williamr@2: * @capability WriteDeviceData This requires the WriteDeviceData capability. williamr@2: * @leave KErrPermissionDenied If the caller doesn't have the required capabilities. williamr@2: */ williamr@2: IMPORT_C void SetTrust(const CCTCertInfo& aCertInfo, TBool aTrusted, williamr@2: TRequestStatus& aStatus); williamr@2: williamr@2: /** williamr@2: * Cancels an ongoing SetTrust() operation. williamr@2: * williamr@2: * The operation completes with KErrCancel. williamr@2: */ williamr@2: IMPORT_C void CancelSetTrust(); williamr@2: williamr@2: public: williamr@2: /** williamr@2: * Lists all certificates that have a particular subject DN. williamr@2: * williamr@2: * @param aCertInfos An array that the returned certificates are added to williamr@2: * @param aFilter A filter to restrict which certificates are returned. williamr@2: * @param aIssuer Only certificates with this issuer DN will be returned williamr@2: * @param aStatus Asynchronous request status. williamr@2: */ williamr@2: IMPORT_C void List(RMPointerArray& aCertInfos, williamr@2: const CCertAttributeFilter& aFilter, williamr@2: const TDesC8& aIssuer, williamr@2: TRequestStatus& aStatus); williamr@2: williamr@2: /** williamr@2: * Lists all certificates that have a particular issuer. williamr@2: * williamr@2: * @param aCertInfos An array that the returned certificates are added to williamr@2: * @param aFilter A filter to restrict which certificates are returned. williamr@2: * @param aIssuers Only certificates with this issuer will be returned williamr@2: * @param aStatus Asynchronous request status. williamr@2: */ williamr@2: IMPORT_C void List(RMPointerArray& aCertInfos, williamr@2: const CCertAttributeFilter& aFilter, williamr@2: RPointerArray aIssuers, williamr@2: TRequestStatus& aStatus); williamr@2: williamr@2: /** williamr@2: * Retrieves a certificate as a parsed object. williamr@2: * williamr@2: * This will only work for certificates that have a CCertificate-derived williamr@2: * representation, in other words X509 and WTLS certificates. If called for williamr@2: * a URL certificate, KErrNotSupported is returned. williamr@2: * williamr@2: * @param aCertInfo The certificate to retrieve williamr@2: * @param aCert The returned certificate. This object can safely be up-cast williamr@2: * to a CX509Certificate or CWTLSCertificate if it's known that williamr@2: * that is the certificate format. williamr@2: * @param aStatus Asynchronous request status. williamr@2: * williamr@2: * @capability ReadUserData This requires the ReadUserData capability when williamr@2: * applied to user certificates, as these may contain williamr@2: * sensitive user data. williamr@2: * @leave KErrPermissionDenied If called for a user certificate when the williamr@2: * caller doesn't have the ReadUserData capability. williamr@2: */ williamr@2: IMPORT_C void Retrieve(const CCTCertInfo& aCertInfo, CCertificate*& aCert, williamr@2: TRequestStatus& aStatus); williamr@2: williamr@2: /** williamr@2: * Gets the number of certificate stores. williamr@2: * williamr@2: * @return The total number of certificate stores. williamr@2: */ williamr@2: IMPORT_C TInt CertStoreCount() const; williamr@2: williamr@2: /** williamr@2: * Gets a particular certificate store. williamr@2: * williamr@2: * @param aIndex The index of the required certificate store. williamr@2: * A number between 0 and CertStoreCount() - 1. williamr@2: * @return The certificate store. williamr@2: */ williamr@2: IMPORT_C MCTCertStore& CertStore(TInt aIndex); williamr@2: williamr@2: /** williamr@2: * Gets the number of writeable certificate stores. williamr@2: * williamr@2: * @return The number of writeable certificate stores. williamr@2: */ williamr@2: IMPORT_C TInt WritableCertStoreCount() const; williamr@2: williamr@2: /** williamr@2: * Gets a particular writeable certificate store. williamr@2: * williamr@2: * @param aIndex The index of the required certificate store. williamr@2: * A number between 0 and WriteableCertStoreCount() - 1. williamr@2: * @return The writeable certificate store. williamr@2: */ williamr@2: IMPORT_C MCTWritableCertStore& WritableCertStore(TInt aIndex); williamr@2: williamr@2: /** williamr@2: * Gets the number of read-only certificate stores. williamr@2: * williamr@2: * @return The number of read-only certificate stores. williamr@2: */ williamr@2: IMPORT_C TInt ReadOnlyCertStoreCount() const; williamr@2: williamr@2: /** williamr@2: * Gets a particular read-only certificate store. williamr@2: * williamr@2: * @param aIndex The index of the required certificate store. williamr@2: * A number between 0 and ReadOnlyCertStoreCount() - 1. williamr@2: * @return The read-only certificate store. williamr@2: */ williamr@2: IMPORT_C MCTCertStore& ReadOnlyCertStore(TInt aIndex); williamr@2: williamr@2: private: williamr@2: enum TState williamr@2: { williamr@2: EIdle, williamr@2: williamr@2: EInitializeGetTokenList, williamr@2: EInitializeGetToken, williamr@2: EInitializeGetWritableInterface, williamr@2: EInitializeGetReadableInterface, williamr@2: EInitializeGetReadableInterfaceFinished, williamr@2: EInitializeFinished, williamr@2: williamr@2: EList, williamr@2: ERetrieve, williamr@2: ERetrieveForList, williamr@2: williamr@2: EGetCert, williamr@2: EApplications, williamr@2: EIsApplicable, williamr@2: ETrusted, williamr@2: ERetrieveData, williamr@2: ERemove, williamr@2: ESetApplicability, williamr@2: ESetTrust williamr@2: }; williamr@2: enum TCompareResults williamr@2: { williamr@2: ENo, williamr@2: EYes, williamr@2: EMaybe williamr@2: }; williamr@2: private: williamr@2: CUnifiedCertStore(RFs& aFs, TBool aOpenForWrite); williamr@2: void ConstructL(RArray& aOrderFilter); williamr@2: void DoCancel(); williamr@2: void RunL(); williamr@2: TInt RunError(TInt aError); williamr@2: williamr@2: // Implementations for asynchronous operations williamr@2: void InitializeL(); williamr@2: void ListL(RMPointerArray& aCertInfos, williamr@2: const CCertAttributeFilter& aFilter); williamr@2: void ListL(RMPointerArray& aCertInfos, williamr@2: const CCertAttributeFilter& aFilter, williamr@2: RPointerArray aIssuers); williamr@2: void RetrieveL(const CCTCertInfo& aCertInfo, CCertificate*& aCert); williamr@2: void GetCertL(CCTCertInfo*& aCertInfo, const TCTTokenObjectHandle& aHandle); williamr@2: void ApplicationsL(const CCTCertInfo& aCertInfo, RArray& aApplications); williamr@2: void IsApplicableL(const CCTCertInfo& aCertInfo, TUid aApplication, williamr@2: TBool& aIsApplicable); williamr@2: void TrustedL(const CCTCertInfo& aCertInfo, TBool& aTrusted); williamr@2: void RetrieveDataL(const CCTCertInfo& aCertInfo, TDes8& aEncodedCert); williamr@2: void RemoveL(const CCTCertInfo& aCertInfo); williamr@2: void SetApplicabilityL(const CCTCertInfo& aCertInfo, williamr@2: const RArray& aApplications); williamr@2: void SetTrustL(const CCTCertInfo& aCertInfo, TBool aTrusted); williamr@2: williamr@2: // Helper functions williamr@2: void AllocWorkingVarsL(); williamr@2: void BeginAsyncOp(TRequestStatus& aStatus, TState aState); williamr@2: void DestroyTemporaryMembers(); williamr@2: MCTCertStore* GetCertStore(const TCTTokenObjectHandle& aHandle); williamr@2: void FindCertStoreL(const TCTTokenObjectHandle& aHandle); williamr@2: void FindWritableCertStoreL(const TCTTokenObjectHandle& aHandle); williamr@2: TCompareResults CompareCertInfoDN(const CCTCertInfo* aCertInfo); williamr@2: TBool MatchL(const CX500DistinguishedName& aName) const; williamr@2: void Complete(TInt aError); williamr@2: void CancelOutstandingRequest(); williamr@2: williamr@2: // Filters CertStores according to specified order. williamr@2: void ApplyOrderingL(RCPointerArray& aTokenTypes); williamr@2: williamr@2: void FilterTokenTypesL(RCPointerArray& aSearchTokenTypes, williamr@2: RCPointerArray& aTempTokenTypes, williamr@2: TInt aOrderAttribute); williamr@2: williamr@2: private: williamr@2: /** williamr@2: * A file server session, this is not logically a part of this class williamr@2: * but is needed for the client store and the file certstore. williamr@2: */ williamr@2: RFs& iFs; williamr@2: williamr@2: TBool iOpenedForWrite; williamr@2: williamr@2: RPointerArray iReadOnlyCertStores; williamr@2: RPointerArray iWritableCertStores; williamr@2: RPointerArray iCertStores; williamr@2: williamr@2: TBool iCurrentlyDoingReadOnly; williamr@2: williamr@2: /** williamr@2: * This a TokenType retrieved from the iTokenTypes array. williamr@2: * We use this to get a list of Tokens and to open these Tokens. williamr@2: */ williamr@2: MCTTokenType* iTokenType; williamr@2: williamr@2: /** williamr@2: * This is the list of Tokens for one of the Token Types of iTokenTypes. williamr@2: */ williamr@2: RCPointerArray iTokens; williamr@2: williamr@2: /** All the UIDs of hardware token types */ williamr@2: RArray iHardwareTypeUids; williamr@2: /** williamr@2: * This is used as an index for the iTokens array when we try williamr@2: * to get an interface to each of the tokens. williamr@2: */ williamr@2: TInt iIndexTokens; williamr@2: williamr@2: /** williamr@2: * A Token interface. We will use the interface to get a readable or writable williamr@2: * certstore interface. The value is updated at EInitializeGetToken and used williamr@2: * at EInitializeGetWritableInterface. williamr@2: */ williamr@2: MCTToken* iToken; williamr@2: williamr@2: /** williamr@2: * We use this to (temporarily) store the interface we obtained from iToken. williamr@2: * It will be inserted in iWritableCertStores or iCertStores. williamr@2: */ williamr@2: MCTTokenInterface* iTokenInterface; williamr@2: williamr@2: /** williamr@2: The index of the plugin certstore that is being processed williamr@2: */ williamr@2: TInt iIndex; williamr@2: williamr@2: /** williamr@2: * This is the status of the caller of an asynchronous function. It must be set williamr@2: * to KRequestPending by the function while doing the processing. williamr@2: */ williamr@2: TRequestStatus* iClientStatus; williamr@2: williamr@2: TState iState; williamr@2: williamr@2: TBool iIsInitialized; williamr@2: williamr@2: /** williamr@2: * This member holds all the variables that are only used to store temporary results williamr@2: * while performing a given operation. It must be initialized at the start of the williamr@2: * operation and deleted at the end of it whether the opeartion completes successfully williamr@2: * or not. When no operation is being performed it must be 0. williamr@2: */ williamr@2: CUnifiedCertStoreWorkingVars* iWorkingVars; williamr@2: williamr@2: /** williamr@2: * The cert store in use by an outstanding async operation. williamr@2: */ williamr@2: MCTCertStore *iCurrentCertStore; williamr@2: williamr@2: /** williamr@2: * The writable cert store in use by an outstanding async operation. williamr@2: */ williamr@2: MCTWritableCertStore *iCurrentWritableCertStore; williamr@2: williamr@2: // Padding to keep class size constant williamr@2: TInt32 iUnused1; williamr@2: TInt32 iUnused2; williamr@2: williamr@2: // An array of Uids specifying Token Type ordering williamr@2: RArray iOrderAttributes; williamr@2: williamr@2: // Publish and subscribe property which is used to notify the williamr@2: // cerificate addition,removal and application&trust setting. williamr@2: RProperty iPSCertstoreChangeProperty; williamr@2: williamr@2: }; williamr@2: williamr@2: #endif