Update contrib.
2 * Copyright (c) 2003-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.
16 * The unified key store implementation
27 #ifndef __UNIFIEDKEYSTORE_H__
28 #define __UNIFIEDKEYSTORE_H__
33 #include <mctkeystoremanager.h>
35 #ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
39 class CAsymmetricCipher;
45 * Unified KeyStore panics
50 enum TUnifiedKeyStorePanic
52 EUnexpectedInitialise = 1, ///< Unexpected initialise
53 EArrayAccessOutOfBounds = 2, ///< Array access out of bounds
54 ETokensArrayAlreadyInUse = 3, ///< Tokens array already in use
55 EUnrecognisedState = 4, ///< Unrecognised state
59 * The unified key store.
61 * This class provides a key store whose contents are the sum of the contents of
62 * all key store implementations on the device. It is intended a single point
63 * of access for clients wishing to access key stores.
65 * Since this class is intended for widespread use, capability checks relating
66 * to key access are documented here even though the checks are actually made in
67 * the individual key store implementations.
72 NONSHARABLE_CLASS(CUnifiedKeyStore) : public CActive, public MKeyStore
76 * Creates a new CUnifiedKeyStore object.
78 * @param aFs A file server session. It must already be open.
79 * @return A pointer to an instance of the CUnifiedKeyStore class.
81 IMPORT_C static CUnifiedKeyStore* NewL(RFs& aFs);
84 * Creates a new CUnifiedKeyStore object and and puts a pointer to the new object
85 * onto the cleanup stack.
87 * @param aFs A file server session. It must already be open.
88 * @return A pointer to an instance of the CUnifiedKeyStore class.
90 IMPORT_C static CUnifiedKeyStore* NewLC(RFs& aFs);
93 * The destructor destroys all the resources owned by this object.
95 IMPORT_C ~CUnifiedKeyStore();
98 * Initialises the manager.
100 * It must be called after the manager has been constructed and before any call
101 * to the manager functions.
103 * This is an asynchronous request.
105 * @param aStatus The request status object; contains the result of the Initialize()
106 * request when complete. Set to KErrCancel if any outstanding request is cancelled.
108 IMPORT_C void Initialize(TRequestStatus& aStatus);
111 * Cancels an ongoing Initialize() operation.
113 * The operation completes with KErrCancel.
115 IMPORT_C void CancelInitialize();
117 public: // Implementation of MKeyStore interface
118 virtual void List(RMPointerArray<CCTKeyInfo>& aKeys, const TCTKeyAttributeFilter& aFilter, TRequestStatus& aStatus);
119 virtual void CancelList();
120 virtual void GetKeyInfo(TCTTokenObjectHandle aHandle, CCTKeyInfo*& aInfo,TRequestStatus& aStatus);
121 virtual void CancelGetKeyInfo();
122 virtual void Open(const TCTTokenObjectHandle& aHandle,
123 MRSASigner*& aSigner,
124 TRequestStatus& aStatus);
125 virtual void Open(const TCTTokenObjectHandle& aHandle,
126 MDSASigner*& aSigner,
127 TRequestStatus& aStatus);
128 virtual void Open(const TCTTokenObjectHandle& aHandle,
129 MCTDecryptor*& aDecryptor,
130 TRequestStatus& aStatus);
131 virtual void Open(const TCTTokenObjectHandle& aHandle,
132 MCTDH*& aDH, TRequestStatus& aStatus);
133 virtual void CancelOpen();
134 virtual void ExportPublic(const TCTTokenObjectHandle& aHandle,
136 TRequestStatus& aStatus);
137 virtual void CancelExportPublic();
139 #ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
140 virtual void Open(const TCTTokenObjectHandle& aHandle,
141 CryptoSpi::CSigner*& aSigner,
142 TRequestStatus& aStatus);
143 virtual void Open(const TCTTokenObjectHandle& aHandle,
144 CryptoSpi::CAsymmetricCipher*& asymmetricCipherObj,
145 TRequestStatus& aStatus);
146 virtual void Decrypt(const TCTTokenObjectHandle& aHandle,
147 const TDesC8& aCiphertext,
148 HBufC8*& aPlaintextPtr,
149 TRequestStatus& aStatus);
150 virtual void Sign(const TCTTokenObjectHandle& aHandle,
151 const TDesC8& aPlaintext,
152 CryptoSpi::CCryptoParams*& aSignature,
153 TRequestStatus& aStatus);
156 public: // For MCTKeyStoreManager except those (CreateKey, ImportKey, ImportEncryptedKey)
157 // that require a caller-specified store
160 * Exports a key pair in the clear.
162 * The key is exported as DER-encoded PKCS#8 data.
164 * @param aHandle The handle of the key to export
165 * @param aKey A reference to a HBufC8 pointer. The pointer will be set to
166 * a newly allocated buffer containing the key data. It is the caller's
167 * responsibility to delete this buffer.
168 * @param aStatus The request status object; contains the result of the ExportKey() request
169 * when complete. Set to KErrCancel if any outstanding request is cancelled.
171 * @capability ReadUserData Requires the caller to have ReadUserData capability
172 * @leave KErrPermissionDenied If the caller does not have ReadUserData capability,
173 * or is not the owner of the key.
174 * @leave KErrNotFound If the key the handle referes to does not exist.
175 * @leave KErrKeyAccess If the sensitive flag is set for the key, or the
176 * exportable flag is not set.
177 * @leave KErrKeyAlgorithm If this type of key cannot be exported.
179 IMPORT_C void ExportKey(TCTTokenObjectHandle aHandle, HBufC8*& aKey, TRequestStatus& aStatus);
182 * Cancels an ongoing ExportKey() operation.
184 * The operation completes with KErrCancel.
186 IMPORT_C void CancelExportKey();
189 * Exports an encrypted key pair.
191 * The key is exported as DER-encoded PKCS#5/PKCS#8 data.
193 * @param aHandle The handle of the key to export
194 * @param aKey A reference to a HBufC8 pointer. The pointer will be set to
195 * a newly allocated buffer containing the key data.
196 * @param aParams The PBE encryption parameters to use when encrypting the key.
197 * @param aStatus The request status object; contains the result of the ExportEncryptedKey() request
198 * when complete. Set to KErrCancel if any outstanding request is cancelled.
200 * @capability ReadUserData Requires the caller to have ReadUserData capability
201 * @leave KErrPermissionDenied If the caller does not have ReadUserData capability,
202 * or is not the owner of the key.
203 * @leave KErrNotFound If the key the handle referes to does not exist.
204 * @leave KErrKeyAccess If the exportable flag is not set for the key.
205 * @leave KErrKeyAlgorithm If this type of key cannot be exported.
207 IMPORT_C void ExportEncryptedKey(TCTTokenObjectHandle aHandle, const CPBEncryptParms& aEncryptParams,
208 HBufC8*& aKey, TRequestStatus& aStatus);
211 * Cancels an ongoing ExportEncryptedKey() operation.
213 * The operation completes with KErrCancel.
215 IMPORT_C void CancelExportEncryptedKey();
220 * @param aHandle The handle of the key to delete
221 * @param aStatus The request status object; contains the result of the DeleteKey() request
222 * when complete. Set to KErrCancel if any outstanding request is cancelled.
224 * @capability WriteUserData Requires the caller to have WriteUserData capability
225 * @leave KErrPermissionDenied If the caller does not have WriteUserData capability,
226 * or is not the owner of the key.
227 * @leave KErrNotFound If the key the handle referes to does not exist.
228 * @leave KErrAccessDenied If the calling process is not allowed to delete the key.
229 * @leave KErrInUse If another client is currently using the key.
231 IMPORT_C void DeleteKey(TCTTokenObjectHandle aHandle, TRequestStatus& aStatus);
234 * Cancels an ongoing DeleteKey() operation.
236 * The operation completes with KErrCancel.
238 IMPORT_C void CancelDeleteKey();
241 * Sets the security policy for key use.
243 * Specifies which processes are allowed to use the key for cryptographic
246 * @param aHandle The handle of the key
247 * @param aPolicy The new security policy.
248 * @param aStatus The request status object; contains the result of the SetUsePolicy() request
249 * when complete. Set to KErrCancel if any outstanding request is cancelled.
251 * @capability WriteUserData Requires the caller to have WriteUserData capability
252 * @leave KErrPermissionDenied If the caller does not have WriteUserData capability,
253 * or is not the owner of the key.
254 * @leave KErrNotFound If the key the handle referes to does not exist.
256 IMPORT_C void SetUsePolicy(TCTTokenObjectHandle aHandle,
257 const TSecurityPolicy& aPolicy,
258 TRequestStatus& aStatus);
261 * Cancels an ongoing SetUsePolicy() operation.
263 * The operation completes with KErrCancel.
265 IMPORT_C void CancelSetUsePolicy();
268 * Sets the security policy for key management.
270 * Specifies which processes are allowed to perform management operations on
273 * @param aHandle The handle of the key
274 * @param aPolicy The new security policy.
275 * @param aStatus The request status object; contains the result of the SetManagementPolicy() request
276 * when complete. Set to KErrCancel if any outstanding request is cancelled.
278 * @capability WriteUserData Requires the caller to have WriteUserData capability
279 * @leave KErrPermissionDenied If the caller does not have WriteUserData capability,
280 * or is not the owner of the key.
281 * @leave KErrNotFound If the key the handle referes to does not exist.
283 IMPORT_C void SetManagementPolicy(TCTTokenObjectHandle aHandle,
284 const TSecurityPolicy& aPolicy,
285 TRequestStatus& aStatus);
288 * Cancels an ongoing SetManagementPolicy() operation.
290 * The operation completes with KErrCancel.
292 IMPORT_C void CancelSetManagementPolicy();
295 * Sets the passphrase timeout for all keys owned by this process.
297 * @param aTimeout The timeout in seconds. 0 means that the passphrase is
298 * always asked for, and -1 means that it is never expired
299 * @param aStatus The request status object; contains the result of the SetPassphraseTimeout() request
300 * when complete. Set to KErrCancel if any outstanding request is cancelled.
302 * @capability WriteUserData Requires the caller to have WriteUserData capability
303 * @leave KErrPermissionDenied If the caller does not have WriteUserData capability,
304 * or is not the owner of the key
305 * @leave KErrArgument If the timeout specified is invalid.
307 IMPORT_C void SetPassphraseTimeout(TInt aTimeout, TRequestStatus& aStatus);
310 * Cancels an ongoing SetPassphraseTimeout() operation.
312 * The operation completes with KErrCancel.
314 IMPORT_C void CancelSetPassphraseTimeout();
317 * Re-locks the entire store (i.e., forget the passphrase).
319 * @param aStatus The request status object; contains the result of the Relock() request
320 * when complete. Set to KErrCancel if any outstanding request is cancelled.
322 IMPORT_C void Relock(TRequestStatus& aStatus);
325 * Cancels an ongoing Relock() operation.
327 * The operation completes with KErrCancel.
329 IMPORT_C void CancelRelock();
333 * Generates a new key pair.
335 * For the software key store, the owner of the new key is set to the
336 * calling process. Users can subsequently be added by calling SetUsers().
338 * @param aKeyStoreIndex The index of the key store manager in which to
339 * create the key. Must be between zero and
340 * KeyStoreMangerCount() exclusive.
341 * @param aUsage The key usage flags in the PKCS#15 format.
342 * @param aSize The size of the key in bits.
343 * @param aLabel A textual label for the key.
344 * @param aAlgorithm The type of key.
345 * @param aAccessType The key access type - a bitfield specifying key
346 * access requirements. Allowed values are zero, or
347 * a comination of CCTKeyInfo::EKeyAccess::ESenstive
348 * and CCTKeyInfo::EKeyAccess::EExtractable
349 * @param aStartDate The start of the validity period.
350 * @param aEndDate The end of the validity period.
351 * @param aKeyInfoOut A pointer that is set to a newly created key info
352 * object on successful completion.
353 * @param aStatus The request status object; contains the result of
354 * the CreateKey() request when complete. Set to
355 * KErrCancel if any outstanding request is cancelled.
357 * @capability WriteUserData Requires the caller to have WriteUserData capability
358 * @leave KErrPermissionDenied If the caller does not have WriteUserData capability
359 * @leave KErrKeyUsage If the key usage flags are not valid or not
360 * consistent with the key algorithm.
361 * @leave KErrKeyValidity If the validity start and end dates are specified
362 * but do not form a valid time period.
363 * @panic If aKeyStoreIndex does not specify a valid keystore manager.
365 IMPORT_C void CreateKey(TInt aKeyStoreIndex, TKeyUsagePKCS15 aUsage,TUint aSize,
366 const TDesC& aLabel, CCTKeyInfo::EKeyAlgorithm aAlgorithm,
367 TInt aAccessType, TTime aStartDate, TTime aEndDate,
368 CCTKeyInfo*& aKeyInfoOut, TRequestStatus& aStatus);
371 * Cancels an ongoing CreateKey() operation.
373 * The operation completes with KErrCancel.
375 IMPORT_C void CancelCreateKey();
378 * Imports a key pair.
380 * For the software key store, the owner of the new key is set to the
381 * calling process. Users can subsequently be added by calling SetUsers().
383 * The key data should be in PKCS#8 format. Both encrypted and cleartext
384 * versions are allowed.
386 * @param aKeyStoreIndex The index of the key store manager in which to
387 * create the key. Must be between zero and
388 * KeyStoreMangerCount() exclusive.
389 * @param aKeyData The key data to import, ASN.1 DER encoded PKCS#8.
390 * @param aUsage The key usage flags in the PKCS#15 format.
391 * @param aLabel A textual label for the key.
392 * @param aAccessType The key access type - a bitfield specifying key
393 * access requirements. Allowed values are zero, or
394 * a comination of CCTKeyInfo::EKeyAccess::ESenstive
395 * and CCTKeyInfo::EKeyAccess::EExtractable
396 * @param aStartDate The start of the validity period.
397 * @param aEndDate The end of the validity period.
398 * @param aKeyInfoOut A pointer that is set to a newly created key info
399 * object on successful completion.
400 * @param aStatus The request status object; contains the result of
401 * the ImportKey() request when complete. Set to
402 * KErrCancel if any outstanding request is cancelled.
404 * @capability WriteUserData Requires the caller to have WriteUserData capability
405 * @leave KErrPermissionDenied If the caller does not have WriteUserData capability
406 * @leave KErrKeyUsage If the key usage flags are not valid or not
407 * consistent with the key algorithm.
408 * @leave KErrKeyValidity If the validity start and end dates are specified
409 * but do not form a valid time period.
410 * @leave KErrArgument If the key data cannot be parsed.
411 * @panic If aKeyStoreIndex does not specify a valid keystore manager.
413 IMPORT_C void ImportKey(TInt aKeyStoreIndex, const TDesC8& aKeyData,
414 TKeyUsagePKCS15 aUsage, const TDesC& aLabel,
415 TInt aAccessType, TTime aStartDate, TTime aEndDate,
416 CCTKeyInfo*& aKeyInfoOut, TRequestStatus& aStatus);
419 * Cancels an ongoing ImportKey() operation.
421 * The operation completes with KErrCancel.
423 IMPORT_C void CancelImportKey();
428 * Gets the number of available read-only key stores.
430 * @return The number of available read-only key stores.
432 IMPORT_C TInt KeyStoreCount() const;
435 * Gets a read-only interface to a key store.
437 * @param aIndex An ordinal number that identifies the key store.
438 * @return A read-only interface to the key store specified by aIndex.
440 * @panic CUnifiedKeyStore 2 If aIndex is out of range, ie it is greater
441 * than or equal to the value returned by KeyStoreCount().
443 IMPORT_C MCTKeyStore& KeyStore(TInt aIndex);
446 * Gets the number of available read-write key stores.
448 * @return The number of key stores that are open for read-write access.
450 IMPORT_C TInt KeyStoreManagerCount() const;
453 * Gets a read-write interface to the store specified by aIndex.
455 * @param aIndex An ordinal number that identifies the key store.
456 * @return A read-write interface to the key store specified by aIndex.
458 * @panic CUnifiedKeyStore 2 If aIndex s out of range, ie it is greater than
459 * or equal to the value returned by KeyStoreManagerCount().
461 IMPORT_C MCTKeyStoreManager& KeyStoreManager(TInt aIndex);
463 #ifdef SYMBIAN_AUTH_SERVER
466 * Generates a new key pair. The creation of key is for currently authenticated
467 * user. If currently there is no authenticated user then authentication of an user
470 * For the software key store, the owner of the new key is set to the
471 * calling process. Users can subsequently be added by calling SetUsers().
473 * @param aKeyStoreIndex The index of the key store manager in which to
474 * create the key. Must be between zero and
475 * KeyStoreMangerCount() exclusive.
476 * @param aUsage The key usage flags in the PKCS#15 format.
477 * @param aSize The size of the key in bits.
478 * @param aLabel A textual label for the key.
479 * @param aAlgorithm The type of key.
480 * @param aAccessType The key access type - a bitfield specifying key
481 * access requirements. Allowed values are zero, or
482 * a comination of CCTKeyInfo::EKeyAccess::ESenstive
483 * and CCTKeyInfo::EKeyAccess::EExtractable
484 * @param aStartDate The start of the validity period.
485 * @param aEndDate The end of the validity period.
486 * @param aAuthenticationString The expression through which a user can be authenticated.
487 * Currently this should correspond to one of the alias values
488 * set by the licensee for authentication server configuration.
489 * @param aFreshness The validity to be considered for an already authenticated
490 * identity. Specification is in seconds.
491 * @param aKeyInfoOut A pointer that is set to a newly created key info
492 * object on successful completion.
493 * @param aStatus Final status of the operation.
495 * @capability WriteUserData Requires the caller to have WriteUserData capability
496 * @leave KErrPermissionDenied If the caller does not have WriteUserData capability
497 * @leave KErrKeyUsage If the key usage flags are not valid or not
498 * consistent with the key algorithm.
499 * @leave KErrKeyValidity If the validity start and end dates are specified
500 * but do not form a valid time period.
501 * @leave KErrAuthenticationFailure If the user authentication fails.
502 * @leave ... Any of the system wide error code.
503 * @panic If aKeyStoreIndex does not specify a valid keystore manager.
506 IMPORT_C void CreateKey(TInt aKeyStoreIndex, TKeyUsagePKCS15 aUsage,TUint aSize,
507 const TDesC& aLabel, CCTKeyInfo::EKeyAlgorithm aAlgorithm,
508 TInt aAccessType, TTime aStartDate, TTime aEndDate,
509 const TDesC& aAuthenticationString, TInt aFreshness,
510 CCTKeyInfo*& aKeyInfoOut, TRequestStatus& aStatus) ;
513 * Imports a key pair. The import of key is for currently authenticated
514 * user. If currently there is no authenticated user then authentication
515 * of an user would be required.
517 * For the software key store, the owner of the new key is set to the
518 * calling process. Users can subsequently be added by calling SetUsers().
520 * The key data should be in PKCS#8 format. Both encrypted and cleartext
521 * versions are allowed.
523 * @param aKeyStoreIndex The index of the key store manager in which to
524 * create the key. Must be between zero and
525 * KeyStoreMangerCount() exclusive.
526 * @param aKeyData The key data to import, ASN.1 DER encoded PKCS#8.
527 * @param aUsage The key usage flags in the PKCS#15 format.
528 * @param aLabel A textual label for the key.
529 * @param aAccessType The key access type - a bitfield specifying key
530 * access requirements. Allowed values are zero, or
531 * a comination of CCTKeyInfo::EKeyAccess::ESenstive
532 * and CCTKeyInfo::EKeyAccess::EExtractable
533 * @param aStartDate The start of the validity period.
534 * @param aEndDate The end of the validity period.
535 * @param aAuthenticationString The expression through which a user can be authenticated.
536 * Currently this should correspond to one of the alias values
537 * set by the licensee for authentication server configuration.
538 * @param aFreshness The validity to be considered for an already authenticated
539 * identity. Specification is in seconds.
540 * @param aKeyInfoOut A pointer that is set to a newly created key info
541 * object on successful completion.
542 * @param aStatus Final status of the operation.
544 * @capability WriteUserData Requires the caller to have WriteUserData capability
545 * @leave KErrPermissionDenied If the caller does not have WriteUserData capability
546 * @leave KErrKeyUsage If the key usage flags are not valid or not
547 * consistent with the key algorithm.
548 * @leave KErrKeyValidity If the validity start and end dates are specified
549 * but do not form a valid time period.
550 * @leave KErrArgument If the key data cannot be parsed.
551 * @panic If aKeyStoreIndex does not specify a valid keystore manager.
554 IMPORT_C void ImportKey( TInt aKeyStoreIndex, const TDesC8& aKeyData,
555 TKeyUsagePKCS15 aUsage, const TDesC& aLabel,
556 TInt aAccessType, TTime aStartDate, TTime aEndDate,
557 const TDesC& aAuthenticationString, TInt aFreshness,
558 CCTKeyInfo*& aKeyInfoOut, TRequestStatus& aStatus);
561 * Set the authentication policy for an already existing key in the store.
563 * @param aHandle The handle of the key whose policy is to be changed.
564 * @param aAuthenticationString The expression associated to this key.
565 * @param aFreshness The validity associated to this key.
566 * Specification is in seconds.
567 * @param aStatus Final status of the operation.
570 IMPORT_C void SetAuthenticationPolicy( const TCTTokenObjectHandle aHandle,
571 const TDesC& aAuthenticationString,
573 TRequestStatus& aStatus);
576 * Retrieve authentication policy for an already existing key in the store.
578 * @param aHandle The handle of the key whose policy is to be retrieved.
579 * @param aAuthenticationString The expression associated to this key. The memory would
580 * be allocated at the server side.
581 * @param aFreshness The validity associated to this key.
582 * Specification is in seconds.
583 * @param aStatus Final status of the operation.
586 IMPORT_C void GetAuthenticationPolicy( const TCTTokenObjectHandle aHandle,
587 HBufC*& aAuthenticationString,
589 TRequestStatus& aStatus);
590 #endif // SYMBIAN_AUTH_SERVER
593 CUnifiedKeyStore(RFs& aFs);
595 private: // From CActive
597 TInt RunError(TInt aError);
603 EInitializeGetTokenList,
605 EInitialiseGetKeyManagerInterface,
606 EInitializeGetKeyUserInterface,
607 EInitializeGetKeyUserInterfaceFinished,
609 // ----------------------------------------------
613 // ----------------------------------------------
622 ESetManagementPolicy,
623 ESetPassphraseTimeout,
625 ESetAuthenticationPolicy,
626 EGetAuthenticationPolicy
629 void StartAsyncOperation(TState aState, TRequestStatus& aStatus);
630 void DoInitializeL();
631 TBool DoOpen(const TCTTokenObjectHandle& aHandle,
632 TRequestStatus& aStatus);
633 void PrepareToCreateKeyL(TInt aKeyStoreIndex,
634 TKeyUsagePKCS15 aUsage, TUint aSize,
636 CCTKeyInfo::EKeyAlgorithm aAlgorithm,
638 TTime aStartDate, TTime aEndDate,
639 TRequestStatus& aStatus);
641 * A synchronous method to find the key store given a token object handle.
642 * Returns NULL if none found.
644 MCTKeyStore* FindKeyStore(const TCTTokenObjectHandle& aHandle);
646 * A synchronous method to find the key store manager given a token object
647 * handle. Returns NULL if none found.
649 MCTKeyStoreManager* FindKeyStoreManager(const TCTTokenObjectHandle& aHandle);
650 /** Complete the user's request and clean up state. */
651 void Complete(TInt aError);
652 /** Clean up state. */
654 /** Cancel the outstanding request. */
655 void CancelOutstandingRequest();
658 * A wrapper around a keystore interface that remebers whether it is a
659 * readonly or manager interface.
664 CKeyStoreIF(MCTTokenInterface*, TBool);
667 inline MCTTokenInterface* KeyStore() const {return (iKeyStore);};
668 inline TBool IsKeyManager() const {return (iIsKeyManager);};
672 MCTTokenInterface* iKeyStore;
678 TRequestStatus* iOriginalRequestStatus;
679 RPointerArray<CKeyStoreIF> iKeyStoresHolder;
681 RCPointerArray<CCTTokenTypeInfo> iTokenTypes;
682 TInt iIndexTokenTypes;
683 MCTTokenType* iTokenType;
685 MCTTokenInterface* iTokenInterface;
687 RCPointerArray<HBufC> iTokens;
690 MCTKeyStore* iKeyStore; ///< The key store in use by the current operation or NULL
691 MCTKeyStoreManager* iKeyStoreManager; ///< The key store manager in use by the current operation or NULL
693 RMPointerArray<CCTKeyInfo>* iKeyInfos;
694 TCTKeyAttributeFilter* iFilter;
695 CCTKeyInfo* iKeyInfo;
697 CCTKeyInfo** iKeyInfoOut; ///< Pointer to client's key info pointer
698 CPBEncryptParms* iPbeParams; // PBE parameters for encrypted key export