crypto/weakcrypto/source/symmetric/bufferedtransformation.cpp
branchRCL_3
changeset 62 a71299154b21
parent 61 641f389e9157
child 63 94225563cd41
--- a/crypto/weakcrypto/source/symmetric/bufferedtransformation.cpp	Tue Aug 31 17:00:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,232 +0,0 @@
-/*
-* 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 "bufferedtransformation.h"
-#include "blocktransformation.h"
-#include "padding.h"
-#include "../common/inlines.h"
-#include <cryptopanic.h>
-
-EXPORT_C CBufferedTransformation::~CBufferedTransformation()
-	{
-	delete iBT;
-	delete iPadding;
-	delete iInputStoreBuf;
-	}
-
-void CBufferedTransformation::Process(const TDesC8& aInput, TDes8& aOutput)
-	{
-	__ASSERT_DEBUG(aOutput.MaxLength() >= MaxOutputLength(aInput.Length()), User::Panic(KCryptoPanic, ECryptoPanicOutputDescriptorOverflow));
-
-	TInt blockSize = iBT->BlockSize();
-
-	if ( (aInput.Size() + iInputStore.Size()) < blockSize )
-		{
-		iInputStore.Append(aInput);
-		}
-	else
-		{
-		TInt outputIndex = aOutput.Size();
-		aOutput.Append(iInputStore);
-
-		TInt inputIndex = blockSize - iInputStore.Size();
-		aOutput.Append(aInput.Mid(0, inputIndex));
-
-		TPtr8 transformBuf((TUint8*)(aOutput.Ptr()) + outputIndex, blockSize,
-			blockSize);
-		//This should read: 
-		//TPtr8 transformBuf(aOutput.Mid(outputIndex, blockSize));
-		//but in the wonderful world of descriptors, Mid returns a TPtrC8 even
-		//when called on a TPtr8.  Fantastic eh?
-		iBT->Transform(transformBuf);
-
-		outputIndex += blockSize;
-
-		TInt len = aInput.Size() - blockSize;
-
-		for (; inputIndex<=len; inputIndex+=blockSize)
-			{
-			aOutput.Append(aInput.Mid(inputIndex, blockSize));			
-			transformBuf.Set((TUint8*)(aOutput.Ptr()) + outputIndex, blockSize,
-				blockSize);
-			iBT->Transform(transformBuf);
-			outputIndex += blockSize;
-			}
-
-		iInputStore.Zero();
-		if (inputIndex < aInput.Size())
-			iInputStore.Append(aInput.Mid(inputIndex));
-		}
-	}
-
-TInt CBufferedTransformation::MaxOutputLength(TInt aInputLength) const
-	{
-	TInt rem = (aInputLength + iInputStore.Size()) % (iBT->BlockSize());
-	return ((aInputLength + iInputStore.Size()) - rem);
-	}
-
-void CBufferedTransformation::Reset()
-	{
-	iBT->Reset();
-	iInputStore.Zero();
-	}
-
-TInt CBufferedTransformation::BlockSize() const
-	{
-	return (iBT->BlockSize());
-	}
-
-TInt CBufferedTransformation::KeySize() const
-	{
-	return (iBT->KeySize());
-	}
-
-EXPORT_C CBlockTransformation* CBufferedTransformation::BlockTransformer() const
-{
-	return (iBT);
-}
-
-CBufferedTransformation::CBufferedTransformation()
-	: iInputStore(0,0,0)
-	{
-	}
-
-void CBufferedTransformation::ConstructL(CBlockTransformation* aBT, CPadding* aPadding)
-	{
-	iInputStoreBuf = HBufC8::NewL(aBT->BlockSize());
-	iInputStore.Set(iInputStoreBuf->Des());
-
-	// Take ownership last - doesn't take ownership if we leave
-	iBT = aBT;
-	iPadding = aPadding;
-	}
-
-
-// CBufferedEncryptor
-
-EXPORT_C CBufferedEncryptor* CBufferedEncryptor::NewL(
-	CBlockTransformation* aBT, CPadding* aPadding)
-	{
-	CBufferedEncryptor* self = NewLC(aBT,aPadding);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-EXPORT_C CBufferedEncryptor* CBufferedEncryptor::NewLC(
-	CBlockTransformation* aBT, CPadding* aPadding)
-	{
-	CBufferedEncryptor* self = new (ELeave) CBufferedEncryptor();
-	CleanupStack::PushL(self);
-	self->ConstructL(aBT, aPadding);
-	return self;
-	}
-
-CBufferedEncryptor::CBufferedEncryptor()
-	{
-	}
-
-void CBufferedEncryptor::ProcessFinalL(const TDesC8& aInput, TDes8& aOutput)
-	{
-	__ASSERT_DEBUG(aOutput.MaxLength() >= MaxFinalOutputLength(aInput.Length()), User::Panic(KCryptoPanic, ECryptoPanicOutputDescriptorOverflow));
-	Process(aInput, aOutput);
-	
-	TInt outputIndex = aOutput.Size();
-	iPadding->PadL(iInputStore, aOutput);
-	assert(aOutput.Size() % iBT->BlockSize() == 0);
-
-	TUint blockSize = iBT->BlockSize();
-	TInt len = aOutput.Size() - outputIndex;
-	
-	for(TInt i=len; i>0; i-=blockSize)
-		{
-		TPtr8 transformBuf((TUint8*)(aOutput.Ptr()) + outputIndex, blockSize,
-			blockSize);
-		iBT->Transform(transformBuf);
-		outputIndex+=blockSize;
-		}
-
-	iInputStore.Zero();
-	}
-
-TInt CBufferedEncryptor::MaxFinalOutputLength(TInt aInputLength) const
-	{
-    return iPadding->MaxPaddedLength(iInputStore.Size() + aInputLength);
-	}
-
-// CBufferedDecryptor
-
-EXPORT_C CBufferedDecryptor* CBufferedDecryptor::NewL(
-	CBlockTransformation* aBT, CPadding* aPadding)
-	{
-	CBufferedDecryptor* self = NewLC(aBT,aPadding);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-EXPORT_C CBufferedDecryptor* CBufferedDecryptor::NewLC(
-	CBlockTransformation* aBT, CPadding* aPadding)
-	{
-	CBufferedDecryptor* self = new (ELeave) CBufferedDecryptor();
-	CleanupStack::PushL(self);
-	self->ConstructL(aBT, aPadding);
-	return self;
-	}
-
-CBufferedDecryptor::CBufferedDecryptor()
-	{
-	}
-
-void CBufferedDecryptor::ProcessFinalL(const TDesC8& aInput, TDes8& aOutput)
-	{
-	__ASSERT_DEBUG(aOutput.MaxLength() >= MaxFinalOutputLength(aInput.Length()), User::Panic(KCryptoPanic, ECryptoPanicOutputDescriptorOverflow));
-
-	assert((aInput.Size() + iInputStore.Size()) % iPadding->BlockSize()==0);
-	assert(aInput.Size() + iInputStore.Size() !=0 );
-	assert(iPadding->BlockSize() % BlockSize() == 0);
-	//1) Decrypt into aOutput up till the last full _padding_ blocksize
-	//If this panics with descriptor problems, you've probably called
-	//ProcessFinalL with a non-_padding_ blocksized aligned amount of data.
-	TInt lenToDecrypt = aInput.Size() - iPadding->BlockSize();
-	if(lenToDecrypt > 0)
-		{
-		Process(aInput.Left(lenToDecrypt), aOutput);
-		assert(iInputStore.Size()==0);
-		}
-	else
-		{
-		lenToDecrypt = 0;
-		}
-	
-	//2) Decrypt the last _padding_ blocksize into a new buffer
-	HBufC8* padBuf = HBufC8::NewLC(iPadding->BlockSize());
-	TPtr8 padPtr = padBuf->Des(); 
-	Process(aInput.Mid(lenToDecrypt), padPtr);
-	assert(iInputStore.Size()==0);
-		
-	//3) Unpad that last _padding_ blocksize into aOutput
-	// Note that padding systems must always, like everything else in crypto,
-	// _append_ data.
-	iPadding->UnPadL(padPtr, aOutput);
-
-	CleanupStack::PopAndDestroy(padBuf);
-	}
-
-TInt CBufferedDecryptor::MaxFinalOutputLength(TInt aInputLength) const
-	{
-	return iPadding->MaxUnPaddedLength(aInputLength + iInputStore.Size());
-	}