crypto/weakcryptospi/test/dumpcryptoplugin/dumpprocessor.cpp
changeset 8 35751d3474b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/crypto/weakcryptospi/test/dumpcryptoplugin/dumpprocessor.cpp	Thu Sep 10 14:01:51 2009 +0300
@@ -0,0 +1,770 @@
+/*
+* Copyright (c) 2007-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: 
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+*/
+
+#include <cryptospi/cryptospidef.h>
+#include <bacline.h>
+#include <cryptospi/cryptocharacteristics.h>
+#include <cryptospi/cryptospistateapi.h>
+#include "dumpprocessor.h"
+#include <cryptospi/cryptoparams.h>
+#include <cryptospi/extendedcharacteristics.h>
+#include <e32cons.h>
+#include <f32file.h>
+
+using namespace CryptoSpi;
+
+//
+//The name of characteristics log file
+//
+_LIT(KLogStartMessage, "DumpCryptoSpiTool");
+const TInt KMaxLineLength = 1024;
+_LIT8(KNewLine8, "\r\n");
+
+//
+//Characteristic Heads
+//
+_LIT(KLogHashCharacteristicHead, "[HashCharacteristic]");
+_LIT(KLogRandomCharacteristicHead, "[RandomCharacteristic]");
+_LIT(KLogSymmetricCipherCharacteristicHead, "[SymmetricCipherCharacteristic]");
+_LIT(KLogAsymmetricCipherCharacteristicHead, "[AsymmetricCipherCharacteristic]");
+_LIT(KLogSignerCharacteristicHead, "[SignerCharacteristic]");
+_LIT(KLogVerifierCharacteristicHead, "[VerifierCharacteristic]");
+_LIT(KLogKeyAgreementCharacteristicHead, "[KeyAgreementCharacteristic]");
+_LIT(KLogKeypairGeneratorCharacteristicHead, "[KeypairGeneratorCharacteristic]");
+_LIT(KLogUnknownCharacteristicHead, "[UnknownCharacteristic]");
+
+//
+//bool and unknow
+//
+_LIT(KLogBoolTrue, "True");
+_LIT(KLogBoolFalse, "False");
+_LIT(KLogUnknown, "Unknown");
+
+//Common Characteristics
+_LIT(KLogInterfaceName, "	InterfaceName = %S");
+_LIT(KLogAlgorithmUid, "	AlgorithmUid = 0x%x");
+_LIT(KLogImplementationUid, "	ImplementationUid = 0x%x");
+_LIT(KLogCreatorName, "	CreatorName = %S");
+_LIT(KLogFIPSApproved, "	FIPSApproved = %S");
+_LIT(KLogHardwareImplementation, "	HardwareImplementation = %S");
+_LIT(KLogAlgorithmName, "	AlgorithmName = %S");
+_LIT(KLogMaxConcurrency, "	MaxConcurrency = %d");
+_LIT(KLogLatency, "	Latency = %d");
+_LIT(KLogThroughput, "	Throughput = %d");
+
+//Hash Characteristics
+_LIT(KLogBlockSize, "	BlockSize = %d");
+_LIT(KLogOutputSize, "	OutputSize = %d");
+
+//Random Characteristics
+_LIT(KLogBlockMode, "	BlockMode = %d");
+
+//Symmetric Cipher Characteristics
+_LIT(KLogMaximumKeyLength, "	MaximumKeyLength = %d");
+_LIT(KLogKeySupportMode, "	KeySupportMode = %d");
+
+//Plugin Dll Name
+_LIT(KDllName, "	PluginDllName = %S");
+
+//Extended characteristics
+_LIT(KLogExtendedCharacteristicInt, "	Ext[0x%x] = 0x%x");
+_LIT(KLogExtendedCharacteristicDes, "	Ext[0x%x] = %S");
+_LIT8(KLogExtendedCharacteristicDes8, "	Ext[0x%x] = %S");
+
+//padding modes definitions	
+_LIT(KLogPaddingModes1, "	SupportedPaddingModes_%d = %S");
+_LIT(KLogPaddingModeNone, "NoneMode");
+_LIT(KLogPaddingModeSSLv3, "SSLv3Mode");
+_LIT(KLogPaddingModePKCS7, "PKCS7Mode");
+_LIT(KLogPaddingModePkcs1_v1_5_Encryption, "Pkcs1_v1_5_EncryptionMode");
+_LIT(KLogPaddingModePkcs1_v1_5_Signature, "Pkcs1_v1_5_SignatureMode");
+
+//Symmetric cipher operation modes definitions
+_LIT(KLogOperationModeNone, "NoneMode");
+_LIT(KLogOperationModeECB, "ECBMode");
+_LIT(KLogOperationModeCBC, "CBCMode");
+_LIT(KLogOperationModeOFB, "OFBMode");
+_LIT(KLogOperationModeCFB, "CFBMode");
+_LIT(KLogOperationModeCTR, "CTRMode");
+
+//Hash modes definitions
+_LIT(KLogOperationModes1, "	SupportedOperationModes_%d = %S");
+_LIT(KLogOperationModeHash, "HashMode");
+_LIT(KLogOperationModeHmac, "HmacMode");
+
+//Help text
+_LIT(KUsage, "Usage: dumpcryptoplugin [switches] \n");
+_LIT(KHelpInterface, "-interface/-i <interface name>	Dump characteristics for the interface, which can be\n");
+_LIT(KHelpInterface1, "				hash,random,symcipher,asymcipher,signer,verifier,\n");
+_LIT(KHelpInterface2, "				keypairgen,keyagree,asynchash,asyncrandom,asyncsymcipher\n");
+_LIT(KHelpInterface3, "				asyncsigner,asyncverifier,asynckeypairgen,asynckeyagree.\n");
+_LIT(KHelpAlgorithm, "-algorithm/-al <algorithm name>	Dump characteristics for the algorithm, which can be\n");
+_LIT(KHelpAlgorithm1, "				md2,md4,md5,sha1,des,3des,rc2,aes,rc4,rsacipher,rsasigner\n");
+_LIT(KHelpAlgorithm2, "				rsaverifier,rsakeypair,dsasigner,dsaverifier,dsakeypair\n");
+_LIT(KHelpAlgorithm3, "				dhkeypair,dhkeyagree.\n");
+_LIT(KHelpAll, "-all/-a				Dump all the characteristics of all the inplementations.\n");
+_LIT(KHelpExtended, "-extended/-e			Dump the extended characteristics as well.\n");
+_LIT(KHelpDll, "-dll/-d	<filename>		Only dump the characteristics for the given plugin Dll.\n");
+_LIT(KHelpOutput, "-out/-o	<drive:><path><filename>Output file name.\n");
+_LIT(KHelpHelp, "-help/-h			Help\n");
+
+_LIT(KProgessStatus, "Progressing\n");
+_LIT(KFileStatus, "Dump to %S");
+_LIT(KInvalidArgument, "Invalid Argument:");
+_LIT(KArgument, " %S");
+
+
+//
+//Implementation of CDumpToolParameters
+//
+CDumpToolParameters* CDumpToolParameters::NewLC()
+	{
+	CDumpToolParameters* self=new(ELeave) CDumpToolParameters();
+	CleanupStack::PushL(self);
+	return self;		
+	}
+	
+CDumpToolParameters::~CDumpToolParameters()
+	{
+	iOptions.Close();
+	iInvalidOptions.ResetAndDestroy();
+	}
+	
+CDumpToolParameters::CDumpToolParameters()
+	{
+	}
+
+TBool CDumpToolParameters::FindOption(TOption aOption) const
+	{
+	TBool found=EFalse;
+	TInt count=iOptions.Count();
+	for (TInt i=0;i<count;i++)
+		{
+		if (aOption==iOptions[i])
+			{
+			found=ETrue;
+			break;	
+			}
+		}
+	return found;
+	}
+	
+//
+//Implementation of CDumpToolProcessor
+//
+CDumpToolProcessor* CDumpToolProcessor::NewLC(const CDumpToolParameters& aParams, CConsoleBase* aConsole)
+	{
+	CDumpToolProcessor* self=new(ELeave) CDumpToolProcessor(aParams, aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;		
+	}
+
+CDumpToolProcessor::~CDumpToolProcessor()
+	{
+	iLogFile.Close();
+	iFs.Close();
+	iCharacters.ResetAndDestroy();	
+	}
+
+CDumpToolProcessor::CDumpToolProcessor(const CDumpToolParameters& aParams, CConsoleBase* aConsole)
+: iInputParams(aParams), iConsole(aConsole)
+	{
+	}
+
+void CDumpToolProcessor::ConstructL()
+	{
+	User::LeaveIfError(iFs.Connect());
+		
+	if (iInputParams.iDumpFileName.CompareF(KNullDesC)==0)
+		{
+		TUint driveCh(RFs::GetSystemDriveChar());
+
+		_LIT(KDumpFileNameFmt, "%c:\\dumpcrypoplugin.txt");
+		iDumpFileName.Format(KDumpFileNameFmt, driveCh);
+		}
+	else
+		{
+		TInt pos=iInputParams.iDumpFileName.LocateReverseF('\\');
+		TFileName path=iInputParams.iDumpFileName.Left(pos+1);
+		TInt ret=iFs.MkDirAll(path);
+		if (ret!=KErrNone && ret!=KErrAlreadyExists)
+			{
+			User::LeaveIfError(ret);	
+			}
+		iDumpFileName=iInputParams.iDumpFileName;
+		}
+	
+	User::LeaveIfError(iLogFile.Replace(iFs, iDumpFileName, EFileWrite | EFileShareExclusive));
+	TBool extended=EFalse;
+	if (iInputParams.FindOption(CDumpToolParameters::EOptionExtendedCharacteristic))
+		{
+		extended=ETrue;
+		}
+	CCryptoSpiStateApi::EnumerateCharacteristicsL(iCharacters, iInputParams.iInterface, extended);
+	}
+	
+void CDumpToolProcessor::ProcessL()
+	{
+	if (iInputParams.FindOption(CDumpToolParameters::EOptionHelp))
+		{
+		DisplayHelp();
+		return;	
+		}
+	
+	if (iInputParams.iInvalidOptions.Count()!=0 )
+		{
+		DisplayInvalidOptions();
+		return;
+		}
+	
+	LogL(KLogStartMessage);
+	TInt count=iCharacters.Count();
+	iConsole->Printf(KProgessStatus);
+	for (TInt i=0;i<count;i++)
+		{
+		if (iInputParams.iAlgorithm!=0 
+			&& iInputParams.iAlgorithm!=iCharacters[i]->iCharacteristic->iAlgorithmUid)
+			{
+			continue;
+			}
+		
+		if (iInputParams.iDllName.Compare(KNullDesC)!=0
+			&&iInputParams.iDllName.Compare(iCharacters[i]->iDllName)!=0)
+			{
+			continue;
+			}
+		OutputCharcteristicsAndDllL(*iCharacters[i]);
+		}
+	iConsole->Printf(KFileStatus, &iDumpFileName);
+	}
+
+void CDumpToolProcessor::OutputCharacteristicHeadL(TInt32 aInterfaceUid)
+	{
+	LogL(KNewLine8);
+	switch (aInterfaceUid)
+		{
+	case KHashInterface:
+	case KAsyncHashInterface:
+		LogL(KLogHashCharacteristicHead);
+		break;
+
+	case KRandomInterface:
+	case KAsyncRandomInterface:
+		LogL(KLogRandomCharacteristicHead);
+		break;
+		
+	case KSymmetricCipherInterface:
+	case KAsyncSymmetricCipherInterface:
+		LogL(KLogSymmetricCipherCharacteristicHead);
+		break;
+		
+	case KAsymmetricCipherInterface:
+	case KAsyncAsymmetricCipherInterface:
+		LogL(KLogAsymmetricCipherCharacteristicHead);
+		break;
+		
+	case KSignerInterface:
+	case KAsyncSignerInterface:
+		LogL(KLogSignerCharacteristicHead);
+		break;
+		
+	case KVerifierInterface:
+	case KAsyncVerifierInterface:
+		LogL(KLogVerifierCharacteristicHead);
+		break;
+		
+	case KKeyAgreementInterface:
+	case KAsyncKeyAgreementInterface:
+		LogL(KLogKeyAgreementCharacteristicHead);
+		break;
+		
+	case KKeypairGeneratorInterface:
+	case KAsyncKeypairGeneratorInterface:
+		LogL(KLogKeypairGeneratorCharacteristicHead);
+		break;
+		
+	default:
+		LogL(KLogUnknownCharacteristicHead);
+		}
+	}
+
+
+void CDumpToolProcessor::OutputInterfaceNameL(TInt32 aInterfaceUid)
+	{
+	switch (aInterfaceUid)
+		{
+	case KHashInterface:
+		LogL(KLogInterfaceName, &KHash);
+		break;
+		
+	case KAsyncHashInterface:
+		LogL(KLogInterfaceName, &KAsyncHash);
+		break;
+
+	case KRandomInterface:
+		LogL(KLogInterfaceName, &KRandom);
+		break;
+	
+	case KAsyncRandomInterface:
+		LogL(KLogInterfaceName, &KAsyncRandom);
+		break;
+		
+	case KSymmetricCipherInterface:
+		LogL(KLogInterfaceName, &KSymmetricCipher);
+		break;
+	
+	case KAsyncSymmetricCipherInterface:
+		LogL(KLogInterfaceName, &KAsyncSymmetricCipher);
+		break;
+		
+	case KAsymmetricCipherInterface:
+		LogL(KLogInterfaceName, &KAsymmetricCipher);
+		break;
+	
+	case KAsyncAsymmetricCipherInterface:
+		LogL(KLogInterfaceName, &KAsyncAsymmetricCipher);
+		break;
+		
+	case KSignerInterface:
+		LogL(KLogInterfaceName, &KSigner);
+		break;
+	
+	case KAsyncSignerInterface:
+		LogL(KLogInterfaceName, &KAsyncSigner);
+		break;
+		
+	case KVerifierInterface:
+		LogL(KLogInterfaceName, &KVerifier);
+		break;
+	
+	case KAsyncVerifierInterface:
+		LogL(KLogInterfaceName, &KAsyncVerifier);
+		break;
+		
+	case KKeyAgreementInterface:
+		LogL(KLogInterfaceName, &KKeyAgreement);
+		break;
+	
+	case KAsyncKeyAgreementInterface:
+		LogL(KLogInterfaceName, &KAsyncKeyAgreement);
+		break;
+		
+	case KKeypairGeneratorInterface:
+		LogL(KLogInterfaceName, &KKeyPairGenerator);
+		break;
+	
+	case KAsyncKeypairGeneratorInterface:
+		LogL(KLogInterfaceName, &KAsyncKeyPairGenerator);
+		break;
+		
+	default:
+		LogL(KLogInterfaceName, &KLogUnknown);
+		}		
+	}
+
+void CDumpToolProcessor::OutputAlgorithmNameL(TInt32 aAlgorithmUid)
+	{
+	switch (aAlgorithmUid)
+		{
+	case KAlgorithmHashMd2:
+		LogL(KLogAlgorithmName, &KMd2);
+		break;
+	case KAlgorithmHashMd4:
+		LogL(KLogAlgorithmName, &KMd4);
+		break;		
+	case KAlgorithmHashMd5:
+		LogL(KLogAlgorithmName, &KMd5);
+		break;
+	case KAlgorithmHashSha1:
+		LogL(KLogAlgorithmName, &KSha1);
+		break;
+	case KAlgorithmCipherDes:
+		LogL(KLogAlgorithmName, &KDes);	
+		break;
+	case KAlgorithmCipher3Des:
+		LogL(KLogAlgorithmName, &K3Des);	
+		break;
+	case KAlgorithmCipherRc2:
+		LogL(KLogAlgorithmName, &KRC2);	
+		break;
+	case KAlgorithmCipherAes:
+		LogL(KLogAlgorithmName, &KAes);	
+		break;
+	case KAlgorithmCipherArc4:
+		LogL(KLogAlgorithmName, &KRC4);	
+		break;
+	case KAlgorithmCipherRsa:
+		LogL(KLogAlgorithmName, &KRsaCipher);	
+		break;
+	case KAlgorithmSignerRsa:
+		LogL(KLogAlgorithmName, &KRsaSigner);	
+		break;
+	case KAlgorithmVerifierRsa:
+		LogL(KLogAlgorithmName, &KRsaVerifier);	
+		break;
+	case KAlgorithmRSAKeyPairGenerator:
+		LogL(KLogAlgorithmName, &KRsaKeyPair);	
+		break;
+	case KAlgorithmSignerDsa:
+		LogL(KLogAlgorithmName, &KDsaSigner);	
+		break;
+	case KAlgorithmVerifierDsa:
+		LogL(KLogAlgorithmName, &KDsaVerifier);	
+		break;
+	case KAlgorithmDSAKeyPairGenerator:
+		LogL(KLogAlgorithmName, &KDsaKeyPair);	
+		break;
+	case KAlgorithmDHKeyPairGenerator:
+		LogL(KLogAlgorithmName, &KDhKeyPair);	
+		break;
+	case KAlgorithmKeyAgreementDH:
+		LogL(KLogAlgorithmName, &KDhKeyAgreement);	
+		break;
+	default:;
+		}
+	}
+
+void CDumpToolProcessor::OutputHashOperationModeL(TInt aIndex, TInt32 aOperationMode)
+	{
+	switch(aOperationMode)
+		{
+	case KHashMode:
+		LogL(KLogOperationModes1, aIndex, &KLogOperationModeHash);
+		break;
+	case KHmacMode:
+		LogL(KLogOperationModes1, aIndex, &KLogOperationModeHmac);
+		break;
+	default:;
+		}
+	}
+
+void CDumpToolProcessor::OutputSymmetricOperationModeL(TInt aIndex, TInt32 aOperationMode)
+	{
+	switch(aOperationMode)
+		{
+	case KOperationModeNone:
+		LogL(KLogOperationModes1, aIndex, &KLogOperationModeNone);
+		break;
+	case KOperationModeECB:
+		LogL(KLogOperationModes1, aIndex, &KLogOperationModeECB);
+		break;
+	case KOperationModeCBC:
+		LogL(KLogOperationModes1, aIndex, &KLogOperationModeCBC);
+		break;
+	case KOperationModeOFB:
+		LogL(KLogOperationModes1, aIndex, &KLogOperationModeOFB);
+		break;
+	case KOperationModeCFB:
+		LogL(KLogOperationModes1, aIndex, &KLogOperationModeCFB);
+		break;
+	case KOperationModeCTR:
+		LogL(KLogOperationModes1, aIndex, &KLogOperationModeCTR);
+		break;		
+	default:;
+		}	
+	}
+
+void CDumpToolProcessor::OutputPaddingModeL(TInt aIndex, TInt32 aPaddingMode)
+	{
+	switch(aPaddingMode)
+		{
+	case KPaddingModeNone:
+		LogL(KLogPaddingModes1, aIndex, &KLogPaddingModeNone);
+		break;
+	case KPaddingModeSSLv3:
+		LogL(KLogPaddingModes1, aIndex, &KLogPaddingModeSSLv3);
+		break;
+	case KPaddingModePKCS7:
+		LogL(KLogPaddingModes1, aIndex, &KLogPaddingModePKCS7);
+		break;
+	case KPaddingModePkcs1_v1_5_Encryption:
+		LogL(KLogPaddingModes1, aIndex, &KLogPaddingModePkcs1_v1_5_Encryption);
+		break;
+	case KPaddingModePkcs1_v1_5_Signature:
+		LogL(KLogPaddingModes1, aIndex, &KLogPaddingModePkcs1_v1_5_Signature);
+		break;
+	default:;
+		}		
+	}
+
+void CDumpToolProcessor::OutputSpecificCharacteristicL(const CCharacteristics& aCharacter)
+	{
+	switch (aCharacter.iInterfaceUid)
+		{
+	case KHashInterface:
+	case KAsyncHashInterface:
+		{
+		const CHashCharacteristics& sCharacter=static_cast<const CHashCharacteristics&>(aCharacter);
+		LogL(KLogBlockSize, sCharacter.iBlockSize);
+		LogL(KLogOutputSize, sCharacter.iOutputSize);
+		TInt count=sCharacter.iSupportedOperationModes.Count();
+		for (TInt i=0;i<count;i++)
+			{
+			OutputHashOperationModeL(i, sCharacter.iSupportedOperationModes[i]);
+			}			
+		}
+		break;
+
+	case KRandomInterface:
+	case KAsyncRandomInterface:
+		{
+		const CRandomCharacteristics& sCharacter=static_cast<const CRandomCharacteristics&>(aCharacter);
+		LogL(KLogBlockMode, sCharacter.iBlockingMode);			
+		}
+		break;
+		
+	case KSymmetricCipherInterface:
+	case KAsyncSymmetricCipherInterface:
+		{
+		const CSymmetricCipherCharacteristics& sCharacter=static_cast<const CSymmetricCipherCharacteristics&>(aCharacter);
+		LogL(KLogMaximumKeyLength, sCharacter.iMaximumKeyLength);
+		LogL(KLogBlockSize, sCharacter.iBlockSize);
+		TInt count=sCharacter.iSupportedPaddingModes.Count();
+		for (TInt i=0;i<count;i++)
+			{
+			OutputPaddingModeL(i, sCharacter.iSupportedPaddingModes[i]);
+			}			
+		count=sCharacter.iSupportedOperationModes.Count();
+		for (TInt i=0;i<count;i++)
+			{
+			OutputSymmetricOperationModeL(i, sCharacter.iSupportedOperationModes[i]);
+			}
+		LogL(KLogKeySupportMode, sCharacter.iKeySupportMode);
+		}
+		break;
+		
+	case KAsymmetricCipherInterface:
+	case KAsyncAsymmetricCipherInterface:
+		{
+		const CAsymmetricCipherCharacteristics& sCharacter=static_cast<const CAsymmetricCipherCharacteristics&>(aCharacter);
+		LogL(KLogMaximumKeyLength, sCharacter.iMaximumKeyLength);
+		TInt count=sCharacter.iSupportedPaddingModes.Count();
+		for (TInt i=0;i<count;i++)
+			{
+			OutputPaddingModeL(i, sCharacter.iSupportedPaddingModes[i]);
+			}			
+		LogL(KLogKeySupportMode, sCharacter.iKeySupportMode);	
+		}
+		break;
+		
+	case KSignerInterface:
+	case KAsyncSignerInterface:
+	case KVerifierInterface:
+	case KAsyncVerifierInterface:
+		{
+		const CAsymmetricSignatureCharacteristics& sCharacter=static_cast<const CAsymmetricSignatureCharacteristics&>(aCharacter);
+		LogL(KLogMaximumKeyLength, sCharacter.iMaximumKeyLength);
+		TInt count=sCharacter.iSupportedPaddingModes.Count();
+		for (TInt i=0;i<count;i++)
+			{
+			OutputPaddingModeL(i, sCharacter.iSupportedPaddingModes[i]);
+			}			
+		LogL(KLogKeySupportMode, sCharacter.iKeySupportMode);	
+		}	
+		break;
+		
+	case KKeypairGeneratorInterface:
+	case KAsyncKeypairGeneratorInterface:
+		{
+		const CKeypairGeneratorCharacteristics& sCharacter=static_cast<const CKeypairGeneratorCharacteristics&>(aCharacter);
+		LogL(KLogMaximumKeyLength, sCharacter.iMaximumKeyLength);			
+		}
+		break;
+		
+	case KKeyAgreementInterface:
+	case KAsyncKeyAgreementInterface:
+	default:
+		;
+		}
+	}
+
+void CDumpToolProcessor::OutputExtendedCharacteristicL(const CExtendedCharacteristics& aCharacter)
+	{
+	CExtendedCharacteristics& character=const_cast<CExtendedCharacteristics&>(aCharacter);
+	const CCryptoParams* params=character.ListExtendedCharacteristics();
+	const RPointerArray<CCryptoParam>& list=params->GetParams();
+	TInt count=list.Count();
+	for (TInt i=0;i<count;i++)
+		{
+		TInt type=list[i]->Type();
+		switch (type)
+			{
+		case CCryptoParam::EInt:
+			LogL(KLogExtendedCharacteristicInt, list[i]->Uid().iUid, ((CCryptoIntParam*)list[i])->Value());
+			break;
+		case CCryptoParam::EBigInt:
+			{
+			const TInteger& bigInt=((CCryptoBigIntParam*)list[i])->Value();
+			HBufC8* buf8=bigInt.BufferLC();
+			LogL(KLogExtendedCharacteristicDes8, list[i]->Uid().iUid, buf8);
+			CleanupStack::PopAndDestroy(buf8);				
+			}
+			break;
+		case CCryptoParam::EDesC8:
+			LogL(KLogExtendedCharacteristicDes8, list[i]->Uid().iUid, ((CCryptoIntParam*)list[i])->Value());
+			break;
+		case CCryptoParam::EDesC16:
+			LogL(KLogExtendedCharacteristicDes, list[i]->Uid().iUid, ((CCryptoIntParam*)list[i])->Value());
+			break;
+		default:;
+			}
+		}
+	}
+
+void CDumpToolProcessor::OutputCharcteristicsAndDllL(const CCharacteristicsAndPluginName& aElement)
+	{
+	//Output Head
+	OutputCharacteristicHeadL(aElement.iCharacteristic->iInterfaceUid);
+	
+	//Start of Common Characteristics output
+	//Output Interface name
+	OutputInterfaceNameL(aElement.iCharacteristic->iInterfaceUid);
+	
+	//Output Algorithm Uid
+	LogL(KLogAlgorithmUid, aElement.iCharacteristic->iAlgorithmUid);
+	
+	//Output Implementation Uid
+	LogL(KLogImplementationUid, aElement.iCharacteristic->iImplementationUid);
+	
+	//Output Creator's name
+	TFileName name=aElement.iCharacteristic->iCreatorName;
+	LogL(KLogCreatorName, &name);
+	
+	//Output FIPS Approved Flag
+	if (aElement.iCharacteristic->iIsFIPSApproved)
+		{
+		LogL(KLogFIPSApproved, &KLogBoolTrue);
+		}
+	else
+		{
+		LogL(KLogFIPSApproved, &KLogBoolFalse);
+		}
+		
+	//Output Hardware supported flag
+	if (aElement.iCharacteristic->iIsHardwareSupported)
+		{
+		LogL(KLogHardwareImplementation, &KLogBoolTrue);			
+		}
+	else
+		{
+		LogL(KLogHardwareImplementation, &KLogBoolFalse);		
+		}
+		
+	//Output Max concurrency supported
+	LogL(KLogMaxConcurrency, aElement.iCharacteristic->iMaxConcurrencySupported);
+	
+	//Output Algorithm Name
+	name=aElement.iCharacteristic->iAlgorithmName;
+	LogL(KLogAlgorithmName, &name);
+	
+	//Output Latency
+	LogL(KLogLatency, aElement.iCharacteristic->iLatency);
+	
+	//Output throughput
+	LogL(KLogThroughput, aElement.iCharacteristic->iThroughput);
+	//end of Common Characteristics output
+	
+	//Output Specific Characteristic
+	OutputSpecificCharacteristicL(*aElement.iCharacteristic);
+	
+	//Output extended characteristics
+	if (aElement.iExtendedCharacteristic)
+		{
+		OutputExtendedCharacteristicL(*aElement.iExtendedCharacteristic);
+		}
+	
+	//Output the name of the plugin dll, which contains this implementation
+	LogL(KDllName, &aElement.iDllName);	
+	}
+	
+void CDumpToolProcessor::LogL(TRefByValue<const TDesC8> aFmt, ...)
+	{
+	TBuf8<KMaxLineLength> buf;
+	VA_LIST args;
+	VA_START(args, aFmt);
+	buf.AppendFormatList(aFmt, args);
+	VA_END(args);
+
+	User::LeaveIfError(iLogFile.Write(buf));
+	User::LeaveIfError(iLogFile.Write(KNewLine8));
+	User::LeaveIfError(iLogFile.Flush());
+	}
+	
+void CDumpToolProcessor::LogL(TRefByValue<const TDesC> aFmt, ...)
+	{
+	TBuf<KMaxLineLength> buf;
+	VA_LIST args;
+	VA_START(args, aFmt);
+	buf.AppendFormatList(aFmt, args);
+	VA_END(args);
+
+	TBuf8<KMaxLineLength> buf8;
+	buf8.Copy(buf);
+	User::LeaveIfError(iLogFile.Write(buf8));
+	User::LeaveIfError(iLogFile.Write(KNewLine8));
+	User::LeaveIfError(iLogFile.Flush());
+	}
+
+/**
+Display usage information
+*/
+void CDumpToolProcessor::DisplayHelp()
+	{
+	iConsole->Printf(KUsage);
+	iConsole->Printf(KHelpInterface);
+	iConsole->Printf(KHelpInterface1);
+	iConsole->Printf(KHelpInterface2);
+	iConsole->Printf(KHelpInterface3);
+	iConsole->Printf(KHelpAlgorithm);
+	iConsole->Printf(KHelpAlgorithm1);
+	iConsole->Printf(KHelpAlgorithm2);
+	iConsole->Printf(KHelpAlgorithm3);
+	iConsole->Printf(KHelpAll);
+	iConsole->Printf(KHelpExtended);
+	iConsole->Printf(KHelpDll);
+	iConsole->Printf(KHelpOutput);
+	iConsole->Printf(KHelpHelp);
+	iConsole->Printf(KNewLine);
+	iConsole->Printf(KPressAnyKey);
+	iConsole->Getch();
+			
+	}
+
+
+void CDumpToolProcessor::DisplayInvalidOptions()
+	{
+	iConsole->Printf(KInvalidArgument);
+	TInt count=iInputParams.iInvalidOptions.Count();
+	for (TInt i=0;i<count;i++)
+		{
+		iConsole->Printf(KArgument, iInputParams.iInvalidOptions[i]);	
+		}
+	iConsole->Printf(KNewLine);
+	iConsole->Printf(KPressAnyKey);
+	iConsole->Getch();
+	
+	}
+	
+
+