cryptoservices/filebasedcertificateandkeystores/test/keytool/keytool_utils.cpp
changeset 8 35751d3474b7
parent 0 2c201484c85f
child 19 ece3df019add
--- a/cryptoservices/filebasedcertificateandkeystores/test/keytool/keytool_utils.cpp	Tue Jul 21 01:04:32 2009 +0100
+++ b/cryptoservices/filebasedcertificateandkeystores/test/keytool/keytool_utils.cpp	Thu Sep 10 14:01:51 2009 +0300
@@ -1,885 +1,889 @@
-/*
-* Copyright (c) 2003-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: 
-*
-*/
-
-
-#include <e32base.h>
-#include <e32cons.h>
-
-#include "keytool_utils.h"
-#include "securityerr.h"
-#include "compiledsecuritypolicy.h"
-
-_LIT(space, " ");
-
-_LIT(newline, "\n");
- 
-_LIT(KExtractable, "Extractable");
-_LIT(KSensitive, "Sensitive");
-_LIT(KAlwaysSensitive, "AlwaysSensitive");
-_LIT(KNeverExtractable, "NeverExtractable");
-_LIT(KLocal, "Local");
-_LIT(KEllipsis, "...");
- 
-_LIT(x509, "X509");
-_LIT(allusage, "AllUsage");
-_LIT(nousage, "NoUsage");
-_LIT(encrypt, "Encrypt");
-_LIT(decrypt, "Decrypt");
-_LIT(sign, "Sign");
-_LIT(signrecover, "SignRecover");
-_LIT(wrap, "Wrap");
-_LIT(unwrap, "Unwrap");
-_LIT(verify, "Verify");
-_LIT(verifyrecover, "VerifyRecover");
-_LIT(derive, "Derive");
-_LIT(nonrepudiation, "NonRepudiation");
-
-const TInt KCursorOffset		= 2;
-static const TInt KMaxLabel = 32;
-CConsoleBase* KeyToolUtils::iConsole = NULL;       
-RFile* KeyToolUtils::iFile = NULL;
-
-/*static*/ void KeyToolUtils::WriteErrorL(TInt aError)
-	{
-	
-	if ((aError <= -12000) && (aError >= -12100))
-		{
-		PrintInfoL(_L("You have tsecdlg.dll in z:\\system\\notifiers."));		
-		PrintInfoL(_L("This notifier is for *testing only* please remove it and try again!"));
-		return;		
-		}
-	
-	switch (aError)
-		{
-	case KErrNone:	// 0
-		PrintInfoL(_L("KErrNone"));
-		break;
-
-	case KErrNotFound:	// -1
-		PrintInfoL(_L("KErrNotFound"));
-		break;
-
-	case KErrNotSupported:	// -5
-		PrintInfoL(_L("KErrNotSupported"));
-		break;
-
-	case KErrInUse:	// -14
-		PrintInfoL(_L("KErrInUse"));
-		break;
-
-	case KErrNotReady:	// -18
-		PrintInfoL(_L("KErrNotReady"));
-		break;
-
-	case KErrKeyAlgorithm:  //-11006
-		PrintInfoL(_L("KErrKeyAlgorithm"));
-		break;		
-
-	case KErrKeyUsage:  //-11007
-		PrintInfoL(_L("KErrKeyUsage"));
-		break;
-		
-	case KErrKeyValidity:  //-11008
-		PrintInfoL(_L("KErrKeyValidity"));
-		break;		
-
-	case KErrKeySize:  //-11009
-		PrintInfoL(_L("KErrKeySize"));
-		break;
-
-	case KErrKeyAccess:  //-11010
-		PrintInfoL(_L("KErrKeyAccess"));
-		break;
-
-	case KRequestPending:
-		PrintInfoL(_L("KRequestPending"));
-		break;
-
-	case KErrAlreadyExists:
-		PrintInfoL(_L("KErrAlreadyExists"));
-		break;
-
-	case KErrArgument:
-		PrintInfoL(_L("KErrArgument"));
-		break;
-
-	case KErrBadName: // -28
-		PrintInfoL(_L("KErrBadName"));
-		break;
-
-	case KErrCorrupt: // -20
-		PrintInfoL(_L("KErrCorrupt"));
-		break;		
-	case KErrPrivateKeyNotFound: //-11011				
-		PrintInfoL(_L("KErrPrivateKeyNotFound"));
-		break;	
-
-	default:
-		{
-		TBuf<64> msg;
-		msg.Format(_L("Unknown (Code %d)"), aError);
-		PrintInfoL(msg);		
-		}
-		break;
-		}
-	}
-        
-/*static*/ void KeyToolUtils::WriteOctetStringL(const TDesC8& aString)
-	{
-	TInt index;
-   	TInt counter;
- 	counter = aString.Length();
-	HBufC* buf = HBufC::NewLC(counter*6);
-	TPtr pBuf = buf->Des();
-   	 for (index = 0; index < counter; index++)
-		{
-		pBuf.AppendFormat(_L("%01x"),aString[index]>>4);
-		pBuf.AppendFormat(_L("%01x"),aString[index]&0xf);
-		pBuf.Append(_L(" "));
-		}
-	PrintInfoL(pBuf);
-	CleanupStack::PopAndDestroy();//buf
-	}
-	       
-	        
-/*static*/ void KeyToolUtils::PrintUsageL(TUint aUsage)
-	{
-	PrintInfoL(_L("\t\tUsage : "));
-	if (aUsage & 0x0000ffff)  // In this range we are talking PKCS15
-		{
-		PrintInfoL(_L("PKCS15 "));
-		}
-	if (aUsage & 0xffff0000)  // In this range we are talking X509
-		{
-		PrintInfoL(x509);
-		}
-	if (aUsage == (TUint)EPKCS15UsageAll)
-		{
-		PrintInfoL(allusage);		
-		return;
-		}	
-	if (aUsage == EPKCS15UsageNone)
-		{
-		PrintInfoL(nousage);		
-		return;
-		}	
-	if (aUsage & EPKCS15UsageEncrypt)
-		{
-		PrintInfoL(encrypt);		
-		}
-	if (aUsage & EPKCS15UsageDecrypt)
-		{
-		PrintInfoL(decrypt);		
-		}
-	if (aUsage & EPKCS15UsageSign)
-		{
-		PrintInfoL(sign);		
-		}
-	if (aUsage & EPKCS15UsageSignRecover)
-		{
-		PrintInfoL(signrecover);		
-		}
-	if (aUsage & EPKCS15UsageWrap)
-		{
-		PrintInfoL(wrap);		
-		}
-	if (aUsage & EPKCS15UsageUnwrap)
-		{
-		PrintInfoL(unwrap);		
-		}
-	if (aUsage & EPKCS15UsageVerify)
-		{
-		PrintInfoL(verify);		
-		}
-	if (aUsage & EPKCS15UsageVerifyRecover)
-		{
-		PrintInfoL(verifyrecover);		
-		}
-	if (aUsage & EPKCS15UsageDerive)
-		{
-		PrintInfoL(derive);		
-		}
-	if (aUsage & EPKCS15UsageNonRepudiation)
-		{
-		PrintInfoL(nonrepudiation);		
-		}
-	if (aUsage & (TUint)EX509UsageDigitalSignature)
-		{
-		PrintInfoL(_L("DigitalSignature "));		
-		}
-	if (aUsage & EX509UsageNonRepudiation)
-		{
-		PrintInfoL(_L("NonRepudiation "));		
-		}
-	if (aUsage & EX509UsageKeyEncipherment)
-		{
-		PrintInfoL(_L("KeyEncipherment "));		
-		}
-	if (aUsage & EX509UsageDataEncipherment )
-		{
-		PrintInfoL(_L("DataEncipherment "));		
-		}
-	if (aUsage & EX509UsageKeyAgreement )
-		{
-		PrintInfoL(_L("KeyAgreement "));		
-		}
-	if (aUsage & EX509UsageKeyCertSign )
-		{
-		PrintInfoL(_L("KeyCertSign "));		
-		}
-	if (aUsage & EX509UsageCRLSign )
-		{
-		PrintInfoL(_L("CRLSign "));		
-		}
-	if (aUsage & EX509UsageEncipherOnly )
-		{
-		PrintInfoL(_L("EncipherOnly  "));		
-		}
-	if (aUsage & EX509UsageDecipherOnly)
-		{
-		PrintInfoL(_L("DecipherOnly  "));		
-		}
-
-	TBuf<32> buf;	
-	_LIT(KKeyUsage, "\tCode: 0x%x ");
-	buf.Format(KKeyUsage, aUsage);
-	PrintInfoL(buf);
-	PrintInfoL(newline);	
-	}
-	
-	
-/*static*/ HBufC* KeyToolUtils::KeyAccessDesLC(TInt aAccess)
-	{
-	TBuf<128> access;
-	
-	if (aAccess & CCTKeyInfo::ESensitive)
-		{
-		access.Append(KSensitive);
-		access.Append(space);
-		}
-
-	if (aAccess & CCTKeyInfo::EExtractable)
-		{ 
-		access.Append(KExtractable);
-		access.Append(space);		
-		}
-
-	if (aAccess & CCTKeyInfo::EAlwaysSensitive)
-		{
-		access.Append(KAlwaysSensitive);
-		access.Append(space);
-		}
-
-	if (aAccess & CCTKeyInfo::ENeverExtractable)
-		{ 
-		access.Append(KNeverExtractable);
-		access.Append(space);
-		}
-
-	if (aAccess & CCTKeyInfo::ELocal)	
-		{ 
-		access.Append(KLocal);
-		access.Append(space);
-		}
-	return access.AllocLC();	
-	}
-	
-	
-/*static*/ HBufC* KeyToolUtils::AlgorithmDesLC(CCTKeyInfo::EKeyAlgorithm aAlgorithm)
-	{
-	TBuf<32> alg;
-
-	switch (aAlgorithm)
-		{
-		case CCTKeyInfo::EInvalidAlgorithm:
-			{
-			alg = _L("Invalid Algorithm");
-			}
-			break;
-		case CCTKeyInfo::ERSA:
-			{
-			alg = _L("RSA");
-			}
-			break;
-		case CCTKeyInfo::EDSA:
-			{
-			alg = _L("DSA");
-			}
-			break;
-		case CCTKeyInfo::EDH :
-			{
-			alg = _L("Diffie Hellman");
-			}
-			break;
-		default:
-			{
-			alg = _L("Unsupported algorithm!");			
-			}
-		}	
-	return alg.AllocLC();
-	}
-
-
-        
-/*static*/ void KeyToolUtils::PrintKeyInfoL(const CCTKeyInfo& aKey, TBool aIsDetailed,TBool aPageWise)
-	{
-	HBufC* alg = KeyToolUtils::AlgorithmDesLC(aKey.Algorithm());
-	TFileName buf;
-
-	MCTToken& token = aKey.Token();
-	TFileName msg,msg1;
-	const TDesC& tmp = token.Label();
-	msg.Format(_L("Store Label: %S"), &tmp);	
-	
-	const TDesC& tmp1 = token.Information(MCTToken::EVersion);
-	const TDesC& tmp2 = token.Information(MCTToken::ESerialNo);
-	const TDesC& tmp3 = token.Information(MCTToken::EManufacturer);
-
-	msg1.Format(_L("Version: %S \t Serial Number: %S \t Manufacturer: %S Store Type: Read only"), &tmp1, &tmp2, &tmp3);	
-	
-	if (!aIsDetailed)
-		{
-		PrintInfoL(msg, aPageWise);
-		PrintInfoL(newline, aPageWise);
-		PrintInfoL(aKey.Label().Left(KMaxLabel));
-		if (aKey.Label().Length() > KMaxLabel)
-			{
-			PrintInfoL(KEllipsis);
-			}
-		PrintInfoL(_L(" is a "));			
-		_LIT(KKeySizeShort, "%d");
-		buf.Format(KKeySizeShort,  aKey.Size());
-		PrintInfoL(buf);
-		PrintInfoL(_L(" bits "));
-		PrintInfoL(*alg);
-		PrintInfoL(_L(" key "));	
-		CleanupStack::PopAndDestroy(alg);	
-		PrintInfoL(newline, aPageWise);	
-		return;
-		}
-	
-	PrintInfoL(msg, aPageWise);
-	PrintInfoL(newline, aPageWise);
-	PrintInfoL(msg1, aPageWise);
-	PrintInfoL(newline, aPageWise);
-
-	PrintInfoL(_L("\t\tAlgorithm: "));	
-	PrintInfoL(*alg);
-	CleanupStack::PopAndDestroy(alg);			
-
-	_LIT(KKeySize, "\tSize: %d ");
-	buf.Format(KKeySize,  aKey.Size());
-	PrintInfoL(buf);
-	PrintInfoL(_L(" bits"));
-	PrintInfoL(newline, aPageWise);
-
-	KeyToolUtils::PrintUsageL(aKey.Usage());
-
-	_LIT(KKeyOwner, "\t\tOwner : 0x%x ");
-	_LIT(KKeyUser, "\t\tUser : 0x%x ");
-	TCompiledSecurityPolicy managementPolicy = aKey.ManagementPolicy();
-	TCompiledSecurityPolicy usePolicy = aKey.UsePolicy();
-	
-	TUint32 mSecureid = managementPolicy.SecureId();
-	if (mSecureid == 0xffffffff)
-		{
-		TCapability cab = managementPolicy.Capability(0);
-		_LIT(KKeyOwnerCab, "\t\tOwner : %S ");
-		// currently only possible for keyowner other than secure id.
-		if (cab == ECapabilityWriteDeviceData)
-			{
-			_LIT(KCab, "WriteDeviceData");
-			buf.Format(KKeyOwnerCab, &KCab);
-			PrintInfoL(buf);	
-			}
-		else
-			{
-			_LIT(KCab, "Unknown");
-			buf.Format(KKeyOwnerCab, &KCab);
-			PrintInfoL(buf);
-			}
-		}
-	else
-		{
-		buf.Format(KKeyOwner, mSecureid);
-		PrintInfoL(buf);		
-		}
-	PrintInfoL(newline, aPageWise);
-
-	TUint32 uSecureid = usePolicy.SecureId();
-	if (uSecureid == 0xffffffff)
-		{
-		TSecurityPolicy::TType utype = usePolicy.Type();
-		_LIT(KKeyUserType, "\t\tUser : %S ");
-		// currently only possible for keyuser other than secure id
-		if (utype == TSecurityPolicy::ETypePass)
-			{
-			_LIT(KType, "ALL");
-			buf.Format(KKeyUserType, &KType);
-			PrintInfoL(buf);	
-			}
-		else
-			{
-			_LIT(KType, "Unknown");
-			buf.Format(KKeyUserType, &KType);
-			PrintInfoL(buf);
-			}
-		}
-	else
-		{
-		buf.Format(KKeyUser, uSecureid);
-		PrintInfoL(buf);
-		if (uSecureid == KUidSecurityKeytool)
-			{
-			_LIT(KUser, " (KeyTool)");
-			PrintInfoL(KUser);
-			}
-		}
-	PrintInfoL(newline, aPageWise);
-
-
-	_LIT(KKeySens, "\t\tAccess flags: ");
-	PrintInfoL(KKeySens);
-	
-	HBufC* access = KeyToolUtils::KeyAccessDesLC(aKey.AccessType());
-	PrintInfoL(*access);
-	CleanupStack::PopAndDestroy(access);
-	
-	PrintInfoL(newline, aPageWise);
-
-	_LIT(KKeyID, "\t\tID: ");
-	PrintInfoL(KKeyID);
-	KeyToolUtils::WriteOctetStringL(aKey.ID());
-	PrintInfoL(newline, aPageWise);
-				
-	_LIT(KKeyLabel, "\t\tLabel: ");
-	PrintInfoL(KKeyLabel);
-	PrintInfoL(aKey.Label().Left(KMaxLabel));
-	if (aKey.Label().Length() > KMaxLabel)
-		{
-		PrintInfoL(KEllipsis);
-		}
-	PrintInfoL(newline, aPageWise);
-
-	_LIT(KKeyNative, "\t\tNative: Yes ");
-	_LIT(KKeyNotNative, "\t\tNative: No ");
-	if ( aKey.Native())
-		{
-		PrintInfoL(KKeyNative);	
-		}
-	else
-		{
-		PrintInfoL(KKeyNotNative);			
-		}
-	PrintInfoL(newline, aPageWise);
-
-	_LIT(KTimeFormat, "%1/%2/%3 %H:%T:%S");
-	 
-	_LIT(KKeyStartDate, "\t\tStart date: ");
-	PrintInfoL(KKeyStartDate);
-	if (aKey.StartDate().Int64() == 0)
-		{
-		PrintInfoL(_L("not set"));		
-		}
-	else
-		{
-		aKey.StartDate().FormatL(buf, KTimeFormat);
-		PrintInfoL(buf);
-		}
-
-	_LIT(KKeyEndDate, "\tEnd date: ");
-	PrintInfoL(KKeyEndDate);
-	
-	if (aKey.EndDate().Int64() == 0)
-		{
-		PrintInfoL(_L("not set"));		
-		}
-	else
-		{
-		aKey.EndDate().FormatL(buf, KTimeFormat);
-		PrintInfoL(buf);
-		}
-	PrintInfoL(newline, aPageWise);
-	}
-	
-/*static*/ TKeyUsagePKCS15 KeyToolUtils::ParseKeyUsage(TPtrC aUsage)
-	{
-	TKeyUsagePKCS15 usage = EPKCS15UsageNone;
-
-	if (aUsage.Compare(allusage)==0)
-		{
-		return EPKCS15UsageAll;
-		}
-	if (aUsage.Compare(nousage)==0)
-		{
-		return EPKCS15UsageNone;
-		}
-	if (aUsage.Compare(encrypt)==0)
-		{
-		return EPKCS15UsageEncrypt;
-		}				
-	if (aUsage.Compare(decrypt)==0)
-		{
-		return EPKCS15UsageDecrypt;
-		}
-	if (aUsage.Compare(sign)==0)
-		{
-		return EPKCS15UsageSign;
-		}
-	if (aUsage.Compare(signrecover)==0)
-		{
-		return EPKCS15UsageSignRecover;
-		}
-	if (aUsage.Compare(wrap)==0)
-		{
-		return EPKCS15UsageWrap;
-		}							
-	if (aUsage.Compare(unwrap)==0)
-		{
-		return EPKCS15UsageUnwrap;
-		}							
-	if (aUsage.Compare(verify)==0)
-		{
-		return EPKCS15UsageVerify;
-		}	
-	if (aUsage.Compare(verifyrecover)==0)
-		{
-		return EPKCS15UsageVerifyRecover;
-		}	
-	if (aUsage.Compare(derive)==0)
-		{
-		return EPKCS15UsageDerive;
-		}	
-	if (aUsage.Compare(nonrepudiation)==0)
-		{
-		return EPKCS15UsageNonRepudiation;
-		}															
-	return usage;
-	}
-	
-/*static*/ CCTKeyInfo::EKeyAccess KeyToolUtils::ParseKeyAccess(TPtrC aAccess)
-	{
-	CKeyInfoBase::EKeyAccess access = CKeyInfoBase::EInvalidAccess;
-
-	if (aAccess.Compare(KSensitive)==0)
-		{
-		access = CCTKeyInfo::ESensitive;
-		}
-
-	if (aAccess.Compare(KExtractable)==0)
-		{ 
-		access = CCTKeyInfo::EExtractable;
-		}
-
-	if (aAccess.Compare(KAlwaysSensitive)==0)
-		{
-		access = CCTKeyInfo::EAlwaysSensitive;
-		}
-
-	if (aAccess.Compare(KNeverExtractable)==0)
-		{ 
-		access = CCTKeyInfo::ENeverExtractable;
-		}
-
-	if (aAccess.Compare(KLocal)==0)	
-		{ 
-		access = CCTKeyInfo::ELocal;
-		}
-	
-	return access;
-	}
-
-
-/*static*/ RArray<CCTKeyInfo*> KeyToolUtils::MatchKey(RMPointerArray<CCTKeyInfo>& aKeyList, TDesC& aLabel)
-	{
-	RArray<CCTKeyInfo*>	ret;
-	
-	for (TInt j = 0; j < aKeyList.Count(); j++)
-		{
-		if (aKeyList[j]->Label().Match(aLabel) != KErrNotFound) 
-			{
-			ret.Append(aKeyList[j]);
-			}
-		}
-	return ret;
-	}
-
-/*static*/ CCTKeyInfo* KeyToolUtils::findKey(RMPointerArray<CCTKeyInfo>& aKeyList, TDesC& aLabel)
-	{
-	TInt keyIndex = -1;
-	// Select the key with the label we want!
-	for (TInt j = 0; j < aKeyList.Count(); j++)
-		{
-		if (aKeyList[j]->Label() == aLabel) 
-			{
-			keyIndex = j;
-			break;
-			}
-		}
-
-	if (keyIndex == -1)
-		{
-		return NULL;
-		}
-	return aKeyList[keyIndex];
-	}
-
-/*static*/ const TDesC& KeyToolUtils::Uid2Des(TUid aUid)
-	{
-	if (aUid.iUid == swinstalluid)
-		{
-		return KSWInstall; 
-		}
-	else if (aUid.iUid == swinstallocspuid) 
-		{
-		return KSWInstallOCSP;
-		}
-	else if (aUid.iUid == midletinstalluid)
-		{
-		return KMidletInstall;
-		}
-	else if (aUid.iUid ==  tlsuid) 
-		{
-		return KTls;
-		}
-  	else if (aUid.iUid ==  tocspuid) 
-  		{
-  		return KTOcsp;
-  		}
-  
- 	return KUnknown;
-	}	
-
-
-/*static*/ void KeyToolUtils::FilterCertsL(RMPointerArray<CCTCertInfo>& aCertList, TDesC& aLabel)
-  	{
-  	TInt j = 0;
-  	while (j < aCertList.Count())
-  		{
-  		if ( aCertList[j]->Label().Match(aLabel) == KErrNotFound) 
-  			{
-  			CCTCertInfo* tmp = aCertList[j];
-  			tmp->Release();
-  			aCertList.Remove(j);
-  			}
-  		else
-  			{
-  			j++;
-  			}	
-  		}
-  	if (j ==0)	
-  		{
-  		PrintInfoL(_L("Cannot find the specified Certificate"));
-  		PrintInfoL(newline);	
-  		}
-  	}
-
-/*static*/ void KeyToolUtils::FilterCertsL(RMPointerArray<CCTCertInfo>& aCertList, TCertificateOwnerType& aOwnerType)
-	{
-	TInt j = 0;
-  	while (j < aCertList.Count())
-  		{
-  		if ( aCertList[j]->CertificateOwnerType() != aOwnerType) 
-  			{
-  			CCTCertInfo* tmp = aCertList[j];
-  			tmp->Release();
-  			aCertList.Remove(j);
-  			}
-  		else
-  			{
-  			j++;
-  			}	
-  		}
-  	if (j ==0)	
-  		{
-  		PrintInfoL(_L("No Certificate Exist"));	
-  		PrintInfoL(newline);
-  		}
-	}
-
-/*static*/ void KeyToolUtils::PrintCertInfoL(CCTCertInfo& aCertInfo, CCertificate& aCertificate,RArray<TUid> aApps, TBool aIsDetailed,TBool aPageWise)
-	{
-	TFileName certFormat,ownerType;
-
-	switch (aCertInfo.CertificateFormat())
-		{
-		case EX509Certificate :
-			{
-			certFormat.Copy(_L("X509"));
-			}
-			break;
-		case EWTLSCertificate :
-			{
-			certFormat.Copy(_L("WTLS"));
-			}
-			break;
-		case EX968Certificate :
-			{
-			certFormat.Copy(_L("X968"));
-			}
-			break;		
-		default :
-			{
-			certFormat.Copy(_L("Unknown certificate format!"));
-			}
-		}	
-
-	switch (aCertInfo.CertificateOwnerType())
-		{
-		case EPeerCertificate :
-			{
-			ownerType.Copy(_L("Peer"));	
-			}
-			break;
-		case EUserCertificate :
-			{
-			ownerType.Copy(_L("User"));	
-			}
-			break;
-		case ECACertificate :
-			{
-			ownerType.Copy(_L("Root (CA)"));	
-			}
-			break;
-		default :
-			{
-			ownerType.Copy(_L("Unknown"));			
-			}
-		}
-	
-	MCTToken& token = aCertInfo.Token();
-	TFileName msg,msg1;
-	const TDesC& tmp = token.Label();
-	msg.Format(_L("Store Label: %S"), &tmp);	
-	
-	const TDesC& tmp1 = token.Information(MCTToken::EVersion);
-	const TDesC& tmp2 = token.Information(MCTToken::ESerialNo);
-	const TDesC& tmp3 = token.Information(MCTToken::EManufacturer);
-
-	msg1.Format(_L("Version: %S \t Serial Number: %S \t Manufacturer: %S "), &tmp1, &tmp2, &tmp3);	
-						
-	if (!aIsDetailed)
-		{
-		PrintInfoL(msg, aPageWise);
-		PrintInfoL(newline, aPageWise);
-		PrintInfoL(aCertInfo.Label());
-		PrintInfoL(_L(" is a "));
-		PrintInfoL(certFormat);
-		PrintInfoL(_L(" format which is a "));
-		PrintInfoL(ownerType);
-		PrintInfoL(_L(" type "));
-		PrintInfoL(newline, aPageWise);
-		return;
-		}
-
-	PrintInfoL(msg, aPageWise);
-	PrintInfoL(newline, aPageWise);		
-	PrintInfoL(msg1, aPageWise);
-	PrintInfoL(newline, aPageWise);		
-	PrintInfoL(_L("\tLabel: "));
-	PrintInfoL(aCertInfo.Label());
-
-	PrintInfoL(_L("\t\t"));
-	
-	PrintInfoL(_L("Format: "));
-	PrintInfoL(certFormat);
-	PrintInfoL(_L("\t"));
-	PrintInfoL(_L("Owner Type: "));	
-	PrintInfoL(ownerType);
-	PrintInfoL(newline, aPageWise);
-	PrintInfoL(_L("\tIssuer Name: "));
-	HBufC* issuer = aCertificate.IssuerL();
-	PrintInfoL(*issuer);	
-	delete issuer;
-	HBufC* subj = aCertificate.SubjectL();
-	PrintInfoL(_L("\t\tSubject Name: "));
-	PrintInfoL(*subj);
-	delete subj;
-
-	PrintInfoL(newline, aPageWise);
-	CValidityPeriod vp = aCertificate.ValidityPeriod();
-
-	const TTime& start = vp.Start();
-	const TTime& finish = vp.Finish();
-	TBuf<30> dateString1;
-	start.FormatL(dateString1,(_L("%H%:1%T:%S %*E%*D %X%*N%Y %1 %2 %3")));
-
-	PrintInfoL(_L("\tValid From  "));
-	PrintInfoL(dateString1, aPageWise);
-
-	TBuf<30> dateString2;
-	finish.FormatL(dateString2,(_L("%H%:1%T:%S %*E%*D %X%*N%Y %1 %2 %3")));
-
-	PrintInfoL(_L("\tValid Until "));
-	PrintInfoL(dateString2, aPageWise);
-	PrintInfoL(newline, aPageWise);	
-	PrintInfoL(_L("\tTrusted for Applications: "));
-	for (TInt k = 0; k < aApps.Count(); k++)
-		{
-		PrintInfoL(Uid2Des(aApps[k]), aPageWise);
-		PrintInfoL(_L("  "));
-		}
-	PrintInfoL(newline, aPageWise);
-	}
-	
-void KeyToolUtils::SetConsole(CConsoleBase *aConsole )
-	{
-	iConsole = aConsole;
-	}
-
-void KeyToolUtils::SetFile(RFile* aFile)
-	{
-	iFile = aFile;
-	}
-
-TBool KeyToolUtils::DoesFileExistsL(const RFs& aFs, const TDesC& aFileName)
-	{
-	TBool exists = EFalse;
-	TEntry* e = new(ELeave) TEntry();		
-	TInt err = aFs.Entry(aFileName, *e);
-	if (err == KErrNone && ! e->IsDir())
-		{
-		exists = ETrue;			
-		}
-	delete e;
-	return exists;		
-	}
-	
-/*static*/ void KeyToolUtils::PrintInfoL(const TDesC& aValue, TBool aPageWise)
-	{
-	if (iConsole)
-		{
-		TSize screenSize = iConsole->ScreenSize();
-		if(aPageWise && (iConsole->WhereY() >= screenSize.iHeight - KCursorOffset))
-			{
- 			iConsole->Printf(_L("\nPress a key to continue..."));
-			iConsole->Getch();
-			iConsole->ClearScreen();
-			iConsole->SetPos(0);
-			}
-		iConsole->Printf(aValue);	
-		}
-	else
-		{
-		TBuf8<256> buf8;
-		buf8.Copy(aValue);
-		TInt seekPos = 0;
-		iFile->Seek(ESeekEnd, seekPos);
-		User::LeaveIfError(iFile->Write(buf8));
-		}
-	}
-	
+/*
+* Copyright (c) 2003-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: 
+*
+*/
+
+
+#include <e32base.h>
+#include <e32cons.h>
+
+#include "keytool_utils.h"
+#include "securityerr.h"
+#include "compiledsecuritypolicy.h"
+
+_LIT(space, " ");
+
+_LIT(newline, "\n");
+ 
+_LIT(KExtractable, "Extractable");
+_LIT(KSensitive, "Sensitive");
+_LIT(KAlwaysSensitive, "AlwaysSensitive");
+_LIT(KNeverExtractable, "NeverExtractable");
+_LIT(KLocal, "Local");
+_LIT(KEllipsis, "...");
+ 
+_LIT(x509, "X509");
+_LIT(allusage, "AllUsage");
+_LIT(nousage, "NoUsage");
+_LIT(encrypt, "Encrypt");
+_LIT(decrypt, "Decrypt");
+_LIT(sign, "Sign");
+_LIT(signrecover, "SignRecover");
+_LIT(wrap, "Wrap");
+_LIT(unwrap, "Unwrap");
+_LIT(verify, "Verify");
+_LIT(verifyrecover, "VerifyRecover");
+_LIT(derive, "Derive");
+_LIT(nonrepudiation, "NonRepudiation");
+
+const TInt KCursorOffset		= 2;
+static const TInt KMaxLabel = 32;
+CConsoleBase* KeyToolUtils::iConsole = NULL;       
+RFile* KeyToolUtils::iFile = NULL;
+
+/*static*/ void KeyToolUtils::WriteErrorL(TInt aError)
+	{
+	
+	if ((aError <= -12000) && (aError >= -12100))
+		{
+		PrintInfoL(_L("You have tsecdlg.dll in z:\\system\\notifiers."));		
+		PrintInfoL(_L("This notifier is for *testing only* please remove it and try again!"));
+		return;		
+		}
+	
+	switch (aError)
+		{
+	case KErrNone:	// 0
+		PrintInfoL(_L("KErrNone"));
+		break;
+
+	case KErrNotFound:	// -1
+		PrintInfoL(_L("KErrNotFound"));
+		break;
+
+	case KErrNotSupported:	// -5
+		PrintInfoL(_L("KErrNotSupported"));
+		break;
+
+	case KErrInUse:	// -14
+		PrintInfoL(_L("KErrInUse"));
+		break;
+
+	case KErrNotReady:	// -18
+		PrintInfoL(_L("KErrNotReady"));
+		break;
+
+	case KErrKeyAlgorithm:  //-11006
+		PrintInfoL(_L("KErrKeyAlgorithm"));
+		break;		
+
+	case KErrKeyUsage:  //-11007
+		PrintInfoL(_L("KErrKeyUsage"));
+		break;
+		
+	case KErrKeyValidity:  //-11008
+		PrintInfoL(_L("KErrKeyValidity"));
+		break;		
+
+	case KErrKeySize:  //-11009
+		PrintInfoL(_L("KErrKeySize"));
+		break;
+
+	case KErrKeyAccess:  //-11010
+		PrintInfoL(_L("KErrKeyAccess"));
+		break;
+
+	case KRequestPending:
+		PrintInfoL(_L("KRequestPending"));
+		break;
+
+	case KErrAlreadyExists:
+		PrintInfoL(_L("KErrAlreadyExists"));
+		break;
+
+	case KErrArgument:
+		PrintInfoL(_L("KErrArgument"));
+		break;
+
+	case KErrBadName: // -28
+		PrintInfoL(_L("KErrBadName"));
+		break;
+
+	case KErrCorrupt: // -20
+		PrintInfoL(_L("KErrCorrupt"));
+		break;		
+	case KErrPrivateKeyNotFound: //-11011				
+		PrintInfoL(_L("KErrPrivateKeyNotFound"));
+		break;	
+
+	default:
+		{
+		TBuf<64> msg;
+		msg.Format(_L("Unknown (Code %d)"), aError);
+		PrintInfoL(msg);		
+		}
+		break;
+		}
+	}
+        
+/*static*/ void KeyToolUtils::WriteOctetStringL(const TDesC8& aString)
+	{
+	TInt index;
+   	TInt counter;
+ 	counter = aString.Length();
+	HBufC* buf = HBufC::NewLC(counter*6);
+	TPtr pBuf = buf->Des();
+   	 for (index = 0; index < counter; index++)
+		{
+		pBuf.AppendFormat(_L("%01x"),aString[index]>>4);
+		pBuf.AppendFormat(_L("%01x"),aString[index]&0xf);
+		pBuf.Append(_L(" "));
+		}
+	PrintInfoL(pBuf);
+	CleanupStack::PopAndDestroy();//buf
+	}
+	       
+	        
+/*static*/ void KeyToolUtils::PrintUsageL(TUint aUsage)
+	{
+	PrintInfoL(_L("\t\tUsage : "));
+	if (aUsage & 0x0000ffff)  // In this range we are talking PKCS15
+		{
+		PrintInfoL(_L("PKCS15 "));
+		}
+	if (aUsage & 0xffff0000)  // In this range we are talking X509
+		{
+		PrintInfoL(x509);
+		}
+	if (aUsage == (TUint)EPKCS15UsageAll)
+		{
+		PrintInfoL(allusage);		
+		return;
+		}	
+	if (aUsage == EPKCS15UsageNone)
+		{
+		PrintInfoL(nousage);		
+		return;
+		}	
+	if (aUsage & EPKCS15UsageEncrypt)
+		{
+		PrintInfoL(encrypt);		
+		}
+	if (aUsage & EPKCS15UsageDecrypt)
+		{
+		PrintInfoL(decrypt);		
+		}
+	if (aUsage & EPKCS15UsageSign)
+		{
+		PrintInfoL(sign);		
+		}
+	if (aUsage & EPKCS15UsageSignRecover)
+		{
+		PrintInfoL(signrecover);		
+		}
+	if (aUsage & EPKCS15UsageWrap)
+		{
+		PrintInfoL(wrap);		
+		}
+	if (aUsage & EPKCS15UsageUnwrap)
+		{
+		PrintInfoL(unwrap);		
+		}
+	if (aUsage & EPKCS15UsageVerify)
+		{
+		PrintInfoL(verify);		
+		}
+	if (aUsage & EPKCS15UsageVerifyRecover)
+		{
+		PrintInfoL(verifyrecover);		
+		}
+	if (aUsage & EPKCS15UsageDerive)
+		{
+		PrintInfoL(derive);		
+		}
+	if (aUsage & EPKCS15UsageNonRepudiation)
+		{
+		PrintInfoL(nonrepudiation);		
+		}
+	if (aUsage & (TUint)EX509UsageDigitalSignature)
+		{
+		PrintInfoL(_L("DigitalSignature "));		
+		}
+	if (aUsage & EX509UsageNonRepudiation)
+		{
+		PrintInfoL(_L("NonRepudiation "));		
+		}
+	if (aUsage & EX509UsageKeyEncipherment)
+		{
+		PrintInfoL(_L("KeyEncipherment "));		
+		}
+	if (aUsage & EX509UsageDataEncipherment )
+		{
+		PrintInfoL(_L("DataEncipherment "));		
+		}
+	if (aUsage & EX509UsageKeyAgreement )
+		{
+		PrintInfoL(_L("KeyAgreement "));		
+		}
+	if (aUsage & EX509UsageKeyCertSign )
+		{
+		PrintInfoL(_L("KeyCertSign "));		
+		}
+	if (aUsage & EX509UsageCRLSign )
+		{
+		PrintInfoL(_L("CRLSign "));		
+		}
+	if (aUsage & EX509UsageEncipherOnly )
+		{
+		PrintInfoL(_L("EncipherOnly  "));		
+		}
+	if (aUsage & EX509UsageDecipherOnly)
+		{
+		PrintInfoL(_L("DecipherOnly  "));		
+		}
+
+	TBuf<32> buf;	
+	_LIT(KKeyUsage, "\tCode: 0x%x ");
+	buf.Format(KKeyUsage, aUsage);
+	PrintInfoL(buf);
+	PrintInfoL(newline);	
+	}
+	
+	
+/*static*/ HBufC* KeyToolUtils::KeyAccessDesLC(TInt aAccess)
+	{
+	TBuf<128> access;
+	
+	if (aAccess & CCTKeyInfo::ESensitive)
+		{
+		access.Append(KSensitive);
+		access.Append(space);
+		}
+
+	if (aAccess & CCTKeyInfo::EExtractable)
+		{ 
+		access.Append(KExtractable);
+		access.Append(space);		
+		}
+
+	if (aAccess & CCTKeyInfo::EAlwaysSensitive)
+		{
+		access.Append(KAlwaysSensitive);
+		access.Append(space);
+		}
+
+	if (aAccess & CCTKeyInfo::ENeverExtractable)
+		{ 
+		access.Append(KNeverExtractable);
+		access.Append(space);
+		}
+
+	if (aAccess & CCTKeyInfo::ELocal)	
+		{ 
+		access.Append(KLocal);
+		access.Append(space);
+		}
+	return access.AllocLC();	
+	}
+	
+	
+/*static*/ HBufC* KeyToolUtils::AlgorithmDesLC(CCTKeyInfo::EKeyAlgorithm aAlgorithm)
+	{
+	TBuf<32> alg;
+
+	switch (aAlgorithm)
+		{
+		case CCTKeyInfo::EInvalidAlgorithm:
+			{
+			alg = _L("Invalid Algorithm");
+			}
+			break;
+		case CCTKeyInfo::ERSA:
+			{
+			alg = _L("RSA");
+			}
+			break;
+		case CCTKeyInfo::EDSA:
+			{
+			alg = _L("DSA");
+			}
+			break;
+		case CCTKeyInfo::EDH :
+			{
+			alg = _L("Diffie Hellman");
+			}
+			break;
+		default:
+			{
+			alg = _L("Unsupported algorithm!");			
+			}
+		}	
+	return alg.AllocLC();
+	}
+
+
+        
+/*static*/ void KeyToolUtils::PrintKeyInfoL(const CCTKeyInfo& aKey, TBool aIsDetailed,TBool aPageWise)
+	{
+	HBufC* alg = KeyToolUtils::AlgorithmDesLC(aKey.Algorithm());
+	TFileName buf;
+
+	MCTToken& token = aKey.Token();
+	TFileName msg,msg1;
+	const TDesC& tmp = token.Label();
+	msg.Format(_L("Store Label: %S"), &tmp);	
+	
+	const TDesC& tmp1 = token.Information(MCTToken::EVersion);
+	const TDesC& tmp2 = token.Information(MCTToken::ESerialNo);
+	const TDesC& tmp3 = token.Information(MCTToken::EManufacturer);
+
+	msg1.Format(_L("Version: %S \t Serial Number: %S \t Manufacturer: %S Store Type: Read only"), &tmp1, &tmp2, &tmp3);	
+	
+	if (!aIsDetailed)
+		{
+		PrintInfoL(msg, aPageWise);
+		PrintInfoL(newline, aPageWise);
+		PrintInfoL(aKey.Label().Left(KMaxLabel));
+		if (aKey.Label().Length() > KMaxLabel)
+			{
+			PrintInfoL(KEllipsis);
+			}
+		PrintInfoL(_L(" is a "));			
+		_LIT(KKeySizeShort, "%d");
+		buf.Format(KKeySizeShort,  aKey.Size());
+		PrintInfoL(buf);
+		PrintInfoL(_L(" bits "));
+		PrintInfoL(*alg);
+		PrintInfoL(_L(" key "));	
+		CleanupStack::PopAndDestroy(alg);	
+		PrintInfoL(newline, aPageWise);	
+		return;
+		}
+	
+	PrintInfoL(msg, aPageWise);
+	PrintInfoL(newline, aPageWise);
+	PrintInfoL(msg1, aPageWise);
+	PrintInfoL(newline, aPageWise);
+
+	PrintInfoL(_L("\t\tAlgorithm: "));	
+	PrintInfoL(*alg);
+	CleanupStack::PopAndDestroy(alg);			
+
+	_LIT(KKeySize, "\tSize: %d ");
+	buf.Format(KKeySize,  aKey.Size());
+	PrintInfoL(buf);
+	PrintInfoL(_L(" bits"));
+	PrintInfoL(newline, aPageWise);
+
+	KeyToolUtils::PrintUsageL(aKey.Usage());
+
+	_LIT(KKeyOwner, "\t\tOwner : 0x%x ");
+	_LIT(KKeyUser, "\t\tUser : 0x%x ");
+	TCompiledSecurityPolicy managementPolicy = aKey.ManagementPolicy();
+	TCompiledSecurityPolicy usePolicy = aKey.UsePolicy();
+	
+	TUint32 mSecureid = managementPolicy.SecureId();
+	if (mSecureid == 0xffffffff)
+		{
+		TCapability cab = managementPolicy.Capability(0);
+		_LIT(KKeyOwnerCab, "\t\tOwner : %S ");
+		// currently only possible for keyowner other than secure id.
+		if (cab == ECapabilityWriteDeviceData)
+			{
+			_LIT(KCab, "WriteDeviceData");
+			buf.Format(KKeyOwnerCab, &KCab);
+			PrintInfoL(buf);	
+			}
+		else
+			{
+			_LIT(KCab, "Unknown");
+			buf.Format(KKeyOwnerCab, &KCab);
+			PrintInfoL(buf);
+			}
+		}
+	else
+		{
+		buf.Format(KKeyOwner, mSecureid);
+		PrintInfoL(buf);		
+		}
+	PrintInfoL(newline, aPageWise);
+
+	TUint32 uSecureid = usePolicy.SecureId();
+	if (uSecureid == 0xffffffff)
+		{
+		TSecurityPolicy::TType utype = usePolicy.Type();
+		_LIT(KKeyUserType, "\t\tUser : %S ");
+		// currently only possible for keyuser other than secure id
+		if (utype == TSecurityPolicy::ETypePass)
+			{
+			_LIT(KType, "ALL");
+			buf.Format(KKeyUserType, &KType);
+			PrintInfoL(buf);	
+			}
+		else
+			{
+			_LIT(KType, "Unknown");
+			buf.Format(KKeyUserType, &KType);
+			PrintInfoL(buf);
+			}
+		}
+	else
+		{
+		buf.Format(KKeyUser, uSecureid);
+		PrintInfoL(buf);
+		if (uSecureid == KUidSecurityKeytool)
+			{
+			_LIT(KUser, " (KeyTool)");
+			PrintInfoL(KUser);
+			}
+		}
+	PrintInfoL(newline, aPageWise);
+
+
+	_LIT(KKeySens, "\t\tAccess flags: ");
+	PrintInfoL(KKeySens);
+	
+	HBufC* access = KeyToolUtils::KeyAccessDesLC(aKey.AccessType());
+	PrintInfoL(*access);
+	CleanupStack::PopAndDestroy(access);
+	
+	PrintInfoL(newline, aPageWise);
+
+	_LIT(KKeyID, "\t\tID: ");
+	PrintInfoL(KKeyID);
+	KeyToolUtils::WriteOctetStringL(aKey.ID());
+	PrintInfoL(newline, aPageWise);
+				
+	_LIT(KKeyLabel, "\t\tLabel: ");
+	PrintInfoL(KKeyLabel);
+	PrintInfoL(aKey.Label().Left(KMaxLabel));
+	if (aKey.Label().Length() > KMaxLabel)
+		{
+		PrintInfoL(KEllipsis);
+		}
+	PrintInfoL(newline, aPageWise);
+
+	_LIT(KKeyNative, "\t\tNative: Yes ");
+	_LIT(KKeyNotNative, "\t\tNative: No ");
+	if ( aKey.Native())
+		{
+		PrintInfoL(KKeyNative);	
+		}
+	else
+		{
+		PrintInfoL(KKeyNotNative);			
+		}
+	PrintInfoL(newline, aPageWise);
+
+	_LIT(KTimeFormat, "%1/%2/%3 %H:%T:%S");
+	 
+	_LIT(KKeyStartDate, "\t\tStart date: ");
+	PrintInfoL(KKeyStartDate);
+	if (aKey.StartDate().Int64() == 0)
+		{
+		PrintInfoL(_L("not set"));		
+		}
+	else
+		{
+		aKey.StartDate().FormatL(buf, KTimeFormat);
+		PrintInfoL(buf);
+		}
+
+	_LIT(KKeyEndDate, "\tEnd date: ");
+	PrintInfoL(KKeyEndDate);
+	
+	if (aKey.EndDate().Int64() == 0)
+		{
+		PrintInfoL(_L("not set"));		
+		}
+	else
+		{
+		aKey.EndDate().FormatL(buf, KTimeFormat);
+		PrintInfoL(buf);
+		}
+	PrintInfoL(newline, aPageWise);
+	}
+	
+/*static*/ TKeyUsagePKCS15 KeyToolUtils::ParseKeyUsage(TPtrC aUsage)
+	{
+	TKeyUsagePKCS15 usage = EPKCS15UsageNone;
+
+	if (aUsage.Compare(allusage)==0)
+		{
+		return EPKCS15UsageAll;
+		}
+	if (aUsage.Compare(nousage)==0)
+		{
+		return EPKCS15UsageNone;
+		}
+	if (aUsage.Compare(encrypt)==0)
+		{
+		return EPKCS15UsageEncrypt;
+		}				
+	if (aUsage.Compare(decrypt)==0)
+		{
+		return EPKCS15UsageDecrypt;
+		}
+	if (aUsage.Compare(sign)==0)
+		{
+		return EPKCS15UsageSign;
+		}
+	if (aUsage.Compare(signrecover)==0)
+		{
+		return EPKCS15UsageSignRecover;
+		}
+	if (aUsage.Compare(wrap)==0)
+		{
+		return EPKCS15UsageWrap;
+		}							
+	if (aUsage.Compare(unwrap)==0)
+		{
+		return EPKCS15UsageUnwrap;
+		}							
+	if (aUsage.Compare(verify)==0)
+		{
+		return EPKCS15UsageVerify;
+		}	
+	if (aUsage.Compare(verifyrecover)==0)
+		{
+		return EPKCS15UsageVerifyRecover;
+		}	
+	if (aUsage.Compare(derive)==0)
+		{
+		return EPKCS15UsageDerive;
+		}	
+	if (aUsage.Compare(nonrepudiation)==0)
+		{
+		return EPKCS15UsageNonRepudiation;
+		}															
+	return usage;
+	}
+	
+/*static*/ CCTKeyInfo::EKeyAccess KeyToolUtils::ParseKeyAccess(TPtrC aAccess)
+	{
+	CKeyInfoBase::EKeyAccess access = CKeyInfoBase::EInvalidAccess;
+
+	if (aAccess.Compare(KSensitive)==0)
+		{
+		access = CCTKeyInfo::ESensitive;
+		}
+
+	if (aAccess.Compare(KExtractable)==0)
+		{ 
+		access = CCTKeyInfo::EExtractable;
+		}
+
+	if (aAccess.Compare(KAlwaysSensitive)==0)
+		{
+		access = CCTKeyInfo::EAlwaysSensitive;
+		}
+
+	if (aAccess.Compare(KNeverExtractable)==0)
+		{ 
+		access = CCTKeyInfo::ENeverExtractable;
+		}
+
+	if (aAccess.Compare(KLocal)==0)	
+		{ 
+		access = CCTKeyInfo::ELocal;
+		}
+	
+	return access;
+	}
+
+
+/*static*/ RArray<CCTKeyInfo*> KeyToolUtils::MatchKey(RMPointerArray<CCTKeyInfo>& aKeyList, TDesC& aLabel)
+	{
+	RArray<CCTKeyInfo*>	ret;
+	
+	for (TInt j = 0; j < aKeyList.Count(); j++)
+		{
+		if (aKeyList[j]->Label().Match(aLabel) != KErrNotFound) 
+			{
+			ret.Append(aKeyList[j]);
+			}
+		}
+	return ret;
+	}
+
+/*static*/ CCTKeyInfo* KeyToolUtils::findKey(RMPointerArray<CCTKeyInfo>& aKeyList, TDesC& aLabel)
+	{
+	TInt keyIndex = -1;
+	// Select the key with the label we want!
+	for (TInt j = 0; j < aKeyList.Count(); j++)
+		{
+		if (aKeyList[j]->Label() == aLabel) 
+			{
+			keyIndex = j;
+			break;
+			}
+		}
+
+	if (keyIndex == -1)
+		{
+		return NULL;
+		}
+	return aKeyList[keyIndex];
+	}
+
+/*static*/ const TDesC& KeyToolUtils::Uid2Des(TUid aUid)
+	{
+	if (aUid.iUid == swinstalluid)
+		{
+		return KSWInstall; 
+		}
+	else if (aUid.iUid == swinstallocspuid) 
+		{
+		return KSWInstallOCSP;
+		}
+	else if (aUid.iUid == midletinstalluid)
+		{
+		return KMidletInstall;
+		}
+	else if (aUid.iUid ==  tlsuid) 
+		{
+		return KTls;
+		}
+  	else if (aUid.iUid ==  tocspuid) 
+  		{
+  		return KTOcsp;
+  		}
+  
+ 	return KUnknown;
+	}	
+
+
+/*static*/ void KeyToolUtils::FilterCertsL(RMPointerArray<CCTCertInfo>& aCertList, TDesC& aLabel)
+  	{
+  	TInt j = 0;
+  	while (j < aCertList.Count())
+  		{
+  		if ( aCertList[j]->Label().Match(aLabel) == KErrNotFound) 
+  			{
+  			CCTCertInfo* tmp = aCertList[j];
+  			tmp->Release();
+  			aCertList.Remove(j);
+  			}
+  		else
+  			{
+  			j++;
+  			}	
+  		}
+  	if (j ==0)	
+  		{
+  		PrintInfoL(_L("Cannot find the specified Certificate"));
+  		PrintInfoL(newline);	
+  		}
+  	}
+
+/*static*/ void KeyToolUtils::FilterCertsL(RMPointerArray<CCTCertInfo>& aCertList, TCertificateOwnerType& aOwnerType)
+	{
+	TInt j = 0;
+  	while (j < aCertList.Count())
+  		{
+  		if ( aCertList[j]->CertificateOwnerType() != aOwnerType) 
+  			{
+  			CCTCertInfo* tmp = aCertList[j];
+  			tmp->Release();
+  			aCertList.Remove(j);
+  			}
+  		else
+  			{
+  			j++;
+  			}	
+  		}
+  	if (j ==0)	
+  		{
+  		PrintInfoL(_L("No Certificate Exist"));	
+  		PrintInfoL(newline);
+  		}
+	}
+
+/*static*/ void KeyToolUtils::PrintCertInfoL(CCTCertInfo& aCertInfo, CCertificate& aCertificate,RArray<TUid> aApps, TBool aTrusted, TBool aIsDetailed,TBool aPageWise)
+	{
+	TFileName certFormat,ownerType;
+
+	switch (aCertInfo.CertificateFormat())
+		{
+		case EX509Certificate :
+			{
+			certFormat.Copy(_L("X509"));
+			}
+			break;
+		case EWTLSCertificate :
+			{
+			certFormat.Copy(_L("WTLS"));
+			}
+			break;
+		case EX968Certificate :
+			{
+			certFormat.Copy(_L("X968"));
+			}
+			break;		
+		default :
+			{
+			certFormat.Copy(_L("Unknown certificate format!"));
+			}
+		}	
+
+	switch (aCertInfo.CertificateOwnerType())
+		{
+		case EPeerCertificate :
+			{
+			ownerType.Copy(_L("Peer"));	
+			}
+			break;
+		case EUserCertificate :
+			{
+			ownerType.Copy(_L("User"));	
+			}
+			break;
+		case ECACertificate :
+			{
+			ownerType.Copy(_L("Root (CA)"));	
+			}
+			break;
+		default :
+			{
+			ownerType.Copy(_L("Unknown"));			
+			}
+		}
+	
+	MCTToken& token = aCertInfo.Token();
+	TFileName msg,msg1;
+	const TDesC& tmp = token.Label();
+	msg.Format(_L("Store Label: %S"), &tmp);	
+	
+	const TDesC& tmp1 = token.Information(MCTToken::EVersion);
+	const TDesC& tmp2 = token.Information(MCTToken::ESerialNo);
+	const TDesC& tmp3 = token.Information(MCTToken::EManufacturer);
+
+	msg1.Format(_L("Version: %S \t Serial Number: %S \t Manufacturer: %S "), &tmp1, &tmp2, &tmp3);	
+						
+	if (!aIsDetailed)
+		{
+		PrintInfoL(msg, aPageWise);
+		PrintInfoL(newline, aPageWise);
+		PrintInfoL(aCertInfo.Label());
+		PrintInfoL(_L(" is a "));
+		PrintInfoL(certFormat);
+		PrintInfoL(_L(" format which is a "));
+		PrintInfoL(ownerType);
+		PrintInfoL(_L(" type "));
+		PrintInfoL(newline, aPageWise);
+		return;
+		}
+
+	PrintInfoL(msg, aPageWise);
+	PrintInfoL(newline, aPageWise);		
+	PrintInfoL(msg1, aPageWise);
+	PrintInfoL(newline, aPageWise);		
+	PrintInfoL(_L("\tLabel: "));
+	PrintInfoL(aCertInfo.Label());
+
+	PrintInfoL(_L("\t\t"));
+	
+	PrintInfoL(_L("Format: "));
+	PrintInfoL(certFormat);
+	PrintInfoL(_L("\t"));
+	PrintInfoL(_L("Owner Type: "));	
+	PrintInfoL(ownerType);
+	PrintInfoL(newline, aPageWise);
+	PrintInfoL(_L("\tIssuer Name: "));
+	HBufC* issuer = aCertificate.IssuerL();
+	PrintInfoL(*issuer);	
+	delete issuer;
+	HBufC* subj = aCertificate.SubjectL();
+	PrintInfoL(_L("\t\tSubject Name: "));
+	PrintInfoL(*subj);
+	delete subj;
+
+	PrintInfoL(newline, aPageWise);
+	CValidityPeriod vp = aCertificate.ValidityPeriod();
+
+	const TTime& start = vp.Start();
+	const TTime& finish = vp.Finish();
+	TBuf<30> dateString1;
+	start.FormatL(dateString1,(_L("%H%:1%T:%S %*E%*D %X%*N%Y %1 %2 %3")));
+
+	PrintInfoL(_L("\tValid From  "));
+	PrintInfoL(dateString1, aPageWise);
+
+	TBuf<30> dateString2;
+	finish.FormatL(dateString2,(_L("%H%:1%T:%S %*E%*D %X%*N%Y %1 %2 %3")));
+
+	PrintInfoL(_L("\tValid Until "));
+	PrintInfoL(dateString2, aPageWise);
+	PrintInfoL(newline, aPageWise);	
+	PrintInfoL(_L("\tTrusted for Applications: "));
+	for (TInt k = 0; k < aApps.Count(); k++)
+		{
+		PrintInfoL(Uid2Des(aApps[k]), aPageWise);
+		PrintInfoL(_L("  "));
+		}
+	PrintInfoL(newline, aPageWise);
+	PrintInfoL(_L("\tMarked as trusted: "));
+	PrintInfoL( aTrusted ? _L("Yes"): _L("No"));
+	PrintInfoL(newline, aPageWise);
+	}
+	
+void KeyToolUtils::SetConsole(CConsoleBase *aConsole )
+	{
+	iConsole = aConsole;
+	}
+
+void KeyToolUtils::SetFile(RFile* aFile)
+	{
+	iFile = aFile;
+	}
+
+TBool KeyToolUtils::DoesFileExistsL(const RFs& aFs, const TDesC& aFileName)
+	{
+	TBool exists = EFalse;
+	TEntry* e = new(ELeave) TEntry();		
+	TInt err = aFs.Entry(aFileName, *e);
+	if (err == KErrNone && ! e->IsDir())
+		{
+		exists = ETrue;			
+		}
+	delete e;
+	return exists;		
+	}
+	
+/*static*/ void KeyToolUtils::PrintInfoL(const TDesC& aValue, TBool aPageWise)
+	{
+	if (iConsole)
+		{
+		TSize screenSize = iConsole->ScreenSize();
+		if(aPageWise && (iConsole->WhereY() >= screenSize.iHeight - KCursorOffset))
+			{
+ 			iConsole->Printf(_L("\nPress a key to continue..."));
+			iConsole->Getch();
+			iConsole->ClearScreen();
+			iConsole->SetPos(0);
+			}
+		iConsole->Printf(aValue);	
+		}
+	else
+		{
+		TBuf8<256> buf8;
+		buf8.Copy(aValue);
+		TInt seekPos = 0;
+		iFile->Seek(ESeekEnd, seekPos);
+		User::LeaveIfError(iFile->Write(buf8));
+		}
+	}
+	
+