sl@0: /* sl@0: * Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of the License "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * tactiondecodepkcs5.cpp sl@0: * sl@0: */ sl@0: sl@0: sl@0: #include "tactiontestpkcs8.h" sl@0: #include "t_input.h" sl@0: #include "t_output.h" sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: _LIT8(KFilenameStart, ""); sl@0: _LIT8(KMatchesStart, ""); sl@0: sl@0: _LIT8(KOutcomeNoMatch, "noMatch"); sl@0: _LIT8(KOutcomeMatchesPKCS8, "pkcs8"); sl@0: _LIT8(KOutcomeMatchesEncryptedPKCS8, "encryptedPkcs8"); sl@0: sl@0: _LIT(KFilenameBase, "\\tkeystore\\data\\"); sl@0: sl@0: CTestAction* CActionTestPKCS8::NewL(RFs& aFs, sl@0: CConsoleBase& aConsole, sl@0: Output& aOut, sl@0: const TTestActionSpec& aTestActionSpec) sl@0: { sl@0: CActionTestPKCS8* self = new(ELeave) CActionTestPKCS8(aFs, aConsole, aOut); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(aTestActionSpec); sl@0: CleanupStack::Pop(); sl@0: return self; sl@0: } sl@0: sl@0: CActionTestPKCS8::~CActionTestPKCS8() sl@0: { sl@0: delete iInput; sl@0: } sl@0: sl@0: CActionTestPKCS8::CActionTestPKCS8(RFs& aFs, sl@0: CConsoleBase& aConsole, sl@0: Output& aOut) sl@0: sl@0: : CTestAction(aConsole, aOut), iFs(aFs) sl@0: { sl@0: } sl@0: sl@0: void CActionTestPKCS8::ConstructL(const TTestActionSpec& aTestActionSpec) sl@0: { sl@0: CTestAction::ConstructL(aTestActionSpec); sl@0: ReadInputFileL(Input::ParseElement(aTestActionSpec.iActionBody, KFilenameStart)); sl@0: SetExpectedOutcomeL(Input::ParseElement(aTestActionSpec.iActionBody, KMatchesStart)); sl@0: } sl@0: sl@0: void CActionTestPKCS8::ReadInputFileL(const TDesC8& aFilename) sl@0: { sl@0: if (aFilename == KNullDesC8) sl@0: { sl@0: User::Leave(KErrArgument); sl@0: } sl@0: sl@0: TFileName tempFilename; sl@0: tempFilename.Copy(aFilename); // convert from 8 -> 16 bit descriptor sl@0: sl@0: TDriveUnit sysDrive = RFs::GetSystemDrive(); sl@0: TDriveName sysDriveName (sysDrive.Name()); sl@0: tempFilename.Insert(0,sysDriveName); sl@0: tempFilename.Insert(2,KFilenameBase); sl@0: sl@0: RFile file; sl@0: User::LeaveIfError(file.Open(iFs, tempFilename, EFileRead)); sl@0: CleanupClosePushL(file); sl@0: TInt size = 0; sl@0: User::LeaveIfError(file.Size(size)); sl@0: sl@0: iInput = HBufC8::NewMaxL(size); sl@0: TPtr8 ptr = iInput->Des(); sl@0: User::LeaveIfError(file.Read(ptr)); sl@0: sl@0: CleanupStack::PopAndDestroy(&file); sl@0: } sl@0: sl@0: void CActionTestPKCS8::SetExpectedOutcomeL(const TDesC8& aOutcome) sl@0: { sl@0: if (aOutcome == KOutcomeNoMatch) sl@0: { sl@0: iExpectedOutcome = ENoMatch; sl@0: } sl@0: else if (aOutcome == KOutcomeMatchesPKCS8) sl@0: { sl@0: iExpectedOutcome = EMatchesPKCS8; sl@0: } sl@0: else if (aOutcome == KOutcomeMatchesEncryptedPKCS8) sl@0: { sl@0: iExpectedOutcome = EMatchesEncryptedPKCS8; sl@0: } sl@0: else sl@0: { sl@0: User::Leave(KErrArgument); sl@0: } sl@0: } sl@0: sl@0: void CActionTestPKCS8::DoReportAction(void) sl@0: { sl@0: } sl@0: sl@0: void CActionTestPKCS8::DoCheckResult(TInt) sl@0: { sl@0: } sl@0: sl@0: void CActionTestPKCS8::PerformAction(TRequestStatus& aStatus) sl@0: { sl@0: TRequestStatus* status = &aStatus; sl@0: iResult = EFalse; sl@0: sl@0: TBool matchesPKCS8 = TASN1DecPKCS8::IsPKCS8Data(*iInput); sl@0: TBool matchesEncryptedPKCS8 = TASN1DecPKCS8::IsEncryptedPKCS8Data(*iInput); sl@0: sl@0: if (matchesPKCS8 && matchesEncryptedPKCS8) sl@0: { sl@0: iOut.writeString(_L("!! Data matches both cleartext and encrypted pkcs8\n")); sl@0: User::Leave(KErrGeneral); sl@0: } sl@0: sl@0: TOutcome outcome = ENoMatch; sl@0: sl@0: if (matchesPKCS8) sl@0: { sl@0: iOut.writeString(_L("Data matches cleartext pkcs8\n")); sl@0: outcome = EMatchesPKCS8; sl@0: } sl@0: else if (matchesEncryptedPKCS8) sl@0: { sl@0: iOut.writeString(_L("Data matches encrypted pkcs8\n")); sl@0: outcome = EMatchesEncryptedPKCS8; sl@0: } sl@0: else sl@0: { sl@0: iOut.writeString(_L("Data doesn't match anything\n")); sl@0: } sl@0: sl@0: if(outcome == iExpectedOutcome) sl@0: { sl@0: iResult = ETrue; sl@0: } sl@0: sl@0: User::RequestComplete(status, KErrNone); sl@0: iActionState = CTestAction::EPostrequisite; sl@0: }