Below is the supporting code for the secure store example code .
#include "e32std.h" #include "f32file.h" #include "s32file.h" #include "pbe.h" #include "pbedata.h" #include "s32crypt.h"
/* * Class to demonstrate the use of secure store APIs. */ class CSecureStoreExample : public CBase { public: static CSecureStoreExample* NewLC(const TDesC& aFilename); virtual ~CSecureStoreExample(); void CreateNewStoreL(const TDesC& aPassword); TStreamId WriteEncryptedDataL(const TDesC8& aInput); void OpenExistingStoreL(const TDesC& aPassword); HBufC8* ReadEncryptedDataLC(TStreamId aStreamId); void CloseStore(); void ChangePasswordL(const TDesC& aNewPassword); private: CSecureStoreExample(const TDesC& aFilename); void ConstructL(); private: RFs iFs; const TDesC& iFilename; CPermanentFileStore* iFileStore; CPBEncryptSet* iEncryptSet; CSecureStore* iSecureStore; };
CSecureStoreExample* CSecureStoreExample::NewLC(const TDesC& aFilename) { CSecureStoreExample* self = new (ELeave) CSecureStoreExample(aFilename); CleanupStack::PushL(self); self->ConstructL(); return self; } CSecureStoreExample::CSecureStoreExample(const TDesC& aFilename) : iFilename(aFilename) { } void CSecureStoreExample::ConstructL() { User::LeaveIfError(iFs.Connect()); } CSecureStoreExample::~CSecureStoreExample() { CloseStore(); iFs.Close(); }
LOCAL_D void RunPBEExampleL() { _LIT(KFilename, "c:\\pbe_example_data.dat"); _LIT8(KInputData, "This is the data to be encrypted."); _LIT(KPassword, "pa55w0rd"); _LIT(KNewPassword, "chang3m3"); CSecureStoreExample* main = CSecureStoreExample::NewLC(KFilename); // Create a secure store and write some data to it main->CreateNewStoreL(KPassword); TStreamId streamId = main->WriteEncryptedDataL(KInputData); main->CloseStore(); // Open it again, and read the data back out main->OpenExistingStoreL(KPassword); HBufC8* outputData = main->ReadEncryptedDataLC(streamId); ASSERT(*outputData == KInputData); CleanupStack::PopAndDestroy(outputData); // Change the password main->ChangePasswordL(KNewPassword); // Check we can still read the data outputData = main->ReadEncryptedDataLC(streamId); ASSERT(*outputData == KInputData); main->CloseStore(); CleanupStack::PopAndDestroy(2, main); }
GLDEF_C TInt E32Main() // main function called by E32 { __UHEAP_MARK; CTrapCleanup* cleanup = CTrapCleanup::New(); // get clean-up stack TRAPD(error, RunPBEExampleL()); __ASSERT_ALWAYS(!error,User::Panic(_L("pbe_example_code"),error)); delete cleanup; // destroy clean-up stack __UHEAP_MARKEND; return 0; }
Copyright ©2010 Nokia Corporation and/or its subsidiary(-ies).
All rights
reserved. Unless otherwise stated, these materials are provided under the terms of the Eclipse Public License
v1.0.