os/security/cryptoservices/filebasedcertificateandkeystores/source/keystore/Server/OpenedKeys.h
First public contribution.
2 * Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
4 * This component and the accompanying materials are made available
5 * under the terms of the License "Eclipse Public License v1.0"
6 * which accompanies this distribution, and is available
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
15 * COpenedKey, abstract base class for performing crypto operations on keys
25 #ifndef __OpenedKeys_h__
26 #define __OpenedKeys_h__
28 #include "CKeyDataManager.h"
29 #include "keystorepassphrase.h"
30 #include "fsdatatypes.h"
32 #ifdef SYMBIAN_KEYSTORE_USE_AUTH_SERVER
33 #include <authserver/authclient.h>
34 #endif // SYMBIAN_KEYSTORE_USE_AUTH_SERVER
42 class CFSKeyStoreServer;
44 class COpenedKey : public CActive
52 #ifdef SYMBIAN_KEYSTORE_USE_AUTH_SERVER
55 #endif // SYMBIAN_KEYSTORE_USE_AUTH_SERVER
59 /** Factory function for creating COpenedKey-derived classes. */
60 static COpenedKey* NewL(const CFileKeyData& aKeyData, TUid aType, const RMessage2& aMessage,
61 CFileKeyDataManager& aKeyDataMan, CPassphraseManager& aPassMan);
63 virtual ~COpenedKey();
65 /** Returns the object's human-readable label */
66 const TDesC& Label() const;
68 /** Returns the key's handle so we can identifiy it. */
71 /// The type of opened key
72 virtual TUid Type() const = 0;
75 COpenedKey(const CFileKeyData& aKeyData, CFileKeyDataManager& aKeyDataMan, CPassphraseManager& aPassMan);
76 void GetPassphrase(TRequestStatus& aStatus);
78 // Methods supplied by derived classes
80 /// The key algorithm this operation applies to
81 virtual CKeyInfo::EKeyAlgorithm Algorithm() const = 0;
82 /// The key usage required to perform this operation
83 virtual TKeyUsagePKCS15 RequiredUsage() const = 0;
84 /// Load the private key data
85 virtual void ReadPrivateKeyL(RReadStream& aStream) = 0;
86 /// Perform the operation, called from RunL
87 virtual void PerformOperationL() = 0;
88 /// Clean up, called after normal end error completion
89 virtual void Cleanup() = 0;
91 #ifdef SYMBIAN_KEYSTORE_USE_AUTH_SERVER
94 #endif // SYMBIAN_KEYSTORE_USE_AUTH_SERVER
98 virtual TInt RunError(TInt aError);
99 virtual void DoCancel();
102 void ConstructL(const RMessage2& aMessage);
103 void CheckKeyL(const RMessage2& aMessage);
104 void Complete(TInt aError);
107 const CFileKeyData& iKeyData;
108 CFileKeyDataManager& iKeyDataMan;
109 CPassphraseManager& iPassMan;
112 CPassphrase* iPassphrase;
114 #ifdef SYMBIAN_KEYSTORE_USE_AUTH_SERVER
115 AuthServer::CIdentity* iUserIdentity;
116 AuthServer::RAuthClient iAuthClient;
117 AuthServer::CAuthExpression* iExpression;
118 #endif // SYMBIAN_KEYSTORE_USE_AUTH_SERVER
121 TRequestStatus* iClientStatus;
125 class CRSARepudiableSigner : public COpenedKey
128 CRSARepudiableSigner(const CFileKeyData& aKeyData, CFileKeyDataManager& aKeyDataMan, CPassphraseManager& aPassMan);
129 ~CRSARepudiableSigner();
130 void Sign(const TDesC8& aPlaintext, CRSASignature*& aSignature, TRequestStatus& aStatus);
133 virtual TUid Type() const;
134 virtual CKeyInfo::EKeyAlgorithm Algorithm() const;
135 virtual TKeyUsagePKCS15 RequiredUsage() const;
136 virtual void ReadPrivateKeyL(RReadStream& aStream);
137 virtual void PerformOperationL();
138 virtual void Cleanup();
141 CRSAPrivateKey* iPrivateKey;
143 CRSASignature** iSignaturePtr;
146 class CDSARepudiableSigner : public COpenedKey
149 CDSARepudiableSigner(const CFileKeyData& aKeyData, CFileKeyDataManager& aKeyDataMan, CPassphraseManager& aPassMan);
150 ~CDSARepudiableSigner();
151 void Sign(const TDesC8& aPlaintext, CDSASignature*& aSignature, TRequestStatus& aStatus);
154 virtual TUid Type() const;
155 virtual CKeyInfo::EKeyAlgorithm Algorithm() const;
156 virtual TKeyUsagePKCS15 RequiredUsage() const;
157 virtual void ReadPrivateKeyL(RReadStream& aStream);
158 virtual void PerformOperationL();
159 virtual void Cleanup();
162 CDSAPrivateKey* iPrivateKey;
164 CDSASignature** iSignaturePtr;
167 class CFSRSADecryptor : public COpenedKey
170 CFSRSADecryptor(const CFileKeyData& aKeyData, CFileKeyDataManager& aKeyDataMan, CPassphraseManager& aPassMan);
172 void Decrypt(const TDesC8& aCiphertext, HBufC8*&, TRequestStatus& aStatus);
175 virtual TUid Type() const;
176 virtual CKeyInfo::EKeyAlgorithm Algorithm() const;
177 virtual TKeyUsagePKCS15 RequiredUsage() const;
178 virtual void ReadPrivateKeyL(RReadStream& aStream);
179 virtual void PerformOperationL();
180 virtual void Cleanup();
183 CRSAPrivateKey* iPrivateKey;
185 HBufC8** iPlaintextPtr;
188 class CDHAgreement : public COpenedKey
191 CDHAgreement(const CFileKeyData& aKeyData, CFileKeyDataManager& aKeyDataMan, CPassphraseManager& aPassMan);
193 void PublicKey(CDHParams& aParameters, RInteger& aPublicKey, TRequestStatus& aStatus);
194 void Agree(CDHPublicKey& aY, HBufC8*& aAgreedKey, TRequestStatus& aStatus);
197 virtual TUid Type() const;
198 virtual CKeyInfo::EKeyAlgorithm Algorithm() const;
199 virtual TKeyUsagePKCS15 RequiredUsage() const;
200 virtual void ReadPrivateKeyL(RReadStream& aStream);
201 virtual void PerformOperationL();
202 virtual void Cleanup();
218 // For public key operation
219 CDHParams* iPKParams;
220 RInteger* iPKPublicKeyPtr;
221 // For agree key operation
222 CDHPublicKey* iAKPublicKey;
223 HBufC8** iAKAgreedKeyPtr;