diff -r 641f389e9157 -r a71299154b21 crypto/weakcrypto/source/pbe/pbencryptorset.cpp --- a/crypto/weakcrypto/source/pbe/pbencryptorset.cpp Tue Aug 31 17:00:08 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,217 +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 -#include - -#include "pbencryptor.h" -#include "pbesymmetricfactory.h" - -#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS -/** The maximum block size supported (in bytes) */ -const TUint KMaxBlockSizeSupported = 32; -#endif - -EXPORT_C CPBEncryptorSet* CPBEncryptorSet::NewL( - const TPBECipher aCipher, const TDesC8& aKey) - { - CPBEncryptorSet* self = NewLC(aCipher, aKey); - CleanupStack::Pop(); - return self; - } - -EXPORT_C CPBEncryptorSet* CPBEncryptorSet::NewLC( - const TPBECipher aCipher, const TDesC8& aKey) - { - CPBEncryptorSet* self = new(ELeave) CPBEncryptorSet; - CleanupStack::PushL(self); - - self->ConstructL(aCipher, aKey); - - return self; - } - -void CPBEncryptorSet::ConstructL(const TPBECipher aCipher,const TDesC8& aKey) - { - TInt blocksize = PBE::GetBlockBytes(aCipher); - iIV = HBufC8::NewMaxL(blocksize); - TPtr8 iv = iIV->Des(); - TRandom::RandomL(iv); - - iCipher = PBE::MakeEncryptorL(aCipher, aKey, iv); - } - -void CPBEncryptorSet::Process(const TDesC8& aInput, TDes8& aOutput) - { - if(!iIVSent) - { - aOutput.Append(*iIV); - iIVSent = ETrue; - } - iCipher->Process(aInput, aOutput); - } - -void CPBEncryptorSet::ProcessFinalL(const TDesC8& aInput, - TDes8& aOutput) - { - if(!iIVSent) - { - aOutput.Append(*iIV); - iIVSent = ETrue; - } - - iCipher->ProcessFinalL(aInput, aOutput); - } - - -CPBEncryptorSet::CPBEncryptorSet() : iIVSent(EFalse) - { - } - -CPBEncryptorSet::~CPBEncryptorSet() - { - delete iIV; - delete iCipher; // Don't delete iCBCDecryptor, this belongs to iCipher - } - -TInt CPBEncryptorSet::MaxOutputLength(TUint aMaxInputLength) const - { - if(iIVSent) - { - return (iCipher->MaxOutputLength(aMaxInputLength)); - } - else - {// If we've not sent the iv yet then its the length - // from the cipher plus a blocksize for the iv - return (iCipher->MaxOutputLength(aMaxInputLength + iCipher->BlockSize())); - } - } - -TInt CPBEncryptorSet::MaxFinalOutputLength(TUint aMaxInputLength) const - { - if(iIVSent) - { - return (iCipher->MaxFinalOutputLength(aMaxInputLength)); - } - else - {// If we've not sent the iv yet then its the length - // from the cipher plus a blocksize for the iv - return (iCipher->MaxFinalOutputLength(aMaxInputLength + iCipher->BlockSize())); - } - } - -EXPORT_C CPBDecryptorSet* CPBDecryptorSet::NewL(const TPBECipher aCipher, - const TDesC8& aKey) - { - CPBDecryptorSet* self = NewLC(aCipher, aKey); - CleanupStack::Pop(); - return self; - } - -EXPORT_C CPBDecryptorSet* CPBDecryptorSet::NewLC(const TPBECipher aCipher, - const TDesC8& aKey) - { - CPBDecryptorSet* self = new(ELeave) CPBDecryptorSet; - CleanupStack::PushL(self); - TBuf8 fakeIV; - fakeIV.SetLength(PBE::GetBlockBytes(aCipher)); - self->ConstructL(aCipher, aKey, fakeIV); - return self; - } - -void CPBDecryptorSet::ConstructL(const TPBECipher aCipher, - const TDesC8& aKey, const TDesC8& aIV) - { - iCipher = PBE::MakeDecryptorL(aCipher, aKey, aIV); - iIVBuf = HBufC8::NewL(PBE::GetBlockBytes(aCipher)); - } - -void CPBDecryptorSet::Process(const TDesC8& aInput, TDes8& aOutput) - { - TPtrC8 input = ProcessIV(aInput); - iCipher->Process(input, aOutput); - } - -void CPBDecryptorSet::ProcessFinalL(const TDesC8& aInput, TDes8& aOutput) - { - TPtrC8 input = ProcessIV(aInput); - iCipher->ProcessFinalL(input, aOutput); - } - -TPtrC8 CPBDecryptorSet::ProcessIV(const TDesC8& aInput) - { - if(!iIVSent) - { - TPtr8 iIVBufPtr(iIVBuf->Des()); - if(aInput.Length() + iIVBufPtr.Length() < iCipher->BlockSize()) - { - iIVBufPtr.Append(aInput); - return TPtrC8(); - } - else - { - TInt rem = iCipher->BlockSize() - iIVBufPtr.Length(); - iIVBufPtr.Append(aInput.Mid(0, rem)); - CBufferedDecryptor* blockDecryptor = static_cast(iCipher); - static_cast(blockDecryptor->BlockTransformer())->SetIV(iIVBufPtr); - iIVSent = ETrue; - return aInput.Mid(rem); - } - } - else - { - return aInput; - } - } - -CPBDecryptorSet::CPBDecryptorSet() : iIVSent(EFalse) - { - } - -CPBDecryptorSet::~CPBDecryptorSet() - { - delete iCipher; - //iCipher owns iCBCDecryptor we _don't_ need to delete it - delete iIVBuf; - } - -TInt CPBDecryptorSet::MaxOutputLength(TUint aMaxInputLength) const - { - if(iIVSent) - { - return (iCipher->MaxOutputLength(aMaxInputLength)); - } - else // if we haven't sent the iv yet, then the length the max length of the - { // cipher minus a BlockSize where the IV was sitting (as the iv would be part - // of the length they've sent us) - return (iCipher->MaxOutputLength(aMaxInputLength - iCipher->BlockSize())); - } - } - -TInt CPBDecryptorSet::MaxFinalOutputLength(TUint aMaxInputLength) const - { - if(iIVSent) - { - return (iCipher->MaxFinalOutputLength(aMaxInputLength)); - } - else // if we haven't sent the iv yet, then the length the max length of the - { // cipher minus a BlockSize where the IV was sitting (as the iv would be part - // of the length they've sent us) - return (iCipher->MaxFinalOutputLength(aMaxInputLength - iCipher->BlockSize())); - } - }