--- a/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/ttesttoolengine.cpp Tue Jul 21 01:04:32 2009 +0100
+++ b/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/ttesttoolengine.cpp Thu Sep 10 14:01:51 2009 +0300
@@ -1,782 +1,782 @@
-/*
-* Copyright (c) 2007-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:
-*
-*/
-
-
-#include "ttesttoolengine.h"
-#include <ccertattributefilter.h>
-#include <mctcertstore.h>
-#include <mctkeystore.h>
-
-const TInt swinstalluid = 268452523;
-const TInt swinstallocspuid = 268478646;
-const TInt midletinstalluid = 270506792;
-const TInt tlsuid = 268441661;
-const TInt tocspuid = 268477445;
-
-
-_LIT(KSWInstall, "SWInstall");
-_LIT(KSWInstallOCSP, "SWInstallOCSP");
-_LIT(KMidletInstall, "MidletInstall");
-_LIT(KTls, "SSL/TLS");
-_LIT(KTOcsp, "OCSP Test");
-
-_LIT(KCaType, "ca");
-_LIT(KUserType, "user");
-_LIT(KPeerType, "peer");
-
-
-/*static*/ CTestToolEngine* CTestToolEngine::NewLC()
- {
- CTestToolEngine* self = new (ELeave) CTestToolEngine();
- CleanupStack::PushL(self);
- self->ConstructL();
- return self;
- }
-
-CTestToolEngine::CTestToolEngine() : CActive(EPriorityNormal)
- {
- iStore = -1;
- iPolicy = EFalse;
- }
-
-CTestToolEngine::~CTestToolEngine()
- {
- Cancel();
-
- delete iCertStore;
- delete iKeyStore;
-
- delete iFilter;
- Cancel();
- iCertInfos.Close();
- iFsKeyStore.Close();
- iFs.Close();
- iUids.Reset();
- }
-
-void CTestToolEngine::ConstructL()
- {
- User::LeaveIfError(iFs.Connect());
-
- iCertStore = CUnifiedCertStore::NewL(iFs, ETrue);
-
- User::LeaveIfError(iFsKeyStore.Connect());
- iKeyStore = CUnifiedKeyStore::NewL(iFsKeyStore);
-
- // This filter will accept any certificates
- iFilter = CCertAttributeFilter::NewL();
-
- CActiveScheduler::Add(this);
- }
-
-void CTestToolEngine::RunL()
- {
- if (iStatus.Int() != KErrNone)
- {
- User::Leave(iStatus.Int());
- }
-
- switch (iState)
- {
- case EInitialiseKeyStore:
- {
- // Construct a catch-all filter!
- iKeyFilter.iKeyAlgorithm = CCTKeyInfo::EInvalidAlgorithm;
- iKeyFilter.iPolicyFilter = TCTKeyAttributeFilter::EAllKeys;
- iKeyFilter.iUsage = EPKCS15UsageAll;
- if (iStore != -1)
- {
- MCTKeyStore& chosen = iKeyStore->KeyStore(iStore);
- chosen.List(iKeys, iKeyFilter, iStatus);
- }
- else
- {
- iKeyStore->List(iKeys, iKeyFilter, iStatus);
- }
- if(iPolicy)
- {
- iState = EGetPolicy;
- }
- else if (iKeysListCount > 0)
- {
- iState = EDone;
- }
- else
- {
- iState = EFilterKey;
- }
- SetActive();
- }
- break;
- case EFilterKey:
- {
- TInt index = 0;
- if (iLabel1.Length())
- {
- iNumCert1 = FilterKeys(iKeys, iLabel1, index);
- }
- if (iLabel2.Length())
- {
- iNumCert2 = FilterKeys(iKeys, iLabel2, index);
- }
- CActiveScheduler::Stop();
- }
- break;
- case EInitialise:
- {
- if (iStore != -1)
- {
- MCTCertStore& chosen = iCertStore->CertStore(iStore);
- chosen.List(iCertInfos, *iFilter, iStatus);
- }
- else
- {
- iCertStore->List(iCertInfos, *iFilter, iStatus);
- }
-
- if(iAppsCount > 0)
- {
- iState = EGetApps;
- }
- else if (iGetTrust == 1)
- {
- iState = EGetTrust;
- }
- else if (iCertsCount > 0)
- {
- iState = EDone;
- }
- else
- {
- iState = EFilter;
- }
- SetActive();
- }
- break;
- case EGetPolicy:
- {
- FilterKeys(iKeys, iLabel1, iIndex);
- CActiveScheduler::Stop();
- }
- break;
- case EGetApps:
- {
- TInt index = 0;
- FilterCerts(iCertInfos, iLabel1, index);
- iCertStore->Applications(*iCertInfos[index], iUids, iStatus);
- CActiveScheduler::Stop();
- }
- break;
- case EGetTrust:
- {
- TInt index = 0;
- FilterCerts(iCertInfos, iLabel1, index);
- iCertStore->Trusted(*iCertInfos[index], iActualTrust, iStatus);
- CActiveScheduler::Stop();
- }
- break;
- case EFilter:
- {
- TInt index = 0;
- TBool filteronly = ETrue;
- if (iLabel1.Length())
- {
- iNumCert1 = FilterCerts(iCertInfos, iLabel1, index, filteronly);
- }
- if (iLabel2.Length())
- {
- iNumCert2 = FilterCerts(iCertInfos, iLabel2, index, filteronly);
- }
- CActiveScheduler::Stop();
- }
- break;
- case EDone:
- {
- CActiveScheduler::Stop();
- }
- break;
- default:
- {
- User::Panic(_L("Testtool Engine - Illegal state"), 0);
- }
- }
- }
-
-TInt CTestToolEngine::RunError(TInt /*aError*/)
- {
- CActiveScheduler::Stop();
-
- return KErrNone;
- }
-
-
-void CTestToolEngine::DoCancel()
- {
- //CActiveScheduler::Stop();
- }
-
-TVerdict CTestToolEngine::ListCerts(const TDesC& aLabel1, const TInt aExpectedNumLabel)
- {
- TVerdict returnValue = EPass;
- iLabel1.Set(aLabel1);
-
- Initilize();
- if (iNumCert1 != aExpectedNumLabel)
- {
- returnValue = EFail;
- }
- return returnValue;
- }
-
-
-TVerdict CTestToolEngine::ListCerts(const TDesC& aLabel1, const TDesC& aLabel2, const TInt aExpectedNumLabel)
- {
- TVerdict returnValue = EPass;
- iLabel1.Set(aLabel1);
- iLabel2.Set(aLabel2);
-
- Initilize();
- if (iNumCert1 != aExpectedNumLabel || iNumCert2 != aExpectedNumLabel)
- {
- returnValue = EFail;
- }
- return returnValue;
- }
-
-TVerdict CTestToolEngine::ListStore(RPointerArray<HBufC>& aCerts)
- {
- TVerdict returnValue = EPass;
- iCertsCount = aCerts.Count();
-
- Initilize();
-
- if (!CompareWithExpectedStore(aCerts))
- {
- returnValue = EFail;
- }
- return returnValue;
- }
-
-TVerdict CTestToolEngine::ListCerts(RPointerArray<HBufC>& aCerts)
- {
- TVerdict returnValue = EPass;
- iCertsCount = aCerts.Count();
-
- Initilize();
-
- if (!CompareWithExpectedCertificates(aCerts))
- {
- returnValue = EFail;
- }
- return returnValue;
- }
-
-TVerdict CTestToolEngine::ListCerts(RPointerArray<HBufC>& aCerts, const TDesC& aLabel)
- {
- TVerdict returnValue = EPass;
- iLabel1.Set(aLabel);
- iCertsCount = aCerts.Count();
-
- Initilize();
- TCertificateOwnerType owner;
- if (iLabel1.CompareF(KCaType) == KErrNone)
- {
- owner = ECACertificate;
- }
- else if (iLabel1.CompareF(KUserType) == KErrNone)
- {
- owner = EUserCertificate;
- }
- else if (iLabel1.CompareF(KPeerType) == KErrNone)
- {
- owner = EPeerCertificate;
- }
- FilterCerts(iCertInfos, owner);
- if (!CompareWithExpectedCertificates(aCerts))
- {
- returnValue = EFail;
- }
- return returnValue;
- }
-
-TVerdict CTestToolEngine::ListCerts(RPointerArray<HBufC>& aCerts, TInt aStore)
- {
- TVerdict returnValue = EPass;
- iStore = aStore;
- iCertsCount = aCerts.Count();
-
- Initilize();
- if (!CompareWithExpectedCertificates(aCerts))
- {
- returnValue = EFail;
- }
- return returnValue;
- }
-
-TVerdict CTestToolEngine::CheckApps(RPointerArray<HBufC>& aApps, const TDesC& aLabel)
- {
- TVerdict returnValue = EPass;
- iAppsCount = aApps.Count();
- iLabel1.Set(aLabel);
- Initilize();
- if (!VerifyApps(aApps))
- {
- returnValue = EFail;
- }
- return returnValue;
- }
-
-TVerdict CTestToolEngine::CheckTrust(const TDesC& aLabel,TBool aTrust)
- {
- TVerdict returnValue = EPass;
- iLabel1.Set(aLabel);
- iGetTrust = 1;
- Initilize();
- if (!VerifyTrust(aTrust))
- {
- returnValue = EFail;
- }
- return returnValue;
- }
-
-TVerdict CTestToolEngine::ListStoreKey(RPointerArray<HBufC>& aKeys)
- {
- TVerdict returnValue = EPass;
- iKeysListCount = aKeys.Count();
-
- KeyInitilize();
-
- if (!CompareWithExpectedStoreKey(aKeys))
- {
- returnValue = EFail;
- }
- return returnValue;
- }
-
-TVerdict CTestToolEngine::ListKeys(const TDesC& aLabel1, const TInt aExpectedNumLabel)
- {
- TVerdict returnValue = EPass;
- iLabel1.Set(aLabel1);
-
- KeyInitilize();
- if (iNumCert1 != aExpectedNumLabel)
- {
- returnValue = EFail;
- }
- return returnValue;
- }
-
-
-TVerdict CTestToolEngine::ListKeys(const TDesC& aLabel1, const TDesC& aLabel2, const TInt aExpectedNumLabel)
- {
- TVerdict returnValue = EPass;
- iLabel1.Set(aLabel1);
- iLabel2.Set(aLabel2);
-
- KeyInitilize();
- if (iNumCert1 != aExpectedNumLabel || iNumCert2 != aExpectedNumLabel)
- {
- returnValue = EFail;
- }
- return returnValue;
- }
-
-TVerdict CTestToolEngine::ListKeys(RPointerArray<HBufC>& aKeys, TInt aStore)
- {
- TVerdict returnValue = EPass;
- iStore = aStore;
- iKeysListCount = aKeys.Count();
-
- KeyInitilize();
- if (!CompareWithExpectedKeys(aKeys))
- {
- returnValue = EFail;
- }
- return returnValue;
- }
-
-
-TVerdict CTestToolEngine::ListKeys(RPointerArray<HBufC>& aKeys)
- {
- TVerdict returnValue = EPass;
- iKeysListCount = aKeys.Count();
-
- KeyInitilize();
-
- if (!CompareWithExpectedKeys(aKeys))
- {
- returnValue = EFail;
- }
- return returnValue;
- }
-
-TVerdict CTestToolEngine::GetPolicy(const TDesC& aLabel1, const TDesC& aLabel2, TInt aUser)
- {
- TVerdict returnValue = EPass;
- iLabel1.Set(aLabel1);
- iLabel2.Set(aLabel2);
- iPolicy = ETrue;
- KeyInitilize();
- VerifyPolicy(aUser);
-
- return returnValue;
- }
-
-void CTestToolEngine::Initilize()
- {
- iState = EInitialise;
- iCertStore->Initialize(iStatus);
- SetActive();
- CActiveScheduler::Start();
- }
-
-void CTestToolEngine::KeyInitilize()
- {
- iState = EInitialiseKeyStore;
- iKeyStore->Initialize(iStatus);
- SetActive();
- CActiveScheduler::Start();
- }
-
-TBool CTestToolEngine::VerifyApps(RPointerArray<HBufC>& aApps)
- {
- TInt uidsCount = iUids.Count();
- TInt appsCount = aApps.Count();
- TBool result = ETrue;
- if ( uidsCount != appsCount)
- {
- return EFalse;
- }
- for (TInt i = 0; i < uidsCount; i++)
- {
- if (iUids[i] == TUid::Uid(swinstalluid))
- {
- result = CheckAppForUid(KSWInstall, aApps);
- }
- else if (iUids[i] == TUid::Uid(swinstallocspuid))
- {
- result = CheckAppForUid(KSWInstallOCSP, aApps);
- }
- else if (iUids[i] == TUid::Uid(midletinstalluid))
- {
- result = CheckAppForUid(KMidletInstall, aApps);
- }
- else if (iUids[i] == TUid::Uid(tlsuid))
- {
- result = CheckAppForUid(KTls, aApps);
- }
- else if (iUids[i] == TUid::Uid(tocspuid))
- {
- result = CheckAppForUid(KTOcsp, aApps);
- }
- else
- {
- result = EFalse;
- }
- if (!result)
- {
- break;
- }
- }
- return result;
- }
-
-TBool CTestToolEngine::CheckAppForUid(const TDesC& aAppName, RPointerArray<HBufC>& aApps)
- {
- TBool result = EFalse;
- for (TInt i = 0; i < aApps.Count();i++)
- {
- if (aAppName.CompareF(*aApps[i]) == KErrNone)
- {
- result = ETrue;
- break;
- }
- else
- {
- result = EFalse;
- }
- }
- return result;
- }
-
-TBool CTestToolEngine::VerifyPolicy(TInt aUser)
- {
- TBool result = EFalse;
- _LIT(KCab, "WriteDeviceData");
- TLex lex(iLabel2);
- TUid secid;
- lex.Val(secid.iUid);
- TCompiledSecurityPolicy managementPolicy = iKeys[iIndex]->ManagementPolicy();
- TCompiledSecurityPolicy usePolicy = iKeys[iIndex]->UsePolicy();
- TUint32 mSecureid = managementPolicy.SecureId();
- TUint32 uSecureid = usePolicy.SecureId();
-
- if (aUser == 2)
- {
- if (mSecureid == 0xffffffff)
- {
- TCapability cab = managementPolicy.Capability(0);
- // currently only possible for keyowner other than secure id.
- if (cab == ECapabilityWriteDeviceData && iLabel2.CompareF(KCab) == KErrNone)
- {
- result = ETrue;
- }
- else
- {
- result = EFalse;
- }
- }
- else
- {
- TUid mSecureUid = TUid::Uid(mSecureid);
- if (mSecureUid == secid)
- {
- result = ETrue;
- }
- else
- {
- result = EFalse;
- }
- }
- }
- else if (aUser == 1)
- {
- if (uSecureid == 0xffffffff)
- {
- TSecurityPolicy::TType utype = usePolicy.Type();
- _LIT(KType, "ALL");
- // currently only possible for keyuser other than secure id
- if (utype == TSecurityPolicy::ETypePass && iLabel2.CompareF(KType) == KErrNone)
- {
- result = ETrue;
- }
- else
- {
- result = EFalse;
- }
- }
- else
- {
- TUid uSecureUid = TUid::Uid(uSecureid);
- if (uSecureUid == secid)
- {
- result = ETrue;
- }
- else
- {
- result = EFalse;
- }
- }
- }
- return result;
- }
-
-TInt CTestToolEngine::FilterCerts(RMPointerArray<CCTCertInfo>& aCertList,
- TDesC& aLabel, TInt& aIndex, TBool aFilterOnly)
- {
- TInt j = 0, count = 0;
- while (j < aCertList.Count())
- {
- if ( aCertList[j]->Label().MatchF(aLabel) != KErrNotFound)
- {
- count++;
- if (count == 1)
- {
- //first certificate to be selected for retreiving
- aIndex = j;
- }
- j++;
- }
- else
- {
- if (!aFilterOnly)
- {
- CCTCertInfo* tmp = aCertList[j];
- tmp->Release();
- aCertList.Remove(j);
- }
- else
- {
- j++;
- }
- }
- }
- return count;
- }
-
-void CTestToolEngine::FilterCerts(RMPointerArray<CCTCertInfo>& aCertList, TCertificateOwnerType& aOwnerType)
- {
- TInt j = 0;
- while (j < aCertList.Count())
- {
- if ( aCertList[j]->CertificateOwnerType() != aOwnerType)
- {
- CCTCertInfo* tmp = aCertList[j];
- tmp->Release();
- aCertList.Remove(j);
- }
- else
- {
- j++;
- }
- }
- }
-
-
-TInt CTestToolEngine::FilterKeys(RMPointerArray<CCTKeyInfo>& aKeyList,
- TDesC& aLabel, TInt& aIndex)
- {
- TInt j = 0, count = 0;
- while (j < aKeyList.Count())
- {
- if ( aKeyList[j]->Label().MatchF(aLabel) != KErrNotFound)
- {
- count++;
- if (count == 1)
- {
- //first key to be selected for retreiving
- aIndex = j;
- }
- j++;
- }
- else
- {
- j++;
- }
- }
- return count;
- }
-
-TBool CTestToolEngine::CompareWithExpectedCertificates(RPointerArray<HBufC>& aCerts)
- {
- if ( iCertInfos.Count() != aCerts.Count())
- {
- return EFalse;
- }
- for (TInt i = 0 ; i < iCertInfos.Count(); i++)
- {
- const TDesC& label = iCertInfos[i]->Label();
- TBool found = EFalse;
- for (TInt j = 0; j < aCerts.Count(); j++)
- {
- if (aCerts[j]->CompareF(label) == KErrNone)
- {
- found = ETrue;
- break;
- }
- }
- if (!found)
- {
- return EFalse;
- }
- }
- return ETrue;
- }
-
-
-TBool CTestToolEngine::CompareWithExpectedKeys(RPointerArray<HBufC>& aKeys)
- {
- if ( iKeys.Count() != iKeysListCount)
- {
- return EFalse;
- }
- for (TInt i = 0 ; i < iKeys.Count(); i++)
- {
- const TDesC& label = iKeys[i]->Label();
- TBool found = EFalse;
- for (TInt j = 0; j < iKeysListCount; j++)
- {
- if (aKeys[j]->CompareF(label) == KErrNone)
- {
- found = ETrue;
- break;
- }
- }
- if (!found)
- {
- return EFalse;
- }
- }
- return ETrue;
- }
-
-TBool CTestToolEngine::CompareWithExpectedStore(RPointerArray<HBufC>& aCerts)
- {
- TBool result = EFalse;
- TInt storeCount = iCertStore->CertStoreCount();
- for (TInt i = 0; i < storeCount ; i++)
- {
- result = EFalse;
- MCTToken& token = (iCertStore->CertStore(i)).Token();
- const TDesC& tmp = token.Label();
- for (TInt j = 0; j < aCerts.Count(); j++)
- {
- if (tmp.CompareF(*aCerts[j]) == KErrNone)
- {
- result = ETrue;
- break;
- }
- }
- if (!result)
- {
- break;
- }
- }
- return result;
- }
-
-
-TBool CTestToolEngine::CompareWithExpectedStoreKey(RPointerArray<HBufC>& aKeys)
- {
- TBool result = EFalse;
- TInt storeCount = iKeyStore->KeyStoreCount();
- for (TInt i = 0; i < storeCount ; i++)
- {
- result = EFalse;
- MCTToken& token = (iKeyStore->KeyStore(i)).Token();
- const TDesC& tmp = token.Label();
- for (TInt j = 0; j < aKeys.Count(); j++)
- {
- if (tmp.CompareF(*aKeys[j]) == KErrNone)
- {
- result = ETrue;
- break;
- }
- }
- if (!result)
- {
- break;
- }
- }
- return result;
- }
-
-
-
-TBool CTestToolEngine::VerifyTrust(TBool aTrust)
- {
- TBool result = EFalse;
- if (aTrust == iActualTrust)
- {
- result = ETrue;
- }
- else
- {
- result = EFalse;
- }
- return result;
- }
+/*
+* Copyright (c) 2007-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:
+*
+*/
+
+
+#include "ttesttoolengine.h"
+#include <ccertattributefilter.h>
+#include <mctcertstore.h>
+#include <mctkeystore.h>
+
+const TInt swinstalluid = 268452523;
+const TInt swinstallocspuid = 268478646;
+const TInt midletinstalluid = 270506792;
+const TInt tlsuid = 268441661;
+const TInt tocspuid = 268477445;
+
+
+_LIT(KSWInstall, "SWInstall");
+_LIT(KSWInstallOCSP, "SWInstallOCSP");
+_LIT(KMidletInstall, "MidletInstall");
+_LIT(KTls, "SSL/TLS");
+_LIT(KTOcsp, "OCSP Test");
+
+_LIT(KCaType, "ca");
+_LIT(KUserType, "user");
+_LIT(KPeerType, "peer");
+
+
+/*static*/ CTestToolEngine* CTestToolEngine::NewLC()
+ {
+ CTestToolEngine* self = new (ELeave) CTestToolEngine();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+CTestToolEngine::CTestToolEngine() : CActive(EPriorityNormal)
+ {
+ iStore = -1;
+ iPolicy = EFalse;
+ }
+
+CTestToolEngine::~CTestToolEngine()
+ {
+ Cancel();
+
+ delete iCertStore;
+ delete iKeyStore;
+
+ delete iFilter;
+ Cancel();
+ iCertInfos.Close();
+ iFsKeyStore.Close();
+ iFs.Close();
+ iUids.Reset();
+ }
+
+void CTestToolEngine::ConstructL()
+ {
+ User::LeaveIfError(iFs.Connect());
+
+ iCertStore = CUnifiedCertStore::NewL(iFs, ETrue);
+
+ User::LeaveIfError(iFsKeyStore.Connect());
+ iKeyStore = CUnifiedKeyStore::NewL(iFsKeyStore);
+
+ // This filter will accept any certificates
+ iFilter = CCertAttributeFilter::NewL();
+
+ CActiveScheduler::Add(this);
+ }
+
+void CTestToolEngine::RunL()
+ {
+ if (iStatus.Int() != KErrNone)
+ {
+ User::Leave(iStatus.Int());
+ }
+
+ switch (iState)
+ {
+ case EInitialiseKeyStore:
+ {
+ // Construct a catch-all filter!
+ iKeyFilter.iKeyAlgorithm = CCTKeyInfo::EInvalidAlgorithm;
+ iKeyFilter.iPolicyFilter = TCTKeyAttributeFilter::EAllKeys;
+ iKeyFilter.iUsage = EPKCS15UsageAll;
+ if (iStore != -1)
+ {
+ MCTKeyStore& chosen = iKeyStore->KeyStore(iStore);
+ chosen.List(iKeys, iKeyFilter, iStatus);
+ }
+ else
+ {
+ iKeyStore->List(iKeys, iKeyFilter, iStatus);
+ }
+ if(iPolicy)
+ {
+ iState = EGetPolicy;
+ }
+ else if (iKeysListCount > 0)
+ {
+ iState = EDone;
+ }
+ else
+ {
+ iState = EFilterKey;
+ }
+ SetActive();
+ }
+ break;
+ case EFilterKey:
+ {
+ TInt index = 0;
+ if (iLabel1.Length())
+ {
+ iNumCert1 = FilterKeys(iKeys, iLabel1, index);
+ }
+ if (iLabel2.Length())
+ {
+ iNumCert2 = FilterKeys(iKeys, iLabel2, index);
+ }
+ CActiveScheduler::Stop();
+ }
+ break;
+ case EInitialise:
+ {
+ if (iStore != -1)
+ {
+ MCTCertStore& chosen = iCertStore->CertStore(iStore);
+ chosen.List(iCertInfos, *iFilter, iStatus);
+ }
+ else
+ {
+ iCertStore->List(iCertInfos, *iFilter, iStatus);
+ }
+
+ if(iAppsCount > 0)
+ {
+ iState = EGetApps;
+ }
+ else if (iGetTrust == 1)
+ {
+ iState = EGetTrust;
+ }
+ else if (iCertsCount > 0)
+ {
+ iState = EDone;
+ }
+ else
+ {
+ iState = EFilter;
+ }
+ SetActive();
+ }
+ break;
+ case EGetPolicy:
+ {
+ FilterKeys(iKeys, iLabel1, iIndex);
+ CActiveScheduler::Stop();
+ }
+ break;
+ case EGetApps:
+ {
+ TInt index = 0;
+ FilterCerts(iCertInfos, iLabel1, index);
+ iCertStore->Applications(*iCertInfos[index], iUids, iStatus);
+ CActiveScheduler::Stop();
+ }
+ break;
+ case EGetTrust:
+ {
+ TInt index = 0;
+ FilterCerts(iCertInfos, iLabel1, index);
+ iCertStore->Trusted(*iCertInfos[index], iActualTrust, iStatus);
+ CActiveScheduler::Stop();
+ }
+ break;
+ case EFilter:
+ {
+ TInt index = 0;
+ TBool filteronly = ETrue;
+ if (iLabel1.Length())
+ {
+ iNumCert1 = FilterCerts(iCertInfos, iLabel1, index, filteronly);
+ }
+ if (iLabel2.Length())
+ {
+ iNumCert2 = FilterCerts(iCertInfos, iLabel2, index, filteronly);
+ }
+ CActiveScheduler::Stop();
+ }
+ break;
+ case EDone:
+ {
+ CActiveScheduler::Stop();
+ }
+ break;
+ default:
+ {
+ User::Panic(_L("Testtool Engine - Illegal state"), 0);
+ }
+ }
+ }
+
+TInt CTestToolEngine::RunError(TInt /*aError*/)
+ {
+ CActiveScheduler::Stop();
+
+ return KErrNone;
+ }
+
+
+void CTestToolEngine::DoCancel()
+ {
+ //CActiveScheduler::Stop();
+ }
+
+TVerdict CTestToolEngine::ListCerts(const TDesC& aLabel1, const TInt aExpectedNumLabel)
+ {
+ TVerdict returnValue = EPass;
+ iLabel1.Set(aLabel1);
+
+ Initilize();
+ if (iNumCert1 != aExpectedNumLabel)
+ {
+ returnValue = EFail;
+ }
+ return returnValue;
+ }
+
+
+TVerdict CTestToolEngine::ListCerts(const TDesC& aLabel1, const TDesC& aLabel2, const TInt aExpectedNumLabel)
+ {
+ TVerdict returnValue = EPass;
+ iLabel1.Set(aLabel1);
+ iLabel2.Set(aLabel2);
+
+ Initilize();
+ if (iNumCert1 != aExpectedNumLabel || iNumCert2 != aExpectedNumLabel)
+ {
+ returnValue = EFail;
+ }
+ return returnValue;
+ }
+
+TVerdict CTestToolEngine::ListStore(RPointerArray<HBufC>& aCerts)
+ {
+ TVerdict returnValue = EPass;
+ iCertsCount = aCerts.Count();
+
+ Initilize();
+
+ if (!CompareWithExpectedStore(aCerts))
+ {
+ returnValue = EFail;
+ }
+ return returnValue;
+ }
+
+TVerdict CTestToolEngine::ListCerts(RPointerArray<HBufC>& aCerts)
+ {
+ TVerdict returnValue = EPass;
+ iCertsCount = aCerts.Count();
+
+ Initilize();
+
+ if (!CompareWithExpectedCertificates(aCerts))
+ {
+ returnValue = EFail;
+ }
+ return returnValue;
+ }
+
+TVerdict CTestToolEngine::ListCerts(RPointerArray<HBufC>& aCerts, const TDesC& aLabel)
+ {
+ TVerdict returnValue = EPass;
+ iLabel1.Set(aLabel);
+ iCertsCount = aCerts.Count();
+
+ Initilize();
+ TCertificateOwnerType owner;
+ if (iLabel1.CompareF(KCaType) == KErrNone)
+ {
+ owner = ECACertificate;
+ }
+ else if (iLabel1.CompareF(KUserType) == KErrNone)
+ {
+ owner = EUserCertificate;
+ }
+ else if (iLabel1.CompareF(KPeerType) == KErrNone)
+ {
+ owner = EPeerCertificate;
+ }
+ FilterCerts(iCertInfos, owner);
+ if (!CompareWithExpectedCertificates(aCerts))
+ {
+ returnValue = EFail;
+ }
+ return returnValue;
+ }
+
+TVerdict CTestToolEngine::ListCerts(RPointerArray<HBufC>& aCerts, TInt aStore)
+ {
+ TVerdict returnValue = EPass;
+ iStore = aStore;
+ iCertsCount = aCerts.Count();
+
+ Initilize();
+ if (!CompareWithExpectedCertificates(aCerts))
+ {
+ returnValue = EFail;
+ }
+ return returnValue;
+ }
+
+TVerdict CTestToolEngine::CheckApps(RPointerArray<HBufC>& aApps, const TDesC& aLabel)
+ {
+ TVerdict returnValue = EPass;
+ iAppsCount = aApps.Count();
+ iLabel1.Set(aLabel);
+ Initilize();
+ if (!VerifyApps(aApps))
+ {
+ returnValue = EFail;
+ }
+ return returnValue;
+ }
+
+TVerdict CTestToolEngine::CheckTrust(const TDesC& aLabel,TBool aTrust)
+ {
+ TVerdict returnValue = EPass;
+ iLabel1.Set(aLabel);
+ iGetTrust = 1;
+ Initilize();
+ if (!VerifyTrust(aTrust))
+ {
+ returnValue = EFail;
+ }
+ return returnValue;
+ }
+
+TVerdict CTestToolEngine::ListStoreKey(RPointerArray<HBufC>& aKeys)
+ {
+ TVerdict returnValue = EPass;
+ iKeysListCount = aKeys.Count();
+
+ KeyInitilize();
+
+ if (!CompareWithExpectedStoreKey(aKeys))
+ {
+ returnValue = EFail;
+ }
+ return returnValue;
+ }
+
+TVerdict CTestToolEngine::ListKeys(const TDesC& aLabel1, const TInt aExpectedNumLabel)
+ {
+ TVerdict returnValue = EPass;
+ iLabel1.Set(aLabel1);
+
+ KeyInitilize();
+ if (iNumCert1 != aExpectedNumLabel)
+ {
+ returnValue = EFail;
+ }
+ return returnValue;
+ }
+
+
+TVerdict CTestToolEngine::ListKeys(const TDesC& aLabel1, const TDesC& aLabel2, const TInt aExpectedNumLabel)
+ {
+ TVerdict returnValue = EPass;
+ iLabel1.Set(aLabel1);
+ iLabel2.Set(aLabel2);
+
+ KeyInitilize();
+ if (iNumCert1 != aExpectedNumLabel || iNumCert2 != aExpectedNumLabel)
+ {
+ returnValue = EFail;
+ }
+ return returnValue;
+ }
+
+TVerdict CTestToolEngine::ListKeys(RPointerArray<HBufC>& aKeys, TInt aStore)
+ {
+ TVerdict returnValue = EPass;
+ iStore = aStore;
+ iKeysListCount = aKeys.Count();
+
+ KeyInitilize();
+ if (!CompareWithExpectedKeys(aKeys))
+ {
+ returnValue = EFail;
+ }
+ return returnValue;
+ }
+
+
+TVerdict CTestToolEngine::ListKeys(RPointerArray<HBufC>& aKeys)
+ {
+ TVerdict returnValue = EPass;
+ iKeysListCount = aKeys.Count();
+
+ KeyInitilize();
+
+ if (!CompareWithExpectedKeys(aKeys))
+ {
+ returnValue = EFail;
+ }
+ return returnValue;
+ }
+
+TVerdict CTestToolEngine::GetPolicy(const TDesC& aLabel1, const TDesC& aLabel2, TInt aUser)
+ {
+ TVerdict returnValue = EPass;
+ iLabel1.Set(aLabel1);
+ iLabel2.Set(aLabel2);
+ iPolicy = ETrue;
+ KeyInitilize();
+ VerifyPolicy(aUser);
+
+ return returnValue;
+ }
+
+void CTestToolEngine::Initilize()
+ {
+ iState = EInitialise;
+ iCertStore->Initialize(iStatus);
+ SetActive();
+ CActiveScheduler::Start();
+ }
+
+void CTestToolEngine::KeyInitilize()
+ {
+ iState = EInitialiseKeyStore;
+ iKeyStore->Initialize(iStatus);
+ SetActive();
+ CActiveScheduler::Start();
+ }
+
+TBool CTestToolEngine::VerifyApps(RPointerArray<HBufC>& aApps)
+ {
+ TInt uidsCount = iUids.Count();
+ TInt appsCount = aApps.Count();
+ TBool result = ETrue;
+ if ( uidsCount != appsCount)
+ {
+ return EFalse;
+ }
+ for (TInt i = 0; i < uidsCount; i++)
+ {
+ if (iUids[i] == TUid::Uid(swinstalluid))
+ {
+ result = CheckAppForUid(KSWInstall, aApps);
+ }
+ else if (iUids[i] == TUid::Uid(swinstallocspuid))
+ {
+ result = CheckAppForUid(KSWInstallOCSP, aApps);
+ }
+ else if (iUids[i] == TUid::Uid(midletinstalluid))
+ {
+ result = CheckAppForUid(KMidletInstall, aApps);
+ }
+ else if (iUids[i] == TUid::Uid(tlsuid))
+ {
+ result = CheckAppForUid(KTls, aApps);
+ }
+ else if (iUids[i] == TUid::Uid(tocspuid))
+ {
+ result = CheckAppForUid(KTOcsp, aApps);
+ }
+ else
+ {
+ result = EFalse;
+ }
+ if (!result)
+ {
+ break;
+ }
+ }
+ return result;
+ }
+
+TBool CTestToolEngine::CheckAppForUid(const TDesC& aAppName, RPointerArray<HBufC>& aApps)
+ {
+ TBool result = EFalse;
+ for (TInt i = 0; i < aApps.Count();i++)
+ {
+ if (aAppName.CompareF(*aApps[i]) == KErrNone)
+ {
+ result = ETrue;
+ break;
+ }
+ else
+ {
+ result = EFalse;
+ }
+ }
+ return result;
+ }
+
+TBool CTestToolEngine::VerifyPolicy(TInt aUser)
+ {
+ TBool result = EFalse;
+ _LIT(KCab, "WriteDeviceData");
+ TLex lex(iLabel2);
+ TUid secid;
+ lex.Val(secid.iUid);
+ TCompiledSecurityPolicy managementPolicy = iKeys[iIndex]->ManagementPolicy();
+ TCompiledSecurityPolicy usePolicy = iKeys[iIndex]->UsePolicy();
+ TUint32 mSecureid = managementPolicy.SecureId();
+ TUint32 uSecureid = usePolicy.SecureId();
+
+ if (aUser == 2)
+ {
+ if (mSecureid == 0xffffffff)
+ {
+ TCapability cab = managementPolicy.Capability(0);
+ // currently only possible for keyowner other than secure id.
+ if (cab == ECapabilityWriteDeviceData && iLabel2.CompareF(KCab) == KErrNone)
+ {
+ result = ETrue;
+ }
+ else
+ {
+ result = EFalse;
+ }
+ }
+ else
+ {
+ TUid mSecureUid = TUid::Uid(mSecureid);
+ if (mSecureUid == secid)
+ {
+ result = ETrue;
+ }
+ else
+ {
+ result = EFalse;
+ }
+ }
+ }
+ else if (aUser == 1)
+ {
+ if (uSecureid == 0xffffffff)
+ {
+ TSecurityPolicy::TType utype = usePolicy.Type();
+ _LIT(KType, "ALL");
+ // currently only possible for keyuser other than secure id
+ if (utype == TSecurityPolicy::ETypePass && iLabel2.CompareF(KType) == KErrNone)
+ {
+ result = ETrue;
+ }
+ else
+ {
+ result = EFalse;
+ }
+ }
+ else
+ {
+ TUid uSecureUid = TUid::Uid(uSecureid);
+ if (uSecureUid == secid)
+ {
+ result = ETrue;
+ }
+ else
+ {
+ result = EFalse;
+ }
+ }
+ }
+ return result;
+ }
+
+TInt CTestToolEngine::FilterCerts(RMPointerArray<CCTCertInfo>& aCertList,
+ TDesC& aLabel, TInt& aIndex, TBool aFilterOnly)
+ {
+ TInt j = 0, count = 0;
+ while (j < aCertList.Count())
+ {
+ if ( aCertList[j]->Label().MatchF(aLabel) != KErrNotFound)
+ {
+ count++;
+ if (count == 1)
+ {
+ //first certificate to be selected for retreiving
+ aIndex = j;
+ }
+ j++;
+ }
+ else
+ {
+ if (!aFilterOnly)
+ {
+ CCTCertInfo* tmp = aCertList[j];
+ tmp->Release();
+ aCertList.Remove(j);
+ }
+ else
+ {
+ j++;
+ }
+ }
+ }
+ return count;
+ }
+
+void CTestToolEngine::FilterCerts(RMPointerArray<CCTCertInfo>& aCertList, TCertificateOwnerType& aOwnerType)
+ {
+ TInt j = 0;
+ while (j < aCertList.Count())
+ {
+ if ( aCertList[j]->CertificateOwnerType() != aOwnerType)
+ {
+ CCTCertInfo* tmp = aCertList[j];
+ tmp->Release();
+ aCertList.Remove(j);
+ }
+ else
+ {
+ j++;
+ }
+ }
+ }
+
+
+TInt CTestToolEngine::FilterKeys(RMPointerArray<CCTKeyInfo>& aKeyList,
+ TDesC& aLabel, TInt& aIndex)
+ {
+ TInt j = 0, count = 0;
+ while (j < aKeyList.Count())
+ {
+ if ( aKeyList[j]->Label().MatchF(aLabel) != KErrNotFound)
+ {
+ count++;
+ if (count == 1)
+ {
+ //first key to be selected for retreiving
+ aIndex = j;
+ }
+ j++;
+ }
+ else
+ {
+ j++;
+ }
+ }
+ return count;
+ }
+
+TBool CTestToolEngine::CompareWithExpectedCertificates(RPointerArray<HBufC>& aCerts)
+ {
+ if ( iCertInfos.Count() != aCerts.Count())
+ {
+ return EFalse;
+ }
+ for (TInt i = 0 ; i < iCertInfos.Count(); i++)
+ {
+ const TDesC& label = iCertInfos[i]->Label();
+ TBool found = EFalse;
+ for (TInt j = 0; j < aCerts.Count(); j++)
+ {
+ if (aCerts[j]->CompareF(label) == KErrNone)
+ {
+ found = ETrue;
+ break;
+ }
+ }
+ if (!found)
+ {
+ return EFalse;
+ }
+ }
+ return ETrue;
+ }
+
+
+TBool CTestToolEngine::CompareWithExpectedKeys(RPointerArray<HBufC>& aKeys)
+ {
+ if ( iKeys.Count() != iKeysListCount)
+ {
+ return EFalse;
+ }
+ for (TInt i = 0 ; i < iKeys.Count(); i++)
+ {
+ const TDesC& label = iKeys[i]->Label();
+ TBool found = EFalse;
+ for (TInt j = 0; j < iKeysListCount; j++)
+ {
+ if (aKeys[j]->CompareF(label) == KErrNone)
+ {
+ found = ETrue;
+ break;
+ }
+ }
+ if (!found)
+ {
+ return EFalse;
+ }
+ }
+ return ETrue;
+ }
+
+TBool CTestToolEngine::CompareWithExpectedStore(RPointerArray<HBufC>& aCerts)
+ {
+ TBool result = EFalse;
+ TInt storeCount = iCertStore->CertStoreCount();
+ for (TInt i = 0; i < storeCount ; i++)
+ {
+ result = EFalse;
+ MCTToken& token = (iCertStore->CertStore(i)).Token();
+ const TDesC& tmp = token.Label();
+ for (TInt j = 0; j < aCerts.Count(); j++)
+ {
+ if (tmp.CompareF(*aCerts[j]) == KErrNone)
+ {
+ result = ETrue;
+ break;
+ }
+ }
+ if (!result)
+ {
+ break;
+ }
+ }
+ return result;
+ }
+
+
+TBool CTestToolEngine::CompareWithExpectedStoreKey(RPointerArray<HBufC>& aKeys)
+ {
+ TBool result = EFalse;
+ TInt storeCount = iKeyStore->KeyStoreCount();
+ for (TInt i = 0; i < storeCount ; i++)
+ {
+ result = EFalse;
+ MCTToken& token = (iKeyStore->KeyStore(i)).Token();
+ const TDesC& tmp = token.Label();
+ for (TInt j = 0; j < aKeys.Count(); j++)
+ {
+ if (tmp.CompareF(*aKeys[j]) == KErrNone)
+ {
+ result = ETrue;
+ break;
+ }
+ }
+ if (!result)
+ {
+ break;
+ }
+ }
+ return result;
+ }
+
+
+
+TBool CTestToolEngine::VerifyTrust(TBool aTrust)
+ {
+ TBool result = EFalse;
+ if (aTrust == iActualTrust)
+ {
+ result = ETrue;
+ }
+ else
+ {
+ result = EFalse;
+ }
+ return result;
+ }