crypto/weakcrypto/test/thash/thash.cpp
author hgs
Thu, 12 Aug 2010 21:07:10 +0530
changeset 90 8c545fea2798
parent 72 de46a57f75fb
permissions -rw-r--r--
201031_01
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) 2005-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
/**
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    20
 @file
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    21
*/
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    22
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    23
#include "hashtestutils.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    24
#include <utf.h>
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    25
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    26
TBool gInOOMTest=EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    27
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    28
RTest test(_L("Hash Tests"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    29
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    30
const TInt KMaxHashSize = 64; // Hash size in bytes
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    31
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    32
void Hex(HBufC8& aString)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    33
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    34
	TPtr8 ptr=aString.Des();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    35
	if (aString.Length()%2)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    36
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    37
		ptr.SetLength(0);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    38
		return;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    39
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    40
	TInt i;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    41
	for (i=0;i<aString.Length();i+=2)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    42
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    43
		TUint8 tmp;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    44
		tmp=(TUint8)(aString[i]-(aString[i]>'9'?('A'-10):'0'));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    45
		tmp*=16;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    46
		tmp|=(TUint8)(aString[i+1]-(aString[i+1]>'9'?('A'-10):'0'));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    47
		ptr[i/2]=tmp;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    48
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    49
	ptr.SetLength(aString.Length()/2);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    50
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    51
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    52
void Spin()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    53
{//	Pointless function to print a dot
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    54
	if (gInOOMTest)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    55
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    56
		static TInt count=0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    57
		if (count++==100)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    58
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    59
			test.Printf(_L("o"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    60
			count=0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    61
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    62
		return;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    63
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    64
	test.Printf(_L("."));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    65
}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    66
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    67
void FunctionalityTestL(CMessageDigest* aMD)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    68
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    69
	if (!gInOOMTest)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    70
		test.Next(_L("Functionality test - original API"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    71
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    72
	const TInt maxbuffersize=1024;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    73
	TInt buffersize;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    74
	TInt increment;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    75
	if (gInOOMTest)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    76
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    77
		buffersize=256;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    78
		increment=6;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    79
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    80
	else
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    81
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    82
		buffersize=maxbuffersize;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    83
		increment=1;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    84
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    85
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    86
	TBool testSuccess = ETrue;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    87
	TInt i = 0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    88
	TBuf8<maxbuffersize> buf(maxbuffersize);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    89
	for (;i<buffersize;i++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    90
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    91
		buf[i]=(TUint8)i;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    92
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    93
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    94
	for (i=0;i<buffersize;i+=increment)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    95
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    96
		TInt j;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    97
		Spin();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    98
		if (!gInOOMTest)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    99
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   100
			if (i>128)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   101
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   102
				increment=8;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   103
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   104
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   105
		else
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   106
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   107
			if (i>24)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   108
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   109
				increment=32;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   110
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   111
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   112
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   113
		for (j=0;j<i;j+=16)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   114
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   115
			buf[0]=(TUint8)j;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   116
			TPtrC8 ptr=buf.Left(i);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   117
			TPtrC8 ptr2=buf.Left(j);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   118
			TPtrC8 ptr3=buf.Mid(j,i-j);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   119
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   120
			CMessageDigest* first=aMD->ReplicateL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   121
			CleanupStack::PushL(first);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   122
			TPtrC8 firstFinal = first->Hash(ptr);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   123
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   124
			aMD->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   125
			aMD->Update(ptr);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   126
			TPtrC8 aMDFinal = aMD->Final();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   127
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   128
			CMessageDigest* second=aMD->ReplicateL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   129
			CleanupStack::PushL(second);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   130
			second->Hash(ptr2);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   131
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   132
			CMessageDigest* third=second->CopyL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   133
			CleanupStack::PushL(third);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   134
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   135
			TPtrC8 secondFinal = second->Hash(ptr3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   136
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   137
			if (aMDFinal!=firstFinal)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   138
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   139
				testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   140
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   141
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   142
			if (firstFinal!=secondFinal)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   143
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   144
				testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   145
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   146
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   147
			TPtrC8 thirdFinal = third->Hash(ptr3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   148
			if (firstFinal!=thirdFinal)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   149
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   150
				testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   151
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   152
			CleanupStack::PopAndDestroy(3);		// first, second, third
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   153
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   154
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   155
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   156
///////////////////////////////////////////////////////////////
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   157
//	Now test the new API - Update/Final functions	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   158
///////////////////////////////////////////////////////////////
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   159
	if (!gInOOMTest)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   160
		test.Next(_L("\rFunctionality test - calls added API functions Final & Update"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   161
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   162
	for (i=0;i<buffersize;i++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   163
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   164
		buf[i]=(TUint8)i;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   165
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   166
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   167
	for (i=0;i<buffersize;i+=increment)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   168
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   169
		TInt j;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   170
		Spin();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   171
		if (!gInOOMTest)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   172
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   173
			if (i>128)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   174
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   175
				increment=8;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   176
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   177
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   178
		else
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   179
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   180
			if (i>24)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   181
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   182
				increment=32;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   183
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   184
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   185
		for (j=0;j<i;j+=16)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   186
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   187
			buf[0]=(TUint8)j;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   188
			TPtrC8 ptr=buf.Left(i);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   189
			TPtrC8 ptr2=buf.Left(j);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   190
			TPtrC8 ptr3=buf.Mid(j,i-j);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   191
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   192
			CMessageDigest* first=aMD->ReplicateL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   193
			CleanupStack::PushL(first);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   194
			first->Update(ptr);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   195
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   196
			aMD->Update(ptr);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   197
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   198
			CMessageDigest* second=aMD->ReplicateL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   199
			CleanupStack::PushL(second);			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   200
			second->Update(ptr2);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   201
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   202
			CMessageDigest* third=second->CopyL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   203
			CleanupStack::PushL(third);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   204
			third->Update(ptr3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   205
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   206
			second->Update(ptr3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   207
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   208
			TPtrC8 aMDFinal = aMD->Final();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   209
			TPtrC8 firstFinal = first->Final();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   210
			TPtrC8 secondFinal = second->Final();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   211
			TPtrC8 thirdFinal = third->Final();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   212
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   213
			if (aMDFinal!=firstFinal)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   214
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   215
				testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   216
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   217
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   218
			if (firstFinal!=secondFinal)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   219
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   220
				testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   221
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   222
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   223
			if (firstFinal!=thirdFinal)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   224
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   225
				testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   226
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   227
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   228
			CleanupStack::PopAndDestroy(3);		// first, second, third
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   229
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   230
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   231
	test.Printf(_L("\r\n"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   232
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   233
	if (!testSuccess)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   234
		User::Leave(KErrGeneral);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   235
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   236
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   237
void VectorTestL(CMessageDigest* aMD,const TDesC& aFilename)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   238
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   239
	test.Next(_L("Test Vector tests - original API"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   240
	TBool finished=EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   241
	TBool testSuccess = ETrue;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   242
	CTestData* data = CTestData::NewL(aFilename);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   243
	CleanupStack::PushL(data);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   244
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   245
	while (!finished)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   246
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   247
		switch (data->Type())
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   248
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   249
		case CTestData::EMessage:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   250
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   251
			break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   252
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   253
		//This is added to read large input data from the files.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   254
		case CTestData::EFileName:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   255
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   256
			CMessageDigest* md=aMD->ReplicateL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   257
			CleanupStack::PushL(md);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   258
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   259
			//get the filename from the .dat file
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   260
			HBufC8* filename = (*data)[1];
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   261
			User::LeaveIfNull(filename);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   262
			CleanupStack::PushL(filename);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   263
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   264
			HBufC8* output= (*data)[2];
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   265
			User::LeaveIfNull(output);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   266
			CleanupStack::PushL(output);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   267
			Hex(*output);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   268
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   269
			HBufC16* inputFileName = CnvUtfConverter::ConvertToUnicodeFromUtf8L(*filename);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   270
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   271
			RFs fs;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   272
			RFile file;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   273
			CleanupClosePushL(fs);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   274
			User::LeaveIfError(fs.Connect());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   275
			TDriveUnit sysDrive(fs.GetSystemDrive());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   276
			TBuf<24> filePath (sysDrive.Name());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   277
			filePath.Append(_L("\\thash\\"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   278
			User::LeaveIfError(fs.SetSessionPath(filePath));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   279
			CleanupClosePushL(file);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   280
			User::LeaveIfError(file.Open(fs,*inputFileName,EFileShareAny|EFileRead));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   281
			// read into iFile
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   282
			TInt size=0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   283
			file.Size(size);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   284
			HBufC8* fileContents=HBufC8::NewMaxL(size);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   285
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   286
			TPtr8 ptr=fileContents->Des();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   287
			User::LeaveIfError(file.Read(ptr));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   288
			CleanupStack::PopAndDestroy(2, &fs);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   289
			CleanupStack::PushL(fileContents);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   290
			delete inputFileName;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   291
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   292
			TPtrC8 digest = md->Hash(*fileContents);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   293
			if (digest!=(*output))	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   294
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   295
				test.Next(_L("Digest Not Equal"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   296
				testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   297
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   298
		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   299
			md->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   300
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   301
			TPtrC8 digest2 = md->Hash(*fileContents);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   302
			if (digest2!=(*output))	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   303
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   304
				testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   305
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   306
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   307
		//	Now try this in 2 half sections (just a quick check)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   308
			md->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   309
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   310
			TInt inputLen = fileContents->Length();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   311
			if (inputLen > 1)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   312
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   313
				TInt leftHandLen = inputLen/2;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   314
				TPtrC8 left = fileContents->Left(leftHandLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   315
				TPtrC8 right = fileContents->Right(inputLen - leftHandLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   316
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   317
				TPtrC8 halfDigest = md->Hash(left);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   318
				if (halfDigest.Size()==0)	//	Unnecessary test, but removes
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   319
					User::Leave(KErrAbort);	//	a warning about not using halfDigest
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   320
					
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   321
				TPtrC8 wholeDigest = md->Hash(right);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   322
				
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   323
				if (wholeDigest!=(*output))	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   324
					{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   325
					testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   326
					}			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   327
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   328
				
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   329
			md->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   330
			if (md->Final(*fileContents)!=(*output))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   331
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   332
				testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   333
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   334
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   335
		//	Now try this in 2 half sections (just a quick check)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   336
			md->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   337
			inputLen = fileContents->Length();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   338
			if (inputLen > 1)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   339
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   340
				TInt leftHandLen = inputLen/2;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   341
				TPtrC8 left = fileContents->Left(leftHandLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   342
				TPtrC8 right = fileContents->Right(inputLen - leftHandLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   343
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   344
				md->Update(left);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   345
				TPtrC8 wholeDigest = md->Final(right);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   346
				
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   347
				if (wholeDigest!=(*output))	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   348
					{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   349
					testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   350
					}			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   351
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   352
			CleanupStack::PopAndDestroy(4, md);//md,filename,output,fileContents
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   353
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   354
			break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   355
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   356
		case CTestData::EData:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   357
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   358
			CMessageDigest* md=aMD->ReplicateL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   359
			CleanupStack::PushL(md);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   360
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   361
			HBufC8* input = (*data)[0];
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   362
			User::LeaveIfNull(input);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   363
			CleanupStack::PushL(input);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   364
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   365
			HBufC8* output= (*data)[1];
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   366
			User::LeaveIfNull(output);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   367
			CleanupStack::PushL(output);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   368
			Hex(*input);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   369
			Hex(*output);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   370
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   371
			TPtrC8 digest = md->Hash(*input);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   372
			if (digest!=(*output))	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   373
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   374
				testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   375
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   376
		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   377
			md->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   378
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   379
			TPtrC8 digest2 = md->Hash(*input);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   380
			if (digest2!=(*output))	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   381
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   382
				testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   383
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   384
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   385
		//	Now try this in 2 half sections (just a quick check)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   386
			md->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   387
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   388
			TInt inputLen = input->Length();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   389
			if (inputLen > 1)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   390
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   391
				TInt leftHandLen = inputLen/2;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   392
				TPtrC8 left = input->Left(leftHandLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   393
				TPtrC8 right = input->Right(inputLen - leftHandLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   394
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   395
				TPtrC8 halfDigest = md->Hash(left);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   396
				if (halfDigest.Size()==0)	//	Unnecessary test, but removes
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   397
					User::Leave(KErrAbort);	//	a warning about not using halfDigest
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   398
					
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   399
				TPtrC8 wholeDigest = md->Hash(right);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   400
				
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   401
				if (wholeDigest!=(*output))	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   402
					{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   403
					testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   404
					}			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   405
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   406
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   407
			///////////////////////////////////////////////////////////////
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   408
			//	Now test the new API - Update/Final functions	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   409
			///////////////////////////////////////////////////////////////
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   410
			md->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   411
			if (md->Final(*input)!=(*output))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   412
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   413
				testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   414
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   415
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   416
		//	Now try this in 2 half sections (just a quick check)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   417
			md->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   418
			inputLen = input->Length();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   419
			if (inputLen > 1)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   420
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   421
				TInt leftHandLen = inputLen/2;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   422
				TPtrC8 left = input->Left(leftHandLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   423
				TPtrC8 right = input->Right(inputLen - leftHandLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   424
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   425
				md->Update(left);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   426
				TPtrC8 wholeDigest = md->Final(right);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   427
				
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   428
				if (wholeDigest!=(*output))	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   429
					{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   430
					testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   431
					}			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   432
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   433
			CleanupStack::PopAndDestroy(3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   434
			break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   435
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   436
		case CTestData::EFinished:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   437
			finished=ETrue;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   438
			break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   439
		default:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   440
			test.Printf(_L("Error in data file\r\n"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   441
			break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   442
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   443
		};
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   444
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   445
	CleanupStack::PopAndDestroy(data);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   446
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   447
	if (!testSuccess)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   448
		User::Leave(KErrGeneral);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   449
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   450
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   451
void OOMTestL(CMessageDigest* aMD)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   452
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   453
	test.Next(_L("Out of memory test"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   454
	TInt err = KErrNoMemory;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   455
	TInt nextFailure=0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   456
	gInOOMTest=ETrue;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   457
	while (err!=KErrNone)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   458
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   459
		__UHEAP_MARK;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   460
		__UHEAP_FAILNEXT(nextFailure);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   461
		TRAP(err,FunctionalityTestL(aMD));		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   462
		__UHEAP_MARKEND;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   463
		nextFailure++;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   464
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   465
	__UHEAP_RESET;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   466
	gInOOMTest=EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   467
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   468
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   469
void HMACVectorTestL(CMessageDigest* aMD,const TDesC& aFilename)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   470
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   471
	test.Next(_L("HMAC Test Vector tests"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   472
	CTestData* data = CTestData::NewL(aFilename);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   473
	CleanupStack::PushL(data);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   474
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   475
	TBool finished=EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   476
	TBool testSuccess = ETrue;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   477
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   478
	while (!finished)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   479
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   480
		switch (data->Type())
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   481
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   482
		case CTestData::EMessage:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   483
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   484
			break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   485
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   486
		case CTestData::EFileName:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   487
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   488
			//get the filename from the .dat file
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   489
			HBufC8* filename = (*data)[1];
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   490
			User::LeaveIfNull(filename);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   491
			CleanupStack::PushL(filename);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   492
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   493
			HBufC8* key= (*data)[2];
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   494
			User::LeaveIfNull(key);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   495
			CleanupStack::PushL(key);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   496
						
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   497
			HBufC16* inputFileName = CnvUtfConverter::ConvertToUnicodeFromUtf8L(*filename);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   498
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   499
			HBufC8* output = (*data)[3];
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   500
			User::LeaveIfNull(output);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   501
			CleanupStack::PushL(output);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   502
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   503
			Hex(*key);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   504
			Hex(*output);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   505
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   506
			RFs fs;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   507
			RFile file;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   508
			CleanupClosePushL(fs);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   509
			User::LeaveIfError(fs.Connect());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   510
			TDriveUnit sysDrive(fs.GetSystemDrive());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   511
			TBuf<24> filePath (sysDrive.Name());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   512
			filePath.Append(_L("\\thash\\"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   513
			User::LeaveIfError(fs.SetSessionPath(filePath));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   514
			CleanupClosePushL(file);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   515
			User::LeaveIfError(file.Open(fs,*inputFileName,EFileShareAny|EFileRead));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   516
			// read into iFile
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   517
			TInt size=0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   518
			file.Size(size);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   519
			HBufC8* fileContents=HBufC8::NewMaxL(size);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   520
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   521
			TPtr8 ptr=fileContents->Des();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   522
			User::LeaveIfError(file.Read(ptr));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   523
			CleanupStack::PopAndDestroy(2, &fs);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   524
			CleanupStack::PushL(fileContents);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   525
			delete inputFileName;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   526
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   527
			CMessageDigest* temp = aMD->ReplicateL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   528
			CleanupStack::PushL(temp);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   529
			CMessageDigest* md = CHMAC::NewL(*key, temp);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   530
			CleanupStack::Pop(temp);	//	Now owned by md
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   531
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   532
			TPtrC8 digest = md->Hash(*fileContents);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   533
			if (digest!=(*output))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   534
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   535
				testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   536
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   537
						
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   538
		//	Now try this in 2 half sections (just a quick check)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   539
			md->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   540
		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   541
			TInt inputLen = fileContents->Length();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   542
			if (inputLen > 1)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   543
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   544
				TInt leftHandLen = inputLen/2;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   545
				TPtrC8 left = fileContents->Left(leftHandLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   546
				TPtrC8 right = fileContents->Right(inputLen - leftHandLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   547
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   548
				TPtrC8 halfDigest = md->Hash(left);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   549
				if (halfDigest.Size()==0)	//	Unnecessary test, but removes
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   550
					User::Leave(KErrAbort);	//	a warning about not using halfDigest
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   551
				TPtrC8 wholeDigest = md->Hash(right);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   552
				
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   553
				if (wholeDigest!=(*output))	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   554
					{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   555
					testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   556
					}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   557
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   558
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   559
			md->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   560
			TPtrC8 finalDigest = md->Final(*fileContents);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   561
			if (finalDigest!=(*output))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   562
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   563
				testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   564
				}			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   565
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   566
		//	Now try this in 2 half sections (just a quick check)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   567
			md->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   568
		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   569
			inputLen = fileContents->Length();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   570
			if (inputLen > 1)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   571
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   572
				TInt leftHandLen = inputLen/2;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   573
				TPtrC8 left = fileContents->Left(leftHandLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   574
				TPtrC8 right = fileContents->Right(inputLen - leftHandLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   575
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   576
				md->Update(left);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   577
				TPtrC8 wholeDigest = md->Final(right);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   578
				
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   579
				if (wholeDigest!=(*output))	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   580
					{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   581
					testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   582
					}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   583
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   584
			delete md;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   585
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   586
			CleanupStack::PopAndDestroy(4, filename);	//	filename, key, output,fileContents			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   587
			break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   588
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   589
		case CTestData::EData:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   590
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   591
			HBufC8* input = (*data)[0];
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   592
			User::LeaveIfNull(input);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   593
			CleanupStack::PushL(input);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   594
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   595
			HBufC8* key = (*data)[1];
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   596
			User::LeaveIfNull(key);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   597
			CleanupStack::PushL(key);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   598
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   599
			HBufC8* output = (*data)[2];
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   600
			User::LeaveIfNull(output);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   601
			CleanupStack::PushL(output);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   602
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   603
			Hex(*input);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   604
			Hex(*key);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   605
			Hex(*output);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   606
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   607
			CMessageDigest* temp = aMD->ReplicateL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   608
			CleanupStack::PushL(temp);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   609
			CMessageDigest* md = CHMAC::NewL(*key, temp);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   610
			CleanupStack::Pop(temp);	//	Now owned by md
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   611
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   612
			TPtrC8 digest = md->Hash(*input);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   613
			if (digest!=(*output))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   614
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   615
				testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   616
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   617
						
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   618
		//	Now try this in 2 half sections (just a quick check)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   619
			md->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   620
		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   621
			TInt inputLen = input->Length();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   622
			if (inputLen > 1)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   623
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   624
				TInt leftHandLen = inputLen/2;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   625
				TPtrC8 left = input->Left(leftHandLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   626
				TPtrC8 right = input->Right(inputLen - leftHandLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   627
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   628
				TPtrC8 halfDigest = md->Hash(left);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   629
				if (halfDigest.Size()==0)	//	Unnecessary test, but removes
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   630
					User::Leave(KErrAbort);	//	a warning about not using halfDigest
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   631
				TPtrC8 wholeDigest = md->Hash(right);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   632
				
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   633
				if (wholeDigest!=(*output))	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   634
					{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   635
					testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   636
					}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   637
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   638
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   639
///////////////////////////////////////////////////////////////
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   640
//	Now test the new API - Update/Final functions	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   641
///////////////////////////////////////////////////////////////
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   642
			md->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   643
			TPtrC8 finalDigest = md->Final(*input);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   644
			if (finalDigest!=(*output))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   645
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   646
				testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   647
				}			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   648
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   649
		//	Now try this in 2 half sections (just a quick check)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   650
			md->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   651
		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   652
			inputLen = input->Length();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   653
			if (inputLen > 1)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   654
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   655
				TInt leftHandLen = inputLen/2;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   656
				TPtrC8 left = input->Left(leftHandLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   657
				TPtrC8 right = input->Right(inputLen - leftHandLen);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   658
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   659
				md->Update(left);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   660
				TPtrC8 wholeDigest = md->Final(right);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   661
				
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   662
				if (wholeDigest!=(*output))	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   663
					{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   664
					testSuccess = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   665
					}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   666
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   667
			delete md;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   668
			CleanupStack::PopAndDestroy(3);	//	input, key, output			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   669
			break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   670
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   671
		case CTestData::EFinished:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   672
			finished=ETrue;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   673
			break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   674
		default:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   675
			test.Printf(_L("Error in data file\r\n"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   676
			break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   677
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   678
		};
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   679
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   680
	CleanupStack::PopAndDestroy(data);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   681
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   682
	if (!testSuccess)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   683
		User::Leave(KErrGeneral);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   684
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   685
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   686
void HMACTestsL(CMessageDigest* aMD,const TDesC& aFilename, const TDesC& aHashType)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   687
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   688
	TBuf<0x40> formattable;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   689
	formattable.Format(_L("HMAC Tests for %S"), &aHashType);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   690
	test.Next(formattable);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   691
	CMessageDigest* temp = aMD->ReplicateL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   692
	CleanupStack::PushL(temp);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   693
	CHMAC* hmac=CHMAC::NewL(_L8("aaaaaaaa"), temp);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   694
	CleanupStack::Pop(temp);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   695
	CleanupStack::PushL(hmac);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   696
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   697
//	For each of the available digests
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   698
	FunctionalityTestL(hmac);		//JCS for now
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   699
	HMACVectorTestL(aMD,aFilename);	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   700
	OOMTestL(hmac);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   701
		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   702
	CleanupStack::PopAndDestroy(hmac);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   703
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   704
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   705
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   706
void MD2TestsL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   707
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   708
	CMD2* md2;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   709
	md2=CMD2::NewL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   710
	CleanupStack::PushL(md2);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   711
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   712
	FunctionalityTestL(md2);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   713
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   714
	VectorTestL(md2,_L("md2.dat"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   715
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   716
	OOMTestL(md2);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   717
		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   718
	CleanupStack::PopAndDestroy(md2);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   719
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   720
// Problem reported by Jal Panvel, 17-12-1999.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   721
// Report by email, CSHA1::Hash() returning zero length descriptor
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   722
// 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   723
// This was caused by failure to set internal hash descriptor length on setup, this
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   724
// problem was present in all hashes except MD2 which set it up correctly.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   725
// Fixed 17-12-1999.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   726
	test.Next(_L("Fixed bugs Tests"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   727
	md2 = CMD2::NewL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   728
	CleanupStack::PushL(md2);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   729
	TPtrC8 data(_L8("The quick brown fox jumped over the lazy dog"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   730
	TBuf8<128> hash;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   731
	hash = md2->Hash(data);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   732
	test(hash.Length() == md2->HashSize());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   733
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   734
	HMACTestsL(md2,_L("hmacmd2.dat"), _L("md2"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   735
	CleanupStack::PopAndDestroy(md2);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   736
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   737
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   738
void MD5TestsL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   739
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   740
	CMD5* md5;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   741
	md5=CMD5::NewL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   742
	CleanupStack::PushL(md5);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   743
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   744
	FunctionalityTestL(md5);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   745
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   746
	VectorTestL(md5,_L("md5.dat"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   747
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   748
	OOMTestL(md5);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   749
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   750
	CleanupStack::PopAndDestroy(md5);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   751
	test.Next(_L("Fixed bugs Tests"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   752
// Problem reported by Jal Panvel, 17-12-1999.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   753
// Report by email, CSHA1::Hash() returning zero length descriptor
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   754
// 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   755
// This was caused by failure to set internal hash descriptor length on setup, this
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   756
// problem was present in all hashes except MD2 which set it up correctly.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   757
// Fixed 17-12-1999.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   758
	CMD5* md = CMD5::NewL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   759
	CleanupStack::PushL(md);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   760
	TPtrC8 data(_L8("The quick brown fox jumped over the lazy dog"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   761
	TBuf8<128> hash;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   762
	hash = md->Hash(data);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   763
	test(hash.Length() == md->HashSize());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   764
		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   765
	HMACTestsL(md5,_L("hmacmd5.dat"), _L("md5"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   766
	CleanupStack::PopAndDestroy(md);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   767
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   768
	//	Test for DEF001510 "TLS - Receives Disconnect Indication during hands..."
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   769
	CMD5* testHasher = CMD5::NewL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   770
	CleanupStack::PushL(testHasher);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   771
	TPtrC8 client(_L8("D652CA1A6154D8303C16C055E424A5ACF3EBAB94284CD9B05B85C0D0F0B8E7A4"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   772
	TPtrC8 server(_L8("3E3E56059EFEE4F8C5B05C76128C4C84916DF9E935510C3C063454856FF29FF8"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   773
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   774
	HBufC8* clientData = client.AllocLC();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   775
	HBufC8* serverData = server.AllocLC();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   776
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   777
	Hex(*clientData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   778
	Hex(*serverData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   779
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   780
	testHasher->Hash(*clientData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   781
	testHasher->Hash(*serverData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   782
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   783
	TBuf8<32> md5buf;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   784
	md5buf.Copy(testHasher->Hash(TPtrC8(0,0)));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   785
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   786
	testHasher->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   787
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   788
//	Now hash in one chunk
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   789
	TPtrC8 all(_L8("D652CA1A6154D8303C16C055E424A5ACF3EBAB94284CD9B05B85C0D0F0B8E7A43E3E56059EFEE4F8C5B05C76128C4C84916DF9E935510C3C063454856FF29FF8"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   790
	HBufC8* allData = all.AllocLC();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   791
	Hex(*allData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   792
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   793
	TBuf8<32> allbuf;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   794
	allbuf = testHasher->Hash(*allData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   795
	test(allbuf.Compare(md5buf)==0);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   796
	CleanupStack::PopAndDestroy(4, testHasher);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   797
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   798
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   799
// Test for the MD4 Message Digest Algorithm API's	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   800
void MD4TestsL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   801
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   802
	CMD4* md4;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   803
	md4=CMD4::NewL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   804
	CleanupStack::PushL(md4);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   805
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   806
	FunctionalityTestL(md4);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   807
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   808
	VectorTestL(md4,_L("md4.dat"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   809
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   810
	OOMTestL(md4);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   811
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   812
	CleanupStack::PopAndDestroy(md4);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   813
   
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   814
    //Test to check the Hash Size.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   815
	CMD4* md = CMD4::NewL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   816
	CleanupStack::PushL(md);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   817
	TPtrC8 data(_L8("The quick brown fox jumped over the lazy dog"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   818
	TBuf8<128> hash;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   819
	hash = md->Hash(data);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   820
	test(hash.Length() == md->HashSize());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   821
		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   822
	HMACTestsL(md,_L("hmacmd4.dat"), _L("md4"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   823
	CleanupStack::PopAndDestroy(md);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   824
   
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   825
    //Tests carried for other Message Digest Algorithms copied(SHA1 and MD5)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   826
    //Here Input Data is given in two parts and as a whole and the digest generated is compared.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   827
	CMD4* testHasher = CMD4::NewL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   828
	CleanupStack::PushL(testHasher);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   829
	TPtrC8 client(_L8("D652CA1A6154D8303C16C055E424A5ACF3EBAB94284CD9B05B85C0D0F0B8E7A4"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   830
	TPtrC8 server(_L8("3E3E56059EFEE4F8C5B05C76128C4C84916DF9E935510C3C063454856FF29FF8"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   831
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   832
	HBufC8* clientData = client.AllocLC();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   833
	HBufC8* serverData = server.AllocLC();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   834
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   835
	Hex(*clientData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   836
	Hex(*serverData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   837
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   838
	testHasher->Hash(*clientData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   839
	testHasher->Hash(*serverData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   840
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   841
	TBuf8<32> md4buf;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   842
	md4buf.Copy(testHasher->Hash(TPtrC8(0,0)));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   843
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   844
	testHasher->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   845
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   846
//	Now hash in one chunk
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   847
	TPtrC8 all(_L8("D652CA1A6154D8303C16C055E424A5ACF3EBAB94284CD9B05B85C0D0F0B8E7A43E3E56059EFEE4F8C5B05C76128C4C84916DF9E935510C3C063454856FF29FF8"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   848
	HBufC8* allData = all.AllocLC();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   849
	Hex(*allData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   850
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   851
	TBuf8<32> allbuf;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   852
	allbuf = testHasher->Hash(*allData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   853
	test(allbuf.Compare(md4buf)==0);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   854
	CleanupStack::PopAndDestroy(4, testHasher);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   855
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   856
	//Tests for the Factory Method CMessageDigestFactory
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   857
	CMessageDigest* messageDigest = CMessageDigestFactory::NewDigestLC(CMessageDigest::EMD4);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   858
    VectorTestL(messageDigest,_L("md4.dat"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   859
    CleanupStack::PopAndDestroy(messageDigest);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   860
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   861
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   862
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   863
void SHA1TestsL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   864
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   865
	CSHA1* sha;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   866
	sha=CSHA1::NewL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   867
	CleanupStack::PushL(sha);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   868
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   869
	VectorTestL(sha,_L("sha1.dat"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   870
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   871
	FunctionalityTestL(sha);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   872
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   873
	OOMTestL(sha);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   874
		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   875
	CleanupStack::PopAndDestroy(sha);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   876
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   877
	test.Next(_L("Fixed bugs Tests"));	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   878
// Problem reported by Jal Panvel, 17-12-1999.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   879
// Report by email, CSHA1::Hash() returning zero length descriptor
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   880
// 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   881
// This was caused by failure to set internal hash descriptor length on setup, this
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   882
// problem was present in all hashes except MD2 which set it up correctly.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   883
// Fixed 17-12-1999.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   884
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   885
	sha=CSHA1::NewL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   886
	CleanupStack::PushL(sha);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   887
	TPtrC8 data(_L8("The quick brown fox jumped over the lazy dog"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   888
	TBuf8<128> hash;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   889
	hash = sha->Hash(data);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   890
	test(hash.Length() == sha->HashSize());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   891
	sha->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   892
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   893
	//	Test for DEF001510 "TLS - Receives Disconnect Indication during hands..."
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   894
	CSHA1* testHasher = CSHA1::NewL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   895
	CleanupStack::PushL(testHasher);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   896
	TPtrC8 client(_L8("D652CA1A6154D8303C16C055E424A5ACF3EBAB94284CD9B05B85C0D0F0B8E7A4"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   897
	TPtrC8 server(_L8("3E3E56059EFEE4F8C5B05C76128C4C84916DF9E935510C3C063454856FF29FF8"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   898
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   899
	HBufC8* clientData = client.AllocLC();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   900
	HBufC8* serverData = server.AllocLC();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   901
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   902
	Hex(*clientData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   903
	Hex(*serverData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   904
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   905
//	Hash in 2 portions
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   906
	TBuf8<32> clientbuf;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   907
	TBuf8<32> serverbuf;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   908
	clientbuf = testHasher->Hash(*clientData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   909
	serverbuf = testHasher->Hash(*serverData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   910
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   911
	TBuf8<32> shabuf;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   912
	shabuf.Copy(testHasher->Hash(TPtrC8(0,0)));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   913
	testHasher->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   914
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   915
//	Now hash in one chunk
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   916
	TPtrC8 all(_L8("D652CA1A6154D8303C16C055E424A5ACF3EBAB94284CD9B05B85C0D0F0B8E7A43E3E56059EFEE4F8C5B05C76128C4C84916DF9E935510C3C063454856FF29FF8"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   917
	HBufC8* allData = all.AllocLC();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   918
	Hex(*allData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   919
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   920
	TBuf8<32> allbuf;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   921
	allbuf = testHasher->Hash(*allData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   922
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   923
	test(allbuf.Compare(shabuf)==0);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   924
	CleanupStack::PopAndDestroy(4, testHasher);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   925
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   926
	// Test hashing non-word aligned data - used to crash on arm
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   927
	TPtrC8 nonAlignedData = data.Mid(1);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   928
	hash = sha->Final(nonAlignedData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   929
	test(hash.Length() == sha->HashSize());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   930
	sha->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   931
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   932
//	Test end
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   933
	HMACTestsL(sha,_L("hmacsha1.dat"), _L("sha1"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   934
	CleanupStack::PopAndDestroy();		// sha
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   935
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   936
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   937
void ExecuteHashTestsL(CMessageDigest* aMD, const TDesC& aVector, const TDesC& aHMACVector, const TDesC& aHashType)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   938
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   939
	VectorTestL(aMD, aVector);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   940
	FunctionalityTestL(aMD);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   941
	OOMTestL(aMD);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   942
	aMD->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   943
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   944
	test.Next(_L("Fixed bugs Tests"));	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   945
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   946
	_LIT8(KTest1Data, "The quick brown fox jumped over the lazy dog");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   947
	TBuf8<KMaxHashSize> hash;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   948
	hash = aMD->Hash(KTest1Data());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   949
	test(hash.Length() == aMD->HashSize());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   950
	aMD->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   951
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   952
	//	Test for DEF001510 "TLS - Receives Disconnect Indication during hands..."
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   953
	_LIT8(KClientData, "D652CA1A6154D8303C16C055E424A5ACF3EBAB94284CD9B05B85C0D0F0B8E7A4");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   954
	_LIT8(KServerData, "3E3E56059EFEE4F8C5B05C76128C4C84916DF9E935510C3C063454856FF29FF8");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   955
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   956
	HBufC8* clientData = KClientData().AllocLC();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   957
	HBufC8* serverData = KServerData().AllocLC();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   958
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   959
	Hex(*clientData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   960
	Hex(*serverData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   961
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   962
//	Hash in 2 portions
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   963
	aMD->Hash(*clientData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   964
	aMD->Hash(*serverData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   965
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   966
	CleanupStack::PopAndDestroy(2, clientData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   967
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   968
	TBuf8<KMaxHashSize> shabuf;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   969
	shabuf.Copy(aMD->Hash(KNullDesC8()));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   970
	aMD->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   971
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   972
//	Now hash in one chunk
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   973
	_LIT8(KAllData, "D652CA1A6154D8303C16C055E424A5ACF3EBAB94284CD9B05B85C0D0F0B8E7A43E3E56059EFEE4F8C5B05C76128C4C84916DF9E935510C3C063454856FF29FF8");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   974
	HBufC8* allData = KAllData().AllocLC();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   975
	Hex(*allData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   976
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   977
	TBuf8<KMaxHashSize> allbuf;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   978
	allbuf = aMD->Hash(*allData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   979
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   980
	test(allbuf.Compare(shabuf)==0);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   981
	CleanupStack::PopAndDestroy(allData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   982
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   983
	// Test hashing non-word aligned data - used to crash on arm
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   984
	TPtrC8 nonAlignedData = KTest1Data().Mid(1);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   985
	hash = aMD->Final(nonAlignedData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   986
	test(hash.Length() == aMD->HashSize());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   987
	aMD->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   988
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   989
//	Test end
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   990
	HMACTestsL(aMD, aHMACVector, aHashType);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   991
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   992
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   993
_LIT(K224Algo, "SHA-224.dat");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   994
_LIT(K256Algo, "SHA-256.dat");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   995
_LIT(K384Algo, "SHA-384.dat");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   996
_LIT(K512Algo, "SHA-512.dat");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   997
_LIT(K224Vector, "sha224.dat");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   998
_LIT(K256Vector, "sha256.dat");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   999
_LIT(K384Vector, "sha384.dat");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1000
_LIT(K512Vector, "sha512.dat");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1001
_LIT(K224HmacVector, "hmacsha224.dat");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1002
_LIT(K256HmacVector, "hmacsha256.dat");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1003
_LIT(K384HmacVector, "hmacsha384.dat");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1004
_LIT(K512HmacVector, "hmacsha512.dat");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1005
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1006
const TDesC* gNames[] = 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1007
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1008
	&K224Vector(),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1009
	&K224HmacVector(),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1010
	&K224Algo(),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1011
	&K256Vector(),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1012
	&K256HmacVector(),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1013
	&K256Algo(),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1014
	&K384Vector(),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1015
	&K384HmacVector(),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1016
	&K384Algo(),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1017
	&K512Vector(),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1018
	&K512HmacVector(),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1019
	&K512Algo(),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1020
	};
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1021
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1022
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1023
void SHA2TestsL(CMessageDigest::THashId aHashId)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1024
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1025
	CMessageDigest* md = CMessageDigestFactory::NewDigestLC(aHashId);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1026
	TInt pos = aHashId - CMessageDigest::ESHA224;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1027
	pos *= 3;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1028
	ExecuteHashTestsL(md, *gNames[pos], *gNames[pos+1], *gNames[pos+2]);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1029
	CleanupStack::PopAndDestroy(md);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1030
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1031
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1032
void HashTests(void)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1033
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1034
	TInt32 testsFailed=0, testCount=0; 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1035
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1036
	test.Start(_L("SHA1 Tests"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1037
	TRAPD(r, SHA1TestsL());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1038
	++testCount;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1039
  if (r!=KErrNone)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1040
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1041
		test.Printf(_L("\r\nSHA1 Tests failed error code = %d\r\n\r\n"),r);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1042
		++testsFailed;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1043
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1044
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1045
  test.Start(_L("SHA-224 Tests"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1046
	TRAP(r, SHA2TestsL(CMessageDigest::ESHA224));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1047
	++testCount;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1048
	if (r!=KErrNone)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1049
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1050
		test.Printf(_L("\r\nSHA-224 Tests failed error code = %d\r\n\r\n"),r);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1051
		++testsFailed;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1052
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1053
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1054
	test.Start(_L("SHA-256 Tests"));	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1055
	TRAP(r, SHA2TestsL(CMessageDigest::ESHA256));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1056
	++testCount;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1057
	if (r!=KErrNone)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1058
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1059
		test.Printf(_L("\r\nSHA-256 Tests failed error code = %d\r\n\r\n"),r);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1060
		++testsFailed;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1061
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1062
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1063
	test.Start(_L("SHA-384 Tests"));	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1064
	TRAP(r, SHA2TestsL(CMessageDigest::ESHA384));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1065
	++testCount;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1066
	if (r!=KErrNone)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1067
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1068
		test.Printf(_L("\r\nSHA-384 Tests failed error code = %d\r\n\r\n"),r);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1069
		++testsFailed;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1070
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1071
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1072
	test.Start(_L("SHA-512 Tests"));	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1073
	TRAP(r, SHA2TestsL(CMessageDigest::ESHA512));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1074
	++testCount;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1075
	if (r!=KErrNone)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1076
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1077
		test.Printf(_L("\r\nSHA-512 Tests failed error code = %d\r\n\r\n"),r);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1078
		++testsFailed;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1079
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1080
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1081
	test.Start(_L("MD5 Tests"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1082
	TRAP(r, MD5TestsL());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1083
  ++testCount;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1084
	if (r!=KErrNone)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1085
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1086
		test.Printf(_L("\r\nMD5 Tests failed error code = %d\r\n\r\n"),r);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1087
		++testsFailed;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1088
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1089
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1090
	test.Start(_L("MD2 Tests"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1091
	TRAP(r, MD2TestsL());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1092
  ++testCount;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1093
	if (r!=KErrNone)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1094
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1095
		test.Printf(_L("\r\nMD2 Tests failed error code = %d\r\n\r\n"),r);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1096
		++testsFailed;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1097
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1098
 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1099
	//MD4 Message Digest Algorithm Tests
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1100
	test.Start(_L("MD4 Tests"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1101
	TRAP(r, MD4TestsL());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1102
  ++testCount;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1103
	if (r!=KErrNone)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1104
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1105
		test.Printf(_L("\r\nMD4 Tests failed error code = %d\r\n\r\n"),r);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1106
		++testsFailed;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1107
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1108
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1109
	test.Printf(_L("\r\n%d tests failed out of %d \r\n"),testsFailed,testCount);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1110
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1111
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1112
	test(testsFailed==0);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1113
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1114
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1115
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1116
GLDEF_C TInt E32Main(void)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1117
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1118
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1119
	CTrapCleanup* cleanup;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1120
	cleanup=CTrapCleanup::New();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1121
		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1122
	test.Start(_L(" @SYMTestCaseID:SEC-CRYPTO-HASH-0001 Hash Algorithm Tests "));		 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1123
	CTestConsole* con=NULL;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1124
	TRAPD(ret, con=CTestConsole::NewL(test.Console()));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1125
	if(ret != KErrNone)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1126
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1127
		return ret;	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1128
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1129
	RFs fs;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1130
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1131
	fs.Connect();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1132
	RFile* file;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1133
	file=new (ELeave) RFile;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1134
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1135
	TDriveUnit sysDrive (fs.GetSystemDrive());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1136
	TDriveName driveName(sysDrive.Name());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1137
	TBuf<24> hashLogFile (driveName);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1138
	hashLogFile.Append(_L("\\HashLog.txt"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1139
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1140
	file->Replace(fs,hashLogFile,EFileShareAny|EFileWrite);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1141
	con->SetLogFile(file);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1142
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1143
	test.SetConsole(con);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1144
	__UHEAP_MARK;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1145
	 HashTests();		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1146
	__UHEAP_MARKEND;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1147
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1148
	test.End();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1149
	test.Close();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1150
	delete cleanup;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1151
	return(KErrNone);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1152
	}