wim/WimPlugin/inc/WimAuthenticationObject.h
changeset 0 164170e6151a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wim/WimPlugin/inc/WimAuthenticationObject.h	Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,503 @@
+/*
+* 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:  An implementation of single authentication object
+*
+*/
+
+
+#ifndef CWIMAUTHENTICATIONOBJECT_H
+#define CWIMAUTHENTICATIONOBJECT_H
+
+// INCLUDES
+
+#include <mctauthobject.h>
+#include <mctkeystore.h>
+#include <unifiedcertstore.h>
+#include <mctwritablecertstore.h>
+#include <unifiedkeystore.h>
+#include "WimToken.h"
+
+// FORWARD DECLARATIONS
+
+class CCTKeyInfo;
+class CWimPin;
+
+// CLASS DECLARATION
+
+/**
+*  Represents one authentication object (for example a pin code)
+*
+*  @lib   WimPlugin
+*  @since Series 60 2.1
+*/
+
+class CWimAuthenticationObject : public CActive, public MCTAuthenticationObject
+    {
+
+    public: // Two-phased constructor
+
+        /**
+        * @param  aToken   A reference to current token
+        * @param  aWimPin  A reference to current pin manager
+        * @param  aLabel   A reference to label for this object
+        * @param  aType    Type of this object
+        * @param  aHandle  Handle of this object
+        * @param  aObjectStatus  Status of this object
+        * @return An instance of this class
+        */
+        static CWimAuthenticationObject* NewLC( CWimToken& aToken, 
+                                                CWimPin& aWimPin,
+                                                const TDesC& aLabel,
+                                                const TUid aType,
+                                                const TInt aHandle,
+                                                TUint32 aObjectStatus );
+
+    public: // Functions from base class MCTTokenObject
+
+        /**
+        * Returns a reference to this authentication object's 
+        * human-readable label.
+        * @return A reference to object's label.
+        */
+        const TDesC& Label() const;
+
+        /**
+        * Returns a reference to current token.
+        * @return A reference to current token.
+        */
+        MCTToken& Token() const;
+
+        /**
+        * Returns type (UID) of current authentication object. 
+        * Must be unique within a token. WIM_PIN_G_UID or WIM_PIN_NR_UID
+        * @return UID of the current object.
+        */
+        TUid Type() const;      
+
+        /**
+        * Returns a handle of the authentication object.
+        * @return A handle
+        *         Must be unique within a token.
+        */
+        TCTTokenObjectHandle Handle() const;    
+
+    public: // Functions from base class MCTAuthenticationObject
+
+        /**
+        * Returns a list of all the objects which this authentication object 
+        * protects; for example keys and certificates.
+        * The caller of this functions owns all its parameters.
+        * @param  aObjects (OUT) The returned objects will be appended 
+        *         to this array.
+        * @param  aStatus (IN/OUT) Completed with the return code when 
+        *         the operation completes.
+        *         KErrNone, if no errors detected. Note: if protected
+        *         objects are not found, it is also KErrNone
+        *         KErrCancel, if call is canceled
+        *         KErrHardwareNotAvailable, if Wim card suddenly removed
+        *         Any other system wide error code (e.g. KErrNoMemory)
+        * @return void
+        */
+        void ListProtectedObjects( RMPointerArray<MCTTokenObject>& aObjects,
+                                   TRequestStatus& aStatus );
+
+        /**
+        * Cancels an ongoing ListProtectedObjects operation.
+        * @return void
+        */
+        void CancelListProtectedObjects();
+
+        /**
+        * Changes the reference data (e.g. PIN value). The security
+        * dialog component will prompt for the old and new reference data.
+        * @param  aStatus (IN/OUT) Completed with the return code when the 
+        *         operation completes.
+        *         KErrNone, if no errors detected.
+        *         KErrLocked, if this authentication object is blocked
+        *         KErrNotSupported, if authentication object reference data 
+        *         cannot be changed
+        *         KErrBadData, if user entered wrong authentication data
+        *         KErrHardwareNotAvailable, if Wim card suddenly removed
+        *         Any other system wide error code (e.g. KErrNoMemory)
+        * @return void
+        */
+        void ChangeReferenceData( TRequestStatus &aStatus );
+
+        /**
+        * Cancels an ongoing ChangeReferenceData operation. 
+        * @return void
+        */
+        void CancelChangeReferenceData();
+
+        /**
+        * Unblocks the authentication object. The security dialog component will
+        * prompt for the unblocking authentication object.
+        * @param  aStatus (IN/OUT) Completed with the return code when the 
+        *         operation completes. 
+        *         KErrNone, if no errors detected, or authentication object was
+        *         not blocked
+        *         KErrNotSupported, if authentication object cannot be unblocked
+        *         KErrBadData, if user entered wrong authentication data
+        *         KErrHardwareNotAvailable, if Wim card suddenly removed
+        *         Any other system wide error code (e.g. KErrNoMemory)
+        * @return void
+        */
+        void Unblock( TRequestStatus &aStatus );
+    
+        /**
+        * Cancels an ongoing Unblock operation.
+        * @return void
+        */
+        void CancelUnblock();
+
+        /**
+        * Gets the status of the authentication object. 
+        * @return  See TCTAuthenticationStatus for the format of the 
+        *          return value.
+        *          When status cannot be fetched for some reasons, this value 
+        *          is zero.
+        */
+        TUint32 Status() const;
+
+        /**
+        * Disables the authentication object.
+        * @param  aStatus (IN/OUT) Completed with the return code when the 
+        *         operation completes.
+        *         KErrNone, if no errors detected
+        *         KErrLocked, if authentication object is blocked
+        *         KErrNotFound, if authentication object cannot be found
+        *         KErrBadData, if user entered wrong authentication data
+        *         KErrHardwareNotAvailable, if Wim card suddenly removed
+        *         Any other system wide error code (e.g. KErrNoMemory)
+        * @return void
+        */
+        void Disable( TRequestStatus &aStatus );
+
+        /**
+        * Cancels an ongoing Disable operation.
+        * @return void
+        */
+        void CancelDisable();
+
+        /**
+        * Enables the authentication object.
+        * @param  aStatus (IN/OUT) Completed with the return code when 
+        *         the operation completes.
+        *         KErrNone, if no errors detected
+        *         KErrLocked, if authentication object is blocked
+        *         KErrNotFound, if authentication object cannot be found
+        *         KErrBadData, if user entered wrong authentication data
+        *         KErrHardwareNotAvailable, if Wim card suddenly removed
+        *         Any other system wide error code (e.g. KErrNoMemory)
+        * @return void
+        */
+        void Enable( TRequestStatus &aStatus );
+
+        /**
+        * Cancels an ongoing Enable operation.
+        * @return void
+        */
+        void CancelEnable();
+
+        /** 
+        * Opens the authentication object, meaning that the protected objects 
+        * can be accessed without provoking the authentication mechanism for 
+        * the duration of the timeout period. Note. It is not strictly 
+        * necessary to call this function, as the authentication object will 
+        * be opened when any operation that needs it to be opened is called, 
+        * but it is sometimes useful to control the timing of authentication 
+        * dialogs. Note also that this function will do nothing if the 
+        * authentication object is open, or if it authentication object requires
+        * the authentication.
+        * @param aStatus  TRequestStatus from the caller.(IN/OUT)
+        *         KErrNone, if no errors detected,  or authentication object
+        *         is open
+        *         KErrLocked, if authentication object is blocked
+        *         KErrNotFound, if authentication object cannot be found
+        *         KErrNotSupported, if authentication object is not openable 
+        *         KErrHardwareNotAvailable, if Wim card suddenly removed
+        *         Any other system wide error code (e.g. KErrNoMemory)
+        * @return void
+        */
+        void Open( TRequestStatus& aStatus );
+
+        /** 
+        * Closes an authentication object.
+        * @param aStatus  TRequestStatus from the caller.(IN/OUT)
+        *         KErrNone, if no errors detected or authentication object
+        *         is closed.
+        *         KErrLocked, if authentication object is blocked
+        *         KErrNotSupported, if authentication object is not closeable
+        *         KErrHardwareNotAvailable, if Wim card suddenly removed
+        *         Any other system wide error code (e.g. KErrNoMemory)
+        * @return void
+        */
+        void Close( TRequestStatus& aStatus );
+
+        /** 
+        * Returns the amount of time in seconds that the authentication object
+        * will remain open for, or 0 if it is closed. Thís call is valid
+        * only for authentication object, that can be opened (e.g. PIN-G)
+        * @param aStime   Time (in seconds) to be returned. (OUT)
+        * @param aStatus  TRequestStatus from the caller. (IN/OUT)
+        *         KErrNone, if no errors detected, or authentication object
+        *         is closed.
+        *         KErrLocked, if authentication object is blocked
+        *         KErrNotSupported, if authentication object is not allowed to
+        *         be asked for timing information
+        *         KErrHardwareNotAvailable, if Wim card suddenly removed
+        *         Any other system wide error code (e.g. KErrNoMemory)
+        * @return void
+        */
+        void TimeRemaining( TInt& aStime, TRequestStatus& aStatus ); 
+
+        /** 
+        * Sets the time in seconds for this authentication
+        * object. Permitted values include 0, meaning always ask, and -1,
+        * meaning until it's explicitly closed. Particular authentication
+        * objects might restrict the range of values permitted. Thís call 
+        * is valid only for authentication object, that can be opened 
+        * (e.g. PIN-G)
+        * @param aTime    (IN) Timeout (in seconds) to be set.
+        * @param aStatus  TRequestStatus from the caller. (IN/OUT)
+        *         KErrNone, if no errors detected, or authentication object
+        *         is closed.
+        *         KErrLocked, if authentication object is blocked
+        *         KErrArgument, if aTime is not allowed. Permitted values 
+        *         include 0, meaning always ask, and -1, meaning until it's 
+        *         explicitly closed.
+        *         KErrNotSupported, if authentication object is not allowed to
+        *         be set time
+        *         KErrHardwareNotAvailable, if Wim card suddenly removed
+        *         Any other system wide error code (e.g. KErrNoMemory)
+        * @return void
+        */
+        void SetTimeout( TInt aTime, TRequestStatus& aStatus ); 
+
+        /** 
+        * Gets the current timeout value, in seconds. See SetTimeout for
+        * an explanation of the values. Thís call is valid only for 
+        * authentication object, that can be opened (e.g. PIN-G)
+        * @param aTime  Current timeout (in seconds) to be returned. (OUT)
+        * @param aStatus  TRequestStatus from the caller. (IN/OUT)
+        *         KErrNone, if no errors detected, or authentication object
+        *         is closed.
+        *         KErrNotSupported, if authentication object is not allowed to
+        *         be queried about timing information
+        *         KErrHardwareNotAvailable, if Wim card suddenly removed
+        *         Any other system wide error code (e.g. KErrNoMemory)
+        * @return void
+        */
+        void Timeout( TInt& aTime, TRequestStatus& aStatus ); 
+
+        /** 
+        * Returns more token information than framework's MCTToken.
+        * Needed in MCTAuthenticationObjectList interface when creating
+        * authentication objects.
+        * @return  A reference to CWimToken.
+        */
+        CWimToken& TokenWider() const;
+
+        /** 
+        * Returns a reference to pin module.
+        * Needed in MCTAuthenticationObjectList interface when creating
+        * authentication objects.
+        * @return  A reference to CWimPin.
+        */
+        CWimPin& PinModule() const;
+
+    protected:  // From base class MCTTokenObject
+        
+        virtual void DoRelease();
+
+    protected:  // From base class CActive
+
+        void RunL();
+
+        /** 
+        * Leaves in RunL are handled here.
+        * @param  aError  Leaving code
+        * @return An integer that should be KErrNone if leave was handled.
+        */
+        TInt RunError( TInt aError );
+        
+        void DoCancel();
+
+    private: // Constructors
+
+        /**
+        * Default constructor
+        * @param  aToken   A reference to current token
+        * @param  aWimPin  A reference to current pin manager
+        * @param  aType    Type of this object
+        * @param  aHandle  Handle of this object
+        * @param  aObjectStatus  Status of this object
+        */
+        CWimAuthenticationObject( CWimToken& aToken,
+                                  CWimPin& aWimPin,
+                                  const TUid aType,
+                                  const TInt aHandle,
+                                  TUint32 aObjectStatus );
+
+        /**
+        * Second phase constructor
+        * @param  aLabel  A reference to this object's label
+        */
+        void ConstructL( const TDesC& aLabel );
+
+        // Destructor
+        virtual ~CWimAuthenticationObject();
+
+    private: // Own functions
+
+        /** 
+        * Frees unified key store resources.
+        * @return void
+        */
+        void FreeUnifiedKeyStore();
+
+        /** 
+        * Frees unified cert store resources.
+        * @return void
+        */
+        void FreeUnifiedCertStore();
+
+        /** 
+        * Selects keys according to given filter.
+        * @return void
+        */
+        void DoFilterKeys();
+
+        /** 
+        * Validates protected certificates
+        * @return void
+        */
+        void DoListCertEntries();
+
+        /** 
+        * Constructs final protected objects
+        * @return void
+        */
+        void DoMakeObjectsL();
+
+        /** 
+        * General function for creating authentication objects.
+        * @param  aHandle  Handle of authentication object
+        * @return  A pointer to created object
+        */
+        MCTAuthenticationObject* MakeAuthObjectL();
+
+        /** 
+        * Returns true or false indicating if token is removed or not
+        * @return  Boolean true or false
+        */
+        TBool TokenRemoved();
+
+        // Checks if token is removed or is this object active
+        TBool EnteringAllowed( TRequestStatus& aStatus );
+
+    private: // Data
+
+        // State flag for RunL
+
+        enum TPhase
+            {
+            EGetKeyInfos = 0,
+            EFilterKeys,
+            EGetCerts,
+            EInitCertStore,
+            EListCertEntries,
+            EMakeObjects,
+            EIdle,
+            EEnablePinQuery,
+            EDisablePinQuery,
+            EChangePin,
+            EUnblockPin,
+            EVerifyPin
+            };
+
+        // Flag for internal state machine
+        TPhase iPhase;
+
+        // Used for saving caller status 
+        // This class don't own the pointed object
+        TRequestStatus* iOriginalRequestStatus;
+
+        // A reference to current token. Will be asssigned in construction.
+        // This class don't own that referenced object.
+        CWimToken& iToken;
+
+        // Pointer to pin manager, this class don't own pointed object.
+        CWimPin& iWimPin;
+
+        // A pointer to buffer containing human readable label for 
+        // this authentication object. This class owns this buffer.
+        HBufC* iLabel;
+
+        // Contains the type of this authentication object.
+        // For example WIM_PIN_G_UID or WIM_PIN_NR_UID
+        TUid iType;     
+
+        // The handle of authentication object. An integer value
+        // running from 0 to (number of authentication objects) - 1
+        TInt iObjectId;
+
+        // Holds a status of this authentication object. 
+        // See enum TCTAuthenticationStatus in MCTAuthObject.h 
+        // for status values.
+        TUint32 iObjectStatus;
+
+        // Used with unified key store to save keys for a while
+        RMPointerArray<CCTKeyInfo> iKeyInfos;
+
+        // Used with unified key store to filter keys
+        TCTKeyAttributeFilter iKeyFilter;   
+
+        // Temporal array for object pointers
+        // This array is used to append objects in List operation
+        // This class don't own the pointed objects
+        RMPointerArray<MCTTokenObject>* iObjects;
+
+        // A pointer to unified key store
+        // This class owns the pointed object
+        CUnifiedKeyStore* iUnifiedKeyStore;
+
+        // A pointer to unified cert store
+        // This class owns the pointed object
+        CUnifiedCertStore* iUnifiedCertStore;
+
+        // A pointer to certificate filter object
+        // This class owns the pointed object.
+        CCertAttributeFilter* iCertFilter;
+
+        // Temporal array for certificates this authentication 
+        // object protects.
+        RMPointerArray<CCTCertInfo> iCertStoreEntries;
+
+        // A Reference to wider implementation specific token
+        // for internal functions.
+        CWimToken& iTokenWider;
+
+        // For call to Unified KeyStore, which might have file key store
+        RFs iFs;
+
+        // Array of pointers to PIN modules.This class don't own pointed
+        // objects.
+        const CArrayPtrFlat<CWimPin>* iPinNRs; 
+    };
+
+
+#endif      // CWIMAUTHENTICATIONOBJECT_H   
+            
+// End of File