wim/WimUtil/src/WimCertInfo.cpp
changeset 0 164170e6151a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wim/WimUtil/src/WimCertInfo.cpp	Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,276 @@
+/*
+* Copyright (c) 2003 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:  Certificate trust settings information
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "WimCertInfo.h"
+#include "WimDummyToken.h"
+#include <securitydefs.h>
+#include "WimTrace.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CWimCertInfo::CWimCertInfo( CCTCertInfo* aCCTCertInfo, 
+//                            const TBuf8<KSHA1HashLengthBytes> aHash, 
+//                            RArray<HBufC*> aTrustedUsages, 
+//                            TUint8 aCDFRefs ) 
+//                          : iCCTCertInfo( aCCTCertInfo ),
+//                            iCertHash( aHash ),
+//                            iTrustedUsage( aTrustedUsages ),
+//                            iCDFRefs( aCDFRefs )
+// Default constructor
+// -----------------------------------------------------------------------------
+//
+CWimCertInfo::CWimCertInfo( CCTCertInfo* aCCTCertInfo, 
+                            const TBuf8<KSHA1HashLengthBytes> aHash, 
+                            RArray<HBufC*> aTrustedUsages, 
+                            TUint8 aCDFRefs ) 
+                          : iCCTCertInfo( aCCTCertInfo ),
+                            iCertHash( aHash ),
+                            iTrustedUsage( aTrustedUsages ),
+                            iCDFRefs( aCDFRefs )
+    {
+    _WIMTRACE(_L("WIM | WIMUtil | CWimCertInfo::CWimCertInfo | Begin"));
+    }
+
+// -----------------------------------------------------------------------------
+// CWimCertInfo::ConstructL()
+// Second phase constructor
+// -----------------------------------------------------------------------------
+//
+void CWimCertInfo::ConstructL()
+    {
+    _WIMTRACE(_L("WIM | WIMUtil | CWimCertInfo::ConstructL | Begin"));
+    }
+
+// -----------------------------------------------------------------------------
+// CWimCertInfo::NewLNewL( CCTCertInfo* aCCTCertInfo,
+//                         const TBuf8<KSHA1HashLengthBytes> aHash,
+//                         RArray<HBufC*> aTrustedUsages,
+//                         TUint8 aCDFRefs )
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CWimCertInfo* CWimCertInfo::NewL( CCTCertInfo* aCCTCertInfo,
+                                     const TBuf8<KSHA1HashLengthBytes> aHash,
+                                     RArray<HBufC*> aTrustedUsages,
+                                     TUint8 aCDFRefs )
+    {
+    _WIMTRACE(_L("WIM | WIMUtil | CWimCertInfo::NewL | Begin"));
+    CWimCertInfo* self = new( ELeave ) CWimCertInfo( aCCTCertInfo, 
+                                                     aHash,
+                                                     aTrustedUsages,
+                                                     aCDFRefs );
+    CleanupStack::PushL( self );
+    self->ConstructL( );
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+// -----------------------------------------------------------------------------
+// CWimCertInfo::~CWimCertInfo()
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CWimCertInfo::~CWimCertInfo()
+    {
+    _WIMTRACE(_L("WIM | WIMUtil | CWimCertInfo::~CWimCertInfo | Begin"));
+    if ( iCCTCertInfo )
+        {
+        iCCTCertInfo->Release();
+        iCCTCertInfo = NULL;
+        }
+
+    //Delete arrays of trusted usaga and extendedkeyusage
+    for ( TInt i = 0; i < iTrustedUsage.Count(); i++ )
+        {
+        delete iTrustedUsage[i]; //Delete buffers
+        }
+
+    iTrustedUsage.Close();
+    
+    for ( TInt j = 0; j < iExtendedKeyUsage.Count(); j++ )
+        {
+        delete iExtendedKeyUsage[j]; //Delete buffers
+        }
+
+    iExtendedKeyUsage.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CWimCertInfo::AddTrustedUsage( HBufC* aTrustedUsage )
+// Add TrustedUsage OID
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CWimCertInfo::AddTrustedUsage( HBufC* aTrustedUsage )
+    {
+    _WIMTRACE(_L("WIM | WIMUtil | CWimCertInfo::AddTrustedUsage | Begin"));
+    return ( iTrustedUsage.Append( aTrustedUsage ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CWimCertInfo::AddExtendedKeyUsage( HBufC* aExtendedKeyUsage )
+// Add ExtendedKeyUsage OID
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CWimCertInfo::AddExtendedKeyUsage( HBufC* aExtendedKeyUsage )
+    {
+    _WIMTRACE(_L("WIM | WIMUtil | CWimCertInfo::AddExtendedKeyUsage | Begin"));
+    return ( iExtendedKeyUsage.Append( aExtendedKeyUsage ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CWimCertInfo::GetCertHash( TBuf8<KSHA1HashLengthBytes>& aHash ) const
+// Get hash of certificate
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CWimCertInfo::GetCertHash( 
+                            TBuf8<KSHA1HashLengthBytes>& aHash ) const
+    {
+    _WIMTRACE(_L("WIM | WIMUtil | CWimCertInfo::GetCertHash | Begin"));
+    aHash = iCertHash;
+    }
+
+// -----------------------------------------------------------------------------
+// CWimCertInfo::CctCert() const
+// Return pointer to CctCert (Symbian's certificate info )
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const CCTCertInfo* CWimCertInfo::CctCert() const
+    {
+    _WIMTRACE(_L("WIM | WIMUtil | CWimCertInfo::CctCert | Begin"));
+    return iCCTCertInfo;
+    }
+
+// -----------------------------------------------------------------------------
+// CWimCertInfo::TrustedUsage() const
+// Get pointer array of TrustedUsage OID's
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RArray<HBufC*> CWimCertInfo::TrustedUsage() const
+    {
+    _WIMTRACE(_L("WIM | WIMUtil | CWimCertInfo::TrustedUsage | Begin"));
+    return iTrustedUsage;
+    }
+// -----------------------------------------------------------------------------
+// CWimCertInfo::ExtendedKeyUsage
+// Get pointer array of ExtendedKeyUsage OID's
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RArray<HBufC*> CWimCertInfo::ExtendedKeyUsage() const
+    {
+    _WIMTRACE(_L("WIM | WIMUtil | CWimCertInfo::ExtendedKeyUsage | Begin"));
+    return iExtendedKeyUsage;
+    }
+// -----------------------------------------------------------------------------
+// CWimCertInfo::CDFRefs
+// Get location of certificate
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TUint8 CWimCertInfo::CDFRefs() const
+    {
+    _WIMTRACE(_L("WIM | WIMUtil | CWimCertInfo::CDFRefs | Begin"));
+    return iCDFRefs;
+    }
+// -----------------------------------------------------------------------------
+// CWimCertInfo::SetCDFRefs
+// Set location of certificate
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CWimCertInfo::SetCDFRefs( TUint8 aCDFRefs )
+    {
+    _WIMTRACE(_L("WIM | WIMUtil | CWimCertInfo::SetCDFRefs | Begin"));
+    iCDFRefs = aCDFRefs;
+    }
+
+// -----------------------------------------------------------------------------
+// CWimCertInfo::Externalize
+// Externalize CWimCertInfo data to flat buffer
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TWimCertInfoPckg* CWimCertInfo::ExternalizeL() const
+    {
+    _WIMTRACE(_L("WIM | WIMUtil | CWimCertInfo::ExternalizeL | Begin"));
+    TWimCertInfoPckg* certPckg = new( ELeave ) TWimCertInfoPckg();
+    
+    GetCertHash( certPckg->iHash );
+    certPckg->iCertLabel.Copy( iCCTCertInfo->Label() );
+    certPckg->iCertificateOwnerType = iCCTCertInfo->CertificateOwnerType();
+    certPckg->iSize = iCCTCertInfo->Size();
+    certPckg->iFormat = iCCTCertInfo->CertificateFormat();
+    certPckg->iSubjectKeyId = iCCTCertInfo->SubjectKeyId();
+    certPckg->iIssuerKeyId = iCCTCertInfo->IssuerKeyId();
+    certPckg->iCDFRefs = iCDFRefs;
+    certPckg->iTokenSerialNbr = iCCTCertInfo->Token().Label();
+    certPckg->iIndex = iCCTCertInfo->Handle().iObjectId;
+    return certPckg;
+    }
+
+// -----------------------------------------------------------------------------
+// CWimCertInfo::InternalizeL
+// Instantiates CWimCertInfo of externalized data
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CWimCertInfo* CWimCertInfo::InternalizeL( 
+    TWimCertInfoPckg& aExternalizedInfo )
+    {
+    _WIMTRACE(_L("WIM | WIMUtil | CWimCertInfo::InternalizeL | Begin"));
+    RArray<HBufC*> trustedUsages;
+      
+    CWimDummyTokenType* tokenType = CWimDummyTokenType::NewL();
+    CleanupReleasePushL( *tokenType );
+
+    CWimDummyToken* token = CWimDummyToken::NewL( *tokenType );
+	CleanupStack::Pop( tokenType );
+    CleanupReleasePushL( *token );
+
+    token->SetSerialNumber( aExternalizedInfo.iTokenSerialNbr );
+  
+    TInt certificateId = aExternalizedInfo.iIndex;
+    TBool deletable = EFalse;
+
+
+    CCTCertInfo* cctCertInfo = CCTCertInfo::NewL( 
+                                        aExternalizedInfo.iCertLabel,
+                                        aExternalizedInfo.iFormat,
+                                        aExternalizedInfo.iCertificateOwnerType,
+                                        aExternalizedInfo.iSize,
+                                        &(aExternalizedInfo.iSubjectKeyId),
+                                        &(aExternalizedInfo.iIssuerKeyId),
+                                        *token,
+                                        certificateId,
+                                        deletable );
+	CleanupStack::Pop( token );
+	CleanupReleasePushL( *cctCertInfo );    
+
+    CWimCertInfo* certInfo = CWimCertInfo::NewL( cctCertInfo,
+                                                 aExternalizedInfo.iHash,
+                                                 trustedUsages,
+                                                 0 );
+
+    CleanupStack::Pop( cctCertInfo );
+
+    certInfo->SetCDFRefs( aExternalizedInfo.iCDFRefs );
+
+    return certInfo;
+    }
+
+//  End of File