--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/ikecert/src/ikecaelem.cpp Thu Dec 17 09:14:51 2009 +0200
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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: Class containing information about one CA cert
+*
+*/
+
+
+
+
+#include <x509cert.h>
+
+#include "ikecaelem.h"
+#include "ikecert.h"
+#include "utlcrypto.h"
+#include "ikev1pkiservice.h"
+#include "ikecertconst.h"
+
+EXPORT_C CIkeCaElem* CIkeCaElem::NewL(HBufC8* aCert)
+ {
+ ASSERT(aCert);
+ CIkeCaElem* CaElem = new (ELeave) CIkeCaElem();
+ CleanupStack::PushL(CaElem);
+ CaElem->iCaCert = CX509Certificate::NewL(*aCert);
+ delete aCert;
+ HBufC8* PublicKeyInfo = IkeCert::GetCertificateFieldDERL(CaElem->iCaCert, KPublicKeyInfo);
+ CleanupStack::PushL(PublicKeyInfo);
+
+ //
+ // Calculate "Key Id" value as a SHA1 hash Subject Public Key Info element
+ // (specified so in IKEv2 draft)
+ //
+ CaElem->iKeyInfo = HBufC8::NewL(IKEV2_CERT_KEYID_SIZE);
+ CUtlMessageDigest* Digest = TUtlCrypto::MakeMessageDigesterL(TUtlCrypto::EUtlMessageDigestSha1);
+ TPtrC8 InData(PublicKeyInfo->Des());
+ TPtrC8 KeyId = Digest->Final(InData);
+ CaElem->iKeyInfo->Des().Copy(KeyId);
+ delete Digest;
+
+ CleanupStack::PopAndDestroy(PublicKeyInfo);
+ CleanupStack::Pop(CaElem);
+ return CaElem;
+ }
+
+
+EXPORT_C CIkeCaElem::~CIkeCaElem()
+ {
+ delete iCaCert;
+ delete iKeyInfo;
+ }
+
+
+EXPORT_C CX509Certificate* CIkeCaElem::Certificate() const
+ {
+ return iCaCert;
+ }
+
+
+EXPORT_C const TDesC8& CIkeCaElem::KeyHash() const
+ {
+ return *iKeyInfo;
+ }
+