diff -r 000000000000 -r 164170e6151a wim/WimPlugin/inc/WimKeyStore.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wim/WimPlugin/inc/WimKeyStore.h Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,383 @@ +/* +* Copyright (c) 2002 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: An implementation of single key store interface +* +*/ + + +#ifndef CWIMKEYSTORE_H +#define CWIMKEYSTORE_H + +// INCLUDES + +#include +#include + +// FORWARD DECLARATION + +class CWimKeyDetails; +class MCTAuthenticationObjectList; +class CWimToken; +class CWimPin; +class CWimRSASigner; + + +// CLASS DECLARATION + +/** +* Represents read only key store. +* +* @lib WimPlugin +* @since Series60 2.1 +*/ + +class CWimKeyStore : public CActive, public MCTKeyStore + { + public: // Constructor and destructor + + /** + * Constructor + * @param aToken (IN) A reference to current token + * @return An instance of this class + */ + static CWimKeyStore* NewL( CWimToken& aToken ); + public: // Function from base class MCTTokenInterface + + /** + * Returns a reference to current token + * @return A Reference to current token + */ + MCTToken& Token(); + + public: // Functions from base class MKeyStore + + /** + * Lists all the keys in the store that match the filter + * The caller of this function owns all given parameters + * @param aKeys (OUT) An array to which the returned keys + * are appended. + * @param aFilter (IN) A filter controlling which keys are returned + * @param aStatus (IN/OUT) This will be completed with the final + * status code. Caller should set it to value TRequestPending + * KErrNone, if no errors detected. Note: if no keys are found, + * it is also KErrNone + * KErrArgument, if aKeys array is NULL + * KErrHardwareNotAvailable, if Wim card suddenly removed + * Any other system wide error code (e.g. KErrNoMemory) + * @return void + */ + void List( RMPointerArray& aKeys, + const TCTKeyAttributeFilter& aFilter, + TRequestStatus& aStatus ); + + /** + * Cancels an ongoing List operation + * @return void + */ + void CancelList(); + + /** + * Retrieves a reference to pointer of key depending on given + * handle (aHandle). The caller of this function owns all given + * parameters. + * @param aHandle The handle of the required key. + * @param aInfo The returned key info. + * @param aStatus Async request notification. + * KErrNone, if no errors detected + * KErrArgument, if aHandle is not current token's handle + * KErrNotFound, if aInfo not found + * KErrHardwareNotAvailable, if Wim card suddenly removed + * Any other system wide error code (e.g. KErrNoMemory) + * @return void + */ + void GetKeyInfo( TCTTokenObjectHandle aHandle, + CCTKeyInfo*& aInfo, + TRequestStatus& aStatus ); + + /** + * Cancels an ongoing GetKeyInfo operation + * @return void + */ + void CancelGetKeyInfo(); + + /** + * Open an RSA key for signing + * @param aHandle The handle of the key to be opened + * This must be the handle of a RSA key on this store that is + * usable for signing by this process or the operation will fail. + * @param aSigner The returned signer object + * @param aStatus Asynchronous request notification. + * @return void + */ + void Open( const TCTTokenObjectHandle& aHandle, + MRSASigner*& aSigner, + TRequestStatus& aStatus ); + + /** + * Open a DSA key for signing + * @param aHandle -The handle of the key to be opened + * This must be the handle of a DSA key on this store that is + * usable by this process for signing or the operation will fail. + * @param aSigner -The returned signer object + * @param aStatus -Asynchronous request notification. + * @return void + */ + void Open( const TCTTokenObjectHandle& aHandle, + MDSASigner*& aSigner, + TRequestStatus& aStatus ); + + /** + * Open a RSA key for private decryption + * @param aHandle -The handle of the key to be opened + * This must be the handle of a RSA key on this store that is + * usable by this process for decryption or the operation will fail. + * @param aDecryptor -The returned decryptor object + * @param aStatus -Asynchronous request notification. + * @return void + */ + void Open( const TCTTokenObjectHandle& aHandle, + MCTDecryptor*& aDecryptor, + TRequestStatus& aStatus ); + + /** + * Open a DH key for key agreement + * @param aHandle -The handle of the key to be opened + * This must be the handle of a DH key on this store that is + * usable by this process for decryption or the operation will fail. + * @param aDH -The returned agreement object + * @param aStatus -Asynchronous request notification. + * @return void + */ + void Open( const TCTTokenObjectHandle& aHandle, + MCTDH*& aDH, + TRequestStatus& aStatus ); + + /** + * Cancels an ongoing Open operation + * @return void + */ + void CancelOpen(); + + /** + * Returns the public key in DER-encoded ASN-1 + * @param aHandle -The handle of the key to be opened + * @param aPublicKey -returned key + * @param aStatus -Asynchronous request notification. + * @return void + */ + void ExportPublic( const TCTTokenObjectHandle& aHandle, + HBufC8*& aPublicKey, + TRequestStatus& aStatus ); + + /** + * Cancels an ongoing Export operation + * @return void + */ + void CancelExportPublic(); + + + /** + * Perform signing operation. + * @param aObject -The handle of signer object. + * @param aDigest -The data to be signed. + * @param aSignature -The returned signature. This remains owned + * by the signer, and is valid until the signer is released or + * until the next Sign. + * @param aStatus -Async status notification + * @return void + */ + void NonRepudiableRSASign( const TCTTokenObjectHandle& aObject, + const TDesC8& aDigest, + CRSASignature*& aSignature, + TRequestStatus& aStatus ); + + protected: // From base class MCTTokenInterface + + virtual void DoRelease(); + + private: // Constructors + + /** + * Default constructor + * @param aToken (IN) A reference to current token + */ + CWimKeyStore( CWimToken& aToken ); + + // Second phase constructor + void ConstructL(); + + // Destructor + virtual ~CWimKeyStore(); + + private: + + /** + * Starts initialization on this class. + * @return void + */ + void Initialize(); + + /** + * Creates one key info for list or get key info operation + * @param aIndex (IN) An index value of current key info in + * the internal array + * @return A pointer to created key info + */ + + CCTKeyInfo* CreateKeyInfoL( TInt aIndex ); + + /** + * Leavable function to filter keys in list operation. + * @return void + */ + void DoFilterKeysL(); + + /** + * Leavable function for key creation. + * @param aHandle (IN) Handle of desired authentication object. + * @return A pointer to created authentication object + */ + MCTAuthenticationObject* MakeAuthObjectL( TInt aHandle ); + + /** + * Returns boolean value true or false indicating if token is removed + * @return Boolean value: true, if token removed, false if not + */ + TBool TokenRemoved(); + + + /** + * Checks if token is removed or is this object active + * @return Boolean value: true if allowed, false if not + */ + TBool EnteringAllowed( TRequestStatus& aStatus ); + + + private: // From base class CActive + + void RunL(); + + /** + * Leaves in RunL are handled here. + * @param aError Leaving code + * @return An integer that should be KErrNone if leave was handled. + */ + TInt RunError( TInt aError ); + + void DoCancel(); + + private: // Data + + // A reference to current token of this interface + CWimToken& iToken; + + // State flag for RunL + enum TPhase + { + EIdle, + EOpenAuthObjectsInterface, + EListAuthObjects, + EGetKeyList, + ECheckGetKeyList, + EFilterKeys, + EGetKey, + ECreateRSASignerObject, + EStartNonRepudiableRSASign, + ESignCompleted, + EStartExportPublicKey, + EExportPublicKeyDone + }; + + // Flag for internal state machine + TPhase iPhase; + + // Flag for internal state machine + TPhase iPhaseOriginal; + + // The pointed object acts as a converter between + // CWimCertStore/CWimKeyStore interface and WimClient + // This class owns the pointed object + CWimKeyDetails* iCWimKeyDetails; + + // Used for saving caller status in asynchronous call + // This class don't own the pointed object + TRequestStatus* iOriginalRequestStatus; + + // Temporal array for key info pointers + // This array is used to append key infos in List operation + // This class don't own the pointed objects + RPointerArray* iKeyList; + + // Temporal array for key infos. + // This array is used to fetch key infos from WimClient. + RPointerArray iKeyInfos; + + // Used with list operation to filter keys + TCTKeyAttributeFilter iKeyFilter; + + // Index for going through all keys asynchronously + // in list operation. + TInt iKeyIndex; + + // Used to fetch one key info from wimclient + // This class don't own the pointed object. + CCTKeyInfo** iInfo; + + // Key value for key object. Used in asynchronous call of + // getting one key info. + TInt iHandle; + + // Array for key info keys fetched from wimclient + CArrayFixFlat* iKeyNumbers; + + // Array of pointers to PIN-NRs.This class don't own the pointed + // objects + const CArrayPtrFlat* iPinNRs; + + // Is key list done or not already. Set to true value in the first + // key list. + TBool iListDone; + + //Signer object, which is returned to caller. Not Owned. + CWimRSASigner* iSigner; + + //Handle stored during opening new RSA signer object. + TCTTokenObjectHandle iOpenSigninKeyHandle; + + //Buffer, which holds received signature from server. Owned. + HBufC8* iSignature; + + //Signature object which is filled with data received from server. + //Not owned. + CRSASignature** iRSASignature; + + //Buffer used to contain KeyId in Sign and public key export + //operations. Owned. + HBufC8* iKeyId; + + //Buffer to hold public key data during public key export. Not Owned. + HBufC8* iPublicKey; + + // The index of exported key + TInt iExportKeyIdIndex; + + TInt iRSAKeyIdIndex; + + const TDesC8* iDigest; + + }; + +#endif // CWIMKEYSTORE_H + +// End of File