os/security/cryptoservices/filebasedcertificateandkeystores/source/keystore/Server/OpenedKeys.h
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
/*
sl@0
     2
* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     3
* All rights reserved.
sl@0
     4
* This component and the accompanying materials are made available
sl@0
     5
* under the terms of the License "Eclipse Public License v1.0"
sl@0
     6
* which accompanies this distribution, and is available
sl@0
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     8
*
sl@0
     9
* Initial Contributors:
sl@0
    10
* Nokia Corporation - initial contribution.
sl@0
    11
*
sl@0
    12
* Contributors:
sl@0
    13
*
sl@0
    14
* Description: 
sl@0
    15
* COpenedKey, abstract base class for performing crypto operations on keys
sl@0
    16
*
sl@0
    17
*/
sl@0
    18
sl@0
    19
sl@0
    20
/**
sl@0
    21
 @file 
sl@0
    22
 @internalTechnology
sl@0
    23
*/
sl@0
    24
 
sl@0
    25
#ifndef __OpenedKeys_h__
sl@0
    26
#define __OpenedKeys_h__
sl@0
    27
sl@0
    28
#include "CKeyDataManager.h"
sl@0
    29
#include "keystorepassphrase.h"
sl@0
    30
#include "fsdatatypes.h"
sl@0
    31
sl@0
    32
#ifdef SYMBIAN_KEYSTORE_USE_AUTH_SERVER
sl@0
    33
#include <authserver/authclient.h>
sl@0
    34
#endif // SYMBIAN_KEYSTORE_USE_AUTH_SERVER
sl@0
    35
sl@0
    36
class CRSAPrivateKey;
sl@0
    37
class CRSASignature;
sl@0
    38
class CDSAPrivateKey;
sl@0
    39
class CDSASignature;
sl@0
    40
class CDHParams;
sl@0
    41
class CDHPublicKey;
sl@0
    42
class CFSKeyStoreServer;
sl@0
    43
sl@0
    44
