persistentstorage/store/UCRYPT/UE_STOR.CPP
changeset 0 08ec8eefde2f
--- /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 <pbe.h>
+
+#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();
+	}