diff -r 000000000000 -r 08ec8eefde2f persistentstorage/store/UCRYPT/UE_STRM.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/persistentstorage/store/UCRYPT/UE_STRM.CPP Fri Jan 22 11:06:30 2010 +0200 @@ -0,0 +1,378 @@ +// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "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 "UE_STD.H" + +#include + +#define PBEDATA_NO_EXPORTED_CONSTRUCTORS +#include + + + + + +EXPORT_C void RDecryptStream::OpenL(RReadStream& aHost,const CPBEncryptionBase& aKey) +/** +Open a decrypting read stream to aHost. +Prepares the source stream owned by the specified read stream interface object for +reading through a decrypting filter. +@publishedPartner +@leave KErrNoMemory +@param aHost The read stream interface object for the source stream. +This function does not take ownership of the source stream. +@param aKey A Password Based Encryption object for encryption handling. +*/ + { + CPBDecryptor* decryptor = aKey.NewDecryptLC(); + iFilter.SetL(aHost.Source(),decryptor,iFilter.ERead); + CleanupStack::Pop(decryptor); + RReadStream::Attach(&iFilter); + } + +EXPORT_C void RDecryptStream::OpenLC(RReadStream& aHost,const CPBEncryptionBase& aKey) +/** +Open a decrypting read stream to aHost. +Prepares the source stream owned by the specified read stream interface object for +reading through a decrypting filter, and puts a cleanup item onto the cleanup stack. +@publishedPartner +@leave KErrNoMemory +@param aHost The read stream interface object for the source stream. +This function does not take ownership of the source stream. +@param aKey A Password Based Encryption object for encryption handling. +*/ +{ + OpenL(aHost,aKey); + PushL(); + } + +EXPORT_C void RDecryptStream::AttachL(RReadStream& aHost,const CPBEncryptionBase& aKey) +/** +Attach a decrypting read stream to aHost. +Takes ownership of the source stream owned by the specified read stream interface object, +and prepares the stream for reading through a decrypting filter. +@publishedPartner +@leave KErrNoMemory +@param aHost The read stream interface object for the source stream. +@param aKey A Password Based Encryption object for encryption handling. +*/ { + AttachLC(aHost,aKey); + CleanupStack::Pop(); + } + +EXPORT_C void RDecryptStream::AttachLC(RReadStream& aHost,const CPBEncryptionBase& aKey) +/** +Attach a decrypting read stream to aHost. +Takes ownership of the source stream owned by the specified read stream interface object, +prepares the stream for reading through a decrypting filter, and puts a cleanup item onto the cleanup stack. +@publishedPartner +@leave KErrNoMemory +@param aHost The read stream interface object for the source stream. +@param aKey A Password Based Encryption object for encryption handling. +*/ { + MStreamBuf* host=aHost.Source(); + aHost=RReadStream(); + RReadStream::Attach(host); // initial cleanup via this + PushL(); + + CPBDecryptor* decryptor = aKey.NewDecryptLC(); + iFilter.SetL(host,decryptor,iFilter.ERead|iFilter.EAttached); + CleanupStack::Pop(decryptor); + + RReadStream::Attach(&iFilter); + } + +////////////////////////////////////////////////////////////////////////////// + + + + + +EXPORT_C void REncryptStream::OpenL(RWriteStream& aHost,const CPBEncryptionBase& aKey) +/** +Open an encrypting write stream over aHost. +Prepares the target stream owned by the specified write stream interface object for +writing through an encrypting filter. +@publishedPartner +@leave KErrNoMemory +@param aHost The write stream interface object for the target stream. The function does not take ownership of the target stream. +@param aKey A Password Based Encryption object for encryption handling. +*/ + { + CPBEncryptor* encryptor = aKey.NewEncryptLC(); + iFilter.SetL(aHost.Sink(),encryptor,iFilter.EWrite); + CleanupStack::Pop(encryptor); + RWriteStream::Attach(&iFilter); + } + +EXPORT_C void REncryptStream::OpenLC(RWriteStream& aHost,const CPBEncryptionBase& aKey) +/** +Open an encrypting write stream over aHost. +Prepares the target stream owned by the specified write stream interface object for +writing through an encrypting filter and puts a cleanup item onto the cleanup stack. +@publishedPartner +@leave KErrNoMemory +@param aHost The write stream interface object for the target stream. The function does not take ownership of the target stream. +@param aKey A Password Based Encryption object for encryption handling. +*/ + { + OpenL(aHost,aKey); + PushL(); + } + +EXPORT_C void REncryptStream::AttachL(RWriteStream& aHost,const CPBEncryptionBase& aKey) +/** +Attach an encrypting write stream to aHost. +Takes ownership of the target stream owned by the specified write stream interface object, +and prepares the stream for writing through an encrypting filter. +@publishedPartner +@leave KErrNoMemory +@param aHost The write stream interface object for the target stream +@param aKey A Password Based Encryption object for encryption handling. +*/ + { + AttachLC(aHost,aKey); + CleanupStack::Pop(); + } + +EXPORT_C void REncryptStream::AttachLC(RWriteStream& aHost,const CPBEncryptionBase& aKey) +/** +Attach an encrypting write stream to aHost. +Takes ownership of the target stream owned by the specified write stream interface object, +prepares the stream for writing through an encrypting filter, and puts a cleanup item onto the cleanup stack. +@publishedPartner +@leave KErrNoMemory +@param aHost The write stream interface object for the target stream +@param aKey A Password Based Encryption object for encryption handling. +*/ + { + MStreamBuf* host=aHost.Sink(); + aHost=RWriteStream(); + RWriteStream::Attach(host); // initial cleanup via this + PushL(); + + CPBEncryptor* encryptor = aKey.NewEncryptLC(); + iFilter.SetL(host,encryptor,iFilter.EWrite|iFilter.EAttached); + CleanupStack::Pop(encryptor); + + RWriteStream::Attach(&iFilter); + } + +///////////////////////////////////////////////////////////////////////// +// PBE data methods that depend on store, prevents static dependency +///////////////////////////////////////////////////////////////////////// + +// CPBEncryptionData + +// HPRE-5TDFK2: Remove Store/estor.dll dependency on Cryptography/pbe.dll +// This method is DUPLICATED in common/generic/security/crypto/source/pbe/pbedata.cpp +CPBEncryptionData::CPBEncryptionData(void) + { + } + +// HPRE-5TDFK2: Remove Store/estor.dll dependency on Cryptography/pbe.dll +// This method is DUPLICATED in common/generic/security/crypto/source/pbe/pbedata.cpp +CPBEncryptionData::~CPBEncryptionData(void) + { + delete iParms; + delete iAuth; + } + +EXPORT_C CPBEncryptionData* CPBEncryptionData::NewL(RReadStream& aStream) + { + CPBEncryptionData* self = NewLC(aStream); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CPBEncryptionData* CPBEncryptionData::NewLC(RReadStream& aStream) + { + CPBEncryptionData* self = new(ELeave)CPBEncryptionData(); + CleanupStack::PushL(self); + self->ConstructL(aStream); + return self; + } + +void CPBEncryptionData::ConstructL(RReadStream& aStream) + { + iAuth = CPBAuthData::NewL(aStream); + iParms = CPBEncryptParms::NewL(aStream); + } + +EXPORT_C void CPBEncryptionData::ExternalizeL(RWriteStream& aStream) const + { + iAuth->ExternalizeL(aStream); + iParms->ExternalizeL(aStream); + } + +// CPBEncryptParms + +// HPRE-5TDFK2: Remove Store/estor.dll dependency on Cryptography/pbe.dll +// This method is DUPLICATED in common/generic/security/crypto/source/pbe/pbedata.cpp +CPBEncryptParms::CPBEncryptParms() + { + } + +// HPRE-5TDFK2: Remove Store/estor.dll dependency on Cryptography/pbe.dll +// This method is DUPLICATED in common/generic/security/crypto/source/pbe/pbedata.cpp +CPBEncryptParms::~CPBEncryptParms() + { +#ifdef SYMBIAN_PKCS12 + delete iData; +#endif // #ifdef SYMBIAN_PKCS12 + delete iSalt; + delete iIV; + } + +EXPORT_C CPBEncryptParms* CPBEncryptParms::NewL(RReadStream& aStream) + { + CPBEncryptParms* self = NewLC(aStream); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CPBEncryptParms* CPBEncryptParms::NewLC(RReadStream& aStream) + { + CPBEncryptParms* self = new(ELeave)CPBEncryptParms(); + CleanupStack::PushL(self); + self->ConstructL(aStream); + return self; + } + +#ifdef SYMBIAN_PKCS12 + +void CPBEncryptParms::ConstructL(RReadStream& aStream) + { + iData = new(ELeave) TParamsData; + + TCardinality cipher; + aStream >> cipher; + TInt32 cipherInt32 = (TInt32) cipher; + iData->iCipher = (TPBECipher)(cipherInt32 & ~KBit16); + + // if bit 16 of the stored cipher is set, then a KDF + // follows. (This preserves data compatability.) + if ((cipherInt32 & KBit16) == 0) + iData->iKdf = EKdfPkcs5; + else + { + TInt32 kdf; + aStream >> kdf; + iData->iKdf = (TKdf) kdf; + } + + iSalt = HBufC8::NewL(aStream, KMaxTInt); + + TCardinality iterations; + aStream >> iterations; + iIterations = iterations; + + iIV = HBufC8::NewL(aStream, KMaxTInt); + } + +#else + +void CPBEncryptParms::ConstructL(RReadStream& aStream) + { + TCardinality cipher; + aStream >> cipher; + iCipher = (TPBECipher)((TUint)(cipher)); + + iSalt = HBufC8::NewL(aStream, KMaxTInt); + + TCardinality iterations; + aStream >> iterations; + iIterations = iterations; + + iIV = HBufC8::NewL(aStream, KMaxTInt); + } + +#endif // #else #ifdef SYMBIAN_PKCS12 + +#ifdef SYMBIAN_PKCS12 + +EXPORT_C void CPBEncryptParms::ExternalizeL(RWriteStream& aStream) const + { + TUint32 cipherInt32 = iData->iCipher; + if (iData->iKdf != EKdfPkcs5) + cipherInt32 |= KBit16; + aStream << TCardinality(cipherInt32); + + if (iData->iKdf != EKdfPkcs5) + aStream << (TInt32) iData->iKdf; + + aStream << *iSalt; + aStream << TCardinality(iIterations); + aStream << *iIV; + } + +#else + +EXPORT_C void CPBEncryptParms::ExternalizeL(RWriteStream& aStream) const + { + aStream << TCardinality((TUint)iCipher); + aStream << *iSalt; + aStream << TCardinality(iIterations); + aStream << *iIV; + } + +#endif // #else #ifdef SYMBIAN_PKCS12 + +// CPBAuthData + +// HPRE-5TDFK2: Remove Store/estor.dll dependency on Cryptography/pbe.dll +// This method is DUPLICATED in common/generic/security/crypto/source/pbe/pbedata.cpp +CPBAuthData::CPBAuthData() + { + } + +// HPRE-5TDFK2: Remove Store/estor.dll dependency on Cryptography/pbe.dll +// This method is DUPLICATED in common/generic/security/crypto/source/pbe/pbedata.cpp +CPBAuthData::~CPBAuthData() + { + delete iAuthKey; + delete iSalt; + } + +EXPORT_C CPBAuthData* CPBAuthData::NewL(RReadStream& aStream) + { + CPBAuthData* self = NewLC(aStream); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CPBAuthData* CPBAuthData::NewLC(RReadStream& aStream) + { + CPBAuthData* self = new(ELeave)CPBAuthData(); + CleanupStack::PushL(self); + self->ConstructL(aStream); + return self; + } + +void CPBAuthData::ConstructL(RReadStream& aStream) + { + iAuthKey = HBufC8::NewL(aStream, KMaxTInt); + iSalt = HBufC8::NewL(aStream, KMaxTInt); + TCardinality iterations; + aStream >> iterations; + iIterations = iterations; + } + +EXPORT_C void CPBAuthData::ExternalizeL(RWriteStream& aStream) const + { + aStream << *iAuthKey; + aStream << *iSalt; + aStream << TCardinality(iIterations); + }