class COpenedKey : public CActive
sl@0
    45
	{
sl@0
    46
	
sl@0
    47
protected:
sl@0
    48
	enum TState
sl@0
    49
		{
sl@0
    50
		EIdle,
sl@0
    51
		EGetPassphrase,
sl@0
    52
		#ifdef SYMBIAN_KEYSTORE_USE_AUTH_SERVER
sl@0
    53
		EDoAuthenticate,
sl@0
    54
		EAuthenticate,
sl@0
    55
		#endif // SYMBIAN_KEYSTORE_USE_AUTH_SERVER
sl@0
    56
		};
sl@0
    57
	
sl@0
    58
public:
sl@0
    59
	/** Factory function for creating COpenedKey-derived classes. */
sl@0
    60
	static COpenedKey* NewL(const CFileKeyData& aKeyData, TUid aType, const RMessage2& aMessage,
sl@0
    61
							CFileKeyDataManager& aKeyDataMan, CPassphraseManager& aPassMan);
sl@0
    62
	
sl@0
    63
	virtual ~COpenedKey();
sl@0
    64
sl@0
    65
	/** Returns the object's human-readable label */
sl@0
    66
	const TDesC& Label() const;
sl@0
    67
sl@0
    68
	/** Returns the key's handle so we can identifiy it. */
sl@0
    69
	TInt Handle() const;
sl@0
    70
sl@0
    71
	/// The type of opened key
sl@0
    72
	virtual TUid Type() const = 0;
sl@0
    73
sl@0
    74
protected:
sl@0
    75
	COpenedKey(const CFileKeyData& aKeyData, CFileKeyDataManager& aKeyDataMan, CPassphraseManager& aPassMan);
sl@0
    76
	void GetPassphrase(TRequestStatus& aStatus);
sl@0
    77
sl@0
    78
	// Methods supplied by derived classes
sl@0
    79
sl@0
    80
	/// The key algorithm this operation applies to
sl@0
    81
	virtual CKeyInfo::EKeyAlgorithm Algorithm() const = 0;
sl@0
    82
	/// The key usage required to perform this operation
sl@0
    83
	virtual TKeyUsagePKCS15 RequiredUsage() const = 0;
sl@0
    84
	/// Load the private key data
sl@0
    85
	virtual void ReadPrivateKeyL(RReadStream& aStream) = 0;
sl@0
    86
	/// Perform the operation, called from RunL
sl@0
    87
	virtual void PerformOperationL() = 0;
sl@0
    88
	/// Clean up, called after normal end error completion
sl@0
    89
	virtual void Cleanup() = 0;
sl@0
    90
sl@0
    91
#ifdef SYMBIAN_KEYSTORE_USE_AUTH_SERVER
sl@0
    92
protected:
sl@0
    93
	void AuthenticateL();
sl@0
    94
#endif // SYMBIAN_KEYSTORE_USE_AUTH_SERVER
sl@0
    95
	
sl@0
    96
private:
sl@0
    97
	virtual void RunL();
sl@0
    98
	virtual TInt RunError(TInt aError);
sl@0
    99
	virtual void DoCancel();
sl@0
   100
sl@0
   101
private:
sl@0
   102
	void ConstructL(const RMessage2& aMessage);
sl@0
   103
	void CheckKeyL(const RMessage2& aMessage);
sl@0
   104
	void Complete(TInt aError);
sl@0
   105
sl@0
   106
private:
sl@0
   107
	const CFileKeyData&  iKeyData;
sl@0
   108
	CFileKeyDataManager& iKeyDataMan;
sl@0
   109
	CPassphraseManager&  iPassMan;
sl@0
   110
	HBufC*				 iLabel;
sl@0
   111
	
sl@0
   112
	CPassphrase*		 iPassphrase;
sl@0
   113
	CKeyInfo* 			iKeyInfo;
sl@0
   114
#ifdef SYMBIAN_KEYSTORE_USE_AUTH_SERVER
sl@0
   115
	AuthServer::CIdentity* iUserIdentity;
sl@0
   116
	AuthServer::RAuthClient iAuthClient;
sl@0
   117
	AuthServer::CAuthExpression* iExpression;
sl@0
   118
#endif // SYMBIAN_KEYSTORE_USE_AUTH_SERVER
sl@0
   119
protected:
sl@0
   120
	TState				 iState;
sl@0
   121
	TRequestStatus*		 iClientStatus;
sl@0
   122
	TBool				 iKeyRead;
sl@0
   123
	};
sl@0
   124
sl@0
   125
class CRSARepudiableSigner : public COpenedKey
sl@0
   126
	{
sl@0
   127
 public:
sl@0
   128
	CRSARepudiableSigner(const CFileKeyData& aKeyData, CFileKeyDataManager& aKeyDataMan, CPassphraseManager& aPassMan);
sl@0
   129
	~CRSARepudiableSigner();
sl@0
   130
	void Sign(const TDesC8& aPlaintext, CRSASignature*& aSignature, TRequestStatus& aStatus);
sl@0
   131
sl@0
   132
 private:
sl@0
   133
	virtual TUid Type() const;
sl@0
   134
	virtual CKeyInfo::EKeyAlgorithm Algorithm() const;
sl@0
   135
	virtual TKeyUsagePKCS15 RequiredUsage() const;
sl@0
   136
	virtual void ReadPrivateKeyL(RReadStream& aStream);
sl@0
   137
	virtual void PerformOperationL();
sl@0
   138
	virtual void Cleanup();
sl@0
   139
sl@0
   140
 private:
sl@0
   141
	CRSAPrivateKey* iPrivateKey;
sl@0
   142
	TPtrC8 			iPlaintext;
sl@0
   143
	CRSASignature** iSignaturePtr;	
sl@0
   144
	};
sl@0
   145
sl@0
   146
