diff -r cd501b96611d -r ece3df019add authenticationservices/authenticationserver/test/tauthkeys/step_persist.cpp --- /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 +#include "tauthkeysstep.h" +#include + +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(); + } +