pkiutilities/DeviceToken/Inc/DevCertKeyStoreConduit.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 26 Jan 2010 15:20:08 +0200
changeset 0 164170e6151a
permissions -rw-r--r--
Revision: 201004

/*
* Copyright (c) 2006 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:   The header file of DevCertKeyStoreConduit
*
*/



#ifndef __CDEVCERTKEYSTORECONDUIT_H__
#define __CDEVCERTKEYSTORECONDUIT_H__

#include <bigint.h>
#include "DevTokenServer.h"

class CDSASignature;
class CRSASignature;
class CDevCertKeyStoreServer;
class CDevCertKeyStoreSession;
class CDevCertRSARepudiableSigner;
class CDevCertDSARepudiableSigner;
class CDevCertRSADecryptor;
class CDevTokenDHParams;
class CDevCertOpenedKeySrv;
class CDevTokenKeyInfo;
class CDHPublicKey;

/**
 * The key store server object (CDevtokenKeyStoreServer) owns one instance of this
 * object, which it calls for every client request.  This object unmarshalls the
 * client data and fulfills the request by calling back to the server object.
 * Any return information is then marshalled back to the client.
 *
 *  @lib
 *  @since S60 v3.2
 */
class CDevCertKeyStoreConduit : public CActive
    {
    public:
        
        static CDevCertKeyStoreConduit* NewL(CDevCertKeyStoreServer& aServer);
        
        virtual ~CDevCertKeyStoreConduit();
    
    public:
        
        void ServiceRequestL(const RMessage2& aMessage, CDevCertKeyStoreSession& aSession);
    
    protected: 
        
        //  From CActive
        virtual void DoCancel();
        
        virtual void RunL();
        
        virtual TInt RunError(TInt aError);
    
    private:
        
        CDevCertKeyStoreConduit(CDevCertKeyStoreServer& aServer); 
        
        void ConstructL();
    
    private:
        
        CDevCertKeyStoreConduit(const CDevCertKeyStoreConduit&);        //  No copying
        
        CDevCertKeyStoreConduit& operator=(const CDevCertKeyStoreConduit&); //  No copying
    
    private:
        
        // For MKeyStore
        void ListL(const RMessage2& aMessage);
        
        void CancelList(const RMessage2& aMessage);
        
        void GetKeyInfoL(const RMessage2& aMessage);
        
        void CancelGetKeyInfo(const RMessage2& aMessage);
    
    private:
        
        // For MCTKeyStoreManager
        void CreateKeyL(const RMessage2& aMessage);
        
        void CancelCreateKey(const RMessage2& aMessage);
        
        void ImportKeyL(const RMessage2& aMessage);
        
        void CancelImportKey(const RMessage2& aMessage);
        
        void ExportKeyL(const RMessage2& aMessage); 
        
        void CancelExportKey(const RMessage2& aMessage);
        
        void ExportPublicL(const RMessage2& aMessage); 
        
        void CancelExportPublic(const RMessage2& aMessage);
        
        void DeleteKeyL(const RMessage2& aMessage);
        
        void SetUsePolicyL(const RMessage2& aMessage);
        
        void SetManagementPolicyL(const RMessage2& aMessage); 
        
        void OpenKeyL(const RMessage2& aMessage, CDevCertKeyStoreSession& aSession, TUid aType);
        
        void CloseObjectL(const RMessage2& aMessage, CDevCertKeyStoreSession& aSession);
    
    private:
        
        void GetKeyLengthL(const RMessage2& aMessage); 
        
        TUid GetClientUidL(const RMessage2& aMessage) const;
        
        void OpenKeyGetInfoL(const RMessage2& aMessage);
        
        void RepudiableDSASignL(const RMessage2& aMessage, CDevCertKeyStoreSession& aSession);
        
        void CancelDSASign(const RMessage2& aMessage);
        
        void RepudiableRSASignL(const RMessage2& aMessage, CDevCertKeyStoreSession& aSession);
        
        void CancelRSASign(const RMessage2& aMessage);
        
        void DecryptL(const RMessage2& aMessage, CDevCertKeyStoreSession& aSession);
        
        void CancelDecrypt(const RMessage2& aMessage);
        
        void DHPublicKeyL(const RMessage2& aMessage, CDevCertKeyStoreSession& aSession);
        
        void DoDHPublicKeyL(const RMessage2& aMessage, CDevCertKeyStoreSession& aSession);
        
        void FinishDHPublicKeyL();
        
        void DHAgreeL(const RMessage2& aMessage, CDevCertKeyStoreSession& aSession);
        
        void DoDHAgreeL(const RMessage2& aMessage, CDevCertKeyStoreSession& aSession);
        
        void FinishDHAgreeL();
        
        void CancelDH(const RMessage2& aMessage);
        
        CDevCertOpenedKeySrv* ProcessL(const RMessage2& aMessage, CDevCertKeyStoreSession& aSession,
        
        const TUid& aCKeyInfoID, const TDevTokenMessages& aState, TPtr8& aPtr);
        
        void FinishOpenL(const RMessage2& aMessage, CDevCertKeyStoreSession& aSession, CDevCertOpenedKeySrv& aOpenedKey);
        
        void Cleanup();
    
    private:
    
        /** 
         * Encapsulate data about the current request.
         */
        class TAsyncRequest
            {
            public:
                
                void Set(TDevTokenMessages aRequest, const RMessage2& aMessage);
                
                void Complete(TInt aResult);
                
                void Cancel();
            
            public:
                
                inline TDevTokenMessages OutstandingRequest() { return iRequest; }
                
                inline const RMessage2& Message() { return iMessage ;}
        
            public:
                
                TAsyncRequest(TRequestStatus& aStatus);
            
                ~TAsyncRequest();
            
            private:
                
                TDevTokenMessages iRequest;
                
                RMessage2 iMessage;
                
                TRequestStatus& iOwnerStatus;
            };
             
    private:
    
        CDevCertKeyStoreServer& iServer;    // The server object used to execute client requests

        TAsyncRequest iCurrentRequest;      // The client request we are currently servicing

        HBufC8* iImportKey;           // Buffer for key imported key data 

        CDevTokenKeyInfo* iKeyInfo;       // Key info, used by create, import and export

        HBufC8* iText;              // Stores input data for sign and decrypt operations

        HBufC8* iExportBuf;           // Holds the exported key data
        
        CDevCertOpenedKeySrv* iOpenedKey;     // The key object for crypto operations
        
        CDSASignature* iDSASignature;     // Signature to return for DSA sign operation
        
        CRSASignature* iRSASignature;     // Signature to return for RSA sign operation
        
        CDevTokenDHParams* iDHParams;     // DH parameters for DU public key operation
        
        RInteger iDHPublicKeyOut;       // DH public key to return to client
        
        CDHPublicKey* iDHPublicKey;       // DH public key and params object for agree operation 
        
        HBufC8* iDHAgreedKeyOut;        // Agreed key to return to client
        
        HBufC8* iPlaintext;           // Buffer to hold decrypted data
    };

#endif  //  __CDEVCERTKEYSTORECONDUIT_H__