secsrv_plat/wim_cert_api/inc/WimCert.h
changeset 0 164170e6151a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secsrv_plat/wim_cert_api/inc/WimCert.h	Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,326 @@
+/*
+* 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:  Reads certificates bypassing crypto token framework
+*
+*/
+
+
+#ifndef WIMCERT_H
+#define WIMCERT_H
+
+
+//INCLUDES
+#include <e32base.h>
+#include <e32std.h>
+#include <ct.h>
+
+//TYPE DEFINITIONS
+typedef HBufC8* PHBufC8;
+typedef TPtr8* PTPtr8;
+
+enum TCertLocation
+    {
+    EUnknown_CDF,
+    ECertificates_CDF,
+    ETrustedCerts_CDF,
+    EUsefulCerts_CDF
+    };
+
+//FORWARD DECLARATIONS
+class RWimCertMgmt;
+class RWimMgmt;
+
+
+
+//CLASS DECLARATION
+/**
+*  Reads certificate extra information from Smart Card
+*
+*  @lib WimClient
+*  @since Series60 2.1
+*/
+class CWimCert : public CActive
+    {
+    public: // Member functions
+
+        /**
+        * Two-phased constructor.
+        */
+        IMPORT_C static CWimCert* NewL();
+
+        /**
+        * Destructor
+        */
+        IMPORT_C virtual ~CWimCert();
+        
+        /**
+        * Initializes the WIM server cache and restores certificates to 
+        * WimClient memory area. This is the most time consuming call. 
+        * @param  aStatus  Indicates the result of this call. Values:
+        *         KErrNotFound, no certificates was found
+        *         KErrNone, call was successull and at least one certificate 
+        *         found.
+        *         KErrGeneral, any other error
+        *         KErrNoMemory, no memory
+        * @return void
+        */
+        IMPORT_C void Initialize( TRequestStatus& aStatus );
+
+        /** 
+        * Cancels outgoing Initialize operation.
+        * After necessary cleanup, caller (given aStatus) is signalled with 
+        * KErrCancel 
+        * @return void
+        */
+        IMPORT_C void CancelInitialize();
+
+        /**
+        * Fetches trusted usages and location information for Key ID.
+        * @param  aKeyId (IN) Key identifier (hash), which points to a 
+        *         certificate.
+        * @param  aTrustedUsages (OUT) An array of OID strings indicating 
+        *         trusted usage. The notation is dot delimited 
+        *         (for example 1.23.456.7), the length of OÌD can vary. 
+        *         (OID=Object IDentifier). Caller is responsible of
+        *         destroying array.
+        * @param  aLocation (OUT) Indicates certificate directory location 
+        *         in Smart Card.
+        * @param  aStatus  Indicates the result of this call. Values:
+        *         KErrNotFound, given certificate KeyId was not found from card
+        *         KErrNone, no errors, given certificate was found and trusted 
+        *                   usage was present and location were known
+        *         KErrPathNotFound, trusted usage was not found or location 
+        *                           was not known
+        *         KErrGeneral, any other error
+        *         KErrNoMemory, No memory
+        * @return void
+        */
+        IMPORT_C void GetExtras( const TDesC8& aKeyId, 
+                                 RCPointerArray<HBufC>& aTrustedUsages,
+                                 TCertLocation& aLocation,
+                                 TRequestStatus& aStatus );
+
+        /** 
+        * Cancels outgoing GetExtras operation.
+        * After necessary cleanup, caller is signalled with KErrCancel 
+        * @return void
+        */
+        IMPORT_C void CancelGetExtras();
+
+    private:
+
+        /**
+        * Symbian constructor
+        */
+        void ConstructL();
+
+        /**
+        * C++ default constructor.
+        */
+        CWimCert();
+
+    private: //from CActive
+        
+        /**
+        * Different phases are handled here.
+        * @return void
+        */
+        void RunL();
+
+        /**
+        * Cancellation function
+        * Deallocates member variables and completes client status with
+        * KErrCancel error code.
+        * @return void
+        */
+        void DoCancel();
+
+        /**
+        * The active scheduler calls this function if this active 
+        * object's RunL() function leaves. 
+        * Handles necessary cleanup and completes request with
+        * received error code.
+        * @param aError -Error code which launched this event.
+        * @return TInt  Error code to active scheduler, is always KErrNone.
+        */ 
+        TInt RunError( TInt aError );
+        
+    private: // functions
+        
+        /**
+        * Tries to locate certificate by using retrieved KeyId.
+        * @return boolean -If certificate is found and it has extra data, 
+        * @return ETrue. Else return EFalse.
+        */
+        TBool CertificateLocated();
+
+        /**
+        * Fills caller's data area with requested extra data
+        * @return void
+        */
+        void ExtraDataFoundL();
+
+        /** 
+        * Handles cleanup for an object which is not derived from CBase
+        * @param aObject -object to be cleaned up
+        * @return void
+        */
+        static void Cleanup( TAny* aObject );
+
+        /** 
+        * Handles cleanup for an object which is not derived from CBase
+        * @param aObject -object to be cleaned up
+        * @return void
+        */
+        static void CleanupRefLst( TAny* aObject );
+        
+        /**
+        * Deallocates memory from the array.
+        * @return void
+        */
+        void DeallocWimCertInfo();   
+        
+        /**
+        * Sets own iStatus to KRequestPending, and signals it 
+        * with User::RequestComplete() request. This gives chance 
+        * to active scheduler to run other active objects. After a quick
+        * visit in actives cheduler, signal returns to RunL() and starts next
+        * phase of operation. 
+        * @return void
+        */
+        void SignalOwnStatusAndComplete();
+        
+        /** 
+        * Allocates variables when retrieving extra certificate data 
+        * from WimServer.
+        * @return void
+        */
+        void AllocMemoryForExtraDataRetrieveL();
+
+        /* 
+        * DeAllocates variables after extra data retrieving operation.
+        * @return void
+        */
+        void DeAllocMemoryForExtraDataRetrieve();
+
+        /* 
+        * DeAllocates member variable RArrays.
+        * @return void
+        */
+        void DeallocRArrays();
+
+    private: // data
+
+        /**
+        * Different states of this state machine
+        */
+        enum TPhase
+            {
+            EConnectClientSession,
+            ECreateNewSession,
+            EInitializeWim,
+            EListCertsFromWim,
+            EGetCertClientSession,
+            ELocateCertificate,
+            EGiveExtraData
+            };
+
+        //Client status is stored here while operation
+        //on the server side is done.
+        TRequestStatus*                 iClientStatus;
+                
+        //Handle to connection with server. Owned.
+        RWimCertMgmt*                   iConnectionHandle;
+
+        // Pointer to Client Session. Owned. 
+        // Valid as long as CWimSecModuleMgr is valid.
+        RWimMgmt*                       iClientSession;
+        
+        //Used to handle different phases.
+        TPhase                          iPhase;
+                        
+        //The count of certificates
+        TUint8                          iCertCount;
+        
+        //Buffer, which is used when fetching trustedusage from Server. Owned
+        HBufC*                          iCertHBufTrustedUsageFromServer;
+    
+        //Pointer, which used to point iCertHBufTrustedUsageFromServer. Owned
+        TPtr*                           iCertHBufTrustedUsageFromServerPtr;
+
+         //Array which is filled with trusted usage strings. Not owned.
+        RCPointerArray<HBufC>*          iTrustedUsages;
+
+        // Informs the certificate location to caller.
+        // Used when user has called GetExtras
+        TCertLocation*                  iLocation;
+
+        //The KeyId, which is received from caller. Used when user has called
+        //GetExtras
+        HBufC8*                         iKeyIdToBeMatched;
+        
+        //This tells the index of the certificate, from which we want
+        //the trusted usages taken out.
+        TUint8                          iCertIndex;
+
+        //Flag to indicate errors during WIM -initialization.
+        TInt                            iWimStartErr;
+
+        //Array for certificate type. 
+        RArray<TUint>                   iCertTypes;
+
+        //Array for trusted usage lengths
+        RArray<TUint>                   iTrustedUsageLengths;
+
+        //Arrray for usages
+        RArray<TUint>                   iUsages;
+
+        //Array for KeyIds.Owned
+        RArray<HBufC8*>                 iKeyIds;
+
+        //Used to point right keyId when retrieving extra data
+        TPtr8*                          iKeyIdPointer;
+
+        //Pointer to HBufC8*. This is used as an array when listing every
+        //certificate from WIM to an array during startup. Owned.
+        PHBufC8*                        iLabel;
+
+        //Pointer to HBufC8*. This is used as an array when listing every 
+        //certificate from WIM to an array during startup. Owned.
+        PHBufC8*                        iKeyId;
+
+        //Pointer to HBufC8*. This is used as an array when listing every 
+        //certificate from WIM to an array during startup. Owned.
+        PHBufC8*                        iCAId;
+
+        //Pointer to HBufC8*. This is used as an array when listing every 
+        //certificate from WIM to an array during startup. Owned.
+        PHBufC8*                        iIssuerHash;
+
+        //Pointer to iLabel. Also used as an array. Owned.        
+        PTPtr8*                         iLabelPtr;
+
+        //Pointer to iKeyId. Also used as an array. Owned.        
+        PTPtr8*                         iKeyIdPtr;
+
+        //Pointer to iCAId. Also used as an array. Owned.        
+        PTPtr8*                         iCAIdPtr;
+
+        //Pointer to iIssuerHash. Also used as an array. Owned.
+        PTPtr8*                         iIssuerHashPtr;
+    };
+
+#endif  // WIMCERT_H
+
+// End of File