crypto/weakcrypto/test/tsymmetric/tactionincremental.cpp
author hgs
Thu, 24 Jun 2010 15:39:07 +0530
changeset 72 de46a57f75fb
permissions -rw-r--r--
201023_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
72
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     1
/*
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     2
* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     3
* All rights reserved.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     8
*
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     9
* Initial Contributors:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    11
*
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    12
* Contributors:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    13
*
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    14
* Description: 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    15
*
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    16
*/
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    17
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    18
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    19
#include "tactionincremental.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    20
#include "symmetric.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    21
#include "des.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    22
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    23
CTestAction* CActionIncremental::NewL(RFs& aFs,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    24
									   CConsoleBase& aConsole,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    25
									   Output& aOut, 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    26
									   const TTestActionSpec& aTestActionSpec)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    27
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    28
	CTestAction* self = CActionIncremental::NewLC(aFs, aConsole,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    29
		aOut, aTestActionSpec);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    30
	CleanupStack::Pop();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    31
	return self;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    32
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    33
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    34
CTestAction* CActionIncremental::NewLC(RFs& aFs,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    35
										CConsoleBase& aConsole,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    36
										Output& aOut, 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    37
										const TTestActionSpec& aTestActionSpec)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    38
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    39
	CActionIncremental* self = new(ELeave) CActionIncremental(aFs, aConsole, aOut);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    40
	CleanupStack::PushL(self);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    41
	self->ConstructL(aTestActionSpec);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    42
	return self;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    43
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    44
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    45
CActionIncremental::~CActionIncremental()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    46
{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    47
}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    48
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    49
CActionIncremental::CActionIncremental(RFs& aFs, 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    50
								 CConsoleBase& aConsole,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    51
								 Output& aOut)						 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    52
