diff -r 880bdb445c5c -r c0e7917aa107 authenticationservices/authenticationserver/source/server/transientkeyinfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/authenticationservices/authenticationserver/source/server/transientkeyinfo.cpp Sat Dec 05 21:41:51 2009 +0000 @@ -0,0 +1,132 @@ +/* +* 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: +* CTransientKeyInfo implementation +* +*/ + + +/** + @file +*/ +#include +#include "authserver_impl.h" + +using namespace AuthServer; + +CTransientKeyInfo* CTransientKeyInfo::NewL( + TPluginId aPluginId) + { + CTransientKeyInfo* key = + CTransientKeyInfo::NewLC(aPluginId); + CleanupStack::Pop(key); + return key; + } + +CTransientKeyInfo* CTransientKeyInfo::NewLC( + TPluginId aPluginId) + { + CTransientKeyInfo* key = new (ELeave) CTransientKeyInfo(); + CleanupStack::PushL(key); + key->ConstructL(aPluginId); + return key; + } + +void CTransientKeyInfo::ConstructL(TPluginId aPluginId) + { + iPluginId = aPluginId; + } + +CTransientKeyInfo* CTransientKeyInfo::NewL(RReadStream& aInputStream) + { + CTransientKeyInfo* key = + CTransientKeyInfo::NewLC(aInputStream); + CleanupStack::Pop(key); + return key; + } + +CTransientKeyInfo* CTransientKeyInfo::NewLC(RReadStream& aInputStream) + { + CTransientKeyInfo* key = new (ELeave) CTransientKeyInfo(); + CleanupStack::PushL(key); + key->InternalizeL(aInputStream); + return key; + } + + +CTransientKeyInfo::~CTransientKeyInfo() + { + delete iEncryptedKey; + delete iEncryptionData; + } + +CTransientKey* +CTransientKeyInfo::CreateTransientKeyL(const TDesC8& aPluginData) const + { + CPBEncryptElement* encrypt = 0; + if (!iEncryptionData) + { + // Plugin data used as password + encrypt = CPBEncryptElement::NewL(aPluginData); + CleanupStack::PushL(encrypt); + iEncryptionData = CPBEncryptionData::NewL(encrypt->EncryptionData()); + } + else + { + // Plugin data used as password + encrypt = CPBEncryptElement::NewL(*iEncryptionData, aPluginData); + CleanupStack::PushL(encrypt); + } + + CTransientKey* key = CTransientKey::NewL(encrypt); // Ownership of encrypt transferred + CleanupStack::Pop(encrypt); + return key; + } + +const CEncryptedProtectionKey& CTransientKeyInfo::EncryptedKey() const + { + return *iEncryptedKey; + } + +void CTransientKeyInfo::SetEncryptedProtectionKeyL( + CEncryptedProtectionKey* aEncryptedKey) + { + if (iEncryptedKey != 0) + { + User::Leave(KErrAlreadyExists); + } + + iEncryptedKey = aEncryptedKey; + } + +void CTransientKeyInfo::ExternalizeL(RWriteStream& aOutStream) const + { + ASSERT(iEncryptedKey != 0); + + aOutStream << iPluginId; + aOutStream << *iEncryptedKey; + aOutStream << *iEncryptionData; + } + +void CTransientKeyInfo::InternalizeL(RReadStream& aInStream) + { + iPluginId = aInStream.ReadInt32L(); + iEncryptedKey = CEncryptedProtectionKey::NewL(aInStream); + iEncryptionData = CPBEncryptionData::NewL(aInStream); + } + +TPluginId CTransientKeyInfo::PluginId() const + { + return iPluginId; + }