diff -r 000000000000 -r bde4ae8d615e os/security/cryptomgmtlibs/cryptotokenfw/source/ctframework/CRefSecurityDialog.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/security/cryptomgmtlibs/cryptotokenfw/source/ctframework/CRefSecurityDialog.h Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,144 @@ +/* +* Copyright (c) 2001-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: +* CRefSecurityDialog class implementation +* +*/ + + +/** + @file + @internalTechnology +*/ + +#ifndef __CREFSECURITYDIALOG_H__ +#define __CREFSECURITYDIALOG_H__ + +#include "secdlgImplDefs.h" + +class CDialogRequester; + +/** + * Reference implementation of the MSecurityDialog API. It wraps the arguments into + * a form suitable for use with the RNotifier dialog framework. + */ +NONSHARABLE_CLASS(CRefSecurityDialog) : public CBase, public MSecurityDialog + { +public: + ~CRefSecurityDialog(); + static CRefSecurityDialog* NewL(); + +public: // from MSecurityDialog + void ServerAuthenticationFailure(const TDesC8& aServerName,const TValidationError& aFailureReason,const TDesC8& aEncodedCert,TRequestStatus& aStatus ); + void Release(); + void EnterPIN( const TPINParams& aPINParams, TBool aRetry, TPINValue& aPINValue, + TRequestStatus& aStatus ); + void EnablePIN( const TPINParams& aPINParams, TBool aRetry, TPINValue& aPINValue, + TRequestStatus& aStatus ); + void DisablePIN( const TPINParams& aPINParams, TBool aRetry, TPINValue& aPINValue, + TRequestStatus& aStatus ); + void ChangePIN( const TPINParams& aPINParams, TBool aRetry, + TPINValue& aOldPINValue, TPINValue& aNewPINValue, + TRequestStatus& aStatus ); + void UnblockPIN( const TPINParams& aBlockedPINParams, + const TPINParams& aUnblockingPINParams, TBool aRetry, + TPINValue& aUnblockingPINValue, TPINValue& aNewPINValue, + TRequestStatus& aStatus ); + void UnblockPINInClear( const TPINParams& aBlockedPINParams, + const TPINParams& aUnblockingPINParams, TBool aRetry, + TUnblockPINValue& aUnblockingPINValue, TPINValue& aNewPINValue, + TRequestStatus& aStatus ); + void Cancel(); + void PINBlocked( const TPINParams& aPINParams, TRequestStatus& aStatus ); + void TotalBlocked( const TPINParams& aPINParams, TRequestStatus& aStatus ); + void EstablishSecureConnection( const TDesC8& aCertData, + const RArray& aCertHandleList, + MSecurityDialog::TConnectionType aConnectionType, + TBool& aDoClientAuthentication, TCTTokenObjectHandle& aCertId, + TRequestStatus& aStatus ); + void SignText( const TDesC& aText, + const RArray& aCertIdList, + TCTTokenObjectHandle& aCertId, + TRequestStatus& aStatus ); + + void HandleResponse( TInt aResult ); + +private: + void ConstructL(); + void DoBasicPINOperation( TSecurityDialogOperation aOperation, + const TPINParams& aPINParams, TBool aRetry, TDes8& aPINValue, + TRequestStatus& aStatus ); + void InitClientStatus( TRequestStatus& aStatus ); + +private: + CDialogRequester* iRequester; + TSecurityDialogOperation iCurrentOperation; + TRequestStatus* iClientStatus; + TPINValue* iClientPINValuePtr; + TUnblockPINValue* iClientUnblockPINValuePtr; + TPINValue* iClientSecondPINValuePtr; + TPINValueBuf iPINValueBuf; + TTwoPINOutputBuf iTwoPINOutputBuf; + TUnblockPINInClearOutputBuf iUnblockPINInClearOutputBuf; + TSignInputBuf iSignInputBuf; + TPtrC8 iVariableDataPtr; + TCTTokenObjectHandle* iClientCertInfoHandlePtr; + TBool* iClientDoClientAuthenticationPtr; + TCTTokenObjectHandleBuf iCertInfoHandleBuf; + TUnblockPINInputBuf iUnblockPINInputBuf; + TPINInputBuf iPINInputBuf; + TServerAuthenticationFailureOutputBuf iServerAuthenticationOutputBuf; + }; + +/** + * An AO used to call the notifier, which allows packaging and unpackaging of the + * arguments and return values for the client. + */ +NONSHARABLE_CLASS(CDialogRequester) : public CActive + { +private: + enum TState { KFillingVariableInputBuffer, KMakingRequest }; + +public: + static CDialogRequester* NewL( CRefSecurityDialog& aSecDialog ); + ~CDialogRequester(); + void RequestDialog( const TDesC8& aData, TDes8& aResponse ); + void RequestVariableBufferDialog( const TDesC8& aOperationData, + const TDesC8& aVariableData, + const RArray& aCertHandleList, + TDes8& aResponse ); + + void RequestDialog(HBufC8* iInputBuffer, TDes8& aResponse); + +private: + CDialogRequester( CRefSecurityDialog& aSecDialog ); + void ConstructL(); + +private: // from CActive + void RunL(); + void DoCancel(); + TInt RunError( TInt aError ); + +private: + TState iState; + RNotifier iNotifier; + CRefSecurityDialog& iSecDialog; + const TDesC8* iOperationDataPtr; + const TDesC8* iVariableDataPtr; + const RArray* iCertHandleListPtr; + HBufC8* iInputBuffer; + TDes8* iResponsePtr; + }; + +#endif