diff -r 675a964f4eb5 -r 35751d3474b7 cryptoservices/certificateandkeymgmt/tx509/comparisontest.cpp --- a/cryptoservices/certificateandkeymgmt/tx509/comparisontest.cpp Tue Jul 21 01:04:32 2009 +0100 +++ b/cryptoservices/certificateandkeymgmt/tx509/comparisontest.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -1,216 +1,216 @@ -/* -* Copyright (c) 2008-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 "comparisontest.h" -#include "t_input.h" -#include "t_output.h" -#include -#include - -_LIT8(KCertificate1Start,""); -_LIT8(KCertificate2Start,""); -_LIT8(KMatchExpectedStart, ""); - -CTestAction* CComparisonTest::NewL(RFs& aFs, CConsoleBase& aConsole, - Output& aOut, const TTestActionSpec& aTestActionSpec) -/** -Factory method that creates a new CComparisonTest object. - -@param aFs Shared file server session requried by base class -@param aConsole The console used by the base class for logging -@param aOut Output utilities for use by base class -@param aTestActionSpec Parameters for this test -@return a new instance of a CComparisonTest -*/ - { - CTestAction* self = CComparisonTest::NewLC(aFs, aConsole, aOut, aTestActionSpec); - CleanupStack::Pop(self); - return self; - } - -CTestAction* CComparisonTest::NewLC(RFs& aFs, CConsoleBase& aConsole, - Output& aOut, const TTestActionSpec& aTestActionSpec) -/** -Factory method that creates a new CComparisonTest object and places the pointer -to the this on the cleanup stack. -@param aFs Shared file server session requried by base class -@param aConsole The console used by the base class for logging -@param aOut Output utilities for use by base class -@param aTestActionSpec Parameters for this test -@return a new instance of a CComparisonTest -*/ - { - CComparisonTest* self = new(ELeave) CComparisonTest(aFs, aConsole, aOut); - CleanupStack::PushL(self); - self->ConstructL(aTestActionSpec); - return self; - } - -CComparisonTest::CComparisonTest(RFs& aFs, - CConsoleBase& aConsole, - Output& aOut) -: CTestAction(aConsole, aOut), iFs(aFs) -/** -Constructor -@param aFs Shared file server session required by base-class -@param aConsole Console implemenation required by base class -@param aOut Output utilities required by base class -*/ - { - } - -void CComparisonTest::ConstructL(const TTestActionSpec& aTestActionSpec) -/** -Second phase constructor -@param aTestActionSpec parameters for this test base -*/ - { - CTestAction::ConstructL(aTestActionSpec); - HBufC8* body = HBufC8::NewLC(aTestActionSpec.iActionBody.Length()); - body->Des().Copy(aTestActionSpec.iActionBody); - - TPtrC8 cert1FileName = Input::ParseElement(*body, KCertificate1Start); - if (! cert1FileName.Length() > 0) - { - SetScriptError(ESyntax, _L("Missing tag: certificate1")); - iFinished = ETrue; - return; - } - - iCert1 = ReadCertificateL(cert1FileName); - - TPtrC8 cert2FileName = Input::ParseElement(*body, KCertificate2Start); - if (! cert2FileName.Length() > 0) - { - SetScriptError(ESyntax, _L("Missing tag: certificate1")); - iFinished = ETrue; - return; - } - iCert2 = ReadCertificateL(cert2FileName); - iMatchExpected = Input::ParseElementBoolL(*body, KMatchExpectedStart); - CleanupStack::PopAndDestroy(body); - } - -CX509Certificate* CComparisonTest::ReadCertificateL(const TDesC8& aFileName) -/** -Reads an X.509 certificate from a file. -@param aFileName The name of the certificate file. -@return A pointer to the new certificate object. -*/ - { - TFileName fn; - fn.Copy(aFileName); - - iOut.write(_L("Loading: %S\n"), &fn); - RFile file; - User::LeaveIfError(file.Open(iFs, fn, EFileRead | EFileShareReadersOnly)); - CleanupClosePushL(file); - TInt size; - User::LeaveIfError(file.Size(size)); - RBuf8 buf; - buf.Create(size); - CleanupClosePushL(buf); - - User::LeaveIfError(file.Read(buf, size)); - - CX509Certificate* cert = CX509Certificate::NewL(buf); - CleanupStack::PopAndDestroy(2, &file); - return cert; - } - -CComparisonTest::~CComparisonTest() -/** -Destructor -*/ - { - delete iCert1; - delete iCert2; - } - -void CComparisonTest::DoPerformPrerequisite(TRequestStatus& aStatus) - { - iActionState = EAction; - TRequestStatus* status = &aStatus; - User::RequestComplete(status, KErrNone); - } - -void CComparisonTest::DoPerformPostrequisite(TRequestStatus& aStatus) - { - TRequestStatus* status = &aStatus; - iFinished = ETrue; - User::RequestComplete(status, KErrNone); - } - -void CComparisonTest::PerformAction(TRequestStatus& aStatus) - { - TRAPD(err, DoActionL()); - TRequestStatus* status = &aStatus; - iActionState = EPostrequisite; - User::RequestComplete(status, err); - } - -void CComparisonTest::DoActionL() -/** -Compares iCert1 and iCert2 using CX509Certificate::IsEqualL -*/ - { - HBufC* subject1 = iCert1->SubjectL(); - CleanupStack::PushL(subject1); - HBufC* subject2 = iCert2->SubjectL(); - CleanupStack::PushL(subject2); - - HBufC* issuer1 = iCert1->IssuerL(); - CleanupStack::PushL(issuer1); - HBufC* issuer2 = iCert2->IssuerL(); - CleanupStack::PushL(issuer2); - - iConsole.Printf(_L("Comparing certificates\n")); - iOut.write(_L("Comparing certificates\n")); - - iConsole.Printf(_L("cert1:\n\tsubject: %S\n\tissuer %S\n"), subject1, issuer1); - iOut.write(_L("cert1:\n\tsubject: %S\n\tissuer %S\n"), subject1, issuer1); - - iConsole.Printf(_L("cert2:\n\tsubject: %S\n\tissuer %S\n"), subject2, issuer2); - iOut.write(_L("cert2:\n\tsubject: %S issuer\n\t%S\n"), subject2, issuer2); - - TBool match = iCert1->IsEqualL(*iCert2); - iConsole.Printf(_L("Match expected %d, result %d\n"), iMatchExpected, match); - iOut.write(_L("Match expected %d, result %d\n"), iMatchExpected, match); - - iResult = (match == iMatchExpected); - - if (iResult) - { - iConsole.Printf(_L(" Success\n")); - iOut.writeString(_L(" Success\n")); - } - else - { - iConsole.Printf(_L(" Failed\n")); - iOut.writeString(_L(" Failed")); - }; - CleanupStack::PopAndDestroy(4, subject1); - } - -void CComparisonTest::DoReportAction() - { - } - -void CComparisonTest::DoCheckResult(TInt /*aError*/) - { - } +/* +* Copyright (c) 2008-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 "comparisontest.h" +#include "t_input.h" +#include "t_output.h" +#include +#include + +_LIT8(KCertificate1Start,""); +_LIT8(KCertificate2Start,""); +_LIT8(KMatchExpectedStart, ""); + +CTestAction* CComparisonTest::NewL(RFs& aFs, CConsoleBase& aConsole, + Output& aOut, const TTestActionSpec& aTestActionSpec) +/** +Factory method that creates a new CComparisonTest object. + +@param aFs Shared file server session requried by base class +@param aConsole The console used by the base class for logging +@param aOut Output utilities for use by base class +@param aTestActionSpec Parameters for this test +@return a new instance of a CComparisonTest +*/ + { + CTestAction* self = CComparisonTest::NewLC(aFs, aConsole, aOut, aTestActionSpec); + CleanupStack::Pop(self); + return self; + } + +CTestAction* CComparisonTest::NewLC(RFs& aFs, CConsoleBase& aConsole, + Output& aOut, const TTestActionSpec& aTestActionSpec) +/** +Factory method that creates a new CComparisonTest object and places the pointer +to the this on the cleanup stack. +@param aFs Shared file server session requried by base class +@param aConsole The console used by the base class for logging +@param aOut Output utilities for use by base class +@param aTestActionSpec Parameters for this test +@return a new instance of a CComparisonTest +*/ + { + CComparisonTest* self = new(ELeave) CComparisonTest(aFs, aConsole, aOut); + CleanupStack::PushL(self); + self->ConstructL(aTestActionSpec); + return self; + } + +CComparisonTest::CComparisonTest(RFs& aFs, + CConsoleBase& aConsole, + Output& aOut) +: CTestAction(aConsole, aOut), iFs(aFs) +/** +Constructor +@param aFs Shared file server session required by base-class +@param aConsole Console implemenation required by base class +@param aOut Output utilities required by base class +*/ + { + } + +void CComparisonTest::ConstructL(const TTestActionSpec& aTestActionSpec) +/** +Second phase constructor +@param aTestActionSpec parameters for this test base +*/ + { + CTestAction::ConstructL(aTestActionSpec); + HBufC8* body = HBufC8::NewLC(aTestActionSpec.iActionBody.Length()); + body->Des().Copy(aTestActionSpec.iActionBody); + + TPtrC8 cert1FileName = Input::ParseElement(*body, KCertificate1Start); + if (! cert1FileName.Length() > 0) + { + SetScriptError(ESyntax, _L("Missing tag: certificate1")); + iFinished = ETrue; + return; + } + + iCert1 = ReadCertificateL(cert1FileName); + + TPtrC8 cert2FileName = Input::ParseElement(*body, KCertificate2Start); + if (! cert2FileName.Length() > 0) + { + SetScriptError(ESyntax, _L("Missing tag: certificate1")); + iFinished = ETrue; + return; + } + iCert2 = ReadCertificateL(cert2FileName); + iMatchExpected = Input::ParseElementBoolL(*body, KMatchExpectedStart); + CleanupStack::PopAndDestroy(body); + } + +CX509Certificate* CComparisonTest::ReadCertificateL(const TDesC8& aFileName) +/** +Reads an X.509 certificate from a file. +@param aFileName The name of the certificate file. +@return A pointer to the new certificate object. +*/ + { + TFileName fn; + fn.Copy(aFileName); + + iOut.write(_L("Loading: %S\n"), &fn); + RFile file; + User::LeaveIfError(file.Open(iFs, fn, EFileRead | EFileShareReadersOnly)); + CleanupClosePushL(file); + TInt size; + User::LeaveIfError(file.Size(size)); + RBuf8 buf; + buf.Create(size); + CleanupClosePushL(buf); + + User::LeaveIfError(file.Read(buf, size)); + + CX509Certificate* cert = CX509Certificate::NewL(buf); + CleanupStack::PopAndDestroy(2, &file); + return cert; + } + +CComparisonTest::~CComparisonTest() +/** +Destructor +*/ + { + delete iCert1; + delete iCert2; + } + +void CComparisonTest::DoPerformPrerequisite(TRequestStatus& aStatus) + { + iActionState = EAction; + TRequestStatus* status = &aStatus; + User::RequestComplete(status, KErrNone); + } + +void CComparisonTest::DoPerformPostrequisite(TRequestStatus& aStatus) + { + TRequestStatus* status = &aStatus; + iFinished = ETrue; + User::RequestComplete(status, KErrNone); + } + +void CComparisonTest::PerformAction(TRequestStatus& aStatus) + { + TRAPD(err, DoActionL()); + TRequestStatus* status = &aStatus; + iActionState = EPostrequisite; + User::RequestComplete(status, err); + } + +void CComparisonTest::DoActionL() +/** +Compares iCert1 and iCert2 using CX509Certificate::IsEqualL +*/ + { + HBufC* subject1 = iCert1->SubjectL(); + CleanupStack::PushL(subject1); + HBufC* subject2 = iCert2->SubjectL(); + CleanupStack::PushL(subject2); + + HBufC* issuer1 = iCert1->IssuerL(); + CleanupStack::PushL(issuer1); + HBufC* issuer2 = iCert2->IssuerL(); + CleanupStack::PushL(issuer2); + + iConsole.Printf(_L("Comparing certificates\n")); + iOut.write(_L("Comparing certificates\n")); + + iConsole.Printf(_L("cert1:\n\tsubject: %S\n\tissuer %S\n"), subject1, issuer1); + iOut.write(_L("cert1:\n\tsubject: %S\n\tissuer %S\n"), subject1, issuer1); + + iConsole.Printf(_L("cert2:\n\tsubject: %S\n\tissuer %S\n"), subject2, issuer2); + iOut.write(_L("cert2:\n\tsubject: %S issuer\n\t%S\n"), subject2, issuer2); + + TBool match = iCert1->IsEqualL(*iCert2); + iConsole.Printf(_L("Match expected %d, result %d\n"), iMatchExpected, match); + iOut.write(_L("Match expected %d, result %d\n"), iMatchExpected, match); + + iResult = (match == iMatchExpected); + + if (iResult) + { + iConsole.Printf(_L(" Success\n")); + iOut.writeString(_L(" Success\n")); + } + else + { + iConsole.Printf(_L(" Failed\n")); + iOut.writeString(_L(" Failed")); + }; + CleanupStack::PopAndDestroy(4, subject1); + } + +void CComparisonTest::DoReportAction() + { + } + +void CComparisonTest::DoCheckResult(TInt /*aError*/) + { + }