diff -r 675a964f4eb5 -r 35751d3474b7 cryptoservices/certificateandkeymgmt/tcertstore/t_testcertfordeletable.cpp --- a/cryptoservices/certificateandkeymgmt/tcertstore/t_testcertfordeletable.cpp Tue Jul 21 01:04:32 2009 +0100 +++ b/cryptoservices/certificateandkeymgmt/tcertstore/t_testcertfordeletable.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -1,592 +1,592 @@ -/* -* Copyright (c) 2004-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 "t_testcertfordeletable.h" -#include "t_certstoredefs.h" -#include "t_input.h" -#include "t_certstoreout.h" - -#include "t_WritableCSDummies.h" - - -CTestAction* CTestCertForDeletable::NewL(RFs& aFs, - CConsoleBase& aConsole, - Output& aOut, - const TTestActionSpec& aTestActionSpec) - { - CTestCertForDeletable* self = new(ELeave) CTestCertForDeletable(aFs, aConsole, aOut); - CleanupStack::PushL(self); - self->ConstructL(aTestActionSpec); - CleanupStack::Pop(self); - return self; - } - -CTestCertForDeletable::~CTestCertForDeletable() - { - delete iCertificate; - delete iCertificateURL; - delete iCertificateContent; - delete iCertificateLabel; - } - -void CTestCertForDeletable::TestSerializationL( MCTToken& aToken, - TKeyIdentifier* aIssuerKeyId, - TKeyIdentifier* aSubjectKeyId, - const TInt aCertificateId, - const TDesC8* aIssuerHash ) - { - CCTCertInfo* cert = CCTCertInfo::NewLC( *iCertificateLabel, // const TDesC& - iCertificateFormat, // TCertificateFormat - iOwnerType, // TCertificateOwnerType - 999, // TInt aSize | aCert.Length() - aSubjectKeyId, // const TKeyIdentifier* - aIssuerKeyId, // const TKeyIdentifier* - aToken, // MCTToken& - aCertificateId, // TInt aCertificateId - iDeletable, // TBool - aIssuerHash ); // const TDesC8* aIssuerHash = NULL - - // cert -> stack - RFs fs; - User::LeaveIfError(fs.Connect()); - CleanupClosePushL(fs); // . fs -> stack - - // this is a name of the file that will be opened as - // a stream to test externalize/internalize - TDriveUnit sysDrive (fs.GetSystemDrive()); - TBuf<24> fileName (sysDrive.Name()); - fileName.Append(_L("\\certinfo.dat")); - - RFileWriteStream write_stream; - User::LeaveIfError( write_stream.Replace(fs, fileName, EFileWrite) ); - CleanupClosePushL(write_stream); // . . write_stream -> stack - - cert->ExternalizeL(write_stream); - CleanupStack::PopAndDestroy(); // . . write_stream <- pop - - // now internalize back from stream - RFileReadStream read_stream; - User::LeaveIfError( read_stream.Open(fs, fileName, EFileRead) ); - CleanupClosePushL(read_stream); // . . read_stream -> stack - - CCTCertInfo* cert_read = - CCTCertInfo::NewLC(read_stream, aToken); // does InternalizeL() - // . . . cert_read -> stack - // log certinfo params just internalized - iOut.writeString(_L("Cert attributes after internalize:")); - iOut.writeNewLine(); - WriteFormat( cert_read->CertificateFormat() ); - iOut.writeString(_L("\tiDeletable = ")); - iDeletable ? iOut.writeString(KTrue) : iOut.writeString(KFalse); - iOut.writeNewLine(); - iOut.writeNewLine(); - - // set result - iResultGood = ETrue; - // check deletable flag is persistent - if ( cert_read->IsDeletable() != iDeletable ) - { - iResultGood = EFalse; - } - // check format is persistent - if ( cert_read->CertificateFormat() != iCertificateFormat ) - { - iResultGood = EFalse; - } - - // cleanup - CleanupStack::PopAndDestroy(cert_read); // . . . cert_read <- pop - CleanupStack::PopAndDestroy(); // . . read_stream <- pop - CleanupStack::PopAndDestroy(&fs); // . fs <- pop - CleanupStack::PopAndDestroy(cert); // initial certinfo <- pop - } - -void CTestCertForDeletable::PerformAction(TRequestStatus& aStatus) - { -// COMMON PART - MCTWritableCertStore& ustore = - UnifiedCertStore().WritableCertStore(iStoreIndex); - MCTToken& token = ustore.Token(); - - TKeyIdentifier* issuerKeyId = NULL; - TKeyIdentifier* subjectKeyId = NULL; - - if (iOwnerType != ECACertificate) - { - issuerKeyId = & iIssuerKeyId; - subjectKeyId = & iSubjectKeyId; - } - - const TInt KCertificateId = 0x00000213; - _LIT8(KSomeHash, "\x70\xe4\xf4\x54\x5f\x8e\xe6\xf2\xbd\x4e\x76\x2b\x8d\xa1\x83\xd8\xe0\x5d\x4a\x7d"); - - // create some certinfo object - ASSERT(iCertificateLabel); - - switch (iState) - { - case ETestSerialization: - { - iOut.writeString(_L("Checking serialization for a certificate...")); - iOut.writeNewLine(); - - TRAPD( err, TestSerializationL( token, issuerKeyId, subjectKeyId, - KCertificateId, &KSomeHash) ); - - TRequestStatus* status = &aStatus; - if (err != KErrNone ) - { - // TestSerializationL() did leave - iResult = EFalse; - iResultGood = EFalse; - User::RequestComplete(status, err); - } - else - { - // TestSerializationL() passed ok - iResult = ETrue; - User::RequestComplete(status, aStatus.Int()); - } - // set next state - iState = EFinished; - } - break; - - - case ETestNewCSClasswDeletable: // check mctwritablecertstore - { - iOut.writeString(_L("Testing MCTWritableCertStore::Add() w deletable...")); - iOut.writeNewLine(); - - // create a writablestore supporting new Add() - TNewCSClasswDeletable storeNew; - - // call new Add() - storeNew.Add( *iCertificateLabel, - iCertificateFormat, - iOwnerType, - subjectKeyId, - issuerKeyId, - *iCertificateContent, // this is probably unset - iDeletable, - aStatus); - - iResultGood = ETrue; - iState = EFinished; - } - break; - - - case ETestOldCSClasswoDeletable: // check mctwritablecertstore - { - - iOut.writeString(_L("Testing new MCTWritableCertStore::Add() on old class...")); - iOut.writeNewLine(); - - // create a writablestore that does not have new Add() - TOldCSClasswoDeletable storeOld; - - // call new Add(), expect to get KErrNotSupported - storeOld.Add( *iCertificateLabel, - iCertificateFormat, - iOwnerType, - subjectKeyId, - issuerKeyId, - *iCertificateContent, // this is probably unset - iDeletable, - aStatus); - iResultGood = ETrue; - iState = EFinished; - - TRequestStatus* status = &aStatus; - User::RequestComplete(status, aStatus.Int()); - } - break; - - - case EFinished: - { - - if (aStatus == KErrNone) - { - iResult = ETrue; - } - else - if (aStatus == iExpectedResult) - { - iResult = ETrue; - iResultGood = ETrue; - } - else - { - iResult = EFalse; - iResultGood = ETrue; - } - - if (aStatus != KErrNoMemory) - { - iFinished = ETrue; - } - - TRequestStatus* status = &aStatus; - User::RequestComplete(status, aStatus.Int()); - } - break; - - default: - break; - - } // switch () - - } // CTestCertForDeletable::PerformAction() - -void CTestCertForDeletable::PerformCancel() - { - iState = EFinished; - MCTWritableCertStore& store = UnifiedCertStore().WritableCertStore(iStoreIndex); - store.CancelAdd(); - } - -void CTestCertForDeletable::AfterOOMFailure() - { - } - -void CTestCertForDeletable::Reset() - { - iState = EFinished; - } - -void CTestCertForDeletable::DoReportAction() - { - iOut.writeString(_L("\tLabel = ")); - iOut.writeString(*iCertificateLabel); - iOut.writeNewLine(); - iOut.writeString(_L("\tOwner type = ")); - WriteOwnerType(); - WriteFormat(iCertificateFormat); - - iOut.writeString(_L("\tSubjectKeyId: ")); - iOut.writeOctetString(iSubjectKeyId); - iOut.writeNewLine(); - - iOut.writeString(_L("\tiDeletable = ")); - iDeletable ? iOut.writeString(KTrue) : iOut.writeString(KFalse); - iOut.writeNewLine(); - iOut.writeNewLine(); - } - -void CTestCertForDeletable::WriteFormat(TCertificateFormat aFormat) - { - iOut.writeString(_L("\tFormat = ")); - switch (aFormat) - { - case EX509Certificate: - iOut.writeString(_L("X.509\n")); - break; - - case EWTLSCertificate: - iOut.writeString(_L("WTLS\n")); - break; - - case EX968Certificate: - iOut.writeString(_L("X968\n")); - break; - - case EX509CertificateUrl: - iOut.writeString(_L("X.509 URL\n")); - break; - - case EWTLSCertificateUrl: - iOut.writeString(_L("WTLS URL\n")); - break; - - case EX968CertificateUrl: - iOut.writeString(_L("X968 URL\n")); - break; - - default: - iOut.writeString(_L("Unknown format\n")); - break; - } - } - -void CTestCertForDeletable::WriteOwnerType() - { - switch (iOwnerType) - { - case ECACertificate: - iOut.writeString(_L("CA\n")); - break; - - case EUserCertificate: - iOut.writeString(_L("User")); - break; - - case EPeerCertificate: - iOut.writeString(_L("Peer")); - break; - - default: - iOut.writeString(_L("Unknown")); - break; - } - } - -CTestCertForDeletable::CTestCertForDeletable(RFs& aFs, CConsoleBase& aConsole, - Output& aOut) -: CCertStoreTestAction(aFs, aConsole, aOut), iState(EFinished) - { - } - -void CTestCertForDeletable::ConstructL(const TTestActionSpec& aTestActionSpec) - { - CCertStoreTestAction::ConstructL(aTestActionSpec); - - SetCertFormatL(Input::ParseElement(aTestActionSpec.iActionBody, KCertFormatStart)); - SetCertOwnerTypeL(Input::ParseElement(aTestActionSpec.iActionBody, KCertOwnerTypeStart)); - SetCertLabelL(Input::ParseElement(aTestActionSpec.iActionBody, KCertLabelStart)); - SetKeyId(iIssuerKeyId, Input::ParseElement(aTestActionSpec.iActionBody, KIssuerKeyStart)); - SetKeyId(iSubjectKeyId, Input::ParseElement(aTestActionSpec.iActionBody, KSubjectKeyStart)); - SetStoreToUse(Input::ParseElement(aTestActionSpec.iActionBody, KStoreToUseStart)); - SetDeletable(Input::ParseElement(aTestActionSpec.iActionBody, KDeletableStart)); - SetSubActionL(Input::ParseElement(aTestActionSpec.iActionBody, KSubActionStart)); - - // Setting the expected result - HBufC* result = HBufC::NewLC(aTestActionSpec.iActionResult.Length()); - TPtr(result->Des()).Copy(aTestActionSpec.iActionResult); - Input::GetExpectedResultL(Input::ParseElement(*result, KReturnStart, KReturnEnd), iExpectedResult); - CleanupStack::PopAndDestroy(result); - } - -void CTestCertForDeletable::SetKeyId(TKeyIdentifier& aKeyIdentifier, const TDesC8& aKeyInfo) - { - TInt size = aKeyInfo.Length(); - for (TInt i = 0; i < size; i += 2) - { - TInt a = (aKeyInfo[i+1] >= 'a') ? (aKeyInfo[i+1] - 'a' + 10) : (aKeyInfo[i+1] - '0'); - TInt b = (aKeyInfo[i] >= 'a') ? (aKeyInfo[i] - 'a' + 10) : (aKeyInfo[i] - '0'); - aKeyIdentifier.Append(a + b * 16); - } - } - -void CTestCertForDeletable::SetCertFormatL(const TDesC8& aFormat) - { - if (aFormat == KX509) - { - iCertificateFormat = EX509Certificate; - } - else if (aFormat == KWTLS) - { - iCertificateFormat = EWTLSCertificate; - } - else if (aFormat == KX968) - { - iCertificateFormat = EX968Certificate; - } - else if (aFormat == KX509URL) - { - iCertificateFormat = EX509CertificateUrl; - } - else if (aFormat == KWTLSURL) - { - iCertificateFormat = EWTLSCertificateUrl; - } - else if (aFormat == KX968URL) - { - iCertificateFormat = EX968CertificateUrl; - } - else if (aFormat == KUnknown) - { - iCertificateFormat = EUnknownCertificate; - } - else - { - iOut.write(_L("Unrecognized cert format: ")); - iOut.writeString(aFormat); - iOut.writeNewLine(); - User::Leave(KErrArgument); - } - } - -void CTestCertForDeletable::SetCertOwnerTypeL(const TDesC8& aOwnerType) - { - if (aOwnerType == KCACert) - { - iOwnerType = ECACertificate; - } - else if (aOwnerType == KUserCert) - { - iOwnerType = EUserCertificate; - } - else if (aOwnerType == KPeerCert) - { - iOwnerType = EPeerCertificate; - } - else if (aOwnerType == KUnknown) - { - // set dummy bogus owner type - iOwnerType = static_cast(EPeerCertificate + 1); - } - else - { - iOut.write(_L("Unknown cert owner type: ")); - iOut.writeString(aOwnerType); - iOut.writeNewLine(); - User::Leave(KErrArgument); - } - } - -void CTestCertForDeletable::SetSubActionL(const TDesC8& aStringVal) - { - if (aStringVal == KTestSerialization) - { - iState = ETestSerialization; - } - else if (aStringVal == KTestNewCSClasswDeletable) - { - iState = ETestNewCSClasswDeletable; - } - else if (aStringVal == KTestOldCSClasswoDeletable) - { - iState = ETestOldCSClasswoDeletable; - } - - else - { - iOut.write(_L("Unknown subaction type: ")); - iOut.writeString(aStringVal); - iOut.writeNewLine(); - User::Leave(KErrArgument); - } - } - - -void CTestCertForDeletable::SetCertLabelL(const TDesC8& aLabel) - { - delete iCertificateLabel; - iCertificateLabel = NULL; - iCertificateLabel = HBufC::NewL(aLabel.Length()); - TPtr ptr = iCertificateLabel->Des(); - ptr.Copy(aLabel); - } - - - -void CTestCertForDeletable::SetStoreToUse(const TDesC8& aStoreToUse) - { - TLex8 lex(aStoreToUse); - lex.Val(iStoreIndex); - } - -void CTestCertForDeletable::SetDeletable(const TDesC8& aStringVal) - { - TLex8 lex(aStringVal); - lex.Val(iDeletable); - } - -void CTestCertForDeletable::SetCertificateContentL(const TDesC8& aFileName) - { - TFileName fileName; - fileName.Copy(aFileName); - RFs fs; - User::LeaveIfError(fs.Connect()); - CleanupClosePushL(fs); - __ASSERT_DEBUG(!iCertificateContent, User::Panic(_L("CTestCertForDeletable"), 1)); - TRAPD(err, iCertificateContent = Input::ReadFileL(fileName, fs)); - if (err != KErrNone) - { - iConsole.Printf(_L("Error reading file : ")); - iConsole.Printf(fileName); - iConsole.Printf(_L("\n")); - User::Leave(err); - } - CleanupStack::PopAndDestroy(); // fs - } - -void CTestCertForDeletable::ConstructCertL(const TDesC8& aCert) - { - TFileName filename; - filename.Copy(aCert); - RFs fs; - User::LeaveIfError(fs.Connect()); - CleanupClosePushL(fs); - HBufC8* certBuf = 0; - TRAPD(err, certBuf = Input::ReadFileL(filename, fs)); - if (err != KErrNone) - { - iConsole.Printf(_L("Error reading file : ")); - iConsole.Printf(filename); - iConsole.Printf(_L("\n")); - User::Leave(err); - } - CleanupStack::PushL(certBuf); - switch (iCertificateFormat) - { - case EX509Certificate: - iCertificate = CX509Certificate::NewL(*certBuf); - break; - - case EWTLSCertificate: - iCertificate = CWTLSCertificate::NewL(*certBuf); - break; - - default: - // Unknown format - do nothing - break; - } - CleanupStack::PopAndDestroy(2); // fs and certBuf - } - -void CTestCertForDeletable::DoCheckResult(TInt aError) - { - if (iFinished) - { - if (iResult && !iResultGood) - { - iConsole.Write(_L("\ttestcertfordeletable failed\n")); - iOut.writeString(_L("\ttestcertfordeletable failed")); - iOut.writeNewLine(); - iOut.writeNewLine(); - } - else if (iResult) - { - iConsole.Write(_L("\ttestcertfordeletable passed ok\n")); - iOut.writeString(_L("\ttestcertfordeletable passed ok")); - iOut.writeNewLine(); - iOut.writeNewLine(); - } - else - { - iConsole.Write(_L("\tcertinfo couldn't be tested\n")); - iOut.writeString(_L("\tcertinfo couldn't be tested")); - iOut.writeNewLine(); - iOut.writeString(_L("\t")); - iOut.writeError(aError); - if (aError == KErrBadName) - { - iOut.writeString(_L(" - Check that the label is unique")); - } - if (aError == KErrAccessDenied) - { - iOut.writeString(_L(" - Can't open filestream. Access denied.")); - } - iOut.writeNewLine(); - iOut.writeNewLine(); - } - } - } +/* +* Copyright (c) 2004-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 "t_testcertfordeletable.h" +#include "t_certstoredefs.h" +#include "t_input.h" +#include "t_certstoreout.h" + +#include "t_WritableCSDummies.h" + + +CTestAction* CTestCertForDeletable::NewL(RFs& aFs, + CConsoleBase& aConsole, + Output& aOut, + const TTestActionSpec& aTestActionSpec) + { + CTestCertForDeletable* self = new(ELeave) CTestCertForDeletable(aFs, aConsole, aOut); + CleanupStack::PushL(self); + self->ConstructL(aTestActionSpec); + CleanupStack::Pop(self); + return self; + } + +CTestCertForDeletable::~CTestCertForDeletable() + { + delete iCertificate; + delete iCertificateURL; + delete iCertificateContent; + delete iCertificateLabel; + } + +void CTestCertForDeletable::TestSerializationL( MCTToken& aToken, + TKeyIdentifier* aIssuerKeyId, + TKeyIdentifier* aSubjectKeyId, + const TInt aCertificateId, + const TDesC8* aIssuerHash ) + { + CCTCertInfo* cert = CCTCertInfo::NewLC( *iCertificateLabel, // const TDesC& + iCertificateFormat, // TCertificateFormat + iOwnerType, // TCertificateOwnerType + 999, // TInt aSize | aCert.Length() + aSubjectKeyId, // const TKeyIdentifier* + aIssuerKeyId, // const TKeyIdentifier* + aToken, // MCTToken& + aCertificateId, // TInt aCertificateId + iDeletable, // TBool + aIssuerHash ); // const TDesC8* aIssuerHash = NULL + + // cert -> stack + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); // . fs -> stack + + // this is a name of the file that will be opened as + // a stream to test externalize/internalize + TDriveUnit sysDrive (fs.GetSystemDrive()); + TBuf<24> fileName (sysDrive.Name()); + fileName.Append(_L("\\certinfo.dat")); + + RFileWriteStream write_stream; + User::LeaveIfError( write_stream.Replace(fs, fileName, EFileWrite) ); + CleanupClosePushL(write_stream); // . . write_stream -> stack + + cert->ExternalizeL(write_stream); + CleanupStack::PopAndDestroy(); // . . write_stream <- pop + + // now internalize back from stream + RFileReadStream read_stream; + User::LeaveIfError( read_stream.Open(fs, fileName, EFileRead) ); + CleanupClosePushL(read_stream); // . . read_stream -> stack + + CCTCertInfo* cert_read = + CCTCertInfo::NewLC(read_stream, aToken); // does InternalizeL() + // . . . cert_read -> stack + // log certinfo params just internalized + iOut.writeString(_L("Cert attributes after internalize:")); + iOut.writeNewLine(); + WriteFormat( cert_read->CertificateFormat() ); + iOut.writeString(_L("\tiDeletable = ")); + iDeletable ? iOut.writeString(KTrue) : iOut.writeString(KFalse); + iOut.writeNewLine(); + iOut.writeNewLine(); + + // set result + iResultGood = ETrue; + // check deletable flag is persistent + if ( cert_read->IsDeletable() != iDeletable ) + { + iResultGood = EFalse; + } + // check format is persistent + if ( cert_read->CertificateFormat() != iCertificateFormat ) + { + iResultGood = EFalse; + } + + // cleanup + CleanupStack::PopAndDestroy(cert_read); // . . . cert_read <- pop + CleanupStack::PopAndDestroy(); // . . read_stream <- pop + CleanupStack::PopAndDestroy(&fs); // . fs <- pop + CleanupStack::PopAndDestroy(cert); // initial certinfo <- pop + } + +void CTestCertForDeletable::PerformAction(TRequestStatus& aStatus) + { +// COMMON PART + MCTWritableCertStore& ustore = + UnifiedCertStore().WritableCertStore(iStoreIndex); + MCTToken& token = ustore.Token(); + + TKeyIdentifier* issuerKeyId = NULL; + TKeyIdentifier* subjectKeyId = NULL; + + if (iOwnerType != ECACertificate) + { + issuerKeyId = & iIssuerKeyId; + subjectKeyId = & iSubjectKeyId; + } + + const TInt KCertificateId = 0x00000213; + _LIT8(KSomeHash, "\x70\xe4\xf4\x54\x5f\x8e\xe6\xf2\xbd\x4e\x76\x2b\x8d\xa1\x83\xd8\xe0\x5d\x4a\x7d"); + + // create some certinfo object + ASSERT(iCertificateLabel); + + switch (iState) + { + case ETestSerialization: + { + iOut.writeString(_L("Checking serialization for a certificate...")); + iOut.writeNewLine(); + + TRAPD( err, TestSerializationL( token, issuerKeyId, subjectKeyId, + KCertificateId, &KSomeHash) ); + + TRequestStatus* status = &aStatus; + if (err != KErrNone ) + { + // TestSerializationL() did leave + iResult = EFalse; + iResultGood = EFalse; + User::RequestComplete(status, err); + } + else + { + // TestSerializationL() passed ok + iResult = ETrue; + User::RequestComplete(status, aStatus.Int()); + } + // set next state + iState = EFinished; + } + break; + + + case ETestNewCSClasswDeletable: // check mctwritablecertstore + { + iOut.writeString(_L("Testing MCTWritableCertStore::Add() w deletable...")); + iOut.writeNewLine(); + + // create a writablestore supporting new Add() + TNewCSClasswDeletable storeNew; + + // call new Add() + storeNew.Add( *iCertificateLabel, + iCertificateFormat, + iOwnerType, + subjectKeyId, + issuerKeyId, + *iCertificateContent, // this is probably unset + iDeletable, + aStatus); + + iResultGood = ETrue; + iState = EFinished; + } + break; + + + case ETestOldCSClasswoDeletable: // check mctwritablecertstore + { + + iOut.writeString(_L("Testing new MCTWritableCertStore::Add() on old class...")); + iOut.writeNewLine(); + + // create a writablestore that does not have new Add() + TOldCSClasswoDeletable storeOld; + + // call new Add(), expect to get KErrNotSupported + storeOld.Add( *iCertificateLabel, + iCertificateFormat, + iOwnerType, + subjectKeyId, + issuerKeyId, + *iCertificateContent, // this is probably unset + iDeletable, + aStatus); + iResultGood = ETrue; + iState = EFinished; + + TRequestStatus* status = &aStatus; + User::RequestComplete(status, aStatus.Int()); + } + break; + + + case EFinished: + { + + if (aStatus == KErrNone) + { + iResult = ETrue; + } + else + if (aStatus == iExpectedResult) + { + iResult = ETrue; + iResultGood = ETrue; + } + else + { + iResult = EFalse; + iResultGood = ETrue; + } + + if (aStatus != KErrNoMemory) + { + iFinished = ETrue; + } + + TRequestStatus* status = &aStatus; + User::RequestComplete(status, aStatus.Int()); + } + break; + + default: + break; + + } // switch () + + } // CTestCertForDeletable::PerformAction() + +void CTestCertForDeletable::PerformCancel() + { + iState = EFinished; + MCTWritableCertStore& store = UnifiedCertStore().WritableCertStore(iStoreIndex); + store.CancelAdd(); + } + +void CTestCertForDeletable::AfterOOMFailure() + { + } + +void CTestCertForDeletable::Reset() + { + iState = EFinished; + } + +void CTestCertForDeletable::DoReportAction() + { + iOut.writeString(_L("\tLabel = ")); + iOut.writeString(*iCertificateLabel); + iOut.writeNewLine(); + iOut.writeString(_L("\tOwner type = ")); + WriteOwnerType(); + WriteFormat(iCertificateFormat); + + iOut.writeString(_L("\tSubjectKeyId: ")); + iOut.writeOctetString(iSubjectKeyId); + iOut.writeNewLine(); + + iOut.writeString(_L("\tiDeletable = ")); + iDeletable ? iOut.writeString(KTrue) : iOut.writeString(KFalse); + iOut.writeNewLine(); + iOut.writeNewLine(); + } + +void CTestCertForDeletable::WriteFormat(TCertificateFormat aFormat) + { + iOut.writeString(_L("\tFormat = ")); + switch (aFormat) + { + case EX509Certificate: + iOut.writeString(_L("X.509\n")); + break; + + case EWTLSCertificate: + iOut.writeString(_L("WTLS\n")); + break; + + case EX968Certificate: + iOut.writeString(_L("X968\n")); + break; + + case EX509CertificateUrl: + iOut.writeString(_L("X.509 URL\n")); + break; + + case EWTLSCertificateUrl: + iOut.writeString(_L("WTLS URL\n")); + break; + + case EX968CertificateUrl: + iOut.writeString(_L("X968 URL\n")); + break; + + default: + iOut.writeString(_L("Unknown format\n")); + break; + } + } + +void CTestCertForDeletable::WriteOwnerType() + { + switch (iOwnerType) + { + case ECACertificate: + iOut.writeString(_L("CA\n")); + break; + + case EUserCertificate: + iOut.writeString(_L("User")); + break; + + case EPeerCertificate: + iOut.writeString(_L("Peer")); + break; + + default: + iOut.writeString(_L("Unknown")); + break; + } + } + +CTestCertForDeletable::CTestCertForDeletable(RFs& aFs, CConsoleBase& aConsole, + Output& aOut) +: CCertStoreTestAction(aFs, aConsole, aOut), iState(EFinished) + { + } + +void CTestCertForDeletable::ConstructL(const TTestActionSpec& aTestActionSpec) + { + CCertStoreTestAction::ConstructL(aTestActionSpec); + + SetCertFormatL(Input::ParseElement(aTestActionSpec.iActionBody, KCertFormatStart)); + SetCertOwnerTypeL(Input::ParseElement(aTestActionSpec.iActionBody, KCertOwnerTypeStart)); + SetCertLabelL(Input::ParseElement(aTestActionSpec.iActionBody, KCertLabelStart)); + SetKeyId(iIssuerKeyId, Input::ParseElement(aTestActionSpec.iActionBody, KIssuerKeyStart)); + SetKeyId(iSubjectKeyId, Input::ParseElement(aTestActionSpec.iActionBody, KSubjectKeyStart)); + SetStoreToUse(Input::ParseElement(aTestActionSpec.iActionBody, KStoreToUseStart)); + SetDeletable(Input::ParseElement(aTestActionSpec.iActionBody, KDeletableStart)); + SetSubActionL(Input::ParseElement(aTestActionSpec.iActionBody, KSubActionStart)); + + // Setting the expected result + HBufC* result = HBufC::NewLC(aTestActionSpec.iActionResult.Length()); + TPtr(result->Des()).Copy(aTestActionSpec.iActionResult); + Input::GetExpectedResultL(Input::ParseElement(*result, KReturnStart, KReturnEnd), iExpectedResult); + CleanupStack::PopAndDestroy(result); + } + +void CTestCertForDeletable::SetKeyId(TKeyIdentifier& aKeyIdentifier, const TDesC8& aKeyInfo) + { + TInt size = aKeyInfo.Length(); + for (TInt i = 0; i < size; i += 2) + { + TInt a = (aKeyInfo[i+1] >= 'a') ? (aKeyInfo[i+1] - 'a' + 10) : (aKeyInfo[i+1] - '0'); + TInt b = (aKeyInfo[i] >= 'a') ? (aKeyInfo[i] - 'a' + 10) : (aKeyInfo[i] - '0'); + aKeyIdentifier.Append(a + b * 16); + } + } + +void CTestCertForDeletable::SetCertFormatL(const TDesC8& aFormat) + { + if (aFormat == KX509) + { + iCertificateFormat = EX509Certificate; + } + else if (aFormat == KWTLS) + { + iCertificateFormat = EWTLSCertificate; + } + else if (aFormat == KX968) + { + iCertificateFormat = EX968Certificate; + } + else if (aFormat == KX509URL) + { + iCertificateFormat = EX509CertificateUrl; + } + else if (aFormat == KWTLSURL) + { + iCertificateFormat = EWTLSCertificateUrl; + } + else if (aFormat == KX968URL) + { + iCertificateFormat = EX968CertificateUrl; + } + else if (aFormat == KUnknown) + { + iCertificateFormat = EUnknownCertificate; + } + else + { + iOut.write(_L("Unrecognized cert format: ")); + iOut.writeString(aFormat); + iOut.writeNewLine(); + User::Leave(KErrArgument); + } + } + +void CTestCertForDeletable::SetCertOwnerTypeL(const TDesC8& aOwnerType) + { + if (aOwnerType == KCACert) + { + iOwnerType = ECACertificate; + } + else if (aOwnerType == KUserCert) + { + iOwnerType = EUserCertificate; + } + else if (aOwnerType == KPeerCert) + { + iOwnerType = EPeerCertificate; + } + else if (aOwnerType == KUnknown) + { + // set dummy bogus owner type + iOwnerType = static_cast(EPeerCertificate + 1); + } + else + { + iOut.write(_L("Unknown cert owner type: ")); + iOut.writeString(aOwnerType); + iOut.writeNewLine(); + User::Leave(KErrArgument); + } + } + +void CTestCertForDeletable::SetSubActionL(const TDesC8& aStringVal) + { + if (aStringVal == KTestSerialization) + { + iState = ETestSerialization; + } + else if (aStringVal == KTestNewCSClasswDeletable) + { + iState = ETestNewCSClasswDeletable; + } + else if (aStringVal == KTestOldCSClasswoDeletable) + { + iState = ETestOldCSClasswoDeletable; + } + + else + { + iOut.write(_L("Unknown subaction type: ")); + iOut.writeString(aStringVal); + iOut.writeNewLine(); + User::Leave(KErrArgument); + } + } + + +void CTestCertForDeletable::SetCertLabelL(const TDesC8& aLabel) + { + delete iCertificateLabel; + iCertificateLabel = NULL; + iCertificateLabel = HBufC::NewL(aLabel.Length()); + TPtr ptr = iCertificateLabel->Des(); + ptr.Copy(aLabel); + } + + + +void CTestCertForDeletable::SetStoreToUse(const TDesC8& aStoreToUse) + { + TLex8 lex(aStoreToUse); + lex.Val(iStoreIndex); + } + +void CTestCertForDeletable::SetDeletable(const TDesC8& aStringVal) + { + TLex8 lex(aStringVal); + lex.Val(iDeletable); + } + +void CTestCertForDeletable::SetCertificateContentL(const TDesC8& aFileName) + { + TFileName fileName; + fileName.Copy(aFileName); + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + __ASSERT_DEBUG(!iCertificateContent, User::Panic(_L("CTestCertForDeletable"), 1)); + TRAPD(err, iCertificateContent = Input::ReadFileL(fileName, fs)); + if (err != KErrNone) + { + iConsole.Printf(_L("Error reading file : ")); + iConsole.Printf(fileName); + iConsole.Printf(_L("\n")); + User::Leave(err); + } + CleanupStack::PopAndDestroy(); // fs + } + +void CTestCertForDeletable::ConstructCertL(const TDesC8& aCert) + { + TFileName filename; + filename.Copy(aCert); + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + HBufC8* certBuf = 0; + TRAPD(err, certBuf = Input::ReadFileL(filename, fs)); + if (err != KErrNone) + { + iConsole.Printf(_L("Error reading file : ")); + iConsole.Printf(filename); + iConsole.Printf(_L("\n")); + User::Leave(err); + } + CleanupStack::PushL(certBuf); + switch (iCertificateFormat) + { + case EX509Certificate: + iCertificate = CX509Certificate::NewL(*certBuf); + break; + + case EWTLSCertificate: + iCertificate = CWTLSCertificate::NewL(*certBuf); + break; + + default: + // Unknown format - do nothing + break; + } + CleanupStack::PopAndDestroy(2); // fs and certBuf + } + +void CTestCertForDeletable::DoCheckResult(TInt aError) + { + if (iFinished) + { + if (iResult && !iResultGood) + { + iConsole.Write(_L("\ttestcertfordeletable failed\n")); + iOut.writeString(_L("\ttestcertfordeletable failed")); + iOut.writeNewLine(); + iOut.writeNewLine(); + } + else if (iResult) + { + iConsole.Write(_L("\ttestcertfordeletable passed ok\n")); + iOut.writeString(_L("\ttestcertfordeletable passed ok")); + iOut.writeNewLine(); + iOut.writeNewLine(); + } + else + { + iConsole.Write(_L("\tcertinfo couldn't be tested\n")); + iOut.writeString(_L("\tcertinfo couldn't be tested")); + iOut.writeNewLine(); + iOut.writeString(_L("\t")); + iOut.writeError(aError); + if (aError == KErrBadName) + { + iOut.writeString(_L(" - Check that the label is unique")); + } + if (aError == KErrAccessDenied) + { + iOut.writeString(_L(" - Can't open filestream. Access denied.")); + } + iOut.writeNewLine(); + iOut.writeNewLine(); + } + } + }