vpnengine/pkiservice/inc/pkisupport.h
changeset 0 33413c0669b9
child 1 c9c2ad51f972
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/pkiservice/inc/pkisupport.h	Thu Dec 17 09:14:51 2009 +0200
@@ -0,0 +1,226 @@
+/*
+* Copyright (c) 2003-2008 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:   CPKISupport class implements the PKI interface for Symbian
+*                PKI storage.
+*
+*/
+
+
+
+#ifndef __PKISUPPORT_H__
+#define __PKISUPPORT_H__
+
+#include <mctkeystore.h>
+#include "pkidefs.h"
+#include "eventmediatorapi.h" // for logging
+
+class CPKIWrapper;
+class CMapDescriptor;
+class TSecurityObjectDescriptor;
+class CUnifiedCertStore;
+class MCTWritableCertStore;
+class CCTCertInfo;
+class CCertAttributeFilter;
+
+enum TSubState
+{
+    ESSComplete,
+    ESSContinue,
+    ESSCompleteRequest,
+};
+
+enum TInitPhaseState
+{
+    EInitDone = 0,
+    EInitContinueInitialize,
+    EInitInitializeCertStore,
+    EInitRetrieveCertList,
+    EInitCompleteImportCerts,       
+};
+
+enum TPending
+{
+    ENoPendingOperation,    
+    EInitializeCertStore,    
+    EListCerts,
+    EListDevCerts,
+    ECertAdd,
+    ECertRetrieve,
+    ECertRemove,
+    ESetTrust,
+    ETrusted,    
+    ESetApplicability,
+    EApplications,
+    EIsApplicable,
+};
+
+
+/**
+ *  Implements PKI support.
+ *
+ *  @lib (internal) pkiservice.exe
+ *  @since S60 v3.0
+ */
+class CPKISupport : public CActive
+{
+    public:
+
+        // Constructors, destructor
+        static CPKISupport* NewL(
+            CPKIMapper& aMapper, CPKIWrapper& aWrapper);
+        static CPKISupport* NewLC(
+            CPKIMapper& aMapper, CPKIWrapper& aWrapper);
+        
+        
+        ~CPKISupport();
+        
+        void StartInitializeL(const RMessage2& aMessage);
+        void SetCurrentFunction(TInt aFunc);
+                        
+        // Certificate Data manipulation
+        void StoreCertificateL(const TDesC &aLabel, 
+            TCertificateOwnerType aOwnerType, const TDesC8 &aBufferPtr, 
+            const TBool& aIsDeletable, TRequestStatus& aStatus);
+        
+        void AttachCertificateL(const TDesC &aLabel, 
+            const TPKIKeyIdentifier &aKeyId, 
+            const TDesC8 &aBufferPtr, TRequestStatus& aStatus);
+        
+        void RetrieveCertificateL(const TDesC &aLabel, 
+            TPtr8 &aBufferPtr, const TPKICertificateOwnerType& aType, 
+            TRequestStatus& aStatus);
+                    
+        void RemoveCertificateL(const TDesC &aLabel, 
+            TRequestStatus& aStatus);
+                        
+        void SelectCertificateL(const TDesC &aLabel, 
+                                const TPKICertificateOwnerType& aType = EPKICACertificate);
+        
+        // Asynchronous sertificate store request
+        void GetCertificateStoreListAsync();
+        
+        // Helper methods
+        TInt GetRequiredBufferSize();
+        void SetCallerStatusPending(TRequestStatus& aStatus);
+        void CompleteCallerStatus(TInt aError);
+        void SetTrustL(
+            const TDesC &aLabel, TBool aTrusted, TRequestStatus& aStatus);
+        void TrustedL(const TDesC &aLabel, TRequestStatus& aStatus);
+        void SetApplicabilityL(
+            const TDesC &aLabel, const RArray<TUid>& aApplUids, 
+            TRequestStatus& Status);
+        void ApplicationsL(const TDesC &aLabel, TRequestStatus& Status);
+                    
+        inline void SetCertStoreType(TPkiServiceStoreType aStoreType) 
+            {
+            iCertStoreType = aStoreType;
+            };
+                    
+        inline const TPkiServiceStoreType CertStoreType() const 
+            {
+            return iCertStoreType;
+            };        
+  
+    private: // implementation
+        CPKISupport(CPKIMapper& aMapper, CPKIWrapper& aWrapper);
+        void ConstructL();
+        
+        void CancelCurrentOperation();
+        CCTKeyInfo::EKeyAlgorithm ConvertPKIAlgorithm(TPKIKeyAlgorithm aAlg);
+        TPKIKeyAlgorithm ConvertSymbianAlgorithm(CCTKeyInfo::EKeyAlgorithm aAlg);
+        void FindInterfacesL();
+        void ListAllCertificatesL();
+        void ReadNextCertForImportL();
+        void SaveCertInfoToCacheL();
+		TBool GetApplicationsOfCTFCertL();
+        
+        void ContinueStoreCertificateL();
+        void ContinueRetrieveCertificate();
+        void ContinueStoreCertifiedKeypairL();   
+        void ContinueRemoveCertificate();
+        void ContinueSetTrust();
+        void ContinueSetApplicability();
+        void ContinueApplications();        
+        void ContinueTrusted();        
+        void DoRunOperationL();
+        void DoRunLoggedInOperationL();
+        
+        // Function to remove all MIDP2 certificates from the 
+        // local listing (MIDP2 certs shouldn't be supported by VPN)
+        void CleanupCertListL();
+
+        // CActive methods
+        void RunL();
+        void DoCancel();
+        TInt RunError(TInt aError);
+        
+        /**
+         * Used for logging.
+         * Exctracts certificate info from the parameters 
+         * and inserts result into iCertInfoForLogging.
+         * Result string looks like this:
+         * \nLabel: <label> \nOwner: <owner> \nSubject: <subject> \nIssuer: <issuer>"
+         * 
+         * @param aLabel        Label of the certificate
+         * @param aOwnerType    Owner of the certificate
+         * @param aBufferPtr    The certificate
+         */
+        void ExtractCertInfoL(const TDesC& aLabel,
+				         	  const TCertificateOwnerType& aOwnerType,
+						      const TDesC8& aBufferPtr);
+						      
+        /**
+         * Logs certificate storing into VPN client UI log.
+         * 
+         * @param aError      0 if storing succeeded
+         */
+        void LogCertStoring(TInt aError);
+                
+    private: // data        
+        CPKIMapper                  &iMapper;
+        CPKIWrapper                 &iWrapper;
+        
+        TPending                    iPending;
+        TPtr8                       iImportCertDataPtr;                
+                    
+        RFs                         iFSession;
+        CUnifiedCertStore           *iCertStore;
+        MCTWritableCertStore        *iWritableCertStore;       
+        TRequestStatus              *iCallerStatus;
+        TInt                        iSupportStatus;
+        TPtr8                       *iOutBufferPtr;        
+        TInt                        iCurrentFunction;
+        TInitPhaseState             iInitState;
+        TSubState                   iSubState;        
+        RMPointerArray<CCTCertInfo> *iCerts;
+        CCertAttributeFilter        *iCertFilter;        
+        RMessage2                   iMessage;
+        TKeyIdentifier              iKeyId;
+        TInt                        iRequiredBufferLength;
+        TBool                       iTrusted;
+        RArray<TUid>                iApplUids;
+        TInt                        iImportCounter;
+        CMapDescriptor              *iImportCertMapping;
+        HBufC8                      *iImportCertData;
+		TBool						iToggleSwitch;		
+		
+		TPkiServiceStoreType        iCertStoreType;
+		TInt                        iDeviceCertStoreIndex;
+        MCTWritableCertStore*       iWritableDeviceCertStore;
+                
+        REventMediator              iEventMediator; // for logging
+        HBufC8*                     iCertInfoForLogging;
+
+};
+#endif
\ No newline at end of file