--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthkeys/step_persist.cpp Tue Nov 24 09:06:03 2009 +0200
@@ -0,0 +1,146 @@
+/*
+* Copyright (c) 2005-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 <s32file.h>
+#include "tauthkeysstep.h"
+#include <f32file.h>
+
+using namespace AuthServer;
+
+CTStepPersist::CTStepPersist()
+ {
+ SetTestStepName(KTStepPersist);
+ }
+
+TVerdict CTStepPersist::doTestStepL()
+ {
+ if (TestStepResult() != EPass)
+ {
+ return TestStepResult();
+ }
+__UHEAP_MARK; // Check for memory leaks
+
+ TBool res = ETrue;
+ TBool tmp = ETrue;
+
+ iFs.CreatePrivatePath(RFs::GetSystemDrive());
+ TBuf<50> path;
+ iFs.PrivatePath(path);
+
+ _LIT(kProtFile, "prot.xxx");
+ _LIT(kTransFile, "trans.xxx");
+ _LIT8(KPluginData, "ABCDEFGHIJ");
+ _LIT(KPluginName, "PasswordPlugin");
+
+ HBufC* pluginName = HBufC::NewLC(14);
+ *pluginName = KPluginName;
+
+ // create elements
+ CTransientKeyInfo* transInfo =
+ CTransientKeyInfo::NewLC(9999);
+
+ CTransientKey* transient =
+ transInfo->CreateTransientKeyL(KPluginData);
+ CleanupStack::PushL(transient);
+
+ CProtectionKey* protection =
+ CProtectionKey::NewLC(8);
+
+ CEncryptedProtectionKey* encrypted =
+ transient->EncryptL(*protection);
+ CleanupStack::PushL(encrypted);
+
+ transInfo->SetEncryptedProtectionKeyL(encrypted);
+ CleanupStack::Pop(encrypted);
+
+ // write the encrypted key
+ RFileWriteStream writeProt;
+
+ path.Insert(path.Length(), kProtFile);
+ User::LeaveIfError(writeProt.Replace(iFs, path,
+ EFileShareExclusive | EFileStream));
+ CleanupClosePushL(writeProt);
+
+ encrypted->ExternalizeL(writeProt);
+
+ CleanupStack::PopAndDestroy(&writeProt);
+
+ // read the encrypted key
+ RFileReadStream readStream;
+
+ User::LeaveIfError(readStream.Open(iFs, path,
+ EFileShareExclusive | EFileStream));
+ CleanupClosePushL(readStream);
+
+ CEncryptedProtectionKey* encrypted2 =
+ CEncryptedProtectionKey::NewL(readStream);
+ CleanupStack::PushL(encrypted2);
+
+ // test the restored key matches the saved
+ TEST(tmp = (encrypted->KeyData() == encrypted2->KeyData()));
+ res = tmp && res;
+
+ // write the transient key info
+ RFileWriteStream writeTrans;
+
+ iFs.PrivatePath(path);
+ path.Insert(path.Length(), kTransFile);
+ User::LeaveIfError(writeTrans.Replace(iFs, path,
+ EFileShareExclusive | EFileStream));
+ CleanupClosePushL(writeTrans);
+
+ transInfo->ExternalizeL(writeTrans);
+
+ CleanupStack::PopAndDestroy(&writeTrans);
+
+ // read the transient key info
+ RFileReadStream readStream2;
+
+ User::LeaveIfError(readStream2.Open(iFs, path,
+ EFileShareExclusive | EFileStream));
+ CleanupClosePushL(readStream2);
+
+ CTransientKeyInfo* transInfo2 =
+ CTransientKeyInfo::NewL(readStream2);
+ CleanupStack::PushL(transInfo2);
+
+ // recreate the transient key
+ CTransientKey* transient2 =
+ transInfo2->CreateTransientKeyL(KPluginData);
+ CleanupStack::PushL(transient2);
+
+ // recreate the protection key.
+ CProtectionKey* decrypted =
+ transient2->DecryptL(transInfo2->EncryptedKey());
+ CleanupStack::PushL(decrypted);
+
+ // test that the protection key and decrypted key are the same
+ TEST(tmp = (protection->KeyData() == decrypted->KeyData()));
+ res = tmp && res;
+
+ SetTestStepResult(res ? EPass : EFail);
+
+ CleanupStack::PopAndDestroy(9, transInfo);
+ CleanupStack::PopAndDestroy(pluginName);
+
+ iFs.Delete(path);
+
+__UHEAP_MARKEND;
+ return TestStepResult();
+ }
+