vpnengine/ikecert/src/ikecaelem.cpp
changeset 0 33413c0669b9
--- /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;
+    }
+