--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthkeys/step_encryptkey.cpp Tue Nov 24 09:06:03 2009 +0200
@@ -0,0 +1,134 @@
+/*
+* 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"
+
+using namespace AuthServer;
+
+CTStepEncryptKey::CTStepEncryptKey()
+ {
+ SetTestStepName(KTStepEncryptKey);
+ }
+
+TVerdict CTStepEncryptKey::doTestStepL()
+ {
+ if (TestStepResult() != EPass)
+ {
+ return TestStepResult();
+ }
+__UHEAP_MARK; // Check for memory leaks
+
+ TBool res = ETrue;
+ TBool tmp = ETrue;
+ TInt err = KErrNone;
+
+
+ _LIT8(KPluginData, "ABCDEFGHIJ");
+ _LIT8(KBadPluginData, "KLMNOPQRST");
+ _LIT(KPluginName, "PasswordPlugin");
+
+ HBufC* pluginName = HBufC::NewLC(14);
+
+ *pluginName = KPluginName;
+
+ CTransientKeyInfo* transInfo =
+ CTransientKeyInfo::NewLC(9999);
+
+ CTransientKey* transient =
+ transInfo->CreateTransientKeyL(KPluginData);
+ CleanupStack::PushL(transient);
+
+ CProtectionKey* protection =
+ CProtectionKey::NewL(8);
+ CleanupStack::PushL(protection);
+
+ CEncryptedProtectionKey* encrypted =
+ transient->EncryptL(*protection);
+
+ transInfo->SetEncryptedProtectionKeyL(encrypted);
+
+ // try to set another key
+ TRAP(err, transInfo->SetEncryptedProtectionKeyL(encrypted));
+ TEST(tmp = (err == KErrAlreadyExists));
+ res = tmp && res;
+
+ // check the encrypted key is different from the protection key
+ TEST(tmp = (encrypted->KeyData() != protection->KeyData()));
+ res = tmp && res;
+
+ CProtectionKey* decrypted =
+ transient->DecryptL(*encrypted);
+ CleanupStack::PushL(decrypted);
+
+ // check that the decrypted key is the same as the protection key
+ TEST(tmp = (protection->KeyData() == decrypted->KeyData()));
+ res = tmp && res;
+
+ // check we can't use the wrong plugin data
+ CTransientKey* transient2 = 0;
+ TRAP(err, transient2 = transInfo->CreateTransientKeyL(KBadPluginData));
+ TEST(tmp = (err != KErrNone));
+ res = tmp && res;
+
+ // avoid set but unused warning...
+ if (transient2 == 0) transient2 = 0;
+
+ CProtectionKey* client = protection->ClientKeyL(0xabababab);
+ CleanupStack::PushL(client);
+
+ CProtectionKey* client2 = protection->ClientKeyL(0xcdcdcdcd);
+ CleanupStack::PushL(client2);
+
+ // check protection key is different from the client key
+ TEST(tmp = (protection->KeyData() != client->KeyData()));
+ res = tmp && res;
+ TEST(tmp = (protection->KeyData().Length() == client->KeyData().Length()));
+ res = tmp && res;
+
+ // check two client keys are different
+ TEST(tmp = (client->KeyData() != client2->KeyData()));
+ res = tmp && res;
+ TEST(tmp = (client->KeyData().Length() == client2->KeyData().Length()));
+ res = tmp && res;
+
+ // check key lengths larger than SHA1 output is handled correctly
+ CProtectionKey* protection2 =
+ CProtectionKey::NewL(512);
+ CleanupStack::PushL(protection2);
+
+ CProtectionKey* client3 = protection2->ClientKeyL(0xcdcdcdcd);
+ CleanupStack::PushL(client3);
+
+ // check protection key is different from the client key
+ TEST(tmp = (protection2->KeyData() != client3->KeyData()));
+ res = tmp && res;
+ TEST(tmp = (protection2->KeyData().Length() ==
+ client3->KeyData().Length()));
+ res = tmp && res;
+
+ // cleanup
+ CleanupStack::PopAndDestroy(8, transInfo);
+ CleanupStack::PopAndDestroy(pluginName);
+
+ SetTestStepResult(res ? EPass : EFail);
+
+__UHEAP_MARKEND;
+ return TestStepResult();
+ }
+