crypto/weakcrypto/source/hash/md4.cpp
author hgs
Thu, 24 Jun 2010 15:39:07 +0530
changeset 72 de46a57f75fb
permissions -rw-r--r--
201023_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
72
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     1
/*
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     2
* Copyright (c) 2007-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 <e32std.h>
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    24
#include <hash.h>
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    25
#include "hashinc.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    26
#define EXPANDLOOP
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    27
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    28
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    29
CMD4::CMD4(void)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    30
: CMessageDigest(),iHash(MD4_HASH)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    31
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    32
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    33
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    34
CMD4::CMD4(const CMD4& aMD)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    35
: CMessageDigest(aMD),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    36
  iHash(aMD.iHash),iA(aMD.iA),iB(aMD.iB),iC(aMD.iC),iD(aMD.iD),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    37
  iNl(aMD.iNl),iNh(aMD.iNh)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    38
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    39
	(void)Mem::Copy(iData,aMD.iData,sizeof(iData));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    40
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    41
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    42
EXPORT_C CMD4* CMD4::NewL(void)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    43
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    44
	CMD4* self = new (ELeave) CMD4();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    45
	self->Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    46
	return (self);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    47
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    48
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    49
EXPORT_C CMessageDigest* CMD4::ReplicateL(void)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    50
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    51
	 return CMD4::NewL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    52
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    53
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    54
EXPORT_C CMD4::~CMD4(void)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    55
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    56
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    57
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    58
EXPORT_C TPtrC8 CMD4::Hash(const TDesC8& aMessage)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    59
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    60
	//Adds the aMessage to the internal representation of data to be hashed i.e iData
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    61
	DoUpdate(aMessage.Ptr(),aMessage.Size());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    62
	StoreState();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    63
	//Does the padding and does the block operation on the final 512 bit block.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    64
	DoFinal();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    65
	RestoreState();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    66
	return iHash;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    67
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    68
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    69
EXPORT_C CMessageDigest* CMD4::CopyL(void)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    70
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    71
	return new(ELeave) CMD4(*this);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    72
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    73
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    74
EXPORT_C TInt CMD4::BlockSize(void)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    75
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    76
	return sizeof(iData);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    77
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    78
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    79
EXPORT_C TInt CMD4::HashSize(void)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    80
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    81
	return MD4_HASH;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    82
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    83
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    84
EXPORT_C void CMD4::Reset(void)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    85
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    86
	iA=0x67452301;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    87
	iB=0xefcdab89;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    88
	iC=0x98badcfe;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    89
	iD=0x10325476;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    90
	iNh=0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    91
	iNl=0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    92
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    93
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    94
EXPORT_C void CMD4::Update(const TDesC8& aMessage)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    95
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    96
	DoUpdate(aMessage.Ptr(),aMessage.Size());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    97
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    98
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    99
EXPORT_C TPtrC8 CMD4::Final(const TDesC8& aMessage)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   100
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   101
	//Adds the aMessage to the internal representation of data to be hashed i.e iData
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   102
	DoUpdate(aMessage.Ptr(),aMessage.Size());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   103
	//Does the padding and does the block operation on the final 512 bit block.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   104
	DoFinal();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   105
	//Resets the values of iA, iB, iC and iD, iNh, iNl
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   106
	Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   107
	return iHash;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   108
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   109
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   110
EXPORT_C TPtrC8 CMD4::Final()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   111
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   112
	//Does the padding and does the block operation on the final 512 bit block.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   113
	DoFinal();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   114
	//Resets the values of iA, iB, iC and iD, iNh, iNl
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   115
	Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   116
	return iHash;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   117
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   118
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   119
void CMD4::DoUpdate(const TUint8* aData,TUint aLength)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   120
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   121
	const TUint8* pend=aData+aLength;	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   122
	for (const TUint8* paData=aData;paData<pend;paData++) 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   123
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   124
		const TUint8 byte=*paData;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   125
		switch (iNl&3) 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   126
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   127
			case 0:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   128
				iData[iNl>>2]=byte;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   129
				break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   130
			case 1:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   131
				iData[iNl>>2]|=byte<<8;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   132
				break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   133
			case 2:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   134
				iData[iNl>>2]|=byte<<16;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   135
				break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   136
			case 3:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   137
				iData[iNl>>2]|=byte<<24;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   138
				break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   139
			default:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   140
				break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   141
			};
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   142
		if(++iNl==64) 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   143
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   144
			Block();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   145
			iNh+=64;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   146
			iNl=0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   147
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   148
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   149
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   150
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   151
static inline TUint CMD4_F(TUint x,TUint y,TUint z)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   152
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   153
	return ((x)&(y)) | ((~x)&(z));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   154
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   155
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   156
static inline TUint CMD4_G(TUint x,TUint y,TUint z)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   157
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   158
	return ((x)&(y)) | ((x)&(z)) | ((y)&(z));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   159
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   160
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   161
static inline TUint CMD4_H(TUint x,TUint y,TUint z)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   162
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   163
	return (x)^(y)^(z);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   164
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   165
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   166
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   167
#ifdef NOREFS
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   168
static inline TUint CMD4_FF(TUint a,const TUint b,const TUint c,const TUint d,const TUint x,const TUint s)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   169
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   170
	a+=CMD4_F(b,c,d) + x; 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   171
	a=CMD_R(a,s);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   172
	return a;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   173
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   174
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   175
static inline TUint CMD4_GG(TUint a,const TUint b,const TUint c,const TUint d,const TUint x,const TUint s)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   176
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   177
	a+=CMD4_G(b,c,d) + x + (TUint32)0x5a827999; 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   178
	a=CMD_R(a,s);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   179
	return a;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   180
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   181
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   182
static inline TUint CMD4_HH(TUint a,const TUint b,const TUint c,const TUint d,const TUint x,const TUint s)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   183
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   184
	a+=CMD4_H(b,c,d) + x + (TUint32)0x6ed9eba1; 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   185
	a=CMD_R(a,s);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   186
	return a;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   187
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   188
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   189
void CMD4::Block()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   190
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   191
	register TUint tempA=iA;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   192
	register TUint tempB=iB;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   193
	register TUint tempC=iC;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   194
	register TUint tempD=iD;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   195
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   196
	tempA = CMD4_FF(tempA,tempB,tempC,tempD,iData[ 0],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   197
	tempD = CMD4_FF(tempD,tempA,tempB,tempC,iData[ 1],7);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   198
	tempC = CMD4_FF(tempC,tempD,tempA,tempB,iData[ 2],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   199
	tempB = CMD4_FF(tempB,tempC,tempD,tempA,iData[ 3],19);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   200
	tempA = CMD4_FF(tempA,tempB,tempC,tempD,iData[ 4],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   201
	tempD = CMD4_FF(tempD,tempA,tempB,tempC,iData[ 5],7);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   202
	tempC = CMD4_FF(tempC,tempD,tempA,tempB,iData[ 6],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   203
	tempB = CMD4_FF(tempB,tempC,tempD,tempA,iData[ 7],19);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   204
	tempA = CMD4_FF(tempA,tempB,tempC,tempD,iData[ 8],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   205
	tempD = CMD4_FF(tempD,tempA,tempB,tempC,iData[ 9],7);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   206
	tempC = CMD4_FF(tempC,tempD,tempA,tempB,iData[10],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   207
	tempB = CMD4_FF(tempB,tempC,tempD,tempA,iData[11],19);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   208
	tempA = CMD4_FF(tempA,tempB,tempC,tempD,iData[12],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   209
	tempD = CMD4_FF(tempD,tempA,tempB,tempC,iData[13],7);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   210
	tempC = CMD4_FF(tempC,tempD,tempA,tempB,iData[14],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   211
	tempB = CMD4_FF(tempB,tempC,tempD,tempA,iData[15],19);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   212
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   213
	tempA = CMD4_GG(tempA,tempB,tempC,tempD,iData[ 0],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   214
	tempD = CMD4_GG(tempD,tempA,tempB,tempC,iData[ 4],5);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   215
	tempC = CMD4_GG(tempC,tempD,tempA,tempB,iData[ 8],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   216
	tempB = CMD4_GG(tempB,tempC,tempD,tempA,iData[12],13);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   217
	tempA = CMD4_GG(tempA,tempB,tempC,tempD,iData[ 1],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   218
	tempD = CMD4_GG(tempD,tempA,tempB,tempC,iData[ 5],5);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   219
	tempC = CMD4_GG(tempC,tempD,tempA,tempB,iData[ 9],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   220
	tempB = CMD4_GG(tempB,tempC,tempD,tempA,iData[13],13);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   221
	tempA = CMD4_GG(tempA,tempB,tempC,tempD,iData[ 2],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   222
	tempD = CMD4_GG(tempD,tempA,tempB,tempC,iData[ 6],5);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   223
	tempC = CMD4_GG(tempC,tempD,tempA,tempB,iData[10],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   224
	tempB = CMD4_GG(tempB,tempC,tempD,tempA,iData[14],13);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   225
	tempA = CMD4_GG(tempA,tempB,tempC,tempD,iData[ 3],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   226
	tempD = CMD4_GG(tempD,tempA,tempB,tempC,iData[ 7],5);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   227
	tempC = CMD4_GG(tempC,tempD,tempA,tempB,iData[11],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   228
	tempB = CMD4_GG(tempB,tempC,tempD,tempA,iData[15],13);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   229
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   230
	tempA = CMD4_HH(tempA,tempB,tempC,tempD,iData[ 0],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   231
	tempD = CMD4_HH(tempD,tempA,tempB,tempC,iData[ 8],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   232
	tempC = CMD4_HH(tempC,tempD,tempA,tempB,iData[ 4],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   233
	tempB = CMD4_HH(tempB,tempC,tempD,tempA,iData[12],15);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   234
	tempA = CMD4_HH(tempA,tempB,tempC,tempD,iData[ 2],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   235
	tempD = CMD4_HH(tempD,tempA,tempB,tempC,iData[10],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   236
	tempC = CMD4_HH(tempC,tempD,tempA,tempB,iData[ 6],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   237
	tempB = CMD4_HH(tempB,tempC,tempD,tempA,iData[14],15);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   238
	tempA = CMD4_HH(tempA,tempB,tempC,tempD,iData[ 1],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   239
	tempD = CMD4_HH(tempD,tempA,tempB,tempC,iData[ 9],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   240
	tempC = CMD4_HH(tempC,tempD,tempA,tempB,iData[ 5],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   241
	tempB = CMD4_HH(tempB,tempC,tempD,tempA,iData[13],15);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   242
	tempA = CMD4_HH(tempA,tempB,tempC,tempD,iData[ 3],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   243
	tempD = CMD4_HH(tempD,tempA,tempB,tempC,iData[11],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   244
	tempC = CMD4_HH(tempC,tempD,tempA,tempB,iData[ 7],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   245
	tempB = CMD4_HH(tempB,tempC,tempD,tempA,iData[15],15);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   246
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   247
	iA+=tempA;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   248
	iB+=tempB;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   249
	iC+=tempC;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   250
	iD+=tempD;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   251
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   252
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   253
#else
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   254
#ifdef MACRO
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   255
#define CMD4_FF(a, b, c, d, x, s) (CMD_R(a += CMD4_F(b,c,d) + x, s))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   256
#define CMD4_GG(a, b, c, d, x, s) (CMD_R(a += CMD4_G(b,c,d) + x + (TUint32)0x5a827999, s))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   257
#define CMD4_HH(a, b, c, d, x, s) (CMD_R(a += CMD4_H(b,c,d) + x + (TUint32)0x6ed9eba1, s))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   258
void CMD4::Block()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   259
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   260
	register TUint tempA=iA;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   261
	register TUint tempB=iB;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   262
	register TUint tempC=iC;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   263
	register TUint tempD=iD;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   264
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   265
	tempA = CMD4_FF(tempA,tempB,tempC,tempD,iData[ 0],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   266
	tempD = CMD4_FF(tempD,tempA,tempB,tempC,iData[ 1],7);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   267
	tempC = CMD4_FF(tempC,tempD,tempA,tempB,iData[ 2],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   268
	tempB = CMD4_FF(tempB,tempC,tempD,tempA,iData[ 3],19);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   269
	tempA = CMD4_FF(tempA,tempB,tempC,tempD,iData[ 4],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   270
	tempD = CMD4_FF(tempD,tempA,tempB,tempC,iData[ 5],7);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   271
	tempC = CMD4_FF(tempC,tempD,tempA,tempB,iData[ 6],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   272
	tempB = CMD4_FF(tempB,tempC,tempD,tempA,iData[ 7],19);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   273
	tempA = CMD4_FF(tempA,tempB,tempC,tempD,iData[ 8],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   274
	tempD = CMD4_FF(tempD,tempA,tempB,tempC,iData[ 9],7);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   275
	tempC = CMD4_FF(tempC,tempD,tempA,tempB,iData[10],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   276
	tempB = CMD4_FF(tempB,tempC,tempD,tempA,iData[11],19);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   277
	tempA = CMD4_FF(tempA,tempB,tempC,tempD,iData[12],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   278
	tempD = CMD4_FF(tempD,tempA,tempB,tempC,iData[13],7);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   279
	tempC = CMD4_FF(tempC,tempD,tempA,tempB,iData[14],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   280
	tempB = CMD4_FF(tempB,tempC,tempD,tempA,iData[15],19);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   281
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   282
	tempA = CMD4_GG(tempA,tempB,tempC,tempD,iData[ 0],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   283
	tempD = CMD4_GG(tempD,tempA,tempB,tempC,iData[ 4],5);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   284
	tempC = CMD4_GG(tempC,tempD,tempA,tempB,iData[ 8],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   285
	tempB = CMD4_GG(tempB,tempC,tempD,tempA,iData[12],13);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   286
	tempA = CMD4_GG(tempA,tempB,tempC,tempD,iData[ 1],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   287
	tempD = CMD4_GG(tempD,tempA,tempB,tempC,iData[ 5],5);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   288
	tempC = CMD4_GG(tempC,tempD,tempA,tempB,iData[ 9],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   289
	tempB = CMD4_GG(tempB,tempC,tempD,tempA,iData[13],13);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   290
	tempA = CMD4_GG(tempA,tempB,tempC,tempD,iData[ 2],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   291
	tempD = CMD4_GG(tempD,tempA,tempB,tempC,iData[ 6],5);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   292
	tempC = CMD4_GG(tempC,tempD,tempA,tempB,iData[10],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   293
	tempB = CMD4_GG(tempB,tempC,tempD,tempA,iData[14],13);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   294
	tempA = CMD4_GG(tempA,tempB,tempC,tempD,iData[ 3],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   295
	tempD = CMD4_GG(tempD,tempA,tempB,tempC,iData[ 7],5);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   296
	tempC = CMD4_GG(tempC,tempD,tempA,tempB,iData[11],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   297
	tempB = CMD4_GG(tempB,tempC,tempD,tempA,iData[15],13);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   298
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   299
	tempA = CMD4_HH(tempA,tempB,tempC,tempD,iData[ 0],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   300
	tempD = CMD4_HH(tempD,tempA,tempB,tempC,iData[ 8],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   301
	tempC = CMD4_HH(tempC,tempD,tempA,tempB,iData[ 4],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   302
	tempB = CMD4_HH(tempB,tempC,tempD,tempA,iData[12],15);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   303
	tempA = CMD4_HH(tempA,tempB,tempC,tempD,iData[ 2],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   304
	tempD = CMD4_HH(tempD,tempA,tempB,tempC,iData[10],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   305
	tempC = CMD4_HH(tempC,tempD,tempA,tempB,iData[ 6],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   306
	tempB = CMD4_HH(tempB,tempC,tempD,tempA,iData[14],15);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   307
	tempA = CMD4_HH(tempA,tempB,tempC,tempD,iData[ 1],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   308
	tempD = CMD4_HH(tempD,tempA,tempB,tempC,iData[ 9],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   309
	tempC = CMD4_HH(tempC,tempD,tempA,tempB,iData[ 5],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   310
	tempB = CMD4_HH(tempB,tempC,tempD,tempA,iData[13],15);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   311
	tempA = CMD4_HH(tempA,tempB,tempC,tempD,iData[ 3],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   312
	tempD = CMD4_HH(tempD,tempA,tempB,tempC,iData[11],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   313
	tempC = CMD4_HH(tempC,tempD,tempA,tempB,iData[ 7],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   314
	tempB = CMD4_HH(tempB,tempC,tempD,tempA,iData[15],15);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   315
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   316
	iA+=tempA;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   317
	iB+=tempB;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   318
	iC+=tempC;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   319
	iD+=tempD;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   320
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   321
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   322
#else
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   323
static inline void CMD4_FF(TUint& a,const TUint b,const TUint c,const TUint d,const TUint x,const TUint s)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   324
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   325
	a+=CMD4_F(b,c,d) + x; 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   326
	a=CMD_R(a,s);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   327
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   328
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   329
static inline void CMD4_GG(TUint& a,const TUint b,const TUint c,const TUint d,const TUint x,const TUint s)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   330
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   331
	a+=CMD4_G(b,c,d) + x + (TUint32)0x5a827999; 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   332
	a=CMD_R(a,s);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   333
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   334
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   335
static inline void CMD4_HH(TUint& a,const TUint b,const TUint c,const TUint d,const TUint x,const TUint s)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   336
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   337
	a+=CMD4_H(b,c,d) + x + (TUint32)0x6ed9eba1; 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   338
	a=CMD_R(a,s);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   339
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   340
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   341
void CMD4::Block()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   342
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   343
	register TUint tempA=iA;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   344
	register TUint tempB=iB;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   345
	register TUint tempC=iC;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   346
	register TUint tempD=iD;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   347
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   348
	CMD4_FF(tempA,tempB,tempC,tempD,iData[ 0],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   349
	CMD4_FF(tempD,tempA,tempB,tempC,iData[ 1],7);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   350
	CMD4_FF(tempC,tempD,tempA,tempB,iData[ 2],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   351
	CMD4_FF(tempB,tempC,tempD,tempA,iData[ 3],19);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   352
	CMD4_FF(tempA,tempB,tempC,tempD,iData[ 4],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   353
	CMD4_FF(tempD,tempA,tempB,tempC,iData[ 5],7);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   354
	CMD4_FF(tempC,tempD,tempA,tempB,iData[ 6],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   355
	CMD4_FF(tempB,tempC,tempD,tempA,iData[ 7],19);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   356
	CMD4_FF(tempA,tempB,tempC,tempD,iData[ 8],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   357
	CMD4_FF(tempD,tempA,tempB,tempC,iData[ 9],7);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   358
	CMD4_FF(tempC,tempD,tempA,tempB,iData[10],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   359
	CMD4_FF(tempB,tempC,tempD,tempA,iData[11],19);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   360
	CMD4_FF(tempA,tempB,tempC,tempD,iData[12],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   361
	CMD4_FF(tempD,tempA,tempB,tempC,iData[13],7);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   362
	CMD4_FF(tempC,tempD,tempA,tempB,iData[14],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   363
	CMD4_FF(tempB,tempC,tempD,tempA,iData[15],19);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   364
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   365
	CMD4_GG(tempA,tempB,tempC,tempD,iData[ 0],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   366
	CMD4_GG(tempD,tempA,tempB,tempC,iData[ 4],5);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   367
	CMD4_GG(tempC,tempD,tempA,tempB,iData[ 8],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   368
	CMD4_GG(tempB,tempC,tempD,tempA,iData[12],13);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   369
	CMD4_GG(tempA,tempB,tempC,tempD,iData[ 1],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   370
	CMD4_GG(tempD,tempA,tempB,tempC,iData[ 5],5);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   371
	CMD4_GG(tempC,tempD,tempA,tempB,iData[ 9],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   372
	CMD4_GG(tempB,tempC,tempD,tempA,iData[13],13);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   373
	CMD4_GG(tempA,tempB,tempC,tempD,iData[ 2],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   374
	CMD4_GG(tempD,tempA,tempB,tempC,iData[ 6],5);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   375
	CMD4_GG(tempC,tempD,tempA,tempB,iData[10],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   376
	CMD4_GG(tempB,tempC,tempD,tempA,iData[14],13);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   377
	CMD4_GG(tempA,tempB,tempC,tempD,iData[ 3],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   378
	CMD4_GG(tempD,tempA,tempB,tempC,iData[ 7],5);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   379
	CMD4_GG(tempC,tempD,tempA,tempB,iData[11],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   380
	CMD4_GG(tempB,tempC,tempD,tempA,iData[15],13);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   381
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   382
	CMD4_HH(tempA,tempB,tempC,tempD,iData[ 0],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   383
	CMD4_HH(tempD,tempA,tempB,tempC,iData[ 8],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   384
	CMD4_HH(tempC,tempD,tempA,tempB,iData[ 4],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   385
	CMD4_HH(tempB,tempC,tempD,tempA,iData[12],15);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   386
	CMD4_HH(tempA,tempB,tempC,tempD,iData[ 2],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   387
	CMD4_HH(tempD,tempA,tempB,tempC,iData[10],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   388
	CMD4_HH(tempC,tempD,tempA,tempB,iData[ 6],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   389
	CMD4_HH(tempB,tempC,tempD,tempA,iData[14],15);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   390
	CMD4_HH(tempA,tempB,tempC,tempD,iData[ 1],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   391
	CMD4_HH(tempD,tempA,tempB,tempC,iData[ 9],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   392
	CMD4_HH(tempC,tempD,tempA,tempB,iData[ 5],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   393
	CMD4_HH(tempB,tempC,tempD,tempA,iData[13],15);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   394
	CMD4_HH(tempA,tempB,tempC,tempD,iData[ 3],3);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   395
	CMD4_HH(tempD,tempA,tempB,tempC,iData[11],9);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   396
	CMD4_HH(tempC,tempD,tempA,tempB,iData[ 7],11);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   397
	CMD4_HH(tempB,tempC,tempD,tempA,iData[15],15);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   398
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   399
	iA+=tempA;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   400
	iB+=tempB;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   401
	iC+=tempC;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   402
	iD+=tempD;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   403
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   404
#endif
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   405
#endif
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   406
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   407
void CMD4::DoFinal(void)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   408
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   409
	iNh += iNl;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   410
	const TUint ul128=128;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   411
	switch (iNl&3) 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   412
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   413
		case 0:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   414
			iData[iNl>>2] = ul128;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   415
			break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   416
		case 1:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   417
			iData[iNl>>2] += ul128<<8;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   418
			break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   419
		case 2:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   420
			iData[iNl>>2] += ul128<<16;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   421
			break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   422
		case 3:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   423
			iData[iNl>>2] += ul128<<24;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   424
			break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   425
		default:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   426
			break;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   427
		};
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   428
	if (iNl>=56) 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   429
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   430
		if (iNl<60)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   431
			iData[15]=0;		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   432
		Block();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   433
		Mem::FillZ(iData,14*sizeof(TUint));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   434
		} 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   435
	else
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   436
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   437
		const TUint offset=(iNl+4)>>2;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   438
		Mem::FillZ(iData+offset,(14-offset)*sizeof(TUint));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   439
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   440
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   441
	iData[14]=iNh<<3;//number in bits
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   442
	// this will fail if the total input length is longer than 2^32 in bits
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   443
	//(2^31 in bytes) which is roughly half a gig.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   444
	iData[15]=0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   445
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   446
	Block();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   447
	//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   448
	// Generate hash value into iHash
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   449
	//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   450
	TUint tmp=iA;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   451
	iHash[0]=(TUint8)(tmp & 255);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   452
	iHash[1]=(TUint8)((tmp >>= 8) & 255);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   453
	iHash[2]=(TUint8)((tmp >>= 8) & 255);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   454
	iHash[3]=(TUint8)((tmp >>= 8) & 255);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   455
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   456
	tmp=iB;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   457
	iHash[4]=(TUint8)(tmp & 255);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   458
	iHash[5]=(TUint8)((tmp >>= 8) & 255);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   459
	iHash[6]=(TUint8)((tmp >>= 8) & 255);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   460
	iHash[7]=(TUint8)((tmp >>= 8) & 255);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   461
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   462
	tmp=iC;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   463
	iHash[8]=(TUint8)(tmp & 255);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   464
	iHash[9]=(TUint8)((tmp >>= 8) & 255);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   465
	iHash[10]=(TUint8)((tmp >>= 8) & 255);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   466
	iHash[11]=(TUint8)((tmp >>= 8) & 255);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   467
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   468
	tmp=iD;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   469
	iHash[12]=(TUint8)(tmp & 255);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   470
	iHash[13]=(TUint8)((tmp >>= 8) & 255);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   471
	iHash[14]=(TUint8)((tmp >>= 8) & 255);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   472
	iHash[15]=(TUint8)((tmp >>= 8) & 255);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   473
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   474
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   475
void CMD4::RestoreState()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   476
{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   477
	iA = iACopy;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   478
	iB = iBCopy;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   479
	iC = iCCopy;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   480
	iD = iDCopy;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   481
	iNl = iNlCopy;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   482
	iNh = iNhCopy;	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   483
	Mem::Copy(&iData[0], &iDataCopy[0], MD4_LBLOCK*sizeof(TUint)); 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   484
}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   485
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   486
void CMD4::StoreState()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   487
{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   488
	iACopy = iA;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   489
	iBCopy = iB;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   490
	iCCopy = iC;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   491
	iDCopy = iD;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   492
	iNlCopy = iNl;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   493
	iNhCopy = iNh;	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   494
	Mem::Copy(&iDataCopy[0], &iData[0], MD4_LBLOCK*sizeof(TUint));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   495
}