diff -r 000000000000 -r 08ec8eefde2f persistentstorage/store/UCRYPT/UE_STOR.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/persistentstorage/store/UCRYPT/UE_STOR.CPP Fri Jan 22 11:06:30 2010 +0200 @@ -0,0 +1,142 @@ +// 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 + +#ifndef __TOOLS2__ +#include "pbencryptor.h" +#endif + + +EXPORT_C CSecureStore* CSecureStore::NewL(CStreamStore& aHost,const CPBEncryptSet& aKey) +/** +Instantiates a secure store. + +@leave KErrNoMemory +@param aHost The stream store acting as host for the secure store's streams. +@param aKey A Password Based Encryption Object used to generate decryption and encryption +handling objects. Ownership of this object remains with the caller who should delete it when it is no longer needed. + +@return A pointer to the new secure store object. +*/ + { + return new(ELeave) CSecureStore(aHost,aKey); + } + +EXPORT_C CSecureStore* CSecureStore::NewLC(CStreamStore& aHost,const CPBEncryptSet& aKey) +/** +Instantiates a secure store and pushes a pointer to the object onto the cleanup stack. + +@leave KErrNoMemory +@param aHost The stream store acting as host for the secure store's streams. +@param aKey A Password Based Encryption Object used to generate decryption and encryption +handling objects. Ownership of this object remains with the caller who should delete it when it is no longer needed. + +@return A pointer to the new secure store object. +*/ + { + CSecureStore* store=NewL(aHost,aKey); + CleanupStack::PushL(store); + return store; + } + +// Not exported +CSecureStore::CSecureStore(CStreamStore& aHost,const CPBEncryptSet& aKey) + : iHost(&aHost), + iKey(aKey) + {} + +// +// Open a stream for reading from the buffer at anId. +// +EXPORT_C MStreamBuf* CSecureStore::DoReadL(TStreamId anId) const + { + HDecryptFilter* filter=new(ELeave) HDecryptFilter; + CleanupDeletePushL(filter); + RStoreReadStream stream; + stream.OpenLC(Host(),anId); + + CPBDecryptor* decryptor=iKey.NewDecryptLC(); + filter->SetL(stream.Source(),decryptor,filter->ERead|filter->EAttached); + + CleanupStack::Pop(3, filter); // decryptor, stream, filter + return filter; + } + +// Determine key type and create appropriate encryptor +void CSecureStore::setEncryptFilterL(HEncryptFilter& aFilter, RStoreWriteStream& aStream) + { + CPBEncryptor* encryptor=iKey.NewEncryptLC(); + aFilter.SetL(aStream.Sink(),encryptor,aFilter.EWrite|aFilter.EAttached); + CleanupStack::Pop(encryptor); + } + +// +// Create a new buffer and open a stream for writing to it. +// +EXPORT_C MStreamBuf* CSecureStore::DoCreateL(TStreamId& anId) + { + HEncryptFilter* filter=new(ELeave) HEncryptFilter; + CleanupDeletePushL(filter); + RStoreWriteStream stream; + anId=stream.CreateLC(Host()); + setEncryptFilterL(*filter, stream); + CleanupStack::Pop(2); // stream, filter + return filter; + } + +EXPORT_C TStreamId CSecureStore::DoExtendL() + { + return Host().ExtendL(); + } + +EXPORT_C void CSecureStore::DoDeleteL(TStreamId anId) + { + Host().DeleteL(anId); + } + +EXPORT_C MStreamBuf* CSecureStore::DoWriteL(TStreamId anId) + { + HEncryptFilter* filter=new(ELeave) HEncryptFilter; + CleanupDeletePushL(filter); + RStoreWriteStream stream; + stream.OpenLC(Host(), anId); + setEncryptFilterL(*filter, stream); + CleanupStack::Pop(2); // stream, filter + return filter; + } + +EXPORT_C MStreamBuf* CSecureStore::DoReplaceL(TStreamId anId) + { + HEncryptFilter* filter=new(ELeave) HEncryptFilter; + CleanupDeletePushL(filter); + RStoreWriteStream stream; + stream.ReplaceLC(Host(), anId); + setEncryptFilterL(*filter, stream); + CleanupStack::Pop(2); // stream, filter + return filter; + } + +EXPORT_C void CSecureStore::DoCommitL() + { + Host().CommitL(); + } + +EXPORT_C void CSecureStore::DoRevertL() + { + Host().RevertL(); + }