diff -r 641f389e9157 -r a71299154b21 crypto/weakcrypto/test/tsymmetric/tperformancetest.cpp --- a/crypto/weakcrypto/test/tsymmetric/tperformancetest.cpp Tue Aug 31 17:00:08 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,632 +0,0 @@ -/* -* Copyright (c) 1998-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 "tperformancetest.h" -#include "symmetric.h" -#include - -#ifndef _DEBUG -_LIT(KPerfEFormat, "\tPerformance (encryption) : %f us/iteration (%i iterations in %iL us)\r\n"); -_LIT(KPerfDFormat, "\tPerformance (decryption) : %f us/iteration (%i iterations in %iL us)\r\n"); -_LIT(KTotalFormat, "\tPerformance (total) : %f us/iteration (%i iterations in %iL us)\r\n"); -_LIT(KPerfThroughput, "\tThroughput (total): %f MB/s\r\n"); -_LIT(KPerfThroughputAfterSetup, "\tThroughput after setup: %f MB/s\r\n"); -_LIT(KPerfEncryptorCreate, "\tPerformance (encryptor create) : %f us/iteration (%i iterations in %iL us)\r\n"); -_LIT(KPerfDecryptorCreate, "\tPerformance (decryptor create) : %f us/iteration (%i iterations in %iL us)\r\n"); -_LIT(KDataSize,"\tData input size : %i B\r\n"); -#endif - -CTestAction* CPerformanceTest::NewL(RFs& aFs, - CConsoleBase& aConsole, - Output& aOut, - const TTestActionSpec& aTestActionSpec) - { - CTestAction* self = CPerformanceTest::NewLC(aFs, aConsole, - aOut, aTestActionSpec); - CleanupStack::Pop(); - return self; - } - -CTestAction* CPerformanceTest::NewLC(RFs& aFs, - CConsoleBase& aConsole, - Output& aOut, - const TTestActionSpec& aTestActionSpec) - { - CPerformanceTest* self = new(ELeave) CPerformanceTest(aFs, aConsole, aOut); - CleanupStack::PushL(self); - self->ConstructL(aTestActionSpec); - return self; - } - -CPerformanceTest::~CPerformanceTest() -{ - delete iEncryptor; - delete iDecryptor; -} - -CPerformanceTest::CPerformanceTest(RFs& aFs, - CConsoleBase& aConsole, - Output& aOut) - -: CCryptoTestAction(aFs, aConsole, aOut) -{} - -void CPerformanceTest::DoPerformPrerequisiteL() -{ -#ifndef _DEBUG - TInt err = KErrNone; - TInt pos = 0; - TPtrC8 vector = Input::ParseElement(*iBody, KVectorStart, KVectorEnd, pos, err); - - DoInputParseL(vector); - - CBlockTransformation* encryptor = 0; - CBlockTransformation* decryptor = 0; - - switch (iCipherType) - { - case (EDESECB): - {// Time the length of time it takes to set up the key schedule, - // save it and add to encrypt time, to be consistent with old API - // for comparison purposes (old API does both set up and encrypt/decrypt - // in a single operation). - TTime startTime; - TTime endTime; - TTimeIntervalSeconds diff(0); - const TTimeIntervalSeconds iterationTime(iIterationTime); - - encryptor = CDESEncryptor::NewL(iKey->Des()); - iEncryptIterations = 0; - startTime.UniversalTime(); - while (diff < iterationTime) - { - encryptor->Reset(); - iEncryptIterations++; - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iEncryptorCreateTime = endTime.MicroSecondsFrom(startTime); - - delete encryptor; - - decryptor = CDESDecryptor::NewL(iKey->Des()); - - diff = 0; - iDecryptIterations = 0; - startTime.UniversalTime(); - while (diff < iterationTime) - { - decryptor->Reset(); - iDecryptIterations++; - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iDecryptorCreateTime = endTime.MicroSecondsFrom(startTime); - - delete decryptor; - - encryptor = CDESEncryptor::NewLC(iKey->Des()); - decryptor = CDESDecryptor::NewL(iKey->Des()); - CleanupStack::Pop(encryptor); - } - break; - case(EDESCBC): - { - CBlockTransformation* desEncryptor = NULL; - CBlockTransformation* desDecryptor = NULL; - - desEncryptor = CDESEncryptor::NewLC(iKey->Des()); - encryptor = CModeCBCEncryptor::NewL(desEncryptor, iIV->Des()); - - TTime startTime; - TTime endTime; - TTimeIntervalSeconds diff(0); - const TTimeIntervalSeconds iterationTime(iIterationTime); - - iEncryptIterations = 0; - startTime.UniversalTime(); - while (diff < iterationTime) - { - iEncryptIterations++; - encryptor->Reset(); - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iEncryptorCreateTime = endTime.MicroSecondsFrom(startTime); - - CleanupStack::Pop(1); - delete encryptor; - - desDecryptor = CDESDecryptor::NewLC(iKey->Des()); - decryptor = CModeCBCDecryptor::NewL(desDecryptor, iIV->Des()); - - diff = 0; - iDecryptIterations = 0; - startTime.UniversalTime(); - while (diff < iterationTime) - { - decryptor->Reset(); - iDecryptIterations++; - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iDecryptorCreateTime = endTime.MicroSecondsFrom(startTime); - - CleanupStack::Pop(1); - delete decryptor; - - desEncryptor = CDESEncryptor::NewLC(iKey->Des()); - desDecryptor = CDESDecryptor::NewLC(iKey->Des()); - - encryptor = CModeCBCEncryptor::NewL(desEncryptor, iIV->Des()); - CleanupStack::PushL(encryptor); - decryptor = CModeCBCDecryptor::NewL(desDecryptor, iIV->Des()); - CleanupStack::Pop(3); - } - break; - case (E3DESECB): - { - encryptor = C3DESEncryptor::NewL(iKey->Des()); - TTime startTime; - TTime endTime; - TTimeIntervalSeconds diff(0); - const TTimeIntervalSeconds iterationTime(iIterationTime); - - iEncryptIterations = 0; - startTime.UniversalTime(); - while (diff < iterationTime) - { - iEncryptIterations++; - encryptor->Reset(); - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iEncryptorCreateTime = endTime.MicroSecondsFrom(startTime); - - delete encryptor; - - diff = 0; - iDecryptIterations = 0; - decryptor = C3DESDecryptor::NewL(iKey->Des()); - startTime.UniversalTime(); - while (diff < iterationTime) - { - decryptor->Reset(); - iDecryptIterations++; - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iDecryptorCreateTime = endTime.MicroSecondsFrom(startTime); - delete decryptor; - - encryptor = C3DESEncryptor::NewLC(iKey->Des()); - decryptor = C3DESDecryptor::NewL(iKey->Des()); - CleanupStack::Pop(encryptor); - } - break; - case (E3DESCBC): - { - CBlockTransformation* the3DESencryptor = NULL; - CBlockTransformation* the3DESdecryptor = NULL; - - the3DESencryptor = C3DESEncryptor::NewLC(iKey->Des()); - encryptor = CModeCBCEncryptor::NewL(the3DESencryptor, iIV->Des()); - - TTime startTime; - TTime endTime; - TTimeIntervalSeconds diff(0); - const TTimeIntervalSeconds iterationTime(iIterationTime); - - iEncryptIterations = 0; - startTime.UniversalTime(); - while (diff < iterationTime) - { - iEncryptIterations++; - encryptor->Reset(); - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iEncryptorCreateTime = endTime.MicroSecondsFrom(startTime); - - CleanupStack::Pop(1); - delete encryptor; - - the3DESdecryptor = C3DESDecryptor::NewLC(iKey->Des()); - decryptor = CModeCBCDecryptor::NewL(the3DESdecryptor, iIV->Des()); - - diff = 0; - iDecryptIterations = 0; - startTime.UniversalTime(); - while (diff < iterationTime) - { - decryptor->Reset(); - iDecryptIterations++; - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iDecryptorCreateTime = endTime.MicroSecondsFrom(startTime); - CleanupStack::Pop(1); - delete decryptor; - - the3DESencryptor = C3DESEncryptor::NewLC(iKey->Des()); - the3DESdecryptor = C3DESDecryptor::NewLC(iKey->Des()); - - encryptor = CModeCBCEncryptor::NewL(the3DESencryptor, iIV->Des()); - CleanupStack::PushL(encryptor); - decryptor = CModeCBCDecryptor::NewL(the3DESdecryptor, iIV->Des()); - CleanupStack::Pop(3); - } - break; - case (EAESECB): - { - TTime startTime; - TTime endTime; - TTimeIntervalSeconds diff(0); - const TTimeIntervalSeconds iterationTime(iIterationTime); - - iEncryptIterations = 0; - encryptor = CAESEncryptor::NewL(iKey->Des()); - startTime.UniversalTime(); - while (diff < iterationTime) - { - iEncryptIterations++; - encryptor->Reset(); - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iEncryptorCreateTime = endTime.MicroSecondsFrom(startTime); - delete encryptor; - - diff = 0; - iDecryptIterations = 0; - decryptor = CAESDecryptor::NewL(iKey->Des()); - startTime.UniversalTime(); - while (diff < iterationTime) - { - decryptor->Reset(); - iDecryptIterations++; - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iDecryptorCreateTime = endTime.MicroSecondsFrom(startTime); - delete decryptor; - - encryptor = CAESEncryptor::NewLC(iKey->Des()); - decryptor = CAESDecryptor::NewL(iKey->Des()); - CleanupStack::Pop(encryptor); - } - break; - case (ERC2ECB): - { - TTime startTime; - TTime endTime; - TTimeIntervalSeconds diff(0); - const TTimeIntervalSeconds iterationTime(iIterationTime); - - iEncryptIterations = 0; - encryptor = CRC2Encryptor::NewL(iKey->Des(), iEffectiveKeyLen); - startTime.UniversalTime(); - while (diff < iterationTime) - { - iEncryptIterations++; - encryptor->Reset(); - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iEncryptorCreateTime = endTime.MicroSecondsFrom(startTime); - delete encryptor; - - diff = 0; - decryptor = CRC2Decryptor::NewL(iKey->Des(), iEffectiveKeyLen); - iDecryptIterations = 0; - startTime.UniversalTime(); - while (diff < iterationTime) - { - decryptor->Reset(); - iDecryptIterations++; - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iDecryptorCreateTime = endTime.MicroSecondsFrom(startTime); - delete decryptor; - - encryptor = CRC2Encryptor::NewLC(iKey->Des(), iEffectiveKeyLen); - decryptor = CRC2Decryptor::NewL(iKey->Des(), iEffectiveKeyLen); - CleanupStack::Pop(encryptor); - } - break; - case (ERC2CBC): - { - CBlockTransformation* theRC2encryptor = NULL; - CBlockTransformation* theRC2decryptor = NULL; - - theRC2encryptor = CRC2Encryptor::NewLC(iKey->Des(), iEffectiveKeyLen); - encryptor = CModeCBCEncryptor::NewL(theRC2encryptor, iIV->Des()); - - TTime startTime; - TTime endTime; - TTimeIntervalSeconds diff(0); - const TTimeIntervalSeconds iterationTime(iIterationTime); - - iEncryptIterations = 0; - startTime.UniversalTime(); - while (diff < iterationTime) - { - iEncryptIterations++; - encryptor->Reset(); - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iEncryptorCreateTime = endTime.MicroSecondsFrom(startTime); - CleanupStack::Pop(1); - delete encryptor; - - diff = 0; - iDecryptIterations = 0; - theRC2decryptor = CRC2Decryptor::NewLC(iKey->Des(), iEffectiveKeyLen); - decryptor = CModeCBCDecryptor::NewL(theRC2decryptor, iIV->Des()); - startTime.UniversalTime(); - while (diff < iterationTime) - { - decryptor->Reset(); - iDecryptIterations++; - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iDecryptorCreateTime = endTime.MicroSecondsFrom(startTime); - CleanupStack::Pop(1); - delete decryptor; - - theRC2encryptor = CRC2Encryptor::NewLC(iKey->Des(), iEffectiveKeyLen); - theRC2decryptor = CRC2Decryptor::NewLC(iKey->Des(), iEffectiveKeyLen); - - encryptor = CModeCBCEncryptor::NewL(theRC2encryptor, iIV->Des()); - CleanupStack::PushL(encryptor); - decryptor = CModeCBCDecryptor::NewL(theRC2decryptor, iIV->Des()); - CleanupStack::Pop(3); - } - break; - case (ERC4): - { - iEncryptor = CARC4::NewL(*iKey); - TTime startTime; - TTime endTime; - TTimeIntervalSeconds diff(0); - const TTimeIntervalSeconds iterationTime(iIterationTime); - - iEncryptIterations = 0; - startTime.UniversalTime(); - while (diff < iterationTime) - { - iEncryptIterations++; - iEncryptor->Reset(); - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iEncryptorCreateTime = endTime.MicroSecondsFrom(startTime); - - diff = 0; - iDecryptIterations = 0; - iDecryptor = CARC4::NewL(*iKey); - startTime.UniversalTime(); - while (diff < iterationTime) - { - iDecryptor->Reset(); - iDecryptIterations++; - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iDecryptorCreateTime = endTime.MicroSecondsFrom(startTime); - } - break; - case (ECipherNull): - { - iEncryptor = CNullCipher::NewL(); - TTime startTime; - TTime endTime; - TTimeIntervalSeconds diff(0); - const TTimeIntervalSeconds iterationTime(iIterationTime); - - iEncryptIterations = 0; - startTime.UniversalTime(); - while (diff < iterationTime) - { - iEncryptIterations++; - iEncryptor->Reset(); - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iEncryptorCreateTime = endTime.MicroSecondsFrom(startTime); - - diff = 0; - iDecryptIterations = 0; - iDecryptor = CNullCipher::NewL(); - startTime.UniversalTime(); - while (diff < iterationTime) - { - iDecryptor->Reset(); - iDecryptIterations++; - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - iDecryptorCreateTime = endTime.MicroSecondsFrom(startTime); - } - break; - - default: - { - ASSERT(0); - User::Leave(KErrNotSupported); - } - } - - if( encryptor && decryptor ) - { - CleanupStack::PushL(encryptor); - CleanupStack::PushL(decryptor); - - CPaddingSSLv3* ePadding = CPaddingSSLv3::NewLC(encryptor->BlockSize()); - iEncryptor = CBufferedEncryptor::NewL(encryptor, ePadding); - CleanupStack::Pop(ePadding); - - CPaddingSSLv3* dPadding = CPaddingSSLv3::NewLC(decryptor->BlockSize()); - iDecryptor = CBufferedDecryptor::NewL(decryptor, dPadding); - CleanupStack::Pop(dPadding); - CleanupStack::Pop(decryptor); - CleanupStack::Pop(encryptor); - } - - // clear the default input and output fields and fill with random data - // since for performance testing we do not care about validating - // correct output - delete iInput; - iInput = NULL; - iInput = HBufC8::NewMaxL(iRandDataSize); - TPtr8 tempPtr = iInput->Des(); - TRandom::Random(tempPtr); - TBuf<128> tempbuf; - tempbuf.Format(KDataSize, (iInput->Length())); - iOut.writeString(tempbuf); - delete iOutput; - iOutput = NULL; - iOutput = HBufC8::NewMaxL(iRandDataSize); - TPtr8 tempPtr2 = iOutput->Des(); - TRandom::Random(tempPtr2); - - iEResult = HBufC8::NewMaxL(iEncryptor->MaxOutputLength(iInput->Length())); - iDResult = HBufC8::NewMaxL(iDecryptor->MaxOutputLength(iEResult->Size())); -#endif -} - -void CPerformanceTest::DoPerformActionL() -{ - iResult = ETrue; -#ifndef _DEBUG - TBuf<128> buf; - TReal rate = I64REAL(iEncryptorCreateTime.Int64()) / iEncryptIterations; - buf.Format(KPerfEncryptorCreate, rate, iEncryptIterations, iEncryptorCreateTime.Int64()); - iOut.writeString(buf); - - TTime startTime; - TTime endTime; - TTimeIntervalSeconds diff(0); - const TTimeIntervalSeconds iterationTime(iIterationTime); - - iEncryptIterations = 0; - startTime.UniversalTime(); - while (diff < iterationTime) - { - TPtr8 iEResultTemp(iEResult->Des()); - iEResultTemp.Zero(); - - iEncryptor->Process(*iInput, iEResultTemp); - iEncryptIterations++; - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - - TTimeIntervalMicroSeconds time = endTime.MicroSecondsFrom(startTime); - rate = I64REAL(time.Int64()) / iEncryptIterations; - buf.Format(KPerfEFormat, rate, iEncryptIterations, time.Int64()); - iOut.writeString(buf); - - rate = (static_cast(iEncryptIterations) * iInput->Size() * 1000 * 1000) / (I64REAL(time.Int64()) * 1024 * 1024); // Throughput in MB/s - buf.FillZ(); - buf.Zero(); - buf.Format(KPerfThroughputAfterSetup, rate); - iOut.writeString(buf); - - TInt64 totalEncryptTime = time.Int64(); - totalEncryptTime+=iEncryptorCreateTime.Int64(); - rate = I64REAL(totalEncryptTime) / iEncryptIterations; - buf.FillZ(); - buf.Zero(); - buf.Format(KTotalFormat, rate, iEncryptIterations, totalEncryptTime); - iOut.writeString(buf); - - rate = (static_cast(iEncryptIterations) * iInput->Size() * 1000 * 1000) / (I64REAL(totalEncryptTime) * 1024 * 1024); // Throughput in MB/s - buf.Zero(); - buf.Format(KPerfThroughput, rate); - iOut.writeString(buf); - -// Test decryption - rate = I64REAL(iDecryptorCreateTime.Int64()) / iDecryptIterations; - buf.Format(KPerfDecryptorCreate, rate, iDecryptIterations, iDecryptorCreateTime.Int64()); - iOut.writeString(buf); - - diff = 0; - iDecryptIterations = 0; - startTime.UniversalTime(); - while (diff < iterationTime) - { - TPtr8 iDResultTemp(iDResult->Des()); - iDResultTemp.Zero(); - iDecryptor->Process(*iOutput, iDResultTemp); - iDecryptIterations++; - endTime.UniversalTime(); - endTime.SecondsFrom(startTime, diff); - } - endTime.UniversalTime(); - - time = endTime.MicroSecondsFrom(startTime); - rate = I64REAL(time.Int64()) / iDecryptIterations; - buf.FillZ(); - buf.Zero(); - buf.Format(KPerfDFormat, rate, iDecryptIterations, time.Int64()); - iOut.writeString(buf); - - rate = (static_cast(iDecryptIterations) * iInput->Size() * 1000 * 1000) / (I64REAL(time.Int64()) * 1024 * 1024); // Throughput in MB/s - buf.Zero(); - buf.Format(KPerfThroughputAfterSetup, rate); - iOut.writeString(buf); - - TInt64 totalDecryptTime = time.Int64(); - totalDecryptTime+=iDecryptorCreateTime.Int64(); - rate = I64REAL(totalDecryptTime) / iDecryptIterations; - buf.FillZ(); - buf.Zero(); - buf.Format(KTotalFormat, rate, iDecryptIterations, totalDecryptTime); - iOut.writeString(buf); - - rate = (static_cast(iDecryptIterations) * iInput->Size() * 1000 * 1000) / (I64REAL(totalDecryptTime) * 1024 * 1024); // Throughput in MB/s - buf.Zero(); - buf.Format(KPerfThroughput, rate); - iOut.writeString(buf); - -#endif -} -