: CCryptoTestAction(aFs, aConsole, aOut)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    53
{}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    54
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    55
void CActionIncremental::DoPerformPostrequisiteL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    56
{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    57
	delete iEncryptor;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    58
	delete iDecryptor;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    59
}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    60
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    61
void CActionIncremental::DoPerformPrerequisiteL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    62
{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    63
	TInt err = KErrNone;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    64
	TInt pos = 0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    65
	TPtrC8 incremental = Input::ParseElement(*iBody, KIncrementalStart, KIncrementalEnd, pos, err);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    66
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    67
	DoInputParseL(incremental);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    68
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    69
	CBlockTransformation* encryptor = NULL;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    70
	CBlockTransformation* decryptor = NULL;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    71
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    72
	iEncryptor =0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    73
	iDecryptor =0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    74
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    75
	switch (iCipherType)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    76
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    77
		case (EDESECB):
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    78
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    79
			//If the test is weak key test
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    80
			if(iExpectedWeakResult == KErrWeakKey)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    81
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    82
				//we expect to leave with KErrWeakKey reason
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    83
				if(CDES::IsWeakKey(iKey->Des()))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    84
					{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    85
					User::Leave(KErrWeakKey);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    86
					}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    87
				else //test is unsuccessful, leave with a different reason
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    88
					{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    89
					User::Leave(KErrGeneral);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    90
					}	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    91
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    92
			encryptor = CDESEncryptor::NewLC(iKey->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    93
			decryptor = CDESDecryptor::NewL(iKey->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    94
			CleanupStack::Pop(encryptor);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    95
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    96
		break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    97
		case (EDESCBC):
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    98
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    99
			CBlockTransformation* desEncryptor = NULL;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   100
			CBlockTransformation* desDecryptor = NULL;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   101
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   102
			if(iExpectedWeakResult == KErrWeakKey)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   103
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   104
				if(CDES::IsWeakKey(iKey->Des()))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   105
					{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   106
					User::Leave(KErrWeakKey);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   107
					}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   108
				else
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   109
					{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   110
					User::Leave(KErrGeneral);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   111
					}	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   112
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   113
			desEncryptor = CDESEncryptor::NewLC(iKey->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   114
			desDecryptor = CDESDecryptor::NewLC(iKey->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   115
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   116
			encryptor = CModeCBCEncryptor::NewL(desEncryptor, iIV->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   117
			CleanupStack::PushL(encryptor);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   118
			decryptor = CModeCBCDecryptor::NewL(desDecryptor, iIV->Des());		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   119
			CleanupStack::Pop(3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   120
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   121
		break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   122
		case (E3DESECB):
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   123
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   124
			encryptor = C3DESEncryptor::NewLC(iKey->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   125
			decryptor = C3DESDecryptor::NewL(iKey->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   126
			CleanupStack::Pop(encryptor);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   127
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   128
		break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   129
		case (E3DESCBC):
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   130
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   131
			CBlockTransformation* the3DESencryptor = NULL;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   132
			CBlockTransformation* the3DESdecryptor = NULL;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   133
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   134
			the3DESencryptor = C3DESEncryptor::NewLC(iKey->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   135
			the3DESdecryptor = C3DESDecryptor::NewLC(iKey->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   136
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   137
			encryptor = CModeCBCEncryptor::NewL(the3DESencryptor, iIV->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   138
			CleanupStack::PushL(encryptor);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   139
			decryptor = CModeCBCDecryptor::NewL(the3DESdecryptor, iIV->Des());		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   140
			CleanupStack::Pop(3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   141
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   142
		break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   143
		case (EAESECB):
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   144
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   145
			encryptor = CAESEncryptor::NewLC(iKey->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   146
			decryptor = CAESDecryptor::NewL(iKey->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   147
			CleanupStack::Pop(encryptor);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   148
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   149
		break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   150
		case (ERC2ECB):
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   151
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   152
			encryptor = CRC2Encryptor::NewLC(iKey->Des(), iEffectiveKeyLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   153
			decryptor = CRC2Decryptor::NewL(iKey->Des(), iEffectiveKeyLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   154
			CleanupStack::Pop(encryptor);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   155
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   156
		break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   157
		case (ERC2CBC):
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   158
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   159
			encryptor = CRC2Encryptor::NewLC(iKey->Des(), iEffectiveKeyLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   160
			decryptor = CRC2Decryptor::NewL(iKey->Des(), iEffectiveKeyLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   161
			CleanupStack::Pop(encryptor);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   162
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   163
		break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   164
		case (ERC4):
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   165
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   166
			iEncryptor = CARC4::NewL(*iKey, 0); 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   167
			iDecryptor = CARC4::NewL(*iKey, 0); 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   168
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   169
		break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   170
		case (ECipherNull):
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   171
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   172
			iEncryptor = CNullCipher::NewL(); 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   173
			iDecryptor = CNullCipher::NewL(); 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   174
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   175
		break;	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   176
		default:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   177
			ASSERT(0);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   178
			User::Leave(KErrNotSupported);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   179
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   180
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   181
	CleanupStack::PushL(encryptor);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   182
	CleanupStack::PushL(decryptor);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   183
	if(!iEncryptor && !iDecryptor)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   184
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   185
		CPaddingSSLv3* dPadding = CPaddingSSLv3::NewLC(decryptor->BlockSize());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   186
		CPaddingSSLv3* ePadding = CPaddingSSLv3::NewLC(encryptor->BlockSize());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   187
		iEncryptor = CBufferedEncryptor::NewL(encryptor, ePadding);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   188
		CleanupStack::Pop(ePadding);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   189
		iDecryptor = CBufferedDecryptor::NewL(decryptor, dPadding);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   190
		CleanupStack::Pop(dPadding);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   191
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   192
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   193
	CleanupStack::Pop(2, encryptor);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   194
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   195
	iEResult = HBufC8::NewMaxL(iEncryptor->MaxFinalOutputLength(iInput->Length()));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   196
	iDResult = HBufC8::NewMaxL(iDecryptor->MaxFinalOutputLength(iEResult->Size()));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   197
}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   198
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   199
void CActionIncremental::DoPerformActionL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   200
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   201
	TRAPD(res, DoDoPerformActionL())
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   202
	if(res == KErrNoMemory)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   203
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   204
		iEncryptor->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   205
		iDecryptor->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   206
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   207
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   208
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   209
void CActionIncremental::DoDoPerformActionL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   210
{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   211
	__UHEAP_MARK;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   212
	iResult = ETrue;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   213
	TPtr8 eResultActual = iEResult->Des();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   214
	eResultActual.FillZ(eResultActual.MaxLength());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   215
	eResultActual.SetLength(0);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   216
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   217
	TPtr8 dResultActual = iDResult->Des();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   218
	dResultActual.FillZ(dResultActual.MaxLength());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   219
	dResultActual.SetLength(0);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   220
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   221
	TInt len = iInput->Length();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   222
	for(TInt i=1; i<len; i++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   223
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   224
		TInt j = 0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   225
		for(; j+i<len; j+=i)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   226
		{//	encryption in blocks of size i
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   227
			iEncryptor->Process(iInput->Mid(j,i), eResultActual);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   228
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   229
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   230
		iEncryptor->ProcessFinalL(iInput->Mid(j), eResultActual);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   231
		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   232
		j=0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   233
		for(; (j+(len-i))<len; j+=(len-i))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   234
		{//	Decryption in blocks of size (len - i)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   235
			iDecryptor->Process(eResultActual.Mid(j, len-i), dResultActual);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   236
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   237
		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   238
		iDecryptor->ProcessFinalL(eResultActual.Mid(j), dResultActual);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   239
		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   240
		if(dResultActual != *iInput)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   241
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   242
			iResult = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   243
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   244
		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   245
		eResultActual.FillZ(eResultActual.MaxLength());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   246
		dResultActual.FillZ(dResultActual.MaxLength());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   247
		eResultActual.SetLength(0);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   248
		dResultActual.SetLength(0);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   249
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   250
	__UHEAP_MARKEND;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   251
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   252
}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   253