class CDSARepudiableSigner : public COpenedKey
sl@0
   147
	{
sl@0
   148
 public:
sl@0
   149
	CDSARepudiableSigner(const CFileKeyData& aKeyData, CFileKeyDataManager& aKeyDataMan, CPassphraseManager& aPassMan);
sl@0
   150
	~CDSARepudiableSigner();
sl@0
   151
	void Sign(const TDesC8& aPlaintext, CDSASignature*& aSignature, TRequestStatus& aStatus);
sl@0
   152
sl@0
   153
 private:	
sl@0
   154
	virtual TUid Type() const;
sl@0
   155
	virtual CKeyInfo::EKeyAlgorithm Algorithm() const;
sl@0
   156
	virtual TKeyUsagePKCS15 RequiredUsage() const;
sl@0
   157
	virtual void ReadPrivateKeyL(RReadStream& aStream);
sl@0
   158
	virtual void PerformOperationL();
sl@0
   159
	virtual void Cleanup();
sl@0
   160
sl@0
   161
 private:
sl@0
   162
	CDSAPrivateKey* iPrivateKey;
sl@0
   163
	TPtrC8 			iPlaintext;
sl@0
   164
	CDSASignature** iSignaturePtr;	
sl@0
   165
	};
sl@0
   166
sl@0
   167
class CFSRSADecryptor : public COpenedKey
sl@0
   168
	{
sl@0
   169
 public:
sl@0
   170
	CFSRSADecryptor(const CFileKeyData& aKeyData, CFileKeyDataManager& aKeyDataMan, CPassphraseManager& aPassMan);
sl@0
   171
	~CFSRSADecryptor();
sl@0
   172
	void Decrypt(const TDesC8& aCiphertext, HBufC8*&, TRequestStatus& aStatus);
sl@0
   173
sl@0
   174
 private:
sl@0
   175
	virtual TUid Type() const;
sl@0
   176
	virtual CKeyInfo::EKeyAlgorithm Algorithm() const;
sl@0
   177
	virtual TKeyUsagePKCS15 RequiredUsage() const;
sl@0
   178
 	virtual void ReadPrivateKeyL(RReadStream& aStream);
sl@0
   179
	virtual void PerformOperationL();
sl@0
   180
	virtual void Cleanup();
sl@0
   181
	
sl@0
   182
 private:
sl@0
   183
	CRSAPrivateKey* iPrivateKey;
sl@0
   184
	TPtrC8 			iCiphertext;
sl@0
   185
	HBufC8**		iPlaintextPtr;
sl@0
   186
	};
sl@0
   187
sl@0
   188
class CDHAgreement : public COpenedKey
sl@0
   189
	{
sl@0
   190
 public:
sl@0
   191
	CDHAgreement(const CFileKeyData& aKeyData, CFileKeyDataManager& aKeyDataMan, CPassphraseManager& aPassMan);
sl@0
   192
	~CDHAgreement();
sl@0
   193
	void PublicKey(CDHParams& aParameters, RInteger& aPublicKey, TRequestStatus& aStatus);
sl@0
   194
	void Agree(CDHPublicKey& aY, HBufC8*& aAgreedKey, TRequestStatus& aStatus);
sl@0
   195
sl@0
   196
 private:
sl@0
   197
	virtual TUid Type() const;
sl@0
   198
	virtual CKeyInfo::EKeyAlgorithm Algorithm() const;
sl@0
   199
	virtual TKeyUsagePKCS15 RequiredUsage() const;
sl@0
   200
	virtual void ReadPrivateKeyL(RReadStream& aStream);
sl@0
   201
	virtual void PerformOperationL();
sl@0
   202
	virtual void Cleanup();
sl@0
   203
sl@0
   204
 private:
sl@0
   205
	void DoPublicKeyL();
sl@0
   206
	void DoAgreeL();
sl@0
   207
	
sl@0
   208
	enum TDHState
sl@0
   209
		{
sl@0
   210
		EIdle,
sl@0
   211
		EPublicKey,
sl@0
   212
		EAgree
sl@0
   213
		};
sl@0
   214
sl@0
   215
 private:
sl@0
   216
	RInteger 	  iKey;
sl@0
   217
	TDHState	  iDHState;
sl@0
   218
	// For public key operation
sl@0
   219
	CDHParams* 	  iPKParams;
sl@0
   220
	RInteger* 	  iPKPublicKeyPtr;
sl@0
   221
	// For agree key operation
sl@0
   222
	CDHPublicKey* iAKPublicKey;
sl@0
   223
	HBufC8** 	  iAKAgreedKeyPtr;
sl@0
   224
	};
sl@0
   225
sl@0
   226
#endif