diff -r 675a964f4eb5 -r 35751d3474b7 cryptoservices/certificateandkeymgmt/tasn1/testoutput.cpp --- a/cryptoservices/certificateandkeymgmt/tasn1/testoutput.cpp Tue Jul 21 01:04:32 2009 +0100 +++ b/cryptoservices/certificateandkeymgmt/tasn1/testoutput.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -1,182 +1,182 @@ -/* -* Copyright (c) 2001-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: -* Implementation for testing encoded object output -* -*/ - - -#include "testoutput.h" -#include "tasn1normaltest.h" -#include -#include -#include -#include - - -#include - -CTestOutput* CTestOutput::NewL(CASN1NormalTest &aASN1Action) - { - CTestOutput* test = new (ELeave) CTestOutput(aASN1Action); - return test; - } - -CTestOutput::CTestOutput(CASN1NormalTest &aASN1Action) : CTestBase(aASN1Action) - { - }; - - -void CTestOutput::GetName(TDes& aBuf) - { - aBuf.Copy(_L("Test Output (to file)")); - } - - -TBool CTestOutput::PerformTestsL(CConsoleBase& aConsole) - { - // Get object to output - CASN1EncBase* enc = MakeEncoderLC(); - - // Prepare a buffer - TUint length = enc->LengthDER(); - HBufC8* buf = HBufC8::NewMaxLC(length); - TPtr8 tBuf = buf->Des(); - - // Write into the buffer - TUint writeLength = 0; - enc->WriteDERL(tBuf, writeLength); - - // Copy to file - RFs fs; - User::LeaveIfError(fs.Connect()); - CleanupClosePushL(fs); - TDriveUnit sysDrive (fs.GetSystemDrive()); - TDriveName driveName(sysDrive.Name()); - TBuf<64> fileName(driveName); - fileName.Append(_L("\\tasn1\\TASN1_test_output")); - - RFile file; - User::LeaveIfError(file.Replace(fs, fileName, EFileWrite)); - CleanupClosePushL(file); - User::LeaveIfError(file.Write(tBuf)); - - // Tidy up - CleanupStack::PopAndDestroy(4); // Close file, close fs, buf, enc - iASN1Action.ReportProgressL(KErrNone, 1, 1); - - aConsole.Write(_L("Now use DumpASN1 on ")); - aConsole.Write(fileName); - aConsole.Write(_L("\n")); - return(ETrue); - } - - -CASN1EncBase* CTestOutput::MakeEncoderLC(const TBool aNest) const - { - // Sequence we'll be using - CASN1EncSequence* seq = CASN1EncSequence::NewLC(); - - // Add objects - TUint index = aNest ? 0 : 1; - while (CASN1EncBase* enc = MakeEncObjLC(index++)) - { - seq->AddChildL(enc); - CleanupStack::Pop(); // enc - } - - return seq; - } - - -CASN1EncBase* CTestOutput::MakeEncObjLC(const TUint aIndex) const - { - switch (aIndex) - { - case 0: - // Case 0 is always the nested sequence encoder - return MakeEncoderLC(EFalse); - case 1: - return CASN1EncNull::NewLC(); - case 2: - return CASN1EncBoolean::NewLC(ETrue); - case 3: - return CASN1EncBoolean::NewLC(EFalse); - case 4: - return CASN1EncInt::NewLC(12345); - case 5: - return CASN1EncInt::NewLC(-4354); - case 6: - { - RInteger i = RInteger::NewRandomL(345, TInteger::EAllBitsRandom); - CleanupStack::PushL(i); - CASN1EncBigInt* enc = CASN1EncBigInt::NewLC(i); - CleanupStack::Pop(); - CleanupStack::PopAndDestroy(&i); - CleanupStack::PushL(enc); - return enc; - } - case 7: // -ve this time - { - RInteger i = RInteger::NewRandomL(345, TInteger::EAllBitsRandom); - CleanupStack::PushL(i); - i *= -1; - CASN1EncBigInt* enc = CASN1EncBigInt::NewLC(i); - CleanupStack::Pop(); - CleanupStack::PopAndDestroy(&i); - CleanupStack::PushL(enc); - return enc; - } - case 8: - { - // INFOSEC policy UID - _LIT(KTestOID, "2.16.840.1.101.2.1.3.10"); - return CASN1EncObjectIdentifier::NewLC(KTestOID); - } - case 9: - { - HBufC8* str = HBufC8::NewLC(256); - TPtr8 des = str->Des(); - for (TUint i = 0; i < 256; ++i) - { - des.Append(STATIC_CAST(TChar, i)); - } - CASN1EncBase* enc = CASN1EncOctetString::NewLC(des); - CleanupStack::Pop(); - CleanupStack::PopAndDestroy(); // str - CleanupStack::PushL(enc); - return enc; - } - case 10: // without seconds - { - // DateTime month and day are 0-based - TDateTime dateTime(1972, EDecember, 19, 11, 35, 0, 0); - return CASN1EncGeneralizedTime::NewLC(dateTime); // Implicit conversion to TTime - } - case 11: // with seconds - { - // DateTime month and day are 0-based - TDateTime dateTime(1972, EDecember, 19, 11, 35, 23, 0); - return CASN1EncGeneralizedTime::NewLC(dateTime); // Implicit conversion to TTime - } - case 12: - { - CASN1EncBase* null = CASN1EncNull::NewLC(); - CleanupStack::Pop(); // null - return CASN1EncExplicitTag::NewLC(null, 100); - } - default: - return 0; - } - } +/* +* Copyright (c) 2001-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: +* Implementation for testing encoded object output +* +*/ + + +#include "testoutput.h" +#include "tasn1normaltest.h" +#include +#include +#include +#include + + +#include + +CTestOutput* CTestOutput::NewL(CASN1NormalTest &aASN1Action) + { + CTestOutput* test = new (ELeave) CTestOutput(aASN1Action); + return test; + } + +CTestOutput::CTestOutput(CASN1NormalTest &aASN1Action) : CTestBase(aASN1Action) + { + }; + + +void CTestOutput::GetName(TDes& aBuf) + { + aBuf.Copy(_L("Test Output (to file)")); + } + + +TBool CTestOutput::PerformTestsL(CConsoleBase& aConsole) + { + // Get object to output + CASN1EncBase* enc = MakeEncoderLC(); + + // Prepare a buffer + TUint length = enc->LengthDER(); + HBufC8* buf = HBufC8::NewMaxLC(length); + TPtr8 tBuf = buf->Des(); + + // Write into the buffer + TUint writeLength = 0; + enc->WriteDERL(tBuf, writeLength); + + // Copy to file + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + TDriveUnit sysDrive (fs.GetSystemDrive()); + TDriveName driveName(sysDrive.Name()); + TBuf<64> fileName(driveName); + fileName.Append(_L("\\tasn1\\TASN1_test_output")); + + RFile file; + User::LeaveIfError(file.Replace(fs, fileName, EFileWrite)); + CleanupClosePushL(file); + User::LeaveIfError(file.Write(tBuf)); + + // Tidy up + CleanupStack::PopAndDestroy(4); // Close file, close fs, buf, enc + iASN1Action.ReportProgressL(KErrNone, 1, 1); + + aConsole.Write(_L("Now use DumpASN1 on ")); + aConsole.Write(fileName); + aConsole.Write(_L("\n")); + return(ETrue); + } + + +CASN1EncBase* CTestOutput::MakeEncoderLC(const TBool aNest) const + { + // Sequence we'll be using + CASN1EncSequence* seq = CASN1EncSequence::NewLC(); + + // Add objects + TUint index = aNest ? 0 : 1; + while (CASN1EncBase* enc = MakeEncObjLC(index++)) + { + seq->AddChildL(enc); + CleanupStack::Pop(); // enc + } + + return seq; + } + + +CASN1EncBase* CTestOutput::MakeEncObjLC(const TUint aIndex) const + { + switch (aIndex) + { + case 0: + // Case 0 is always the nested sequence encoder + return MakeEncoderLC(EFalse); + case 1: + return CASN1EncNull::NewLC(); + case 2: + return CASN1EncBoolean::NewLC(ETrue); + case 3: + return CASN1EncBoolean::NewLC(EFalse); + case 4: + return CASN1EncInt::NewLC(12345); + case 5: + return CASN1EncInt::NewLC(-4354); + case 6: + { + RInteger i = RInteger::NewRandomL(345, TInteger::EAllBitsRandom); + CleanupStack::PushL(i); + CASN1EncBigInt* enc = CASN1EncBigInt::NewLC(i); + CleanupStack::Pop(); + CleanupStack::PopAndDestroy(&i); + CleanupStack::PushL(enc); + return enc; + } + case 7: // -ve this time + { + RInteger i = RInteger::NewRandomL(345, TInteger::EAllBitsRandom); + CleanupStack::PushL(i); + i *= -1; + CASN1EncBigInt* enc = CASN1EncBigInt::NewLC(i); + CleanupStack::Pop(); + CleanupStack::PopAndDestroy(&i); + CleanupStack::PushL(enc); + return enc; + } + case 8: + { + // INFOSEC policy UID + _LIT(KTestOID, "2.16.840.1.101.2.1.3.10"); + return CASN1EncObjectIdentifier::NewLC(KTestOID); + } + case 9: + { + HBufC8* str = HBufC8::NewLC(256); + TPtr8 des = str->Des(); + for (TUint i = 0; i < 256; ++i) + { + des.Append(STATIC_CAST(TChar, i)); + } + CASN1EncBase* enc = CASN1EncOctetString::NewLC(des); + CleanupStack::Pop(); + CleanupStack::PopAndDestroy(); // str + CleanupStack::PushL(enc); + return enc; + } + case 10: // without seconds + { + // DateTime month and day are 0-based + TDateTime dateTime(1972, EDecember, 19, 11, 35, 0, 0); + return CASN1EncGeneralizedTime::NewLC(dateTime); // Implicit conversion to TTime + } + case 11: // with seconds + { + // DateTime month and day are 0-based + TDateTime dateTime(1972, EDecember, 19, 11, 35, 23, 0); + return CASN1EncGeneralizedTime::NewLC(dateTime); // Implicit conversion to TTime + } + case 12: + { + CASN1EncBase* null = CASN1EncNull::NewLC(); + CleanupStack::Pop(); // null + return CASN1EncExplicitTag::NewLC(null, 100); + } + default: + return 0; + } + }