--- a/cryptoservices/certificateandkeymgmt/tpkcs12intgrtn/src/tpkcs12libteststep.cpp Tue Jul 21 01:04:32 2009 +0100
+++ b/cryptoservices/certificateandkeymgmt/tpkcs12intgrtn/src/tpkcs12libteststep.cpp Thu Sep 10 14:01:51 2009 +0300
@@ -1,1429 +1,1429 @@
-/*
-* Copyright (c) 2005-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:
-* This file is used for the verification function of the pkcs12 file
-*
-*/
-
-
-
-
-/**
- @file
- @internalTechnology
-*/
-
-// System Include
-#include <testexecutelog.h>
-
-//User Include
-#include "tpkcs12libteststep.h"
-#include "tpkcs12data.h"
-#include "tpkcs12common.h"
-
-using namespace PKCS12;
-
-const TInt KBagDataLength = 7;
-const TInt KContentInfoLength = 11;
-/**
-Description:constructor:used for initialization of the variables declared
-@test
-@internalTechnology
-*/
-CPKCS12LibTestStep::CPKCS12LibTestStep()
- {
- iActualResult=ETrue;
- iUnitTest=EFalse;
- iUnitTestContinueFlag = ETrue;
- iExpectedError = ETrue;
- iExpectedResult=KPositiveTest;
- }
-/**
-Description:Destructor
-@test
-@internalTechnology
-*/
-CPKCS12LibTestStep::~CPKCS12LibTestStep()
- {
- iFileSession.Close();
- delete iParser;
- iPrivacyPassword.ResetAndDestroy();
- }
-
-/**
-Function is intended to parse the pkcs12 file, compare the results and
-log the same
-@internalTechnology:
-@return:TVerdict -returns EFail if there is a failure else EPass
-@test
-@leave:- if memory allocation fails
-*/
-TVerdict CPKCS12LibTestStep::doTestStepL()
- {
- //__UHEAP_MARK;
- TPtrC integrityMode(KNullDesC);
- TPtrC integrityPassword(KNullDesC);
- TPtrC privacyPassword(KNullDesC);
- TPtrC dataPath(KNullDesC);
- TBool flagReturn=ETrue;
-
-
- if(iFileSession.Connect())
- {
- INFO_PRINTF1(_L("File server session failed"));
- flagReturn=EFalse;
- }
-
- if(flagReturn)
- {
- if((!GetStringFromConfig(KMainSec,KFilePath,dataPath)) ||
- !GetStringFromConfig(KMainSec,KIntegrityMode,integrityMode))
- {
- SetTestStepResult(EAbort);
- ERR_PRINTF1(_L("Input Data not found in ini file"));
- flagReturn=EFalse;
- }
- }
- //Check the input
- if(flagReturn)
- {
- if(!GetBoolFromConfig(KMainSec,KUnitTest,iUnitTest))
- {
- iUnitTest=EFalse;
- }
- //Password Integrity Mode
- if(integrityMode.CompareF(KPassword)==0)
- {
- if(!GetStringFromConfig(KMainSec,KIntegrityPassword,integrityPassword))
- {
- ERR_PRINTF1(_L("Problem in the Main section of the ini file"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- }
- else
- {
-
- iParser = CPkcs12Parser::NewL();
- // set the integrity password
- iParser->SetIntegrityPasswordL(integrityPassword);
- // set the datapath
- iParser->SetDataL(dataPath);
- //set the privacy password
- ParsePrivacyPwdL();
- //parse the pkcs12 file
- iParser->ParseL();
-
- if(!GetBoolFromConfig(KMainSec,KIntegrityValid,iExpectedResult))
- {
- WARN_PRINTF1(_L("Integrity valid not found in ini file"));
- iExpectedResult=KPositiveTest;
- }
- if(!VerifyMainSecL())
- {
- ERR_PRINTF1(_L("Main section failed"));
- flagReturn=EFalse;
- }
- else if(!iUnitTestContinueFlag)
- {
- SetTestStepResult(EPass);
- delete iParser;
- iParser = NULL;
- flagReturn = EFalse;
- }
- }
- }
- else if(integrityMode.CompareF(KPublicIntegrity)==0)
- {
- //public Integrity Mode
- }
- else
- {
- ERR_PRINTF1(_L("Integrity pwd not known in ini file"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- }
- }
- if(flagReturn)
- {
- //Check the Authenticated safe section
- if(!VerifyAuthSafe())
- {
- ERR_PRINTF1(_L("Authenticated safe section failed"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- }
- else if(!iUnitTestContinueFlag )
- {
- SetTestStepResult(EPass);
- delete iParser;
- iParser = NULL;
- flagReturn = EFalse;
- }
- }
- if(flagReturn)
- {
- //calculate the totalsafebags in the pkcs12 file
- TInt totalsafebags = iParser->PfxHeader().TotalSafeBagCount();
-
- //calculate the totalbags(including the safecontentsbag) in the pkcs12 file
- TInt totalbags = totalsafebags + iParser->PfxHeader().SafecontentBagCount();
-
- //Check the BagData section
- if(!ChkBagDataL(totalsafebags,totalbags))
- {
- ERR_PRINTF1(_L("Bag Data section failed"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- }
- else if(!iUnitTestContinueFlag)
- {
- delete iParser;
- iParser = NULL;
- flagReturn = EFalse;
- }
- }
- if(flagReturn)
- {
- SetTestStepResult(EPass);
- }
-
- //__UHEAP_MARKEND;
- return TestStepResult();
- }
-/**
-Function is intended to verify the expected error in each section of the ini file
-@internalTechnology:
-@return:TBool:returns EFalse if there is a failure else ETrue
-@test:
-*/
-TBool CPKCS12LibTestStep::VerifyExpectedError(const TDesC& aSecName)
- {
- TBool flagReturn = ETrue;
- if ( iUnitTest )
- {
- if(GetIntFromConfig(aSecName,KExpectedError,iExpectedError)==EFalse)
- {
- INFO_PRINTF1(_L("ExpectedError not found in INI File"));
- }
- // Checks the error returned by the library with the expected error read
- // from the INI file.
- TInt actualError = 0;
-
- if ( (!aSecName.Compare(KMainSec) || !aSecName.Compare(KAuthSafeSec) ||
- !aSecName.Compare(_L("MacData")) || (!aSecName.Left(KBagDataLength).Compare(KBagDataSec)) ||
- (!aSecName.Left(KContentInfoLength).CompareF(KContentInfoKey))) && !iExpectedResult )
- {
- actualError = iParser->PfxHeader().Pkcs12ActualError();
- }
- if (actualError == iExpectedError)
- {
- INFO_PRINTF1(_L("ExpectedError matchs"));
- iUnitTestContinueFlag = EFalse;
- iExpectedResult = ETrue;
- }
- }
-
- if(iExpectedResult!=iActualResult)
- {
- SetTestStepResult(EFail);
- flagReturn= EFalse;
- }
- iActualResult = ETrue;
- return flagReturn;
- }
-/**
-Function is intended to set the privacy passwords of the contentinfotype
-@internalTechnology:
-@test:
-@leave: if leave occurs if memory allocation fails
-*/
-void CPKCS12LibTestStep::ParsePrivacyPwdL()
- {
- TPtrC pass(KNullDesC);
- //to append the number to get the actual key value
- TInt count=0;
- //return value
- TBool privacyPwdPresent=EFalse;
-
- //Put all the content info privacy passwords in an array
- do
- {
- TBuf<KPrivacyPwdStrLen> privacyPwdBuf(KPrivacyPassword);
- pass.Set(KNullDesC);
- count++;
- //appending the count to the Keyvalue
- privacyPwdBuf.AppendNum(count);
- privacyPwdPresent=GetStringFromConfig(KMainSec,privacyPwdBuf,pass);
- if(privacyPwdPresent)
- {
- HBufC *temp=pass.AllocLC();
- iPrivacyPassword.AppendL(temp);
- CleanupStack::Pop(temp);
- }
- }while(privacyPwdPresent);
- iParser->SetPrivacyPassword(iPrivacyPassword);
- }
-/**
-Function is intended to parse the main section of the ini file
-@internalTechnology:
-@return:returns EFalse if there is a failure else ETrue
-@test:
-*/
-TBool CPKCS12LibTestStep::VerifyMainSecL()
- {
- TBool mac=EFalse;
- TBool flagReturn=ETrue;
-
- //retrieve the expected result:PositiveTest/NegativeTest
- if(!GetBoolFromConfig(KMainSec,KExpectedResult,iExpectedResult))
- {
- WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
- iExpectedResult=KPositiveTest;
- }
- if(!GetBoolFromConfig(KMainSec,KMacPresent,mac))
- {
- WARN_PRINTF1(_L("Mac present not found in ini file"));
- //default only integration test
- mac=EFalse;
- }
- else if(mac && iUnitTest)
- {
- //call the mac data function and check for all the macdata section values
- iActualResult=ChkMacValueL();
- if (!iUnitTestContinueFlag)
- {
- return flagReturn;
- }
- }
- if(!VerifyExpectedError(KMainSec))
- {
- SetTestStepResult(EFail);
- flagReturn = EFalse;
- }
- return flagReturn;
- }
-/**
-Function is intended to parse the AuthSafe section of the ini file
-@internalTechnology:
-@return:returns EFalse if there is a failure else ETrue
-@test:
-*/
-TBool CPKCS12LibTestStep::VerifyAuthSafe()
- {
- TInt contentInfoCount=0;
- TPtrC contentSection(KNullDesC);
- TInt contentIndex=0;
- TBool flagReturn=ETrue;
-
- if(!GetIntFromConfig(KAuthSafeSec,KContentInfoNum,contentInfoCount))
- {
- ERR_PRINTF1(_L("Count not available in the inifile"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- }
- //retrieve the expected result:PositiveTest/NegativeTest
- if(GetIntFromConfig(KAuthSafeSec,KExpectedResult,iExpectedResult)==EFalse)
- {
- INFO_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
- }
- //verify positive or negative test
- if(!VerifyExpectedError(KAuthSafeSec()))
- {
- INFO_PRINTF1(_L("Content Info Failure"));
- SetTestStepResult(EFail);
- flagReturn = EFalse;
- }
- else if(!iUnitTestContinueFlag)
- {
- return flagReturn;
- }
- for(TInt i=1;i<=contentInfoCount;i++)
- {
- TBuf<KContentInfoBufLen> contentBuf(KContentInfoKey);
- //Append the counter to the keyname
- contentBuf.AppendNum(i);
- if(!GetStringFromConfig(KAuthSafeSec,contentBuf,contentSection))
- {
- ERR_PRINTF1(_L("ContentSection not available in the inifile"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- break;
- }
- //retrieve the expected result:PositiveTest/NegativeTest
- if(GetIntFromConfig(contentSection,KExpectedResult,iExpectedResult)==EFalse)
- {
- INFO_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
- iExpectedResult=KPositiveTest;
- }
- // Verify before calling array to access the data.
- if(!VerifyExpectedError(contentSection))
- {
- INFO_PRINTF1(_L("Content Info Failure"));
- SetTestStepResult(EFail);
- flagReturn = EFalse;
- break;
- }
- else if(!iUnitTestContinueFlag)
- {
- flagReturn = ETrue;
- break;
- }
- //Call the function for checking the contentinfo,pass the contntsction as parameter
- iBagData=iParser->ArraySafeBagData()[contentIndex];
- contentIndex++;
- //Check the contentinfo type
- iActualResult=ChkCIType(contentSection,*iBagData);
- }
- return flagReturn;
- }
-/**
-Function is intended to parse the BagData section of the ini file
-@param-aTotalsafebags:total number of safebags
-@param-aTotalbags:total number of bags including the safecontentbags
-@internalTechnology:
-@return:returns EFalse if there is a failure else return ETrue
-@test:
-@leave: if leave occurs at the ChkBagValL function
-*/
-TBool CPKCS12LibTestStep::ChkBagDataL(TInt aTotalsafebags,TInt aTotalbags)
- {
- TInt bagType=0;
- TInt safeContentIndex=0;
- TInt safeBagIndex=0;
- CSafeContentBag* safeContentBag;
- TBool flagReturn=ETrue;
-
- TInt totalSafeContentsBag = iParser->PfxHeader().SafecontentBagCount();
-
-
- //loop for the totalbags
- for(TInt bags=0;bags<aTotalbags;bags++)
- {
- TBuf<KBagDataSecBufLen> bagSection(KBagDataSec);
- //Append the bags to the sectionname :BagData1
- bagSection.AppendNum(bags+1);
- if(!GetIntFromConfig(bagSection,KBagType,bagType))
- {
- ERR_PRINTF1(_L("Not able to get the BagType from the ini file"));
- flagReturn=EFalse;
- break;
- }
- if(bagType == CDecPkcs12SafeBag::ESafeContentsBag && flagReturn)
- {
- //loop for the safecontents bags
- while(safeContentIndex < totalSafeContentsBag && flagReturn)
- {
- safeContentBag=iParser->ArraySafeContentBag()[safeContentIndex];
- if(!ChkSafeContsBagData(bagSection,*safeContentBag))
- {
- ERR_PRINTF1(_L("SafeContent Bag Failed"));
- flagReturn=EFalse;
- }
- safeContentIndex++;
- break;
- }
- }
- else
- {
- while(safeBagIndex < aTotalsafebags && flagReturn)
- {
- //retrieve the safebag sructure pointer
- iBagData=iParser->ArraySafeBagData()[safeBagIndex];
- //Chk the BagType
- if(!ChkBagType(bagSection,*iBagData,bagType))
- {
- ERR_PRINTF1(_L("Bag Type does not match"));
- flagReturn=EFalse;
- break;
- }
- if(!iUnitTestContinueFlag)
- {
- break;
- }
- iBagAttrNumVal=0;
- if(!ChkBagAttbutesL(bagSection,*iBagData))
- {
- ERR_PRINTF1(_L("Failure in Attributes"));
- flagReturn=EFalse;
- break;
- }
- switch(bagType)
- {
- case CDecPkcs12SafeBag::ECertBag:
- {
- //check the bagvalue
- if(!ChkBagValL(bagSection,*iBagData))
- {
- flagReturn=EFalse;
- ERR_PRINTF1(_L("Certificate Bag Value comparison Failed"));
- }
- //check the certificate type
- if(flagReturn)
- {
- if(!ChkCertId(bagSection,*iBagData))
- {
- flagReturn=EFalse;
- ERR_PRINTF1(_L("Certificate Bag certID comparison Failed"));
- }
- }
- break;
- }
- case CDecPkcs12SafeBag::EKeyBag:
- {
- if(!ChkBagValL(bagSection,*iBagData))
- {
- flagReturn = EFalse;
- ERR_PRINTF1(_L("Key Bag Failed"));
- }
- break;
- }
- case CDecPkcs12SafeBag::EShroudedKeyBag:
- {
- if(!ChkEncodedBagValL(bagSection,*iBagData))
- {
- flagReturn = EFalse;
- ERR_PRINTF1(_L("Shrouded Bag Failed"));
- }
- break;
- }
- case CDecPkcs12SafeBag::ECrlBag:
- {
- break;
- }
- case CDecPkcs12SafeBag::ESecretBag:
- {
- break;
- }
- }
- if(flagReturn)
- {
- safeBagIndex++;
- break;
- }
- }
- }
- }
-
- return flagReturn;
- }
-/**
-Function is intended to check the safecontents bag
-@param-aSec:BagData Section
-@param-aSfContBag:safecontent class pointer
-@internalTechnology:
-@return:returns EFalse if there is a failure else return ETrue
-@test:
-*/
-TBool CPKCS12LibTestStep::ChkSafeContsBagData(TDesC& aSec,CSafeContentBag &aSfContBag)
- {
- TInt safeContentsCount=0;
- TBool flagReturn=ETrue;
- //retrieve the safecontentsbag count from ini file
- if(!GetIntFromConfig(aSec,KSafeBagsCount,safeContentsCount))
- {
- ERR_PRINTF1(_L("SafeContent Bags count not found in INI file"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- }
- //compare the data with the ini file data
- if(safeContentsCount != aSfContBag.SafeBagCount() && flagReturn)
- {
- ERR_PRINTF1(_L("Number of Bags in the safecontent bag is different"));
- iActualResult=EFalse;
- }
- //retrieve the expected result:PositiveTest/NegativeTest
- if(!GetBoolFromConfig(aSec,KExpectedResult,iExpectedResult))
- {
- INFO_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
- iExpectedResult=KPositiveTest;
- }
- //check whether its a positive or a negative test
- if(flagReturn)
- {
- //check whether its a positive or a negative test
- if(!VerifyExpectedError(aSec))
- {
- INFO_PRINTF1(_L("SafeContentsBag Failed"));
- SetTestStepResult(EFail);
- flagReturn = EFalse;
- }
- }
- return flagReturn;
- }
-/**
-Function is intended to check the content info type
-@param-aSecName:BagData Section
-@param-aBagData:safebag class pointer
-@internalTechnology:
-@return:returns EFalse if there is a failure else return ETrue
-@test:
-*/
-TBool CPKCS12LibTestStep::ChkCIType(TDesC &aSecName,CSafeBagData &aBagData)
- {
- TInt contentType=0;
- TBool flagReturn=ETrue;
- //retrieve the contentype from the ini file
- if(!GetIntFromConfig(aSecName,KContentInfoType,contentType))
- {
- ERR_PRINTF1(_L("ContentInfoType value not found in INI file"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- }
- //compare the contentype with the ini file data
- if(flagReturn)
- {
- if(aBagData.ContentInfoType() != contentType)
- {
- iActualResult=EFalse;
- INFO_PRINTF1(_L("ContentType Comparison Failed"));
- }
- //retrieve the expected result:PositiveTest/NegativeTest
- if(!GetBoolFromConfig(aSecName,KExpectedResult,iExpectedResult))
- {
- WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
- iExpectedResult=KPositiveTest;
- }
- //check whether its a positive or a negative test
- if(!VerifyExpectedError(aSecName))
- {
- INFO_PRINTF1(_L("ContentInfo Failed"));
- SetTestStepResult(EFail);
- flagReturn = EFalse;
- }
- }
- return flagReturn;
- }
-/**
-Function is intended to check the bag type
-@param-aSec:BagData Section
-@param-aBgDta:safebag class pointer
-@param-aId:Bag ID
-@internalTechnology:
-@return:returns EFalse if there is a failure else return ETrue
-@test:
-*/
-TBool CPKCS12LibTestStep::ChkBagType(TDesC &aSec,CSafeBagData &aBagData,TInt aId)
- {
- TBool flagReturn=ETrue;
-
- //check for the bagid
- if(aId != aBagData.BagType())
- {
- iActualResult=EFalse;
- INFO_PRINTF1(_L("BagType Comparision Failed"));
- }
-
- //retrieve the expected result:PositiveTest/NegativeTest
- if(!GetBoolFromConfig(aSec,KExpectedResult,iExpectedResult))
- {
- WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
- iExpectedResult=KPositiveTest;
- }
-
- //check whether its a positive or a negative test
- if(!VerifyExpectedError(aSec))
- {
- INFO_PRINTF1(_L("BagType Failed"));
- SetTestStepResult(EFail);
- flagReturn = EFalse;
- }
- return flagReturn;
- }
-/**
-Function is intended to check the bag attributes
-@param-aSec:BagData Section
-@param-aBagData:safebag class pointer
-@internalTechnology:
-@return:returns EFalse if there is a failure else return ETrue
-@test:
-*/
-TBool CPKCS12LibTestStep::ChkBagAttbutesL(TDesC &aSec,CSafeBagData &aBagData)
- {
- TInt numAttr=0;
- TInt count=0;
- TPtrC attrSec(KNullDesC);
- TBool flagReturn=ETrue;
-
- //retrieve the number of attributes
- if(!GetIntFromConfig(aSec,KBagAttributesNum,numAttr))
- {
- WARN_PRINTF1(_L("Number of attributes not found in INI file"));
- }
-
- for(TInt attrindex=0;attrindex < numAttr;attrindex++)
- {
- TBuf<KAttributeBufLen> attrBuf(KBagAttributesKey);
- //increment the attr counter
- count++;
- //appending to get the attr key from the ini file
- attrBuf.AppendNum(count);
-
- if(!GetStringFromConfig(aSec,attrBuf,attrSec))
- {
- ERR_PRINTF1(_L("Number of attributes not found in INI file"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- break;
- }
- //retrieve the expected result:PositiveTest/NegativeTest
- if(!GetBoolFromConfig(aSec,KExpectedResult,iExpectedResult))
- {
- WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
- iExpectedResult=KPositiveTest;
- }
- //check whether its a positive or a negative test
- if(!VerifyExpectedError(aSec))
- {
- INFO_PRINTF1(_L("BagAttributes Failed"));
- SetTestStepResult(EFail);
- flagReturn = EFalse;
- }
- else if(!iUnitTestContinueFlag)
- {
- flagReturn = ETrue;
- break;
- }
- //retrieve the expected result:PositiveTest/NegativeTest
- if(!GetBoolFromConfig(aSec,KExpectedResult,iExpectedResult))
- {
- WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
- iExpectedResult=KPositiveTest;
- }
- //check whether its a positive or a negative test
- if(!VerifyExpectedError(aSec))
- {
- INFO_PRINTF1(_L("BagAttributes Failed"));
- SetTestStepResult(EFail);
- flagReturn = EFalse;
- }
- else if(!iUnitTestContinueFlag)
- {
- flagReturn = ETrue;
- break;
- }
- //Check the BagAttribute section
- if(!ChkAtrSecL(attrSec,aBagData,attrindex))
- {
- ERR_PRINTF1(_L("Attributes comparison failed"));
- flagReturn=EFalse;
- break;
- }
- }
- return flagReturn;
- }
-/**
-Function is intended to check the attribute section
-@param-aSec:BagData Section
-@param-aBgDta:safebag class pointer
-@param-aIndx:attribute index
-@param-aAttrindex:attribute index
-@internalTechnology:
-@return:returns EFalse if there is a failure else return ETrue
-@test:
-@leave: if leave occurs if ChkAtrValL fails
-*/
-TBool CPKCS12LibTestStep::ChkAtrSecL(TDesC &aSec,CSafeBagData &aBagData,TInt aIndex)
- {
- TPtrC attrId(KNullDesC);
- TInt numVal=0;
- CSafeBagAttribute *bagAttr;
- TPtrC friendlyName(KFriendlyNameOid);
- TPtrC localKey(KLocalKeyOid);
- TBool flagReturn=ETrue;
-
- //retrieve the attribute id
- if(!GetStringFromConfig(aSec,KBagAttributesID,attrId))
- {
- ERR_PRINTF1(_L("attribute id not found in INI file"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- }
- if(flagReturn)
- {
- //retrieve the number of values
- if(!GetIntFromConfig(aSec,KBagAttributeValuesNum,numVal))
- {
- ERR_PRINTF1(_L("total number of attribute values not found in INI file"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- }
- }
- if(flagReturn)
- {
- bagAttr = aBagData.iAttributeIDs[aIndex];
-
- //increment the Number of BagAttrValues
- iBagAttrNumVal+=numVal;
-
- //compare the attrval count and the attrid
- if((bagAttr->AttributeValueCount()!=numVal) ||
- (attrId.CompareF((bagAttr->AttributeId()))!=0))
- {
- iActualResult=EFalse;
- }
- else if((friendlyName.CompareF((bagAttr->AttributeId()))==0) ||
- (localKey.CompareF((bagAttr->AttributeId()))==0))
- {
- //Check for BagAttribute values
- if(!ChkAtrValL(aSec,aBagData,numVal))
- {
- iActualResult=EFalse;
- }
- }
- //retrieve the expected result:PositiveTest/NegativeTest
- if(!GetBoolFromConfig(aSec,KExpectedResult,iExpectedResult))
- {
- WARN_PRINTF1(_L("ExpectedResult not found in INI file"));
- iExpectedResult=KPositiveTest;
- }
- //check for positive or negative test
- if(!VerifyExpectedError(aSec))
- {
- INFO_PRINTF1(_L("Attributes Comparison Test Case failed"));
- SetTestStepResult(EFail);
- flagReturn = EFalse;
- }
-
- }
- //retrieve the bag attribute structure pointer
- return flagReturn;
- }
-/**
-Function is intended to check the attribute values
-@param-aSec:BagData Section
-@param-aBgDta:safebag class pointer
-@param-aNum:Bagattribute value count
-@param-aAtr:Bagattribute ID
-@param-aNumVal:Bagattribute value count
-@internalTechnology:
-@return:returns EFalse if there is a failure else return ETrue
-@test:
-@leave: if memory allocation of buffer fails
-*/
-TBool CPKCS12LibTestStep::ChkAtrValL(TDesC &aSec,CSafeBagData &aBagData,TInt aNum)
- {
- TInt start=iBagAttrNumVal - aNum;
- TInt end=iBagAttrNumVal + aNum;
-
- TBool flagReturn=ETrue;
- TInt index=0;
- TPtrC value(KNullDesC);
-
- HBufC8 *bufferVal;
-
- //loop till the total number of values
- do
- {
- TBuf<KBagValBufLen> bagVal(KBagAttributeValue);
- //increment the index to append the count
- index++;
- //append the value
- bagVal.AppendNum(index);
- //retrieve the value from the ini file
- if(!GetStringFromConfig(aSec,bagVal,value))
- {
- ERR_PRINTF1(_L("Bag Value not found in the ini file"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- break;
- }
- for(TInt startIndex=start;startIndex<end;startIndex++)
- {
- bufferVal=aBagData.iAttributeValues[startIndex];
-
- //check the local key value
- if(!CompareFileDataL(value,*bufferVal))
- {
- ERR_PRINTF1(_L("Bag Attribute Value comparison failed"));
- iActualResult=EFalse;
- break;
- }
- else
- {
- iActualResult=ETrue;
- break;
- }
- }
- //retrieve the expected result:PositiveTest/NegativeTest
- if(!GetBoolFromConfig(aSec,KExpectedResult,iExpectedResult))
- {
- WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
- iExpectedResult=KPositiveTest;
- }
- //check for positive or negative test
- if(!VerifyExpectedError(aSec))
- {
- INFO_PRINTF1(_L("Bag Value Test failed"));
- SetTestStepResult(EFail);
- flagReturn = EFalse;
- break;
- }
- else if(!iUnitTestContinueFlag)
- {
- break;
- }
- }while(index<aNum);
- return flagReturn;
- }
-/**
-Function is intended to check the value.
-@param-aPValue:filepath containing the path of the file
- retrieved from the ini file
-@param-aBufferVal:Value retrieved after parsing the pkcs12 file
-@internalTechnology:
-@return:returns EFalse if there is a failure else return ETrue
-@test:
-@leave: if leave occurs if openfile fails or allocation to buffer fails
-*/
-TBool CPKCS12LibTestStep::CompareFileDataL(TDesC &aPValue,TDesC8 &aBufferVal)
- {
- RFile file;
- TInt fileSize=0;
- TBool flagReturn=ETrue;
- // Negative Test: If mac/ macSalt is not present.
- if (&aBufferVal)
- {
- //open the file
- User::LeaveIfError(file.Open(iFileSession,aPValue,EFileRead));
- User::LeaveIfError(file.Size(fileSize));
- //raw data for reading the bagvalue
- HBufC8 *rawData=HBufC8::NewMaxLC(fileSize);
- //converting the HBufC8 to TPtr8
- TPtr8 data(rawData->Des());
- //read the contents of the file
- User::LeaveIfError(file.Read(data));
- //compare the value
- if(rawData->CompareF(aBufferVal)!=0)
- {
- ERR_PRINTF1(_L("comparison failed"));
- flagReturn=EFalse;
- }
- //closes the data file
- file.Close();
-
- CleanupStack::PopAndDestroy(rawData);
- }
- return flagReturn;
- }
-/**
-Function is intended to check the algorithm id
-@param-aSecName:BagData Section
-@param-aBagData:safebagdata class pointer
-@internalTechnology:
-@return:returns EFalse if there is a failure else return ETrue
-@test:
-*/
-TBool CPKCS12LibTestStep::ChkAlgId(TDesC &aSecName,CSafeBagData &aBagData)
- {
- TPtrC algorithm(KNullDesC);
- TBool flagReturn=ETrue;
- //retrieve the algorithm section name
- if(!GetStringFromConfig(aSecName,_L("Algorithm"),algorithm))
- {
- ERR_PRINTF1(_L("AlgorithmID value not found in INI file"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- }
- if(flagReturn)
- {
- if(algorithm.CompareF((aBagData.AlgorithmId()))!=0)
- {
- iActualResult=EFalse;
- }
- //retrieve the expected result:PositiveTest/NegativeTest
- if(!GetBoolFromConfig(aSecName,KExpectedResult,iExpectedResult))
- {
- WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
- iExpectedResult=KPositiveTest;
- }
- //check for positive oor negative test
- if(!VerifyExpectedError(aSecName))
- {
- INFO_PRINTF1(_L("Algorithm Comparison Test Case failed"));
- SetTestStepResult(EFail);
- flagReturn = EFalse;
- }
- }
- return flagReturn;
- }
-/**
-Function is intended to check the certificate type
-@param-aSecName:BagData Section
-@param-aBagData:safebagdata class pointer
-@internalTechnology:
-@return:returns EFalse if there is a failure else return ETrue
-@test:
-*/
-TBool CPKCS12LibTestStep::ChkCertId(TDesC &aSecName,CSafeBagData &aBagData)
- {
- TPtrC certid(KNullDesC);
- TBool flagReturn=ETrue;
- //retrieve the cert name from ini file
- if(!GetStringFromConfig(aSecName,KCertType,certid))
- {
- ERR_PRINTF1(_L("certificateID value not found in INI file"));
- SetTestStepResult(EFail);
- flagReturn= EFalse;
- }
- if(flagReturn)
- {
- if(certid.CompareF((aBagData.CertificateId()))!=0)
- {
- INFO_PRINTF1(_L("certificateID comparision Failed"));
- iActualResult=EFalse;
- }
- //retrieve the expected result:PositiveTest/NegativeTest
- if(!GetBoolFromConfig(aSecName,KExpectedResult,iExpectedResult))
- {
- WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
- iExpectedResult=KPositiveTest;
- }
- //check for positive or negative test
- if(!VerifyExpectedError(aSecName))
- {
- INFO_PRINTF1(_L("Certificate Comparison Test Case failed"));
- SetTestStepResult(EFail);
- flagReturn = EFalse;
- }
- }
- return flagReturn;
- }
-/**
-Function is intended to check for the bag value
-@param-aSecName:BagData Section
-@param-aBagData:safebag class pointer
-@internalTechnology:
-@return:returns EFalse if there is a failure else return ETrue
-@test:
-*/
-TBool CPKCS12LibTestStep::ChkBagValL(TDesC &aSecName,CSafeBagData &aBagData)
- {
- TPtrC certBagPath(KNullDesC);
- TBool flagReturn=ETrue;
-
- //retrieve the certificate bag value
- if(!GetStringFromConfig(aSecName,KBagValue,certBagPath))
- {
- ERR_PRINTF1(_L("Not able to get the CertBagValue from the ini file"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- }
- TInt fileReturn=0;
- RFile file;
-
- if(flagReturn)
- {
- fileReturn=file.Open(iFileSession,certBagPath,EFileRead);
-
- if(fileReturn)
- {
- ERR_PRINTF1(_L("CertBagValue:Not able to open the file"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- }
- }
- //raw data for reading the bagvalue
- HBufC8 *rawData=NULL;
- TInt filesize=0;
- if(flagReturn)
- {
- User::LeaveIfError(file.Size(filesize));
- rawData=HBufC8::NewMaxLC(filesize);
- TPtr8 data(rawData->Des());
- if(file.Read(data))
- {
- ERR_PRINTF1(_L("CertBagValue:Not able to Read the file"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- }
- }
- if(flagReturn)
- {
- //compare the data
- if(rawData->CompareF(aBagData.BagValue())!=0)
- {
- iActualResult=EFalse;
- }
- //retrieve the expected result:PositiveTest/NegativeTest
- if(!GetBoolFromConfig(aSecName,KExpectedResult,iExpectedResult))
- {
- WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
- iExpectedResult=KPositiveTest;
- }
- //check for positive or negative test
- if(!VerifyExpectedError(aSecName))
- {
- INFO_PRINTF1(_L("BagValue Failed"));
- SetTestStepResult(EFail);
- flagReturn = EFalse;
- }
- }
- if(rawData!=NULL)
- {
- CleanupStack::PopAndDestroy(rawData);
- }
- if(!fileReturn)
- {
- file.Close();
- }
- return flagReturn;
- }
-/**
-Function is intended to check for the mac value
-@internalTechnology:
-@return:returns EFalse if there is a failure else return ETrue
-@test:
-@leave: if leave occurs at the CompareFileDataL function
-*/
-TBool CPKCS12LibTestStep::ChkMacValueL()
- {
- TPtrC mac(KNullDesC);
- TPtrC macSalt(KNullDesC);
- TPtrC secName(_S("MacData"));
- TPtrC expectedError(KNullDesC);
- TInt itCount=0;
- TBool flagReturn=ETrue;
-
- //retrieve the macid,macsalt and iteration count
- if((!GetStringFromConfig(secName,KMac,mac)) ||
- (!GetStringFromConfig(secName,KMacSalt,macSalt)) ||
- (!GetIntFromConfig(secName,KIterationCount,itCount)))
- {
- ERR_PRINTF1(_L("Not able to access the mac values from ini file"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- }
- //comapre the data with the ini file
- if((CompareFileDataL(mac,iParser->PfxHeader().MacId()) ==0)||
- (CompareFileDataL(macSalt,iParser->PfxHeader().MacSalt()) == 0)||
- (itCount!=iParser->PfxHeader().IterationCount()))
- {
- WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
- flagReturn=EFalse;
- }
- //retrieve the expected result:PositiveTest/NegativeTest
- if(!GetBoolFromConfig(secName,KExpectedResult,iExpectedResult))
- {
- WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
- iExpectedResult=KPositiveTest;
- }
- if(!VerifyExpectedError(secName))
- {
- SetTestStepResult(EFail);
- flagReturn = EFalse;
- }
- return flagReturn;
- }
-
-CTPKCS12OOMStep::CTPKCS12OOMStep()
- {
-
- }
-CTPKCS12OOMStep::~CTPKCS12OOMStep()
- {
- delete iRawData;
- delete iAuthSafeData;
- iFs.Close();
- }
-/**
-Function is intended to do the OOM test.
-@internalTechnology:
-@return:TVerdict -returns EFail if there is a failure else EPass
-@leave:- if memory allocation fails
-@test
-*/
-TVerdict CTPKCS12OOMStep::doTestStepL()
- {
- TInt OOMTest;
- GetIntFromConfig(ConfigSection(),_L("OOMTest"),OOMTest);
-
- __UHEAP_MARK;
-
- switch(OOMTest)
- {
- case 1:
- {
- CDecPkcs12* theTest = NULL;
- theTest = CDecPkcs12::NewL(iRawData->Des());
- delete theTest;
- }
- break;
- // File Stream
- case 2:
- {
- TPtrC fileName;
- GetStringFromConfig(ConfigSection(), _L("File"), fileName);
-
- RFile file;
- User::LeaveIfError(file.Open(iFs, fileName, EFileRead) );
-
- TInt size;
- file.Size(size);
- file.Close();
-
- HBufC8* res = HBufC8::NewLC(size);
- TPtr8 p(res->Des());
- p.SetLength(size);
-
- RFileReadStream stream;
- User::LeaveIfError(stream.Open(iFs, fileName, EFileStream));
- CleanupClosePushL(stream);
-
- stream.ReadL(p, size);
-
- CDecPkcs12* theTest = NULL;
- theTest = CDecPkcs12::NewL(stream);
- delete theTest;
- CleanupStack::PopAndDestroy(2,res); // stream
- }
- break;
- // MacData
- case 3:
- {
- CDecPkcs12MacData* theTest = NULL;
- theTest = CDecPkcs12MacData::NewL(iRawData->Des(),iAuthSafeData->Des());
- delete theTest;
- }
- break;
- // Attribute
- case 4:
- {
- CDecPkcs12Attribute* theTest = NULL;
- theTest = CDecPkcs12Attribute::NewL(iRawData->Des());
- delete theTest;
- }
- break;
- // ShroudedBag
- case 5:
- {
- CDecPkcs12ShroudedKeyBag* theTest = NULL;
- theTest = CDecPkcs12ShroudedKeyBag::NewL(iRawData->Des());
- delete theTest;
- }
- break;
- // CertBag
- case 6:
- {
- CDecPkcs12CertBag* theTest = NULL;
- theTest = CDecPkcs12CertBag::NewL(iRawData->Des());
- delete theTest;
- }
- break;
- // KeyBag
- case 7:
- {
- CDecPkcs12KeyBag* theTest = NULL;
- theTest = CDecPkcs12KeyBag::NewL(iRawData->Des());
- delete theTest;
- }
- break;
- // SafeContentsBag
- case 8:
- {
- CDecPkcs12SafeContentsBag* theTest = NULL;
- theTest = CDecPkcs12SafeContentsBag::NewL(iRawData->Des());
- delete theTest;
- }
- break;
- // Safebag/CRL bag
- case 9:
- {
- CDecPkcs12SafeBag* theTest = NULL;
- theTest = CDecPkcs12SafeBag::NewL(iRawData->Des());
- delete theTest;
- }
- break;
- // SafeContentsData / SafeContentsEncryptedData
- case 10:
- {
- CDecPkcs12* p12 = NULL;
- p12 = CDecPkcs12::NewL(iRawData->Des());
- CleanupStack::PushL(p12);
-
- const RPointerArray<CPKCS7ContentInfo>& contentInfos = p12->AuthenticatedSafeContents();
-
- TInt contentInfoCount = contentInfos.Count();
- for ( TInt index = 0; index < contentInfoCount; index++ )
- {
- TInt contentType = contentInfos[index]->ContentType();
- CDecPkcs12SafeContents* pkcs12SafeContents ;
- TInt contentTypeData;
- GetIntFromConfig(ConfigSection(),_L("ContentTypeData"),contentTypeData);
-
- TInt contentTypeEncryptedData;
- GetIntFromConfig(ConfigSection(),_L("ContentTypeEncryptedData"),contentTypeEncryptedData);
-
- if ( contentType == contentTypeEncryptedData )
- {
- TPtrC expectedPassword(KNullDesC());
- GetStringFromConfig(ConfigSection(), _L("Password"), expectedPassword);
- pkcs12SafeContents = CDecPkcs12SafeContents::NewL(*contentInfos[index],expectedPassword);
- delete pkcs12SafeContents;
- }
- else if ( contentType == contentTypeData )
- {
- pkcs12SafeContents = CDecPkcs12SafeContents::NewL(*contentInfos[index]);
- delete pkcs12SafeContents;
- }
- }
- CleanupStack::PopAndDestroy(p12);
- break;
- }
- }
- __UHEAP_MARKEND;
- return TestStepResult();
- }
-
-/**
-Function is intended to read the data from the specified path.
-@param-aPValue:filepath containing the path of the file
- retrieved from the ini file.
-@internalTechnology:
-@return:returns data retrieved after reading from the file.
-@test:
-*/
-HBufC8* CTPKCS12OOMStep::ReadFileDataL(TPtrC tag)
- {
- TPtrC fileName;
- if (!GetStringFromConfig(ConfigSection(), tag, fileName))
- {
- return NULL;
- }
-
- RFile file;
- if (file.Open(iFs, fileName, EFileRead))
- {
- INFO_PRINTF2(_L("Cannot open file %S for reading"), &fileName);
- return NULL;
- }
- CleanupClosePushL(file);
-
- TInt fileSize = 0;
- User::LeaveIfError(file.Size(fileSize));
-
- HBufC8* result = HBufC8::NewL(fileSize);
- result->Des().SetLength(fileSize);
-
- TPtr8 rawDataPtr(result->Des());
- rawDataPtr.SetLength(fileSize);
- file.Read (rawDataPtr);
-
- CleanupStack::PopAndDestroy (&file);
-
- INFO_PRINTF3(_L("Read %d octets from %S"), result->Size(), &fileName);
-
- return result;
- }
-
-TVerdict CTPKCS12OOMStep::doTestStepPreambleL()
- {
- User::LeaveIfError (iFs.Connect());
-
- SetTestStepResult(EPass);
-
- iRawData = ReadFileDataL(_L("File"));
- if (iRawData == NULL)
- {
- INFO_PRINTF1(_L("Failed to read 'File' section of script"));
- SetTestStepResult(ETestSuiteError);
- }
- iAuthSafeData = ReadFileDataL(_L("AuthSafe"));
- if (iAuthSafeData == NULL)
- {
- INFO_PRINTF1(_L("authsafedata file is not required"));
- }
- return TestStepResult();
- }
-/**
-Function is intended to check for the re encoded shrouded key
-@param-aSecName:BagData Section
-@param-aBagData:safebag class pointer
-@internalTechnology:
-@return:returns EFalse if there is a failure else return ETrue
-@test:
-*/
-TBool CPKCS12LibTestStep::ChkEncodedBagValL(TDesC &aSecName,CSafeBagData &aBagData)
- {
- TPtrC bagPath(KNullDesC);
- TBool flagReturn=ETrue;
-
- //retrieve the shrouded bag value
- if(!GetStringFromConfig(aSecName,KEncBagValue,bagPath))
- {
- ERR_PRINTF1(_L("Not able to get the EncBagValue from the ini file"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- }
- TInt fileReturn=0;
- RFile file;
-
- if(flagReturn)
- {
- fileReturn=file.Open(iFileSession,bagPath,EFileRead);
-
- if(fileReturn)
- {
- ERR_PRINTF1(_L("BagValue:Not able to open the file"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- }
- }
- CleanupClosePushL(file);
- //raw data for reading the bagvalue
- HBufC8 *rawData=NULL;
- TInt filesize=0;
- if(flagReturn)
- {
- User::LeaveIfError(file.Size(filesize));
- rawData=HBufC8::NewMaxLC(filesize);
- TPtr8 data(rawData->Des());
- if(file.Read(data))
- {
- ERR_PRINTF1(_L("BagValue:Not able to Read the file"));
- SetTestStepResult(EFail);
- flagReturn=EFalse;
- }
- }
- if(flagReturn)
- {
- //compare the data
- if(rawData->CompareC(aBagData.EncodedShroudedKey())!=0)
- {
- iActualResult=EFalse;
- }
- //retrieve the expected result:PositiveTest/NegativeTest
- if(!GetBoolFromConfig(aSecName,KExpectedResult,iExpectedResult))
- {
- WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
- iExpectedResult=KPositiveTest;
- }
- //check for positive or negative test
- if(!VerifyExpectedError(aSecName))
- {
- INFO_PRINTF1(_L("BagValue Failed"));
- SetTestStepResult(EFail);
- flagReturn = EFalse;
- }
- }
- if(rawData!=NULL)
- {
- CleanupStack::PopAndDestroy(rawData);
- }
- if(!fileReturn)
- {
- file.Close();
- }
- CleanupStack::PopAndDestroy(&file);
- return flagReturn;
- }
+/*
+* Copyright (c) 2005-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:
+* This file is used for the verification function of the pkcs12 file
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology
+*/
+
+// System Include
+#include <test/testexecutelog.h>
+
+//User Include
+#include "tpkcs12libteststep.h"
+#include "tpkcs12data.h"
+#include "tpkcs12common.h"
+
+using namespace PKCS12;
+
+const TInt KBagDataLength = 7;
+const TInt KContentInfoLength = 11;
+/**
+Description:constructor:used for initialization of the variables declared
+@test
+@internalTechnology
+*/
+CPKCS12LibTestStep::CPKCS12LibTestStep()
+ {
+ iActualResult=ETrue;
+ iUnitTest=EFalse;
+ iUnitTestContinueFlag = ETrue;
+ iExpectedError = ETrue;
+ iExpectedResult=KPositiveTest;
+ }
+/**
+Description:Destructor
+@test
+@internalTechnology
+*/
+CPKCS12LibTestStep::~CPKCS12LibTestStep()
+ {
+ iFileSession.Close();
+ delete iParser;
+ iPrivacyPassword.ResetAndDestroy();
+ }
+
+/**
+Function is intended to parse the pkcs12 file, compare the results and
+log the same
+@internalTechnology:
+@return:TVerdict -returns EFail if there is a failure else EPass
+@test
+@leave:- if memory allocation fails
+*/
+TVerdict CPKCS12LibTestStep::doTestStepL()
+ {
+ //__UHEAP_MARK;
+ TPtrC integrityMode(KNullDesC);
+ TPtrC integrityPassword(KNullDesC);
+ TPtrC privacyPassword(KNullDesC);
+ TPtrC dataPath(KNullDesC);
+ TBool flagReturn=ETrue;
+
+
+ if(iFileSession.Connect())
+ {
+ INFO_PRINTF1(_L("File server session failed"));
+ flagReturn=EFalse;
+ }
+
+ if(flagReturn)
+ {
+ if((!GetStringFromConfig(KMainSec,KFilePath,dataPath)) ||
+ !GetStringFromConfig(KMainSec,KIntegrityMode,integrityMode))
+ {
+ SetTestStepResult(EAbort);
+ ERR_PRINTF1(_L("Input Data not found in ini file"));
+ flagReturn=EFalse;
+ }
+ }
+ //Check the input
+ if(flagReturn)
+ {
+ if(!GetBoolFromConfig(KMainSec,KUnitTest,iUnitTest))
+ {
+ iUnitTest=EFalse;
+ }
+ //Password Integrity Mode
+ if(integrityMode.CompareF(KPassword)==0)
+ {
+ if(!GetStringFromConfig(KMainSec,KIntegrityPassword,integrityPassword))
+ {
+ ERR_PRINTF1(_L("Problem in the Main section of the ini file"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ }
+ else
+ {
+
+ iParser = CPkcs12Parser::NewL();
+ // set the integrity password
+ iParser->SetIntegrityPasswordL(integrityPassword);
+ // set the datapath
+ iParser->SetDataL(dataPath);
+ //set the privacy password
+ ParsePrivacyPwdL();
+ //parse the pkcs12 file
+ iParser->ParseL();
+
+ if(!GetBoolFromConfig(KMainSec,KIntegrityValid,iExpectedResult))
+ {
+ WARN_PRINTF1(_L("Integrity valid not found in ini file"));
+ iExpectedResult=KPositiveTest;
+ }
+ if(!VerifyMainSecL())
+ {
+ ERR_PRINTF1(_L("Main section failed"));
+ flagReturn=EFalse;
+ }
+ else if(!iUnitTestContinueFlag)
+ {
+ SetTestStepResult(EPass);
+ delete iParser;
+ iParser = NULL;
+ flagReturn = EFalse;
+ }
+ }
+ }
+ else if(integrityMode.CompareF(KPublicIntegrity)==0)
+ {
+ //public Integrity Mode
+ }
+ else
+ {
+ ERR_PRINTF1(_L("Integrity pwd not known in ini file"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ }
+ }
+ if(flagReturn)
+ {
+ //Check the Authenticated safe section
+ if(!VerifyAuthSafe())
+ {
+ ERR_PRINTF1(_L("Authenticated safe section failed"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ }
+ else if(!iUnitTestContinueFlag )
+ {
+ SetTestStepResult(EPass);
+ delete iParser;
+ iParser = NULL;
+ flagReturn = EFalse;
+ }
+ }
+ if(flagReturn)
+ {
+ //calculate the totalsafebags in the pkcs12 file
+ TInt totalsafebags = iParser->PfxHeader().TotalSafeBagCount();
+
+ //calculate the totalbags(including the safecontentsbag) in the pkcs12 file
+ TInt totalbags = totalsafebags + iParser->PfxHeader().SafecontentBagCount();
+
+ //Check the BagData section
+ if(!ChkBagDataL(totalsafebags,totalbags))
+ {
+ ERR_PRINTF1(_L("Bag Data section failed"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ }
+ else if(!iUnitTestContinueFlag)
+ {
+ delete iParser;
+ iParser = NULL;
+ flagReturn = EFalse;
+ }
+ }
+ if(flagReturn)
+ {
+ SetTestStepResult(EPass);
+ }
+
+ //__UHEAP_MARKEND;
+ return TestStepResult();
+ }
+/**
+Function is intended to verify the expected error in each section of the ini file
+@internalTechnology:
+@return:TBool:returns EFalse if there is a failure else ETrue
+@test:
+*/
+TBool CPKCS12LibTestStep::VerifyExpectedError(const TDesC& aSecName)
+ {
+ TBool flagReturn = ETrue;
+ if ( iUnitTest )
+ {
+ if(GetIntFromConfig(aSecName,KExpectedError,iExpectedError)==EFalse)
+ {
+ INFO_PRINTF1(_L("ExpectedError not found in INI File"));
+ }
+ // Checks the error returned by the library with the expected error read
+ // from the INI file.
+ TInt actualError = 0;
+
+ if ( (!aSecName.Compare(KMainSec) || !aSecName.Compare(KAuthSafeSec) ||
+ !aSecName.Compare(_L("MacData")) || (!aSecName.Left(KBagDataLength).Compare(KBagDataSec)) ||
+ (!aSecName.Left(KContentInfoLength).CompareF(KContentInfoKey))) && !iExpectedResult )
+ {
+ actualError = iParser->PfxHeader().Pkcs12ActualError();
+ }
+ if (actualError == iExpectedError)
+ {
+ INFO_PRINTF1(_L("ExpectedError matchs"));
+ iUnitTestContinueFlag = EFalse;
+ iExpectedResult = ETrue;
+ }
+ }
+
+ if(iExpectedResult!=iActualResult)
+ {
+ SetTestStepResult(EFail);
+ flagReturn= EFalse;
+ }
+ iActualResult = ETrue;
+ return flagReturn;
+ }
+/**
+Function is intended to set the privacy passwords of the contentinfotype
+@internalTechnology:
+@test:
+@leave: if leave occurs if memory allocation fails
+*/
+void CPKCS12LibTestStep::ParsePrivacyPwdL()
+ {
+ TPtrC pass(KNullDesC);
+ //to append the number to get the actual key value
+ TInt count=0;
+ //return value
+ TBool privacyPwdPresent=EFalse;
+
+ //Put all the content info privacy passwords in an array
+ do
+ {
+ TBuf<KPrivacyPwdStrLen> privacyPwdBuf(KPrivacyPassword);
+ pass.Set(KNullDesC);
+ count++;
+ //appending the count to the Keyvalue
+ privacyPwdBuf.AppendNum(count);
+ privacyPwdPresent=GetStringFromConfig(KMainSec,privacyPwdBuf,pass);
+ if(privacyPwdPresent)
+ {
+ HBufC *temp=pass.AllocLC();
+ iPrivacyPassword.AppendL(temp);
+ CleanupStack::Pop(temp);
+ }
+ }while(privacyPwdPresent);
+ iParser->SetPrivacyPassword(iPrivacyPassword);
+ }
+/**
+Function is intended to parse the main section of the ini file
+@internalTechnology:
+@return:returns EFalse if there is a failure else ETrue
+@test:
+*/
+TBool CPKCS12LibTestStep::VerifyMainSecL()
+ {
+ TBool mac=EFalse;
+ TBool flagReturn=ETrue;
+
+ //retrieve the expected result:PositiveTest/NegativeTest
+ if(!GetBoolFromConfig(KMainSec,KExpectedResult,iExpectedResult))
+ {
+ WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
+ iExpectedResult=KPositiveTest;
+ }
+ if(!GetBoolFromConfig(KMainSec,KMacPresent,mac))
+ {
+ WARN_PRINTF1(_L("Mac present not found in ini file"));
+ //default only integration test
+ mac=EFalse;
+ }
+ else if(mac && iUnitTest)
+ {
+ //call the mac data function and check for all the macdata section values
+ iActualResult=ChkMacValueL();
+ if (!iUnitTestContinueFlag)
+ {
+ return flagReturn;
+ }
+ }
+ if(!VerifyExpectedError(KMainSec))
+ {
+ SetTestStepResult(EFail);
+ flagReturn = EFalse;
+ }
+ return flagReturn;
+ }
+/**
+Function is intended to parse the AuthSafe section of the ini file
+@internalTechnology:
+@return:returns EFalse if there is a failure else ETrue
+@test:
+*/
+TBool CPKCS12LibTestStep::VerifyAuthSafe()
+ {
+ TInt contentInfoCount=0;
+ TPtrC contentSection(KNullDesC);
+ TInt contentIndex=0;
+ TBool flagReturn=ETrue;
+
+ if(!GetIntFromConfig(KAuthSafeSec,KContentInfoNum,contentInfoCount))
+ {
+ ERR_PRINTF1(_L("Count not available in the inifile"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ }
+ //retrieve the expected result:PositiveTest/NegativeTest
+ if(GetIntFromConfig(KAuthSafeSec,KExpectedResult,iExpectedResult)==EFalse)
+ {
+ INFO_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
+ }
+ //verify positive or negative test
+ if(!VerifyExpectedError(KAuthSafeSec()))
+ {
+ INFO_PRINTF1(_L("Content Info Failure"));
+ SetTestStepResult(EFail);
+ flagReturn = EFalse;
+ }
+ else if(!iUnitTestContinueFlag)
+ {
+ return flagReturn;
+ }
+ for(TInt i=1;i<=contentInfoCount;i++)
+ {
+ TBuf<KContentInfoBufLen> contentBuf(KContentInfoKey);
+ //Append the counter to the keyname
+ contentBuf.AppendNum(i);
+ if(!GetStringFromConfig(KAuthSafeSec,contentBuf,contentSection))
+ {
+ ERR_PRINTF1(_L("ContentSection not available in the inifile"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ break;
+ }
+ //retrieve the expected result:PositiveTest/NegativeTest
+ if(GetIntFromConfig(contentSection,KExpectedResult,iExpectedResult)==EFalse)
+ {
+ INFO_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
+ iExpectedResult=KPositiveTest;
+ }
+ // Verify before calling array to access the data.
+ if(!VerifyExpectedError(contentSection))
+ {
+ INFO_PRINTF1(_L("Content Info Failure"));
+ SetTestStepResult(EFail);
+ flagReturn = EFalse;
+ break;
+ }
+ else if(!iUnitTestContinueFlag)
+ {
+ flagReturn = ETrue;
+ break;
+ }
+ //Call the function for checking the contentinfo,pass the contntsction as parameter
+ iBagData=iParser->ArraySafeBagData()[contentIndex];
+ contentIndex++;
+ //Check the contentinfo type
+ iActualResult=ChkCIType(contentSection,*iBagData);
+ }
+ return flagReturn;
+ }
+/**
+Function is intended to parse the BagData section of the ini file
+@param-aTotalsafebags:total number of safebags
+@param-aTotalbags:total number of bags including the safecontentbags
+@internalTechnology:
+@return:returns EFalse if there is a failure else return ETrue
+@test:
+@leave: if leave occurs at the ChkBagValL function
+*/
+TBool CPKCS12LibTestStep::ChkBagDataL(TInt aTotalsafebags,TInt aTotalbags)
+ {
+ TInt bagType=0;
+ TInt safeContentIndex=0;
+ TInt safeBagIndex=0;
+ CSafeContentBag* safeContentBag;
+ TBool flagReturn=ETrue;
+
+ TInt totalSafeContentsBag = iParser->PfxHeader().SafecontentBagCount();
+
+
+ //loop for the totalbags
+ for(TInt bags=0;bags<aTotalbags;bags++)
+ {
+ TBuf<KBagDataSecBufLen> bagSection(KBagDataSec);
+ //Append the bags to the sectionname :BagData1
+ bagSection.AppendNum(bags+1);
+ if(!GetIntFromConfig(bagSection,KBagType,bagType))
+ {
+ ERR_PRINTF1(_L("Not able to get the BagType from the ini file"));
+ flagReturn=EFalse;
+ break;
+ }
+ if(bagType == CDecPkcs12SafeBag::ESafeContentsBag && flagReturn)
+ {
+ //loop for the safecontents bags
+ while(safeContentIndex < totalSafeContentsBag && flagReturn)
+ {
+ safeContentBag=iParser->ArraySafeContentBag()[safeContentIndex];
+ if(!ChkSafeContsBagData(bagSection,*safeContentBag))
+ {
+ ERR_PRINTF1(_L("SafeContent Bag Failed"));
+ flagReturn=EFalse;
+ }
+ safeContentIndex++;
+ break;
+ }
+ }
+ else
+ {
+ while(safeBagIndex < aTotalsafebags && flagReturn)
+ {
+ //retrieve the safebag sructure pointer
+ iBagData=iParser->ArraySafeBagData()[safeBagIndex];
+ //Chk the BagType
+ if(!ChkBagType(bagSection,*iBagData,bagType))
+ {
+ ERR_PRINTF1(_L("Bag Type does not match"));
+ flagReturn=EFalse;
+ break;
+ }
+ if(!iUnitTestContinueFlag)
+ {
+ break;
+ }
+ iBagAttrNumVal=0;
+ if(!ChkBagAttbutesL(bagSection,*iBagData))
+ {
+ ERR_PRINTF1(_L("Failure in Attributes"));
+ flagReturn=EFalse;
+ break;
+ }
+ switch(bagType)
+ {
+ case CDecPkcs12SafeBag::ECertBag:
+ {
+ //check the bagvalue
+ if(!ChkBagValL(bagSection,*iBagData))
+ {
+ flagReturn=EFalse;
+ ERR_PRINTF1(_L("Certificate Bag Value comparison Failed"));
+ }
+ //check the certificate type
+ if(flagReturn)
+ {
+ if(!ChkCertId(bagSection,*iBagData))
+ {
+ flagReturn=EFalse;
+ ERR_PRINTF1(_L("Certificate Bag certID comparison Failed"));
+ }
+ }
+ break;
+ }
+ case CDecPkcs12SafeBag::EKeyBag:
+ {
+ if(!ChkBagValL(bagSection,*iBagData))
+ {
+ flagReturn = EFalse;
+ ERR_PRINTF1(_L("Key Bag Failed"));
+ }
+ break;
+ }
+ case CDecPkcs12SafeBag::EShroudedKeyBag:
+ {
+ if(!ChkEncodedBagValL(bagSection,*iBagData))
+ {
+ flagReturn = EFalse;
+ ERR_PRINTF1(_L("Shrouded Bag Failed"));
+ }
+ break;
+ }
+ case CDecPkcs12SafeBag::ECrlBag:
+ {
+ break;
+ }
+ case CDecPkcs12SafeBag::ESecretBag:
+ {
+ break;
+ }
+ }
+ if(flagReturn)
+ {
+ safeBagIndex++;
+ break;
+ }
+ }
+ }
+ }
+
+ return flagReturn;
+ }
+/**
+Function is intended to check the safecontents bag
+@param-aSec:BagData Section
+@param-aSfContBag:safecontent class pointer
+@internalTechnology:
+@return:returns EFalse if there is a failure else return ETrue
+@test:
+*/
+TBool CPKCS12LibTestStep::ChkSafeContsBagData(TDesC& aSec,CSafeContentBag &aSfContBag)
+ {
+ TInt safeContentsCount=0;
+ TBool flagReturn=ETrue;
+ //retrieve the safecontentsbag count from ini file
+ if(!GetIntFromConfig(aSec,KSafeBagsCount,safeContentsCount))
+ {
+ ERR_PRINTF1(_L("SafeContent Bags count not found in INI file"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ }
+ //compare the data with the ini file data
+ if(safeContentsCount != aSfContBag.SafeBagCount() && flagReturn)
+ {
+ ERR_PRINTF1(_L("Number of Bags in the safecontent bag is different"));
+ iActualResult=EFalse;
+ }
+ //retrieve the expected result:PositiveTest/NegativeTest
+ if(!GetBoolFromConfig(aSec,KExpectedResult,iExpectedResult))
+ {
+ INFO_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
+ iExpectedResult=KPositiveTest;
+ }
+ //check whether its a positive or a negative test
+ if(flagReturn)
+ {
+ //check whether its a positive or a negative test
+ if(!VerifyExpectedError(aSec))
+ {
+ INFO_PRINTF1(_L("SafeContentsBag Failed"));
+ SetTestStepResult(EFail);
+ flagReturn = EFalse;
+ }
+ }
+ return flagReturn;
+ }
+/**
+Function is intended to check the content info type
+@param-aSecName:BagData Section
+@param-aBagData:safebag class pointer
+@internalTechnology:
+@return:returns EFalse if there is a failure else return ETrue
+@test:
+*/
+TBool CPKCS12LibTestStep::ChkCIType(TDesC &aSecName,CSafeBagData &aBagData)
+ {
+ TInt contentType=0;
+ TBool flagReturn=ETrue;
+ //retrieve the contentype from the ini file
+ if(!GetIntFromConfig(aSecName,KContentInfoType,contentType))
+ {
+ ERR_PRINTF1(_L("ContentInfoType value not found in INI file"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ }
+ //compare the contentype with the ini file data
+ if(flagReturn)
+ {
+ if(aBagData.ContentInfoType() != contentType)
+ {
+ iActualResult=EFalse;
+ INFO_PRINTF1(_L("ContentType Comparison Failed"));
+ }
+ //retrieve the expected result:PositiveTest/NegativeTest
+ if(!GetBoolFromConfig(aSecName,KExpectedResult,iExpectedResult))
+ {
+ WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
+ iExpectedResult=KPositiveTest;
+ }
+ //check whether its a positive or a negative test
+ if(!VerifyExpectedError(aSecName))
+ {
+ INFO_PRINTF1(_L("ContentInfo Failed"));
+ SetTestStepResult(EFail);
+ flagReturn = EFalse;
+ }
+ }
+ return flagReturn;
+ }
+/**
+Function is intended to check the bag type
+@param-aSec:BagData Section
+@param-aBgDta:safebag class pointer
+@param-aId:Bag ID
+@internalTechnology:
+@return:returns EFalse if there is a failure else return ETrue
+@test:
+*/
+TBool CPKCS12LibTestStep::ChkBagType(TDesC &aSec,CSafeBagData &aBagData,TInt aId)
+ {
+ TBool flagReturn=ETrue;
+
+ //check for the bagid
+ if(aId != aBagData.BagType())
+ {
+ iActualResult=EFalse;
+ INFO_PRINTF1(_L("BagType Comparision Failed"));
+ }
+
+ //retrieve the expected result:PositiveTest/NegativeTest
+ if(!GetBoolFromConfig(aSec,KExpectedResult,iExpectedResult))
+ {
+ WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
+ iExpectedResult=KPositiveTest;
+ }
+
+ //check whether its a positive or a negative test
+ if(!VerifyExpectedError(aSec))
+ {
+ INFO_PRINTF1(_L("BagType Failed"));
+ SetTestStepResult(EFail);
+ flagReturn = EFalse;
+ }
+ return flagReturn;
+ }
+/**
+Function is intended to check the bag attributes
+@param-aSec:BagData Section
+@param-aBagData:safebag class pointer
+@internalTechnology:
+@return:returns EFalse if there is a failure else return ETrue
+@test:
+*/
+TBool CPKCS12LibTestStep::ChkBagAttbutesL(TDesC &aSec,CSafeBagData &aBagData)
+ {
+ TInt numAttr=0;
+ TInt count=0;
+ TPtrC attrSec(KNullDesC);
+ TBool flagReturn=ETrue;
+
+ //retrieve the number of attributes
+ if(!GetIntFromConfig(aSec,KBagAttributesNum,numAttr))
+ {
+ WARN_PRINTF1(_L("Number of attributes not found in INI file"));
+ }
+
+ for(TInt attrindex=0;attrindex < numAttr;attrindex++)
+ {
+ TBuf<KAttributeBufLen> attrBuf(KBagAttributesKey);
+ //increment the attr counter
+ count++;
+ //appending to get the attr key from the ini file
+ attrBuf.AppendNum(count);
+
+ if(!GetStringFromConfig(aSec,attrBuf,attrSec))
+ {
+ ERR_PRINTF1(_L("Number of attributes not found in INI file"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ break;
+ }
+ //retrieve the expected result:PositiveTest/NegativeTest
+ if(!GetBoolFromConfig(aSec,KExpectedResult,iExpectedResult))
+ {
+ WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
+ iExpectedResult=KPositiveTest;
+ }
+ //check whether its a positive or a negative test
+ if(!VerifyExpectedError(aSec))
+ {
+ INFO_PRINTF1(_L("BagAttributes Failed"));
+ SetTestStepResult(EFail);
+ flagReturn = EFalse;
+ }
+ else if(!iUnitTestContinueFlag)
+ {
+ flagReturn = ETrue;
+ break;
+ }
+ //retrieve the expected result:PositiveTest/NegativeTest
+ if(!GetBoolFromConfig(aSec,KExpectedResult,iExpectedResult))
+ {
+ WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
+ iExpectedResult=KPositiveTest;
+ }
+ //check whether its a positive or a negative test
+ if(!VerifyExpectedError(aSec))
+ {
+ INFO_PRINTF1(_L("BagAttributes Failed"));
+ SetTestStepResult(EFail);
+ flagReturn = EFalse;
+ }
+ else if(!iUnitTestContinueFlag)
+ {
+ flagReturn = ETrue;
+ break;
+ }
+ //Check the BagAttribute section
+ if(!ChkAtrSecL(attrSec,aBagData,attrindex))
+ {
+ ERR_PRINTF1(_L("Attributes comparison failed"));
+ flagReturn=EFalse;
+ break;
+ }
+ }
+ return flagReturn;
+ }
+/**
+Function is intended to check the attribute section
+@param-aSec:BagData Section
+@param-aBgDta:safebag class pointer
+@param-aIndx:attribute index
+@param-aAttrindex:attribute index
+@internalTechnology:
+@return:returns EFalse if there is a failure else return ETrue
+@test:
+@leave: if leave occurs if ChkAtrValL fails
+*/
+TBool CPKCS12LibTestStep::ChkAtrSecL(TDesC &aSec,CSafeBagData &aBagData,TInt aIndex)
+ {
+ TPtrC attrId(KNullDesC);
+ TInt numVal=0;
+ CSafeBagAttribute *bagAttr;
+ TPtrC friendlyName(KFriendlyNameOid);
+ TPtrC localKey(KLocalKeyOid);
+ TBool flagReturn=ETrue;
+
+ //retrieve the attribute id
+ if(!GetStringFromConfig(aSec,KBagAttributesID,attrId))
+ {
+ ERR_PRINTF1(_L("attribute id not found in INI file"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ }
+ if(flagReturn)
+ {
+ //retrieve the number of values
+ if(!GetIntFromConfig(aSec,KBagAttributeValuesNum,numVal))
+ {
+ ERR_PRINTF1(_L("total number of attribute values not found in INI file"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ }
+ }
+ if(flagReturn)
+ {
+ bagAttr = aBagData.iAttributeIDs[aIndex];
+
+ //increment the Number of BagAttrValues
+ iBagAttrNumVal+=numVal;
+
+ //compare the attrval count and the attrid
+ if((bagAttr->AttributeValueCount()!=numVal) ||
+ (attrId.CompareF((bagAttr->AttributeId()))!=0))
+ {
+ iActualResult=EFalse;
+ }
+ else if((friendlyName.CompareF((bagAttr->AttributeId()))==0) ||
+ (localKey.CompareF((bagAttr->AttributeId()))==0))
+ {
+ //Check for BagAttribute values
+ if(!ChkAtrValL(aSec,aBagData,numVal))
+ {
+ iActualResult=EFalse;
+ }
+ }
+ //retrieve the expected result:PositiveTest/NegativeTest
+ if(!GetBoolFromConfig(aSec,KExpectedResult,iExpectedResult))
+ {
+ WARN_PRINTF1(_L("ExpectedResult not found in INI file"));
+ iExpectedResult=KPositiveTest;
+ }
+ //check for positive or negative test
+ if(!VerifyExpectedError(aSec))
+ {
+ INFO_PRINTF1(_L("Attributes Comparison Test Case failed"));
+ SetTestStepResult(EFail);
+ flagReturn = EFalse;
+ }
+
+ }
+ //retrieve the bag attribute structure pointer
+ return flagReturn;
+ }
+/**
+Function is intended to check the attribute values
+@param-aSec:BagData Section
+@param-aBgDta:safebag class pointer
+@param-aNum:Bagattribute value count
+@param-aAtr:Bagattribute ID
+@param-aNumVal:Bagattribute value count
+@internalTechnology:
+@return:returns EFalse if there is a failure else return ETrue
+@test:
+@leave: if memory allocation of buffer fails
+*/
+TBool CPKCS12LibTestStep::ChkAtrValL(TDesC &aSec,CSafeBagData &aBagData,TInt aNum)
+ {
+ TInt start=iBagAttrNumVal - aNum;
+ TInt end=iBagAttrNumVal + aNum;
+
+ TBool flagReturn=ETrue;
+ TInt index=0;
+ TPtrC value(KNullDesC);
+
+ HBufC8 *bufferVal;
+
+ //loop till the total number of values
+ do
+ {
+ TBuf<KBagValBufLen> bagVal(KBagAttributeValue);
+ //increment the index to append the count
+ index++;
+ //append the value
+ bagVal.AppendNum(index);
+ //retrieve the value from the ini file
+ if(!GetStringFromConfig(aSec,bagVal,value))
+ {
+ ERR_PRINTF1(_L("Bag Value not found in the ini file"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ break;
+ }
+ for(TInt startIndex=start;startIndex<end;startIndex++)
+ {
+ bufferVal=aBagData.iAttributeValues[startIndex];
+
+ //check the local key value
+ if(!CompareFileDataL(value,*bufferVal))
+ {
+ ERR_PRINTF1(_L("Bag Attribute Value comparison failed"));
+ iActualResult=EFalse;
+ break;
+ }
+ else
+ {
+ iActualResult=ETrue;
+ break;
+ }
+ }
+ //retrieve the expected result:PositiveTest/NegativeTest
+ if(!GetBoolFromConfig(aSec,KExpectedResult,iExpectedResult))
+ {
+ WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
+ iExpectedResult=KPositiveTest;
+ }
+ //check for positive or negative test
+ if(!VerifyExpectedError(aSec))
+ {
+ INFO_PRINTF1(_L("Bag Value Test failed"));
+ SetTestStepResult(EFail);
+ flagReturn = EFalse;
+ break;
+ }
+ else if(!iUnitTestContinueFlag)
+ {
+ break;
+ }
+ }while(index<aNum);
+ return flagReturn;
+ }
+/**
+Function is intended to check the value.
+@param-aPValue:filepath containing the path of the file
+ retrieved from the ini file
+@param-aBufferVal:Value retrieved after parsing the pkcs12 file
+@internalTechnology:
+@return:returns EFalse if there is a failure else return ETrue
+@test:
+@leave: if leave occurs if openfile fails or allocation to buffer fails
+*/
+TBool CPKCS12LibTestStep::CompareFileDataL(TDesC &aPValue,TDesC8 &aBufferVal)
+ {
+ RFile file;
+ TInt fileSize=0;
+ TBool flagReturn=ETrue;
+ // Negative Test: If mac/ macSalt is not present.
+ if (&aBufferVal)
+ {
+ //open the file
+ User::LeaveIfError(file.Open(iFileSession,aPValue,EFileRead));
+ User::LeaveIfError(file.Size(fileSize));
+ //raw data for reading the bagvalue
+ HBufC8 *rawData=HBufC8::NewMaxLC(fileSize);
+ //converting the HBufC8 to TPtr8
+ TPtr8 data(rawData->Des());
+ //read the contents of the file
+ User::LeaveIfError(file.Read(data));
+ //compare the value
+ if(rawData->CompareF(aBufferVal)!=0)
+ {
+ ERR_PRINTF1(_L("comparison failed"));
+ flagReturn=EFalse;
+ }
+ //closes the data file
+ file.Close();
+
+ CleanupStack::PopAndDestroy(rawData);
+ }
+ return flagReturn;
+ }
+/**
+Function is intended to check the algorithm id
+@param-aSecName:BagData Section
+@param-aBagData:safebagdata class pointer
+@internalTechnology:
+@return:returns EFalse if there is a failure else return ETrue
+@test:
+*/
+TBool CPKCS12LibTestStep::ChkAlgId(TDesC &aSecName,CSafeBagData &aBagData)
+ {
+ TPtrC algorithm(KNullDesC);
+ TBool flagReturn=ETrue;
+ //retrieve the algorithm section name
+ if(!GetStringFromConfig(aSecName,_L("Algorithm"),algorithm))
+ {
+ ERR_PRINTF1(_L("AlgorithmID value not found in INI file"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ }
+ if(flagReturn)
+ {
+ if(algorithm.CompareF((aBagData.AlgorithmId()))!=0)
+ {
+ iActualResult=EFalse;
+ }
+ //retrieve the expected result:PositiveTest/NegativeTest
+ if(!GetBoolFromConfig(aSecName,KExpectedResult,iExpectedResult))
+ {
+ WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
+ iExpectedResult=KPositiveTest;
+ }
+ //check for positive oor negative test
+ if(!VerifyExpectedError(aSecName))
+ {
+ INFO_PRINTF1(_L("Algorithm Comparison Test Case failed"));
+ SetTestStepResult(EFail);
+ flagReturn = EFalse;
+ }
+ }
+ return flagReturn;
+ }
+/**
+Function is intended to check the certificate type
+@param-aSecName:BagData Section
+@param-aBagData:safebagdata class pointer
+@internalTechnology:
+@return:returns EFalse if there is a failure else return ETrue
+@test:
+*/
+TBool CPKCS12LibTestStep::ChkCertId(TDesC &aSecName,CSafeBagData &aBagData)
+ {
+ TPtrC certid(KNullDesC);
+ TBool flagReturn=ETrue;
+ //retrieve the cert name from ini file
+ if(!GetStringFromConfig(aSecName,KCertType,certid))
+ {
+ ERR_PRINTF1(_L("certificateID value not found in INI file"));
+ SetTestStepResult(EFail);
+ flagReturn= EFalse;
+ }
+ if(flagReturn)
+ {
+ if(certid.CompareF((aBagData.CertificateId()))!=0)
+ {
+ INFO_PRINTF1(_L("certificateID comparision Failed"));
+ iActualResult=EFalse;
+ }
+ //retrieve the expected result:PositiveTest/NegativeTest
+ if(!GetBoolFromConfig(aSecName,KExpectedResult,iExpectedResult))
+ {
+ WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
+ iExpectedResult=KPositiveTest;
+ }
+ //check for positive or negative test
+ if(!VerifyExpectedError(aSecName))
+ {
+ INFO_PRINTF1(_L("Certificate Comparison Test Case failed"));
+ SetTestStepResult(EFail);
+ flagReturn = EFalse;
+ }
+ }
+ return flagReturn;
+ }
+/**
+Function is intended to check for the bag value
+@param-aSecName:BagData Section
+@param-aBagData:safebag class pointer
+@internalTechnology:
+@return:returns EFalse if there is a failure else return ETrue
+@test:
+*/
+TBool CPKCS12LibTestStep::ChkBagValL(TDesC &aSecName,CSafeBagData &aBagData)
+ {
+ TPtrC certBagPath(KNullDesC);
+ TBool flagReturn=ETrue;
+
+ //retrieve the certificate bag value
+ if(!GetStringFromConfig(aSecName,KBagValue,certBagPath))
+ {
+ ERR_PRINTF1(_L("Not able to get the CertBagValue from the ini file"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ }
+ TInt fileReturn=0;
+ RFile file;
+
+ if(flagReturn)
+ {
+ fileReturn=file.Open(iFileSession,certBagPath,EFileRead);
+
+ if(fileReturn)
+ {
+ ERR_PRINTF1(_L("CertBagValue:Not able to open the file"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ }
+ }
+ //raw data for reading the bagvalue
+ HBufC8 *rawData=NULL;
+ TInt filesize=0;
+ if(flagReturn)
+ {
+ User::LeaveIfError(file.Size(filesize));
+ rawData=HBufC8::NewMaxLC(filesize);
+ TPtr8 data(rawData->Des());
+ if(file.Read(data))
+ {
+ ERR_PRINTF1(_L("CertBagValue:Not able to Read the file"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ }
+ }
+ if(flagReturn)
+ {
+ //compare the data
+ if(rawData->CompareF(aBagData.BagValue())!=0)
+ {
+ iActualResult=EFalse;
+ }
+ //retrieve the expected result:PositiveTest/NegativeTest
+ if(!GetBoolFromConfig(aSecName,KExpectedResult,iExpectedResult))
+ {
+ WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
+ iExpectedResult=KPositiveTest;
+ }
+ //check for positive or negative test
+ if(!VerifyExpectedError(aSecName))
+ {
+ INFO_PRINTF1(_L("BagValue Failed"));
+ SetTestStepResult(EFail);
+ flagReturn = EFalse;
+ }
+ }
+ if(rawData!=NULL)
+ {
+ CleanupStack::PopAndDestroy(rawData);
+ }
+ if(!fileReturn)
+ {
+ file.Close();
+ }
+ return flagReturn;
+ }
+/**
+Function is intended to check for the mac value
+@internalTechnology:
+@return:returns EFalse if there is a failure else return ETrue
+@test:
+@leave: if leave occurs at the CompareFileDataL function
+*/
+TBool CPKCS12LibTestStep::ChkMacValueL()
+ {
+ TPtrC mac(KNullDesC);
+ TPtrC macSalt(KNullDesC);
+ TPtrC secName(_S("MacData"));
+ TPtrC expectedError(KNullDesC);
+ TInt itCount=0;
+ TBool flagReturn=ETrue;
+
+ //retrieve the macid,macsalt and iteration count
+ if((!GetStringFromConfig(secName,KMac,mac)) ||
+ (!GetStringFromConfig(secName,KMacSalt,macSalt)) ||
+ (!GetIntFromConfig(secName,KIterationCount,itCount)))
+ {
+ ERR_PRINTF1(_L("Not able to access the mac values from ini file"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ }
+ //comapre the data with the ini file
+ if((CompareFileDataL(mac,iParser->PfxHeader().MacId()) ==0)||
+ (CompareFileDataL(macSalt,iParser->PfxHeader().MacSalt()) == 0)||
+ (itCount!=iParser->PfxHeader().IterationCount()))
+ {
+ WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
+ flagReturn=EFalse;
+ }
+ //retrieve the expected result:PositiveTest/NegativeTest
+ if(!GetBoolFromConfig(secName,KExpectedResult,iExpectedResult))
+ {
+ WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
+ iExpectedResult=KPositiveTest;
+ }
+ if(!VerifyExpectedError(secName))
+ {
+ SetTestStepResult(EFail);
+ flagReturn = EFalse;
+ }
+ return flagReturn;
+ }
+
+CTPKCS12OOMStep::CTPKCS12OOMStep()
+ {
+
+ }
+CTPKCS12OOMStep::~CTPKCS12OOMStep()
+ {
+ delete iRawData;
+ delete iAuthSafeData;
+ iFs.Close();
+ }
+/**
+Function is intended to do the OOM test.
+@internalTechnology:
+@return:TVerdict -returns EFail if there is a failure else EPass
+@leave:- if memory allocation fails
+@test
+*/
+TVerdict CTPKCS12OOMStep::doTestStepL()
+ {
+ TInt OOMTest;
+ GetIntFromConfig(ConfigSection(),_L("OOMTest"),OOMTest);
+
+ __UHEAP_MARK;
+
+ switch(OOMTest)
+ {
+ case 1:
+ {
+ CDecPkcs12* theTest = NULL;
+ theTest = CDecPkcs12::NewL(iRawData->Des());
+ delete theTest;
+ }
+ break;
+ // File Stream
+ case 2:
+ {
+ TPtrC fileName;
+ GetStringFromConfig(ConfigSection(), _L("File"), fileName);
+
+ RFile file;
+ User::LeaveIfError(file.Open(iFs, fileName, EFileRead) );
+
+ TInt size;
+ file.Size(size);
+ file.Close();
+
+ HBufC8* res = HBufC8::NewLC(size);
+ TPtr8 p(res->Des());
+ p.SetLength(size);
+
+ RFileReadStream stream;
+ User::LeaveIfError(stream.Open(iFs, fileName, EFileStream));
+ CleanupClosePushL(stream);
+
+ stream.ReadL(p, size);
+
+ CDecPkcs12* theTest = NULL;
+ theTest = CDecPkcs12::NewL(stream);
+ delete theTest;
+ CleanupStack::PopAndDestroy(2,res); // stream
+ }
+ break;
+ // MacData
+ case 3:
+ {
+ CDecPkcs12MacData* theTest = NULL;
+ theTest = CDecPkcs12MacData::NewL(iRawData->Des(),iAuthSafeData->Des());
+ delete theTest;
+ }
+ break;
+ // Attribute
+ case 4:
+ {
+ CDecPkcs12Attribute* theTest = NULL;
+ theTest = CDecPkcs12Attribute::NewL(iRawData->Des());
+ delete theTest;
+ }
+ break;
+ // ShroudedBag
+ case 5:
+ {
+ CDecPkcs12ShroudedKeyBag* theTest = NULL;
+ theTest = CDecPkcs12ShroudedKeyBag::NewL(iRawData->Des());
+ delete theTest;
+ }
+ break;
+ // CertBag
+ case 6:
+ {
+ CDecPkcs12CertBag* theTest = NULL;
+ theTest = CDecPkcs12CertBag::NewL(iRawData->Des());
+ delete theTest;
+ }
+ break;
+ // KeyBag
+ case 7:
+ {
+ CDecPkcs12KeyBag* theTest = NULL;
+ theTest = CDecPkcs12KeyBag::NewL(iRawData->Des());
+ delete theTest;
+ }
+ break;
+ // SafeContentsBag
+ case 8:
+ {
+ CDecPkcs12SafeContentsBag* theTest = NULL;
+ theTest = CDecPkcs12SafeContentsBag::NewL(iRawData->Des());
+ delete theTest;
+ }
+ break;
+ // Safebag/CRL bag
+ case 9:
+ {
+ CDecPkcs12SafeBag* theTest = NULL;
+ theTest = CDecPkcs12SafeBag::NewL(iRawData->Des());
+ delete theTest;
+ }
+ break;
+ // SafeContentsData / SafeContentsEncryptedData
+ case 10:
+ {
+ CDecPkcs12* p12 = NULL;
+ p12 = CDecPkcs12::NewL(iRawData->Des());
+ CleanupStack::PushL(p12);
+
+ const RPointerArray<CPKCS7ContentInfo>& contentInfos = p12->AuthenticatedSafeContents();
+
+ TInt contentInfoCount = contentInfos.Count();
+ for ( TInt index = 0; index < contentInfoCount; index++ )
+ {
+ TInt contentType = contentInfos[index]->ContentType();
+ CDecPkcs12SafeContents* pkcs12SafeContents ;
+ TInt contentTypeData;
+ GetIntFromConfig(ConfigSection(),_L("ContentTypeData"),contentTypeData);
+
+ TInt contentTypeEncryptedData;
+ GetIntFromConfig(ConfigSection(),_L("ContentTypeEncryptedData"),contentTypeEncryptedData);
+
+ if ( contentType == contentTypeEncryptedData )
+ {
+ TPtrC expectedPassword(KNullDesC());
+ GetStringFromConfig(ConfigSection(), _L("Password"), expectedPassword);
+ pkcs12SafeContents = CDecPkcs12SafeContents::NewL(*contentInfos[index],expectedPassword);
+ delete pkcs12SafeContents;
+ }
+ else if ( contentType == contentTypeData )
+ {
+ pkcs12SafeContents = CDecPkcs12SafeContents::NewL(*contentInfos[index]);
+ delete pkcs12SafeContents;
+ }
+ }
+ CleanupStack::PopAndDestroy(p12);
+ break;
+ }
+ }
+ __UHEAP_MARKEND;
+ return TestStepResult();
+ }
+
+/**
+Function is intended to read the data from the specified path.
+@param-aPValue:filepath containing the path of the file
+ retrieved from the ini file.
+@internalTechnology:
+@return:returns data retrieved after reading from the file.
+@test:
+*/
+HBufC8* CTPKCS12OOMStep::ReadFileDataL(TPtrC tag)
+ {
+ TPtrC fileName;
+ if (!GetStringFromConfig(ConfigSection(), tag, fileName))
+ {
+ return NULL;
+ }
+
+ RFile file;
+ if (file.Open(iFs, fileName, EFileRead))
+ {
+ INFO_PRINTF2(_L("Cannot open file %S for reading"), &fileName);
+ return NULL;
+ }
+ CleanupClosePushL(file);
+
+ TInt fileSize = 0;
+ User::LeaveIfError(file.Size(fileSize));
+
+ HBufC8* result = HBufC8::NewL(fileSize);
+ result->Des().SetLength(fileSize);
+
+ TPtr8 rawDataPtr(result->Des());
+ rawDataPtr.SetLength(fileSize);
+ file.Read (rawDataPtr);
+
+ CleanupStack::PopAndDestroy (&file);
+
+ INFO_PRINTF3(_L("Read %d octets from %S"), result->Size(), &fileName);
+
+ return result;
+ }
+
+TVerdict CTPKCS12OOMStep::doTestStepPreambleL()
+ {
+ User::LeaveIfError (iFs.Connect());
+
+ SetTestStepResult(EPass);
+
+ iRawData = ReadFileDataL(_L("File"));
+ if (iRawData == NULL)
+ {
+ INFO_PRINTF1(_L("Failed to read 'File' section of script"));
+ SetTestStepResult(ETestSuiteError);
+ }
+ iAuthSafeData = ReadFileDataL(_L("AuthSafe"));
+ if (iAuthSafeData == NULL)
+ {
+ INFO_PRINTF1(_L("authsafedata file is not required"));
+ }
+ return TestStepResult();
+ }
+/**
+Function is intended to check for the re encoded shrouded key
+@param-aSecName:BagData Section
+@param-aBagData:safebag class pointer
+@internalTechnology:
+@return:returns EFalse if there is a failure else return ETrue
+@test:
+*/
+TBool CPKCS12LibTestStep::ChkEncodedBagValL(TDesC &aSecName,CSafeBagData &aBagData)
+ {
+ TPtrC bagPath(KNullDesC);
+ TBool flagReturn=ETrue;
+
+ //retrieve the shrouded bag value
+ if(!GetStringFromConfig(aSecName,KEncBagValue,bagPath))
+ {
+ ERR_PRINTF1(_L("Not able to get the EncBagValue from the ini file"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ }
+ TInt fileReturn=0;
+ RFile file;
+
+ if(flagReturn)
+ {
+ fileReturn=file.Open(iFileSession,bagPath,EFileRead);
+
+ if(fileReturn)
+ {
+ ERR_PRINTF1(_L("BagValue:Not able to open the file"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ }
+ }
+ CleanupClosePushL(file);
+ //raw data for reading the bagvalue
+ HBufC8 *rawData=NULL;
+ TInt filesize=0;
+ if(flagReturn)
+ {
+ User::LeaveIfError(file.Size(filesize));
+ rawData=HBufC8::NewMaxLC(filesize);
+ TPtr8 data(rawData->Des());
+ if(file.Read(data))
+ {
+ ERR_PRINTF1(_L("BagValue:Not able to Read the file"));
+ SetTestStepResult(EFail);
+ flagReturn=EFalse;
+ }
+ }
+ if(flagReturn)
+ {
+ //compare the data
+ if(rawData->CompareC(aBagData.EncodedShroudedKey())!=0)
+ {
+ iActualResult=EFalse;
+ }
+ //retrieve the expected result:PositiveTest/NegativeTest
+ if(!GetBoolFromConfig(aSecName,KExpectedResult,iExpectedResult))
+ {
+ WARN_PRINTF1(_L("ExpectedResult not found in INI file:Default:PositiveTest"));
+ iExpectedResult=KPositiveTest;
+ }
+ //check for positive or negative test
+ if(!VerifyExpectedError(aSecName))
+ {
+ INFO_PRINTF1(_L("BagValue Failed"));
+ SetTestStepResult(EFail);
+ flagReturn = EFalse;
+ }
+ }
+ if(rawData!=NULL)
+ {
+ CleanupStack::PopAndDestroy(rawData);
+ }
+ if(!fileReturn)
+ {
+ file.Close();
+ }
+ CleanupStack::PopAndDestroy(&file);
+ return flagReturn;
+ }
+
+