diff -r da2ae96f639b -r cd501b96611d crypto/weakcryptospi/source/symmetric/rijndael.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crypto/weakcryptospi/source/symmetric/rijndael.cpp Fri Nov 06 13:21:00 2009 +0200 @@ -0,0 +1,225 @@ +/* +* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#include "rijndael.h" +#include "rijndaelshim.h" +#include "rijndaeltables.h" +#include "../common/inlines.h" +#include + +const TUint KAESKeyBytes128 = 16; +const TUint KAESKeyBytes192 = 24; +const TUint KAESKeyBytes256 = 32; +const TUint KAESBlockBytes = 16; + +/* CRijndael */ +EXPORT_C CRijndael::CRijndael(void) + { + } + +void CRijndael::Reset() + { + // CRijndael is externally derivable. Don't delete this code + SetKey(*iKey); + } + +TInt CRijndael::KeySize() const + { + // CRijndael is externally derivable. Don't delete this code + return (4*(iRounds+1)); + } + +EXPORT_C CRijndael::~CRijndael() + { + // CRijndael is externally derivable. Don't delete this code + delete iKey; + } + +void CRijndael::ConstructL(const TDesC8& aKey) + { + // CRijndael is externally derivable. Don't delete this code + TUint keySize = aKey.Size(); + assert((keySize==KAESKeyBytes128)||(keySize==KAESKeyBytes192)||(keySize==KAESKeyBytes256)); + iKey = aKey.AllocL(); + iRounds = keySize/4 + 6; + SetKey(aKey); + } + +void CRijndael::SetKey(const TDesC8& aKey) + { + // CRijndael is externally derivable. Don't delete this code + TUint keySize = aKey.Size(); + TUint32 temp; + TUint32* rk = &iK[0]; + + TUint i = 0; + + GetUserKeyBigEndian(rk, keySize/4, &aKey[0], keySize); + + switch(keySize) + { + case (KAESKeyBytes128): + { + FOREVER + { + temp = rk[3]; + rk[4] = rk[0] ^ + (RIJNDAEL_TABLE::Te4[GETBYTE(temp, 2)] & 0xff000000) ^ + (RIJNDAEL_TABLE::Te4[GETBYTE(temp, 1)] & 0x00ff0000) ^ + (RIJNDAEL_TABLE::Te4[GETBYTE(temp, 0)] & 0x0000ff00) ^ + (RIJNDAEL_TABLE::Te4[GETBYTE(temp, 3)] & 0x000000ff) ^ + RIJNDAEL_TABLE::rcon[i]; + rk[5] = rk[1] ^ rk[4]; + rk[6] = rk[2] ^ rk[5]; + rk[7] = rk[3] ^ rk[6]; + if (++i == 10) + break; + rk += 4; + } + } + break; + + case (KAESKeyBytes192): + { + FOREVER + { + temp = rk[ 5]; + rk[ 6] = rk[ 0] ^ + (RIJNDAEL_TABLE::Te4[GETBYTE(temp, 2)] & 0xff000000) ^ + (RIJNDAEL_TABLE::Te4[GETBYTE(temp, 1)] & 0x00ff0000) ^ + (RIJNDAEL_TABLE::Te4[GETBYTE(temp, 0)] & 0x0000ff00) ^ + (RIJNDAEL_TABLE::Te4[GETBYTE(temp, 3)] & 0x000000ff) ^ + RIJNDAEL_TABLE::rcon[i]; + rk[ 7] = rk[ 1] ^ rk[ 6]; + rk[ 8] = rk[ 2] ^ rk[ 7]; + rk[ 9] = rk[ 3] ^ rk[ 8]; + if (++i == 8) + break; + rk[10] = rk[ 4] ^ rk[ 9]; + rk[11] = rk[ 5] ^ rk[10]; + rk += 6; + } + } + break; + + case (KAESKeyBytes256): + { + FOREVER + { + temp = rk[ 7]; + rk[ 8] = rk[ 0] ^ + (RIJNDAEL_TABLE::Te4[GETBYTE(temp, 2)] & 0xff000000) ^ + (RIJNDAEL_TABLE::Te4[GETBYTE(temp, 1)] & 0x00ff0000) ^ + (RIJNDAEL_TABLE::Te4[GETBYTE(temp, 0)] & 0x0000ff00) ^ + (RIJNDAEL_TABLE::Te4[GETBYTE(temp, 3)] & 0x000000ff) ^ + RIJNDAEL_TABLE::rcon[i]; + rk[ 9] = rk[ 1] ^ rk[ 8]; + rk[10] = rk[ 2] ^ rk[ 9]; + rk[11] = rk[ 3] ^ rk[10]; + if (++i == 7) + break; + temp = rk[11]; + rk[12] = rk[ 4] ^ + (RIJNDAEL_TABLE::Te4[GETBYTE(temp, 3)] & 0xff000000) ^ + (RIJNDAEL_TABLE::Te4[GETBYTE(temp, 2)] & 0x00ff0000) ^ + (RIJNDAEL_TABLE::Te4[GETBYTE(temp, 1)] & 0x0000ff00) ^ + (RIJNDAEL_TABLE::Te4[GETBYTE(temp, 0)] & 0x000000ff); + rk[13] = rk[ 5] ^ rk[12]; + rk[14] = rk[ 6] ^ rk[13]; + rk[15] = rk[ 7] ^ rk[14]; + + rk += 8; + } + } + break; + + default: + assert(0); // Shouldn't get here, keeps compiler happy + } + } + + +/* CAESEncryptor */ +EXPORT_C CAESEncryptor* CAESEncryptor::NewL(const TDesC8& aKey) + { + return CAESEncryptorShim::NewL(aKey); + } + +EXPORT_C CAESEncryptor* CAESEncryptor::NewLC(const TDesC8& aKey) + { + return CAESEncryptorShim::NewLC(aKey); + } + +CAESEncryptor::CAESEncryptor() + { + } + +/* CAESDecryptor */ +EXPORT_C CAESDecryptor* CAESDecryptor::NewL(const TDesC8& aKey) + { + return CAESDecryptorShim::NewL(aKey); + } + +EXPORT_C CAESDecryptor* CAESDecryptor::NewLC(const TDesC8& aKey) + { + return CAESDecryptorShim::NewLC(aKey); + } + +CAESDecryptor::CAESDecryptor() + { + } + +// All these methods have been replaced by the shim +#ifdef _BullseyeCoverage +#pragma suppress_warnings on +#pragma BullseyeCoverage off +#pragma suppress_warnings off +#endif + +TInt CAESDecryptor::BlockSize() const + { + // Method replaced by shim + ASSERT(EFalse); + return 0; + } + +void CAESDecryptor::Transform(TDes8& /*aBlock*/) + { + // Method replaced by shim + ASSERT(EFalse); + } + +void CAESDecryptor::SetKey(const TDesC8& /*aKey*/) + { + // Method replaced by shim + ASSERT(EFalse); + } + +TInt CAESEncryptor::BlockSize() const + { + // Method replaced by shim + ASSERT(EFalse); + return KAESBlockBytes; + } + +void CAESEncryptor::Transform(TDes8& /*aBlock*/) + { + // Method replaced by shim + ASSERT(EFalse); + } +