vpnengine/dmadpki/src/dmadcertluidmappingelem.cpp
changeset 0 33413c0669b9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/dmadpki/src/dmadcertluidmappingelem.cpp	Thu Dec 17 09:14:51 2009 +0200
@@ -0,0 +1,138 @@
+/*
+* Copyright (c) 2002 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 CDmAdCertLuidMappingElem.
+*
+*/
+
+
+//#include <utf.h>
+
+#include "dmadcertluidmappingelem.h"
+#include "utlcrypto.h"
+#include "base64.h"
+#include "vpnlogger.h"
+
+CDmAdCertLuidMappingElem* CDmAdCertLuidMappingElem::NewL(const TDesC8& aIssuerName, const TDesC8& aSerialNumber)
+    {
+    TRACE("CDmAdCertLuidMappingElem::NewL");
+    
+    CDmAdCertLuidMappingElem* self = NewLC(aIssuerName, aSerialNumber);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CDmAdCertLuidMappingElem* CDmAdCertLuidMappingElem::NewLC(const TDesC8& aIssuerName, const TDesC8& aSerialNumber)
+    {
+    CDmAdCertLuidMappingElem* self = new (ELeave) CDmAdCertLuidMappingElem();
+    CleanupStack::PushL(self);
+    self->ConstructL(aIssuerName, aSerialNumber);
+    return self;
+    }
+
+void CDmAdCertLuidMappingElem::ConstructL(const TDesC8& aIssuerName, const TDesC8& aSerialNumber)
+    {
+    TRACE("CDmAdCertLuidMappingElem::ConstructL");
+    
+    iIssuerName = aIssuerName.AllocL();
+    iSerialNumber = aSerialNumber.AllocL();
+    iLuid = BuildLuidL(aIssuerName, aSerialNumber);
+    }
+    
+CDmAdCertLuidMappingElem::CDmAdCertLuidMappingElem()
+    {
+    }
+    
+CDmAdCertLuidMappingElem::~CDmAdCertLuidMappingElem()
+    {
+    TRACE("CDmAdCertLuidMappingElem::~CDmAdCertLuidMappingElem");
+    
+    delete iLuid;
+    delete iIssuerName;
+    delete iSerialNumber;
+    }
+
+void CDmAdCertLuidMappingElem::CleanupOperationDeleteCArrayPtr(TAny* aPtr)
+    {
+    TRACE("CDmAdCertLuidMappingElem::CleanupOperationDeleteCArrayPtr");
+    
+    if (!aPtr)
+        {
+        return;
+        }
+    CArrayPtr<CDmAdCertLuidMappingElem>* array = reinterpret_cast<CArrayPtr<CDmAdCertLuidMappingElem>*>(aPtr);
+    array->ResetAndDestroy();
+    delete array;
+    }
+
+TPtrC8 CDmAdCertLuidMappingElem::Luid() const
+    {
+    TRACE("CDmAdCertLuidMappingElem::Luid");
+    
+    TPtrC8 ret(KNullDesC8);
+    if (iLuid != 0)
+        {
+        ret.Set(*iLuid);
+        }
+    return ret;
+    }
+
+TPtrC8 CDmAdCertLuidMappingElem::IssuerName() const
+    {
+    TRACE("CDmAdCertLuidMappingElem::IssuerName");
+    
+    TPtrC8 ret(KNullDesC8);
+    if (iIssuerName != 0)
+        {
+        ret.Set(*iIssuerName);
+        }
+    return ret;
+    }
+
+TPtrC8 CDmAdCertLuidMappingElem::SerialNumber() const
+    {
+    TRACE("CDmAdCertLuidMappingElem::SerialNumber");
+    
+    TPtrC8 ret(KNullDesC8);
+    if (iSerialNumber != 0)
+        {
+        ret.Set(*iSerialNumber);
+        }
+    return ret;
+    }
+
+HBufC8* CDmAdCertLuidMappingElem::BuildLuidL(const TDesC8& aIssuerName, const TDesC8& aSerialNumber)
+    {
+    TRACE("CDmAdCertLuidMappingElem::BuildLuidL");
+    
+    CUtlMessageDigest* digester = TUtlCrypto::MakeMessageDigesterL(TUtlCrypto::EUtlMessageDigestSha1);
+    CleanupStack::PushL(digester);
+
+    HBufC8* hashBuf = HBufC8::NewLC(digester->HashSize());
+    TPtr8 hashBufDesc(hashBuf->Des());
+
+    digester->Update(aIssuerName);
+    hashBufDesc.Copy(digester->Final(aSerialNumber));
+
+    TBase64Codec base64Codec;
+    HBufC8* luidB64;
+    if ((luidB64 = base64Codec.Base64EncodeLC(*hashBuf)) == NULL)
+        {
+        DEBUG_LOG(_L("No memory"));        
+        User::Leave(KErrNoMemory);
+        }
+
+    CleanupStack::Pop(luidB64);
+    CleanupStack::PopAndDestroy(2); //hashBuf, digester
+    return luidB64;
+    }