diff -r 000000000000 -r 164170e6151a pkiutilities/DeviceToken/Inc/DevCertOpenedKeysSrv.h --- /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 +