--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/dmadpki/src/dmadcertutil.cpp Thu Dec 17 09:14:51 2009 +0200
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2002-2006 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: Implementation of TDmAdCertUtil.
+*
+*/
+
+
+
+#include <x509cert.h>
+#include <x509keys.h>
+#include <x500dn.h>
+
+#include "dmadcertutil.h"
+#include "pkcs10.h"
+#include "utlcrypto.h"
+
+
+void TDmAdCertUtil::ParseAvaL(const CX520AttributeTypeAndValue& aAva, TDes8& aOut)
+ {
+ TPtrC8 attr = CPkcs10Req::AttributeTypeOidToText(aAva.Type());
+ TBuf8<32> tempOidBuf;
+ HBufC* val = NULL;
+ TRAPD(ret, val = aAva.ValueL());
+ if(ret == KErrNone)
+ {
+ CleanupStack::PushL(val);
+ if(attr.Length() == 0)
+ {
+ // Dotted oid representation
+ tempOidBuf.Copy(aAva.Type());
+ aOut.Append(tempOidBuf);
+ }
+ else
+ {
+ aOut.Append(attr);
+ }
+ aOut.Append(_L("="));
+ aOut.Append(val->Des());
+ CleanupStack::PopAndDestroy(val);
+ }
+ }
+
+void TDmAdCertUtil::CertDnL(const CX500DistinguishedName& aName, TDes8& aOut)
+ {
+ TInt count = aName.Count();
+ for (TInt i = 0; i < count; i++)
+ {
+ if(i > 0)
+ aOut.Append(_L(","));
+ const CX520AttributeTypeAndValue& ava = aName.Element(i);
+ ParseAvaL(ava, aOut);
+ }
+ }
+
+HBufC8* TDmAdCertUtil::Sha1DigestL(const TDesC8& aData)
+ {
+ CUtlMessageDigest* digester = TUtlCrypto::MakeMessageDigesterL(TUtlCrypto::EUtlMessageDigestSha1);
+ CleanupStack::PushL(digester);
+
+ HBufC8* hashBuf = HBufC8::NewLC(digester->HashSize());
+ TPtr8 hashBufDesc(hashBuf->Des());
+
+ hashBufDesc.Copy(digester->Final(aData));
+ CleanupStack::Pop(hashBuf);
+ CleanupStack::PopAndDestroy(digester);
+ return hashBuf;
+ }
+
+HBufC8* TDmAdCertUtil::RSAKeyIdentifierLC(const TDesC8& aKeyData)
+ {
+ TX509KeyFactory keyFactory;
+ CRSAPublicKey* rsaKey = keyFactory.RSAPublicKeyL(aKeyData);
+ CleanupStack::PushL(rsaKey);
+ HBufC8* modulusBuffer = rsaKey->N().BufferLC();
+ HBufC8* hash = TDmAdCertUtil::Sha1DigestL(*modulusBuffer);
+ CleanupStack::PopAndDestroy(2); // modulusBuffer, rsaKey
+ CleanupStack::PushL(hash);
+ return hash;
+ }