authenticationservices/authenticationserver/test/reftestplugin/pinplugin/pinpluginao.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 24 Nov 2009 09:06:03 +0200
changeset 29 ece3df019add
permissions -rw-r--r--
Revision: 200948 Kit: 200948

/*
* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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: 
* CPinPluginAO declaration
*
*/


/**
 @file 
 @internalComponent
 @released
*/

#ifndef PIN_PLUGINAO_H
#define PIN_PLUGINAO_H

#include "pinplugindialog.h"
#include "pinplugindb.h"
#include "pinpanic.h"

class CPinPluginAO : public CActive
	{
public:
	/** static methods to constuct the object of the CPinpluginAO */
	static CPinPluginAO* NewL(TInt aPinSize, TInt aPinMinSize, TInt aPinMaxSize, TInt aRetryCount);
	static CPinPluginAO* NewLC(TInt aPinSize, TInt aPinMinSize, TInt aPinMaxSize, TInt aRetryCount);
	/** Destructor */
	~CPinPluginAO();
public: //CAuthPluginInterface
	void Identify(AuthServer::TIdentityId& aId, const TDesC& aClientMessage,
				  HBufC8*& aResult, TRequestStatus& aRequest);
	void Train(AuthServer::TIdentityId aId, HBufC8*& aResult, TRequestStatus& aRequest);
	TInt Forget(AuthServer::TIdentityId aId);
	TInt DefaultData(AuthServer::TIdentityId aId, HBufC8*& aOutputBuf);
	void ResetL(AuthServer::TIdentityId aId, const TDesC& aRegistrationData, HBufC8*& aResult);

private:			//Active
	void DoCancel();
	void RunL();	
	TInt RunError(TInt aError);
private:
	/** Constructor */
	CPinPluginAO(TInt aPinSize, TInt aPinMinSize, TInt aPinMaxSize, TInt aRetryCount);
	
	/** Second Phase Constructor */
	void ConstructL();
	
	/**
	 Issue a Request for Identify Dialog upto iRetryCount times to 
	 PinPluginDialog. If the pinvalue received is wrong for all the
	 retries, reset the identityId as KUnknownIdentity.
	 */
	void IdentifyId();
	
	/**
 	 Issue a Request for Train Dialog to PinPluginDialog. 
 	 It will generate 4 random pin of length iNewPinSize and send 
 	 the pin Numbers and iNewPinSize to PinpluginDialog. Once it completed
 	 it have the selected pin index and new pin size which is used to generate
 	 another set of pin numbers for the next dialogs if required.

	 @panic EPinPanicInvalidPinLength	if plugin receives invalid pinlength fron Dialog Notifier
	 */
	void TrainIdL();
	
	/**
 	 It will generate KeyHash for the pin number given in the Identify Dialog.
 	 and verify the keyHash and Id with DB entries. If same, the state will be
 	 changed to EInfo and message is set to EPinPluginIdentificationSuccess 
 	 which is used to display info message to the user. 
 	 If not, same state will be maintained so that it will ask another Identify
 	 dialog to the user.
 	 */
	void IdentifyResultL();
	
	/**
	 It will add/update the DB with the pin selected in Pin Train/ReTrain Dialog.
	 
	 @panic EPinPanicIncorrectIndex		if plugin receives index values otherthan 0 -3
	 */
	void AddTrainResultToDBL();
	
	/**
 	 It will generate two KeyHash for the pin value using SHA1 Algorithm
 	 Intermediate result will return to the Authentication server whereas
 	 final result is stored in the DB.
 	  
	 @param aPinValue		The Pin number for which Hash value required
	 @param aIdentityKey	aIdentityKey is updated with intermediate KeyHash generated.
	 @return				It will return the final KeyHash Value generated
	 */
	HBufC8* GenerateKeyHashL(TPinValue& aPinValue, HBufC8*& aIdentityKey);
	
	/**
	 It will generate four Unique Pins which is not used any of the
	 existing identities.
	 
	 @param aPinList		On return, it holds the array of Pin numbers generated
	 @param idKeyList		On return, it holds the array of intermediate KeyHash 
	 						values for the Pin Numbers in the aPinList
	 @param idKeyHashList	On return, it holds the array of Final KeyHash values
	 						for the Pin Numbers in the aPinList
 	 */
	void GenerateUniquePinsL(RPointerArray<TPinValue>& aPinList, RPointerArray<HBufC8>& idKeyList,
								 RPointerArray<HBufC8>& idKeyHashList);
private:
	enum TProcessState
		{
		EIdentify,
		EIdentifyResult,
		ETrain,
		ETrainResult,
		EInfo,
		EFinished
		};
	CPinPluginDialog* iPinPluginDialog;
	CPinPluginDB* iPinPluginDb;
	TRequestStatus* iRequestStatus;
	TProcessState iState;
	TInt iIndex;
	TPinValue iPinValue;
	AuthServer::TIdentityId iIdentityId;
	AuthServer::TIdentityId* iIdentityIdPtr;
	HBufC8** iResult;
	TPinPluginDialogResult* iDialogResult;
	TPinPluginInfoMessage iMessage;
	
	TInt iRetryCount;
	TInt iRetryRefCount;
	TInt iPinSize;
	TInt iPinMinSize;
	TInt iPinMaxSize;
	TInt iNewPinSize;
		
	RPointerArray<TPinValue> iPinList;
	RPointerArray<HBufC8> iIdKeyList;
	RPointerArray<HBufC8> iIdKeyHashList;
	
	//Displayable text string
	const HBufC* iClientMessage;

	};

#endif /* PIN_PLUGINAO_H */