--- a/cryptomgmtlibs/cryptotokenfw/source/ctframework/MCTKeyStore.cpp Tue Jul 21 01:04:32 2009 +0100
+++ b/cryptomgmtlibs/cryptotokenfw/source/ctframework/MCTKeyStore.cpp Thu Sep 10 14:01:51 2009 +0300
@@ -1,287 +1,293 @@
-/*
-* Copyright (c) 2001-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 <e32base.h>
-#include <ct.h>
-#include "mctauthobject.h"
-#include "mctkeystore.h"
-#include "mctkeystoremanager.h"
-#include <securityerr.h>
-#include "ct/logger.h"
-
-////////////////////////////////////////////////////////////////////////////////
-// CKeyInfoBase
-////////////////////////////////////////////////////////////////////////////////
-
-EXPORT_C CKeyInfoBase::CKeyInfoBase(TKeyIdentifier aID,
- TKeyUsagePKCS15 aUsage,
- TUint aSize,
- HBufC* aLabel,
- TInt aHandle,
- const TSecurityPolicy& aUsePolicy,
- const TSecurityPolicy& aManagementPolicy,
- EKeyAlgorithm aAlgorithm,
- TInt aAccessType,
- TBool aNative,
- TTime aStartDate,
- TTime aEndDate,
- HBufC8* aPKCS8AttributeSet) :
- iID(aID),
- iUsage(aUsage),
- iSize(aSize),
- iLabel(aLabel),
- iHandle(aHandle),
- iUsePolicy(aUsePolicy),
- iManagementPolicy(aManagementPolicy),
- iAlgorithm(aAlgorithm),
- iAccessType(aAccessType),
- iNative(aNative),
- iStartDate(aStartDate),
- iEndDate(aEndDate),
- iPKCS8AttributeSet(aPKCS8AttributeSet)
- {
- }
-
-EXPORT_C CKeyInfoBase::CKeyInfoBase()
- {
- }
-
-EXPORT_C CKeyInfoBase::~CKeyInfoBase()
- {
- delete iLabel;
- delete iPKCS8AttributeSet;
- }
-
-EXPORT_C void CKeyInfoBase::ConstructL()
- {
- }
-
-EXPORT_C void CKeyInfoBase::ConstructL(RReadStream& aIn)
- {
- // Called from derived classes' NewL methods when interalizing a stream
-
- InternalizeL(aIn);
- }
-
-EXPORT_C void CKeyInfoBase::ExternalizeL(RWriteStream& aStream) const
- {
- aStream.WriteL(iID);
- aStream.WriteInt32L(iUsage);
- aStream.WriteUint32L(iSize);
- aStream.WriteInt32L(iLabel->Length());
- TPtr16 theLabel(iLabel->Des());
- aStream.WriteL(theLabel);
- aStream.WriteInt32L(iHandle);
- aStream.WriteL(TPckgC<TSecurityPolicy>(iUsePolicy));
- aStream.WriteL(TPckgC<TSecurityPolicy>(iManagementPolicy));
- aStream.WriteInt32L(iAlgorithm);
- aStream.WriteInt32L(iAccessType);
- aStream.WriteInt32L(iNative);
- aStream.WriteL(TPckgC<TTime>(iStartDate));
- aStream.WriteL(TPckgC<TTime>(iEndDate));
-
- if (iPKCS8AttributeSet)
- {
- aStream.WriteInt32L(iPKCS8AttributeSet->Length());
- TPtr8 theAttributes(iPKCS8AttributeSet->Des());
- aStream.WriteL(theAttributes);
- }
- else
- aStream.WriteInt32L(0);
- }
-
-void CKeyInfoBase::InternalizeL(RReadStream& aStream)
- {
- aStream.ReadL(iID);
- iUsage = static_cast<TKeyUsagePKCS15>(aStream.ReadInt32L());
- iSize = aStream.ReadUint32L();
-
- TInt labelLen = aStream.ReadInt32L();
- iLabel = HBufC::NewMaxL(labelLen);
- TPtr pLabel(iLabel->Des());
- pLabel.FillZ();
- // This will have made the length of pLabel equal to the length of
- // the alloc cell of iLabel, which may be longer than labelLen. So
- // we need to pass the length we want to read into ReadL
- aStream.ReadL(pLabel, labelLen);
-
- iHandle = aStream.ReadInt32L();
-
- TPckg<TSecurityPolicy> usePolicy(iUsePolicy);
- aStream.ReadL(usePolicy);
- TPckg<TSecurityPolicy> managementPolicy(iManagementPolicy);
- aStream.ReadL(managementPolicy);
-
- iAlgorithm = (EKeyAlgorithm)(aStream.ReadInt32L());
- iAccessType = (EKeyAccess)(aStream.ReadInt32L());
- iNative = (TBool)(aStream.ReadInt32L());
- TPckg<TTime> startDate(iStartDate);
- aStream.ReadL(startDate);
- TPckg<TTime> endDate(iEndDate);
- aStream.ReadL(endDate);
-
- TInt attributeLen = aStream.ReadInt32L();
- if (attributeLen > 0)
- {
- iPKCS8AttributeSet = HBufC8::NewMaxL(attributeLen);
- TPtr8 pAttributes(iPKCS8AttributeSet->Des());
- pAttributes.FillZ();
- // This will have made the length of pAttributes equal to the length of
- // the alloc cell of iPKCS8AttributeSet, which may be longer than attributeLen
- // So we need to pass the length we want to read into ReadL
- aStream.ReadL(pAttributes, attributeLen);
- }
- }
-
-////////////////////////////////////////////////////////////////////////////////
-// CCTKeyInfo
-////////////////////////////////////////////////////////////////////////////////
-
-EXPORT_C CCTKeyInfo* CCTKeyInfo::NewL(TKeyIdentifier aID,
- TKeyUsagePKCS15 aUsage,
- TUint aSize,
- MCTAuthenticationObject* aProtector,
- HBufC* aLabel,
- MCTToken& aToken,
- TInt aHandle,
- const TSecurityPolicy& aUsePolicy,
- const TSecurityPolicy& aManagementPolicy,
- EKeyAlgorithm aAlgorithm,
- TInt aAccessType,
- TBool aNative,
- TTime aStartDate,
- TTime aEndDate,
- HBufC8* aPKCS8AttributeSet /*= NULL*/)
- {
- CCTKeyInfo* me = NULL;
- me = new (ELeave) CCTKeyInfo(aID,
- aUsage,
- aSize,
- aProtector,
- aLabel,
- aToken,
- aHandle,
- aUsePolicy,
- aManagementPolicy,
- aAlgorithm,
- aAccessType,
- aNative,
- aStartDate,
- aEndDate,
- aPKCS8AttributeSet);
-
- CleanupReleasePushL(*me);
- me->ConstructL();
- CleanupStack::Pop();
-
- return me;
- }
-
-CCTKeyInfo::CCTKeyInfo(TKeyIdentifier aID,
- TKeyUsagePKCS15 aUsage,
- TUint aSize,
- MCTAuthenticationObject* aProtector,
- HBufC* aLabel,
- MCTToken& aToken,
- TInt aHandle,
- const TSecurityPolicy& aUsePolicy,
- const TSecurityPolicy& aManagementPolicy,
- EKeyAlgorithm aAlgorithm,
- TInt aAccessType,
- TBool aNative,
- TTime aStartDate,
- TTime aEndDate,
- HBufC8* aPKCS8AttributeSet /*= NULL*/) :
- CKeyInfoBase(aID,
- aUsage,
- aSize,
- aLabel,
- aHandle,
- aUsePolicy,
- aManagementPolicy,
- aAlgorithm,
- aAccessType,
- aNative,
- aStartDate,
- aEndDate,
- aPKCS8AttributeSet),
- MCTTokenObject(aToken),
- iToken(aToken),
- iProtector(aProtector)
- {
- LOG1(_L("CCTKeyInfo::CCTKeyInfo() with iProtector %08x"), iProtector);
- }
-
-EXPORT_C CCTKeyInfo* CCTKeyInfo::NewL(RReadStream& aStream, MCTToken& aToken)
- {
- CCTKeyInfo* me = new (ELeave) CCTKeyInfo(aToken);
- CleanupReleasePushL(*me);
- me->ConstructL(aStream);
- CleanupStack::Pop();
- return me;
- }
-
-CCTKeyInfo::CCTKeyInfo(MCTToken& aToken) :
- CKeyInfoBase(),
- MCTTokenObject(aToken),
- iToken(aToken)
- {
- }
-
-CCTKeyInfo::~CCTKeyInfo()
- {
- LOG(_L("CCTKeyInfo::~CCTKeyInfo"));
- if (iProtector)
- {
- LOG_INC_INDENT();
- iProtector->Release();
- LOG_DEC_INDENT();
- }
- }
-
-const TDesC& CCTKeyInfo::Label() const
- {
- return CKeyInfoBase::Label();
- }
-
-MCTToken& CCTKeyInfo::Token() const
- {
- return iToken;
- }
-
-TUid CCTKeyInfo::Type() const
- {
- return KKeyInfoUID;
- }
-
-TCTTokenObjectHandle CCTKeyInfo::Handle() const
- {
- return TCTTokenObjectHandle(Token().Handle(), HandleID());
- }
-
-////////////////////////////////////////////////////////////////////////////////
-// TCTKeyAttributeFilter
-////////////////////////////////////////////////////////////////////////////////
-
-EXPORT_C TCTKeyAttributeFilter::TCTKeyAttributeFilter()
- {
- iKeyId = KNullDesC8;
- iUsage = EPKCS15UsageAll;
- iPolicyFilter = EUsableKeys;
- iKeyAlgorithm = CCTKeyInfo::EInvalidAlgorithm;
- }
+/*
+* Copyright (c) 2001-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 <e32base.h>
+#include <ct.h>
+#include "mctauthobject.h"
+#include "mctkeystore.h"
+#include "mctkeystoremanager.h"
+#include <securityerr.h>
+#include "ct/logger.h"
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+
+/** The type ID of CCTKeyInfo objects */
+const TUid KKeyInfoUID = {0x101F5152};
+
+#endif
+////////////////////////////////////////////////////////////////////////////////
+// CKeyInfoBase
+////////////////////////////////////////////////////////////////////////////////
+
+EXPORT_C CKeyInfoBase::CKeyInfoBase(TKeyIdentifier aID,
+ TKeyUsagePKCS15 aUsage,
+ TUint aSize,
+ HBufC* aLabel,
+ TInt aHandle,
+ const TSecurityPolicy& aUsePolicy,
+ const TSecurityPolicy& aManagementPolicy,
+ EKeyAlgorithm aAlgorithm,
+ TInt aAccessType,
+ TBool aNative,
+ TTime aStartDate,
+ TTime aEndDate,
+ HBufC8* aPKCS8AttributeSet) :
+ iID(aID),
+ iUsage(aUsage),
+ iSize(aSize),
+ iLabel(aLabel),
+ iHandle(aHandle),
+ iUsePolicy(aUsePolicy),
+ iManagementPolicy(aManagementPolicy),
+ iAlgorithm(aAlgorithm),
+ iAccessType(aAccessType),
+ iNative(aNative),
+ iStartDate(aStartDate),
+ iEndDate(aEndDate),
+ iPKCS8AttributeSet(aPKCS8AttributeSet)
+ {
+ }
+
+EXPORT_C CKeyInfoBase::CKeyInfoBase()
+ {
+ }
+
+EXPORT_C CKeyInfoBase::~CKeyInfoBase()
+ {
+ delete iLabel;
+ delete iPKCS8AttributeSet;
+ }
+
+EXPORT_C void CKeyInfoBase::ConstructL()
+ {
+ }
+
+EXPORT_C void CKeyInfoBase::ConstructL(RReadStream& aIn)
+ {
+ // Called from derived classes' NewL methods when interalizing a stream
+
+ InternalizeL(aIn);
+ }
+
+EXPORT_C void CKeyInfoBase::ExternalizeL(RWriteStream& aStream) const
+ {
+ aStream.WriteL(iID);
+ aStream.WriteInt32L(iUsage);
+ aStream.WriteUint32L(iSize);
+ aStream.WriteInt32L(iLabel->Length());
+ TPtr16 theLabel(iLabel->Des());
+ aStream.WriteL(theLabel);
+ aStream.WriteInt32L(iHandle);
+ aStream.WriteL(TPckgC<TSecurityPolicy>(iUsePolicy));
+ aStream.WriteL(TPckgC<TSecurityPolicy>(iManagementPolicy));
+ aStream.WriteInt32L(iAlgorithm);
+ aStream.WriteInt32L(iAccessType);
+ aStream.WriteInt32L(iNative);
+ aStream.WriteL(TPckgC<TTime>(iStartDate));
+ aStream.WriteL(TPckgC<TTime>(iEndDate));
+
+ if (iPKCS8AttributeSet)
+ {
+ aStream.WriteInt32L(iPKCS8AttributeSet->Length());
+ TPtr8 theAttributes(iPKCS8AttributeSet->Des());
+ aStream.WriteL(theAttributes);
+ }
+ else
+ aStream.WriteInt32L(0);
+ }
+
+void CKeyInfoBase::InternalizeL(RReadStream& aStream)
+ {
+ aStream.ReadL(iID);
+ iUsage = static_cast<TKeyUsagePKCS15>(aStream.ReadInt32L());
+ iSize = aStream.ReadUint32L();
+
+ TInt labelLen = aStream.ReadInt32L();
+ iLabel = HBufC::NewMaxL(labelLen);
+ TPtr pLabel(iLabel->Des());
+ pLabel.FillZ();
+ // This will have made the length of pLabel equal to the length of
+ // the alloc cell of iLabel, which may be longer than labelLen. So
+ // we need to pass the length we want to read into ReadL
+ aStream.ReadL(pLabel, labelLen);
+
+ iHandle = aStream.ReadInt32L();
+
+ TPckg<TSecurityPolicy> usePolicy(iUsePolicy);
+ aStream.ReadL(usePolicy);
+ TPckg<TSecurityPolicy> managementPolicy(iManagementPolicy);
+ aStream.ReadL(managementPolicy);
+
+ iAlgorithm = (EKeyAlgorithm)(aStream.ReadInt32L());
+ iAccessType = (EKeyAccess)(aStream.ReadInt32L());
+ iNative = (TBool)(aStream.ReadInt32L());
+ TPckg<TTime> startDate(iStartDate);
+ aStream.ReadL(startDate);
+ TPckg<TTime> endDate(iEndDate);
+ aStream.ReadL(endDate);
+
+ TInt attributeLen = aStream.ReadInt32L();
+ if (attributeLen > 0)
+ {
+ iPKCS8AttributeSet = HBufC8::NewMaxL(attributeLen);
+ TPtr8 pAttributes(iPKCS8AttributeSet->Des());
+ pAttributes.FillZ();
+ // This will have made the length of pAttributes equal to the length of
+ // the alloc cell of iPKCS8AttributeSet, which may be longer than attributeLen
+ // So we need to pass the length we want to read into ReadL
+ aStream.ReadL(pAttributes, attributeLen);
+ }
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+// CCTKeyInfo
+////////////////////////////////////////////////////////////////////////////////
+
+EXPORT_C CCTKeyInfo* CCTKeyInfo::NewL(TKeyIdentifier aID,
+ TKeyUsagePKCS15 aUsage,
+ TUint aSize,
+ MCTAuthenticationObject* aProtector,
+ HBufC* aLabel,
+ MCTToken& aToken,
+ TInt aHandle,
+ const TSecurityPolicy& aUsePolicy,
+ const TSecurityPolicy& aManagementPolicy,
+ EKeyAlgorithm aAlgorithm,
+ TInt aAccessType,
+ TBool aNative,
+ TTime aStartDate,
+ TTime aEndDate,
+ HBufC8* aPKCS8AttributeSet /*= NULL*/)
+ {
+ CCTKeyInfo* me = NULL;
+ me = new (ELeave) CCTKeyInfo(aID,
+ aUsage,
+ aSize,
+ aProtector,
+ aLabel,
+ aToken,
+ aHandle,
+ aUsePolicy,
+ aManagementPolicy,
+ aAlgorithm,
+ aAccessType,
+ aNative,
+ aStartDate,
+ aEndDate,
+ aPKCS8AttributeSet);
+
+ CleanupReleasePushL(*me);
+ me->ConstructL();
+ CleanupStack::Pop();
+
+ return me;
+ }
+
+CCTKeyInfo::CCTKeyInfo(TKeyIdentifier aID,
+ TKeyUsagePKCS15 aUsage,
+ TUint aSize,
+ MCTAuthenticationObject* aProtector,
+ HBufC* aLabel,
+ MCTToken& aToken,
+ TInt aHandle,
+ const TSecurityPolicy& aUsePolicy,
+ const TSecurityPolicy& aManagementPolicy,
+ EKeyAlgorithm aAlgorithm,
+ TInt aAccessType,
+ TBool aNative,
+ TTime aStartDate,
+ TTime aEndDate,
+ HBufC8* aPKCS8AttributeSet /*= NULL*/) :
+ CKeyInfoBase(aID,
+ aUsage,
+ aSize,
+ aLabel,
+ aHandle,
+ aUsePolicy,
+ aManagementPolicy,
+ aAlgorithm,
+ aAccessType,
+ aNative,
+ aStartDate,
+ aEndDate,
+ aPKCS8AttributeSet),
+ MCTTokenObject(aToken),
+ iToken(aToken),
+ iProtector(aProtector)
+ {
+ LOG1(_L("CCTKeyInfo::CCTKeyInfo() with iProtector %08x"), iProtector);
+ }
+
+EXPORT_C CCTKeyInfo* CCTKeyInfo::NewL(RReadStream& aStream, MCTToken& aToken)
+ {
+ CCTKeyInfo* me = new (ELeave) CCTKeyInfo(aToken);
+ CleanupReleasePushL(*me);
+ me->ConstructL(aStream);
+ CleanupStack::Pop();
+ return me;
+ }
+
+CCTKeyInfo::CCTKeyInfo(MCTToken& aToken) :
+ CKeyInfoBase(),
+ MCTTokenObject(aToken),
+ iToken(aToken)
+ {
+ }
+
+CCTKeyInfo::~CCTKeyInfo()
+ {
+ LOG(_L("CCTKeyInfo::~CCTKeyInfo"));
+ if (iProtector)
+ {
+ LOG_INC_INDENT();
+ iProtector->Release();
+ LOG_DEC_INDENT();
+ }
+ }
+
+const TDesC& CCTKeyInfo::Label() const
+ {
+ return CKeyInfoBase::Label();
+ }
+
+MCTToken& CCTKeyInfo::Token() const
+ {
+ return iToken;
+ }
+
+TUid CCTKeyInfo::Type() const
+ {
+ return KKeyInfoUID;
+ }
+
+TCTTokenObjectHandle CCTKeyInfo::Handle() const
+ {
+ return TCTTokenObjectHandle(Token().Handle(), HandleID());
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+// TCTKeyAttributeFilter
+////////////////////////////////////////////////////////////////////////////////
+
+EXPORT_C TCTKeyAttributeFilter::TCTKeyAttributeFilter()
+ {
+ iKeyId = KNullDesC8;
+ iUsage = EPKCS15UsageAll;
+ iPolicyFilter = EUsableKeys;
+ iKeyAlgorithm = CCTKeyInfo::EInvalidAlgorithm;
+ }