diff -r 641f389e9157 -r a71299154b21 crypto/weakcrypto/test/tsymmetric/tactionmontecarlo.cpp --- a/crypto/weakcrypto/test/tsymmetric/tactionmontecarlo.cpp Tue Aug 31 17:00:08 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,261 +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 "tactionmontecarlo.h" -#include "bufferedtransformation.h" -#include "rijndael.h" -#include "cbcmode.h" -#include "padding.h" - -const TInt KAESBlockSizeBytes = 16; // 128 bits - -CTestAction* CActionMonteCarlo::NewL(RFs& aFs, - CConsoleBase& aConsole, - Output& aOut, - const TTestActionSpec& aTestActionSpec) - { - CTestAction* self = CActionMonteCarlo::NewLC(aFs, aConsole, - aOut, aTestActionSpec); - CleanupStack::Pop(); - return self; - } - -CTestAction* CActionMonteCarlo::NewLC(RFs& aFs, - CConsoleBase& aConsole, - Output& aOut, - const TTestActionSpec& aTestActionSpec) - { - CActionMonteCarlo* self = new(ELeave) CActionMonteCarlo(aFs, aConsole, aOut); - CleanupStack::PushL(self); - self->ConstructL(aTestActionSpec); - return self; - } - -CActionMonteCarlo::~CActionMonteCarlo() -{ - delete iEncrypt; - delete iDecrypt; -} - -CActionMonteCarlo::CActionMonteCarlo(RFs& aFs, - CConsoleBase& aConsole, - Output& aOut) - -: CCryptoTestAction(aFs, aConsole, aOut) -{} - - -void CActionMonteCarlo::DoPerformPrerequisiteL() -{ - TInt err = KErrNone; - TInt pos = 0; - TPtrC8 monteCarlo = Input::ParseElement(*iBody, KMonteCarloStart, KMonteCarloEnd, pos, err); - - DoInputParseL(monteCarlo); - - CBlockTransformation* encryptor = NULL; - CBlockTransformation* decryptor = NULL; - - switch (iCipherType) - { - case (EAESMonteCarloEncryptECB): - { - encryptor = CAESEncryptor::NewLC(iKey->Des()); - } - break; - case (EAESMonteCarloDecryptECB): - { - decryptor = CAESDecryptor::NewLC(iKey->Des()); - } - break; - case (EAESMonteCarloEncryptCBC): - { - CBlockTransformation* aesEncryptor = NULL; - aesEncryptor = CAESEncryptor::NewLC(iKey->Des()); - - encryptor = CModeCBCEncryptor::NewL(aesEncryptor, iIV->Des()); - CleanupStack::Pop(aesEncryptor); - CleanupStack::PushL(encryptor); - } - break; - case (EAESMonteCarloDecryptCBC): - { - CBlockTransformation* aesDecryptor = NULL; - aesDecryptor = CAESDecryptor::NewLC(iKey->Des()); - - decryptor = CModeCBCDecryptor::NewL(aesDecryptor, iIV->Des()); - CleanupStack::Pop(aesDecryptor); - CleanupStack::PushL(decryptor); - } - break; - default: - { - ASSERT(0); - User::Leave(KErrNotSupported); - } - } - - - CPaddingSSLv3* padding = 0; - if (encryptor) - { - padding = CPaddingSSLv3::NewLC(encryptor->BlockSize()); - iEncrypt = CBufferedEncryptor::NewL(encryptor, padding); - iEResult = HBufC8::NewMaxL(iEncrypt->MaxOutputLength(iInput->Length())); - } - else if (decryptor) - { - padding = CPaddingSSLv3::NewLC(decryptor->BlockSize()); - iDecrypt = CBufferedDecryptor::NewL(decryptor, padding); - iDResult = HBufC8::NewMaxL(iDecrypt->MaxOutputLength(iInput->Size())); - } - - CleanupStack::Pop(2); // padding, encryptor/decryptor - -} - - -void CActionMonteCarlo::DoPerformActionL() -{ - iResult = EFalse; - - __ASSERT_DEBUG(iInput->Size()==KAESBlockSizeBytes, User::Panic(_L("tsymmetric"), KErrNotSupported)); - - if (iCipherType==EAESMonteCarloEncryptECB) - DoAESEncryptECB(); - else if (iCipherType==EAESMonteCarloDecryptECB) - DoAESDecryptECB(); - else if (iCipherType==EAESMonteCarloEncryptCBC) - DoAESEncryptCBC(); - else if (iCipherType==EAESMonteCarloDecryptCBC) - DoAESDecryptCBC(); - else - User::Leave(KErrNotSupported); -} - -void CActionMonteCarlo::DoAESEncryptECB() -{ - TPtr8 theEncryptResult(iEResult->Des()); - theEncryptResult.FillZ(theEncryptResult.MaxLength()); - theEncryptResult.SetLength(0); - - TInt index = 0; - TPtr8 theInput(iInput->Des()); - for (; index < KMonteCarloIterations; index++) - { - iEncrypt->Process(theInput, theEncryptResult); - theInput.Copy(theEncryptResult); - theEncryptResult.FillZ(theEncryptResult.MaxLength()); - theEncryptResult.SetLength(0); - } - - if (*iOutput==*iEResult) - { - iResult = ETrue; - } -} - -void CActionMonteCarlo::DoAESDecryptECB() -{ - TPtr8 theDecryptResult(iDResult->Des()); - theDecryptResult.FillZ(theDecryptResult.MaxLength()); - theDecryptResult.SetLength(0); - - TInt index = 0; - TPtr8 theInput(iInput->Des()); - for (; index < KMonteCarloIterations; index++) - { - iDecrypt->Process(theInput, theDecryptResult); - theInput.Copy(theDecryptResult); - theDecryptResult.FillZ(theDecryptResult.MaxLength()); - theDecryptResult.SetLength(0); - } - - if (*iOutput==*iInput) - { - iResult = ETrue; - } -} - -void CActionMonteCarlo::DoAESEncryptCBC() - { - TPtr8 theEncryptResult(iEResult->Des()); - theEncryptResult.FillZ(theEncryptResult.MaxLength()); - theEncryptResult.SetLength(0); - - TInt index = 0; - TPtr8 theInput(iInput->Des()); - - TBuf8 nextBuf; - nextBuf.FillZ(KAESBlockSizeBytes); - - for (; index < KMonteCarloIterations-1; index++) - { - iEncrypt->Process(theInput, theEncryptResult); - - if (index==0) - theInput.Copy(*iIV); // First loop, use the original IV as next PT block - else - theInput.Copy(nextBuf); // Use previous CT block as next PT block - - // Save CT block for next loop when it'll become the PT block - nextBuf.Copy(theEncryptResult); - // Reset for next encryption - theEncryptResult.FillZ(theEncryptResult.MaxLength()); - theEncryptResult.SetLength(0); - } - - iEncrypt->Process(theInput, theEncryptResult); - - if (theEncryptResult.Compare(*iOutput)==KErrNone) - { - iResult = ETrue; - } - - } - -void CActionMonteCarlo::DoAESDecryptCBC() - { - TPtr8 theDecryptResult(iDResult->Des()); - theDecryptResult.FillZ(theDecryptResult.MaxLength()); - theDecryptResult.SetLength(0); - - TInt index = 0; - TPtr8 theInput(iInput->Des()); - - for (; index < KMonteCarloIterations-1; index++) - { - iDecrypt->Process(theInput, theDecryptResult); - - // Use previous PT block as next CT block - theInput.Copy(theDecryptResult); - - // Reset for next decryption - theDecryptResult.FillZ(theDecryptResult.MaxLength()); - theDecryptResult.SetLength(0); - } - - // Last loop - iDecrypt->Process(theInput, theDecryptResult); - - if (theDecryptResult.Compare(*iOutput)==KErrNone) - { - iResult = ETrue; - } - - }