--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/t_certstoreactions.h Wed Jul 08 11:25:26 2009 +0100
@@ -0,0 +1,427 @@
+/*
+* Copyright (c) 1998-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:
+*
+*/
+
+
+
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#ifndef __T_CERTSTOREACTIONS_H__
+#define __T_CERTSTOREACTIONS_H__
+
+#include "t_testhandler.h"
+#include <unifiedcertstore.h>
+#include <unifiedkeystore.h>
+#include <certificateapps.h>
+#include <e32cons.h>
+#include <badesca.h>
+#include "t_testaction.h"
+#include <cctcertinfo.h>
+
+class Output;
+class CSWICertStore;
+
+enum TCertStoreType
+ {
+ EUnifiedCertStore,
+ ESWICertStore
+ };
+
+class CCertStoreChangeNotifier : public CActive
+ {
+ public:
+ static CCertStoreChangeNotifier* NewL(TInt& aNotificationFlag);
+ virtual ~CCertStoreChangeNotifier();
+ void StartNotification();
+ TInt& iNotifiedCounter;
+ private:
+ CCertStoreChangeNotifier(TInt& aNotificationFlag);
+ void ConstructL();
+ void DoCancel();
+ void RunL();
+ private:
+ RProperty iCertStoreChangeProperty;
+ };
+
+/**
+ * Contains either a unified cert store instance or a SWI cert store instance.
+ *
+ * Either can be accessed through the CertStore() method, but
+ * AsUnifiedCertStore() and AsSWICertStore() will panic if the store is the
+ * wrong type.
+ *
+ * This class owns the cert store pointer.
+ */
+class COpenCertStore : public CBase
+ {
+ public:
+ virtual ~COpenCertStore();
+
+ TCertStoreType Type();
+ MCertStore& CertStore();
+
+ void SetCertStore(CUnifiedCertStore* aCertStore);
+ CUnifiedCertStore& AsUnifiedCertStore();
+
+ void SetCertStore(CSWICertStore* aCertStore);
+ CSWICertStore& AsSWICertStore();
+
+ private:
+
+ private:
+
+ TBool iSet;
+ TCertStoreType iType;
+ union
+ {
+ TAny* iAny;
+ CUnifiedCertStore* iUnifiedCertStore;
+ CSWICertStore* iSwiCertStore;
+ };
+ };
+
+/**
+ * Per-thread shared data.
+ *
+ * This contains stuff that is shared by more than one test action, eg the cert
+ * stores we are testing.
+ */
+class CSharedData : public CBase
+ {
+public:
+ ~CSharedData();
+ void InitCertificateAppInfoManagerL();
+ void DeleteCertificateAppInfoManager();
+ RPointerArray<COpenCertStore>& CertStores();
+public:
+ RFs iFs;
+ RPointerArray<COpenCertStore> iCertStores;
+ CCertificateAppInfoManager* iCertificateAppInfoManager;
+ };
+
+class CCertStoreTestAction : public CTestAction
+ {
+public:
+ virtual ~CCertStoreTestAction();
+
+protected:
+ CCertStoreTestAction(RFs& aFs, CConsoleBase& aConsole, Output& aOut);
+
+ // Methods for accessing the shared app info manager
+ void InitTheCertificateAppInfoManagerL();
+ void DeleteTheCertificateAppInfoManager();
+ CCertificateAppInfoManager* TheCertificateAppInfoManager();
+
+ // Methods for accessing the shared cert stores
+ TInt CertStoreCount();
+ TCertStoreType CertStoreType(TInt aIndex = 0);
+ MCertStore& CertStore(TInt aIndex = 0);
+ void AddCertStoreL(CUnifiedCertStore* aCertStore);
+ CUnifiedCertStore& UnifiedCertStore(TInt aIndex = 0);
+ void AddCertStoreL(CSWICertStore* aCertStore);
+ CSWICertStore& SWICertStore(TInt aIndex = 0);
+ void RemoveCertStore(TInt aIndex);
+
+protected:
+ RFs& iFs;
+
+ private:
+ CSharedData& CertStoreSharedData();
+ RPointerArray<COpenCertStore>& CertStores();
+ void DoPerformPrerequisite(TRequestStatus& aStatus);
+ void DoPerformPostrequisite(TRequestStatus& aStatus);
+ };
+
+class CSubscriberAction: public CCertStoreTestAction
+ {
+public:
+ virtual ~CSubscriberAction();
+
+protected:
+ CSubscriberAction(RFs& aFs, CConsoleBase& aConsole, Output& aOut);
+ void ConstructL(const TTestActionSpec& aTestActionSpec);
+ TInt iNotifierFlag;
+ TInt iNotificationSubscribed;
+ CCertStoreChangeNotifier* iNotifier;
+ };
+
+/**
+ * This action creates and initializes a certificate store manager.
+ * It should be used before any action requiring a certificate store manager.
+ * All the actions are likely to require one.
+ */
+class CInitialiseCertStore : public CCertStoreTestAction
+ {
+public:
+ static CTestAction* NewL(RFs& aFs, CConsoleBase& aConsole,
+ Output& aOut, const TTestActionSpec& aTestActionSpec);
+ static CTestAction* NewLC(RFs& aFs, CConsoleBase& aConsole,
+ Output& aOut, const TTestActionSpec& aTestActionSpec);
+ ~CInitialiseCertStore();
+
+public:
+ virtual void PerformAction(TRequestStatus& aStatus);
+ virtual void PerformCancel();
+ virtual void Reset();
+
+private:
+ CInitialiseCertStore(RFs& aFs, CConsoleBase& aConsole, Output& aOut);
+ void ConstructL(const TTestActionSpec& aTestActionSpec);
+ void DoReportAction();
+ void DoCheckResult(TInt aError);
+
+private:
+ enum TState
+ {
+ ENew,
+ EAppend,
+ ECheckOrder,
+ EFinished
+ };
+
+private:
+ TState iState;
+ TBool iOpenedForWrite;
+ RArray<TInt> iFilterOrdering;
+ RArray<TInt32> iExpectedOrderingResult;
+ CUnifiedCertStore* iNewUnifiedCertStore;
+ };
+
+class COnlyCreateCertStore : public CCertStoreTestAction
+ {
+public:
+ static CTestAction* NewL(RFs& aFs, CConsoleBase& aConsole, Output& aOut,
+ const TTestActionSpec& aTestActionSpec);
+ ~COnlyCreateCertStore() {};
+
+public:
+ virtual void PerformAction(TRequestStatus& aStatus);
+ virtual void PerformCancel();
+ virtual void Reset();
+
+private:
+ enum TState
+ {
+ EInit,
+ EFinished
+ };
+
+private:
+ COnlyCreateCertStore(RFs& aFs, CConsoleBase& aConsole, Output& aOut);
+ void ConstructL(const TTestActionSpec& aTestActionSpec);
+ void DoReportAction();
+ void DoCheckResult(TInt aError);
+
+private:
+ TState iState;
+ TBool iOpenedForWrite;
+
+ CUnifiedCertStore* iNewUnifiedCertStore;
+ };
+
+class CDeleteCertStore : public CCertStoreTestAction
+ {
+ public:
+ static CTestAction* NewL(RFs& aFs, CConsoleBase& aConsole, Output& aOut,
+ const TTestActionSpec& aTestActionSpec);
+ static CTestAction* NewLC(RFs& aFs, CConsoleBase& aConsole, Output& aOut,
+ const TTestActionSpec& aTestActionSpec);
+ ~CDeleteCertStore();
+ virtual void PerformAction(TRequestStatus& aStatus);
+ virtual void PerformCancel();
+ virtual void Reset();
+
+ private:
+ CDeleteCertStore(RFs& aFs, CConsoleBase& aConsole, Output& aOut);
+ void ConstructL(const TTestActionSpec& aTestActionSpec);
+ void DoReportAction();
+ void DoCheckResult(TInt aError);
+
+ private:
+ enum TState
+ {
+ EDelete,
+ EFinished
+ };
+
+ private:
+ TState iState;
+ };
+
+
+class CX509Certificate;
+class CWTLSCertificate;
+
+// This is the base class used by both CSetApplications and CSetTrusters. This
+// is required because of the merging of the SetApplicability and SetTrust API
+// calls on the certstore
+class CSetAppsAndTrust : public CSubscriberAction
+
+ {
+public:
+ ~CSetAppsAndTrust();
+ virtual void PerformAction(TRequestStatus& aStatus);
+ virtual void Reset();
+ virtual void PerformCancel();
+
+protected:
+ CSetAppsAndTrust(RFs& aFs, CConsoleBase& aConsole, Output& aOut);
+ void ConstructL(const TTestActionSpec& aTestActionSpec);
+ void GetCerts(TRequestStatus& aStatus);
+ void SetCertLabel(const TDesC8& aLabel);
+
+ /** Implemented by derived classes, called from PerformAction. */
+ virtual void DoSetAppTrust(const CCTCertInfo& aCertInfo, TRequestStatus& aStatus) = 0;
+ /** Implemented by derived classes, called from PerformCancel. */
+ virtual void DoPerformCancel() = 0;
+
+protected:
+ enum TState
+ {
+ EGetCAEntries,
+ ESetAppTrust,
+ ECheckNotification,
+ EFinished
+ };
+
+protected:
+ /**
+ * The label of the certificate we want to set the trust settings for
+ */
+ TCertLabel iLabel;
+
+ // Index into the certinfo list which points to the certificate we
+ // are interested in
+ TInt iIndex;
+
+ TState iState;
+ CCertAttributeFilter *iFilter;
+ RMPointerArray<CCTCertInfo> iCertInfos;
+ };
+
+
+
+/**
+ * This class is used to test the trust settings of a certificate.
+ */
+class CSetApplications : public CSetAppsAndTrust
+ {
+public:
+ /**
+ * @param aInfo This is what is enclosed in the <actionbody> and </actionbody> tags
+ * of the test script.
+ */
+ static CTestAction* NewL(RFs& aFs, CConsoleBase& aConsole, Output& aOut,
+ const TTestActionSpec& aTestActionSpec);
+ ~CSetApplications();
+
+private:
+ CSetApplications(RFs& aFs, CConsoleBase& aConsole, Output& aOut);
+ void ConstructL(const TTestActionSpec& aTestActionSpec);
+ void DoReportAction();
+ void DoCheckResult(TInt aError);
+ void AppendUid(const TDesC8& aUid);
+ void DoSetAppTrust(const CCTCertInfo& aCertInfo, TRequestStatus& aStatus);
+ void DoPerformCancel();
+
+private:
+ /**
+ * The array of applications that trust this certificate.
+ */
+ RArray<TUid> iApplications;
+ };
+
+/**
+ * This class is used to test the trust settings of a certificate.
+ */
+class CSetTrusters : public CSetAppsAndTrust
+ {
+public:
+ /**
+ * @param aInfo This is what is enclosed in the <actionbody> and </actionbody> tags
+ * of the test script.
+ */
+ static CTestAction* NewL(RFs& aFs, CConsoleBase& aConsole, Output& aOut,
+ const TTestActionSpec& aTestActionSpec);
+ ~CSetTrusters();
+
+private:
+ CSetTrusters(RFs& aFs, CConsoleBase& aConsole, Output& aOut);
+ void ConstructL(const TTestActionSpec& aTestActionSpec);
+ void DoReportAction();
+ void DoCheckResult(TInt aError);
+ void SetTrusted(const TDesC8& aTrusted);
+ void DoSetAppTrust(const CCTCertInfo& aCertInfo, TRequestStatus& aStatus);
+ void DoPerformCancel();
+
+private:
+ // The trusted setting to set
+ TBool iTrusted;
+ };
+
+/**
+ * This class is used to test the trust settings of a certificate.
+ */
+class CGetTrusters : public CCertStoreTestAction
+ {
+public:
+ /**
+ * @param aInfo This is what is enclosed in the <actionbody> and </actionbody> tags
+ * of the test script.
+ */
+ static CTestAction* NewL(RFs& aFs, CConsoleBase& aConsole, Output& aOut,
+ const TTestActionSpec& aTestActionSpec);
+ ~CGetTrusters();
+ virtual void PerformAction(TRequestStatus& aStatus);
+ virtual void PerformCancel();
+ virtual void Reset();
+
+private:
+ CGetTrusters(RFs& aFs, CConsoleBase& aConsole, Output& aOut);
+ void ConstructL(const TTestActionSpec& aTestActionSpec);
+ void GetCerts(TRequestStatus& aStatus);
+ void SetCertLabel(const TDesC8& aLabel);
+ void SetExpectedTrusters(const TDesC8& aExpectedTrusters);
+ void DoReportAction();
+ void DoCheckResult(TInt aError);
+
+private:
+ enum TState
+ {
+ EGetCAEntries,
+ EGetTrusters,
+ EFinished
+ };
+
+private:
+ /**
+ * The label of the certificate we want to get the trust settings of
+ */
+ TCertLabel iLabel;
+ TState iState;
+ TBool iTrust;
+ TBool iExpectedTrust;
+ CCertAttributeFilter *iFilter;
+ RMPointerArray<CCTCertInfo> iCertInfos;
+ RArray<TUid> iTrusters;
+ RArray<TUid> iExpectedTrusters;
+ };
+
+#endif