pkiutilities/DeviceToken/Inc/DevCertOpenedKeysSrv.h
changeset 0 164170e6151a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkiutilities/DeviceToken/Inc/DevCertOpenedKeysSrv.h	Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,363 @@
+/*
+* 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 DevCertOpenedKeysSrv
+*
+*/
+
+
+
+#ifndef __DEVCERTOPENEDKEYSSRV_H__
+#define __DEVCERTOPENEDKEYSSRV_H__
+
+#include "DevCertKeyDataManager.h"
+#include "DevTokenDataTypes.h"
+
+class CRSAPrivateKey;
+class CRSASignature;
+class CDSAPrivateKey;
+class CDSASignature;
+class CDevTokenDHParams;
+class CDHPublicKey;
+class CDevCertKeyStoreServer;
+
+/**
+ * DevToken Server side
+ * Abstract base class for performing crypto operations on keys.
+ * 
+ *  @lib
+ *  @since S60 v3.2
+ */
+class CDevCertOpenedKeySrv : public CActive
+    {
+    public:
+    
+        /**
+         * Factory function for creating CDevCertOpenedKeySrv-derived classes.
+         * 
+         * @param aKeyData representing the key
+         * @param aType Type of opened key
+         * @param aMessage IPC message
+         * @param aKeyDataMan Key data manager
+         * @return new object of CDevCertOpenedKeySrv
+         */
+        static CDevCertOpenedKeySrv* NewL(const CDevCertKeyData& aKeyData, TUid aType, const RMessage2& aMessage,
+                                          CDevCertKeyDataManager& aKeyDataMan );
+        
+        virtual ~CDevCertOpenedKeySrv();
+
+         /**
+         * Returns the object's human-readable label.
+         * 
+         * @param 
+         * @return the object's human-readable label
+         */
+        const TDesC& Label() const;
+        
+        /**
+         * Returns the key's handle so we can identifiy it.
+         * 
+         * @param 
+         * @return the hadnle of key
+         */
+        TInt Handle() const;
+
+        /**
+         * The type of opened key.
+         * 
+         * @param 
+         * @return the uid of opened key
+         */
+        virtual TUid Type() const = 0;
+
+    protected:
+        
+        CDevCertOpenedKeySrv(const CDevCertKeyData& aKeyData, CDevCertKeyDataManager& aKeyDataMan );
+        
+        void DoOperation(TRequestStatus& aStatus);
+        
+        // Methods supplied by derived classes
+        
+    protected:
+    
+        /**
+         * The key algorithm this operation applies to
+         * 
+         * @param
+         * @return
+         */
+        virtual CDevTokenKeyInfo::EKeyAlgorithm Algorithm() const = 0;
+
+        /**
+         * The key usage required to perform this operation
+         * 
+         * @param
+         * @return
+         */
+        virtual TKeyUsagePKCS15 RequiredUsage() const = 0;
+        
+        /**
+         * Load the private key data
+         * 
+         * @param aStream used to read data
+         * @return
+         */
+        virtual void ReadPrivateKeyL(RReadStream& aStream) = 0;
+        
+        /**
+         * Perform the operation, called from RunL
+         * 
+         * @param 
+         * @return
+         */
+        virtual void PerformOperationL() = 0;
+        
+        /**
+         * Clean up, called after normal end error completion
+         * 
+         * @param 
+         * @return
+         */
+        virtual void Cleanup() = 0;
+
+    private:
+        enum TState
+            {
+            EIdle,
+            EOperation
+            };
+            
+        // from CActive
+        
+        virtual void RunL();
+        
+        virtual TInt RunError(TInt aError);
+        
+        virtual void DoCancel();
+
+    private:
+        
+        void ConstructL(const RMessage2& aMessage);
+        
+        void CheckKeyL(const CDevTokenKeyInfo& aKeyInfo, const RMessage2& aMessage);
+        
+        void Complete(TInt aError);
+
+    private:
+        
+        const CDevCertKeyData&  iKeyData;
+        
+        CDevCertKeyDataManager& iKeyDataMan;
+        
+        HBufC*         iLabel;
+        
+        TState         iState;
+        
+        TRequestStatus*    iClientStatus;
+
+    protected:
+        
+        TBool        iKeyRead;
+    };
+
+
+/**
+ * DevToken Server side
+ * class for performing crypto operations on RSA keys.
+ *
+ *  @lib
+ *  @since S60 v3.2
+ */
+class CDevCertRSARepudiableSignerSrv : public CDevCertOpenedKeySrv
+    {
+    public:
+        
+        CDevCertRSARepudiableSignerSrv(const CDevCertKeyData& aKeyData, CDevCertKeyDataManager& aKeyDataMan );
+        
+        ~CDevCertRSARepudiableSignerSrv();
+        
+        void Sign(const TDesC8& aPlaintext, CRSASignature*& aSignature, TRequestStatus& aStatus);
+
+    private:
+        
+        virtual TUid Type() const;
+        
+        virtual CDevTokenKeyInfo::EKeyAlgorithm Algorithm() const;
+        
+        virtual TKeyUsagePKCS15 RequiredUsage() const;
+        
+        virtual void ReadPrivateKeyL(RReadStream& aStream);
+        
+        virtual void PerformOperationL();
+        
+        virtual void Cleanup();
+
+    private:
+        
+        CRSAPrivateKey* iPrivateKey;
+        
+        TPtrC8      iPlaintext;
+        
+        CRSASignature** iSignaturePtr;  
+    };
+
+
+/**
+ * DevToken Server side
+ * class for performing crypto operations on DSA keys.
+ *
+ *  @lib
+ *  @since S60 v3.2
+ */
+class CDevCertDSARepudiableSignerSrv : public CDevCertOpenedKeySrv
+    {
+    public:
+        
+        CDevCertDSARepudiableSignerSrv(const CDevCertKeyData& aKeyData, CDevCertKeyDataManager& aKeyDataMan );
+        
+        ~CDevCertDSARepudiableSignerSrv();
+        
+        void Sign(const TDesC8& aPlaintext, CDSASignature*& aSignature, TRequestStatus& aStatus);
+
+    private: 
+        
+        virtual TUid Type() const;
+        
+        virtual CDevTokenKeyInfo::EKeyAlgorithm Algorithm() const;
+        
+        virtual TKeyUsagePKCS15 RequiredUsage() const;
+        
+        virtual void ReadPrivateKeyL(RReadStream& aStream);
+        
+        virtual void PerformOperationL();
+        
+        virtual void Cleanup();
+
+    private:
+        
+        CDSAPrivateKey* iPrivateKey;
+        
+        TPtrC8      iPlaintext;
+        
+        CDSASignature** iSignaturePtr;  
+    };
+
+
+/**
+ * DevToken Server side
+ * class for performing decrypt operations on RSA keys.
+ *
+ *  @lib
+ *  @since S60 v3.2
+ */
+class CDevCertRSADecryptorSrv : public CDevCertOpenedKeySrv
+    {
+    public:
+        
+        CDevCertRSADecryptorSrv(const CDevCertKeyData& aKeyData, CDevCertKeyDataManager& aKeyDataMan );
+        
+        ~CDevCertRSADecryptorSrv();
+        
+        void Decrypt(const TDesC8& aCiphertext, HBufC8*&, TRequestStatus& aStatus);
+
+    private:
+        
+        virtual TUid Type() const;
+        
+        virtual CDevTokenKeyInfo::EKeyAlgorithm Algorithm() const;
+        
+        virtual TKeyUsagePKCS15 RequiredUsage() const;
+        
+        virtual void ReadPrivateKeyL(RReadStream& aStream);
+        
+        virtual void PerformOperationL();
+        
+        virtual void Cleanup();
+
+    private:
+        
+        CRSAPrivateKey* iPrivateKey;
+        
+        TPtrC8      iCiphertext;
+        
+        HBufC8**    iPlaintextPtr;
+    };
+
+
+/**
+ * DevToken Server side
+ * class for performing crypto operations on DH keys.
+ *
+ *  @lib
+ *  @since S60 v3.2
+ */
+class CDevCertDHAgreementSrv : public CDevCertOpenedKeySrv
+    {
+    public:
+    
+        CDevCertDHAgreementSrv(const CDevCertKeyData& aKeyData, CDevCertKeyDataManager& aKeyDataMan );
+        
+        ~CDevCertDHAgreementSrv();
+        
+        void PublicKey(CDevTokenDHParams& aParameters, RInteger& aPublicKey, TRequestStatus& aStatus);
+        
+        void Agree(CDHPublicKey& aY, HBufC8*& aAgreedKey, TRequestStatus& aStatus);
+
+    private:
+        
+        virtual TUid Type() const;
+        
+        virtual CDevTokenKeyInfo::EKeyAlgorithm Algorithm() const;
+        
+        virtual TKeyUsagePKCS15 RequiredUsage() const;
+        
+        virtual void ReadPrivateKeyL(RReadStream& aStream);
+        
+        virtual void PerformOperationL();
+        
+        virtual void Cleanup();
+
+    private:
+        
+        void DoPublicKeyL();
+        
+        void DoAgreeL();
+
+    enum TDHState
+        {
+        EIdle,
+        EPublicKey,
+        EAgree
+        };
+
+    private:
+        
+        RInteger    iKey;
+        
+        TDHState    iDHState;
+        
+        // For public key operation
+        CDevTokenDHParams*    iPKParams;
+        
+        RInteger*     iPKPublicKeyPtr;
+        
+        // For agree key operation
+        CDHPublicKey* iAKPublicKey;
+        
+        HBufC8**    iAKAgreedKeyPtr;
+    };
+
+#endif  //__DEVCERTOPENEDKEYSSRV_H__
+
+//EOF
+