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