sl@0: /* sl@0: * Copyright (c) 1998-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: * TCERTSTOREOUT.CPP sl@0: * sl@0: */ sl@0: sl@0: sl@0: #include "t_certstoreout.h" sl@0: sl@0: X509CertWriter::X509CertWriter(Output& aOut) sl@0: :iOut(aOut) sl@0: { sl@0: } sl@0: sl@0: void X509CertWriter::WriteCert(const CX509Certificate& aCertificate) sl@0: { sl@0: #ifdef SHOW_EXTENDED sl@0: ShowSerialNumber(aCertificate.SerialNumber()); sl@0: ShowValidityPeriod(aCertificate); sl@0: iOut.writeString(_L("Issuer Name = ")); sl@0: iOut.writeNewLine(); sl@0: ShowDN(aCertificate.IssuerName()); sl@0: iOut.writeString(_L("Subject Name = ")); sl@0: iOut.writeNewLine(); sl@0: ShowDN(aCertificate.SubjectName()); sl@0: ShowSigningAlgorithm(aCertificate.SigningAlgorithm()); sl@0: ShowExtensions(aCertificate); sl@0: WriteEncodings(aCertificate); sl@0: #endif // SHOW_EXTENDED sl@0: iOut.writeString(_L("\t\tShort Issuer Name = ")); sl@0: HBufC* issuer = aCertificate.IssuerL(); sl@0: iOut.writeString(*issuer); sl@0: iOut.writeNewLine(); sl@0: delete issuer; sl@0: sl@0: iOut.writeString(_L("\t\tShort Subject Name = ")); sl@0: HBufC* subject = aCertificate.SubjectL(); sl@0: iOut.writeString(*subject); sl@0: iOut.writeNewLine(); sl@0: delete subject; sl@0: } sl@0: sl@0: // The rest of these are only compiled of SHOW_EXTENDED defined - this sl@0: // eliminates warnings from WINS/UREL build sl@0: #ifdef SHOW_EXTENDED sl@0: void X509CertWriter::ShowSigningAlgorithm(const CSigningAlgorithmIdentifier& aSigningAlgorithm) sl@0: { sl@0: iOut.writeString(_L("Signed using: ")); sl@0: iOut.writeNewLine(); sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(_L("Asymmetric algorithm = ")); sl@0: const CAlgorithmIdentifier& algId = aSigningAlgorithm.AsymmetricAlgorithm(); sl@0: switch(algId.Algorithm()) sl@0: { sl@0: case ERSA: sl@0: { sl@0: iOut.writeString(_L("RSA")); sl@0: break; sl@0: } sl@0: case EDSA: sl@0: { sl@0: iOut.writeString(_L("DSA")); sl@0: break; sl@0: } sl@0: case EDH: sl@0: { sl@0: iOut.writeString(_L("DH")); sl@0: break; sl@0: } sl@0: default: sl@0: iOut.writeString(_L("Unknown")); sl@0: break; sl@0: } sl@0: iOut.writeNewLine(); sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(_L("Digest algorithm = ")); sl@0: const CAlgorithmIdentifier& digestId = aSigningAlgorithm.DigestAlgorithm(); sl@0: switch(digestId.Algorithm()) sl@0: { sl@0: case EMD2: sl@0: { sl@0: iOut.writeString(_L("MD2")); sl@0: break; sl@0: } sl@0: case EMD5: sl@0: { sl@0: iOut.writeString(_L("MD5")); sl@0: break; sl@0: } sl@0: case ESHA1: sl@0: { sl@0: iOut.writeString(_L("SHA1")); sl@0: break; sl@0: } sl@0: default: sl@0: iOut.writeString(_L("Unknown")); sl@0: } sl@0: iOut.writeNewLine(); sl@0: } sl@0: sl@0: void X509CertWriter::ShowSerialNumber(const TPtrC8& aSerialNumber) sl@0: { sl@0: iOut.writeString(_L("Serial Number = ")); sl@0: iOut.writeOctetString(aSerialNumber); sl@0: iOut.writeNewLine(); sl@0: } sl@0: sl@0: //dn display code sl@0: void X509CertWriter::ShowAVA(const CX520AttributeTypeAndValue& aAva) sl@0: { sl@0: iOut.writeString(aAva.Type()); sl@0: HBufC* val = aAva.ValueL(); sl@0: CleanupStack::PushL(val); sl@0: iOut.writeString(_L(" = ")); sl@0: iOut.writeString(val->Des()); sl@0: CleanupStack::PopAndDestroy(); sl@0: } sl@0: sl@0: void X509CertWriter::ShowDN(const CX500DistinguishedName& aName) sl@0: { sl@0: TInt count = aName.Count(); sl@0: for (TInt i = 0; i < count; i++) sl@0: { sl@0: const CX520AttributeTypeAndValue& ava = aName.Element(i); sl@0: iOut.writeSpaces(4); sl@0: ShowAVA(ava); sl@0: iOut.writeNewLine(); sl@0: } sl@0: } sl@0: sl@0: void X509CertWriter::ShowAKI(const CX509Certificate& aCert) sl@0: { sl@0: const CX509CertExtension* akiExt = aCert.Extension(KAuthorityKeyId); sl@0: if (akiExt) sl@0: { sl@0: iOut.writeString(_L("Authority Key ID = ")); sl@0: iOut.writeNewLine(); sl@0: const CX509AuthorityKeyIdExt* ext = CX509AuthorityKeyIdExt::NewLC(akiExt->Data()); sl@0: const CArrayPtrFlat& authorityName = ext->AuthorityName(); sl@0: TInt count = authorityName.Count(); sl@0: if (count > 0) sl@0: { sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(_L("Authority name = ")); sl@0: iOut.writeNewLine(); sl@0: for (TInt i = 0; i < count; i++) sl@0: { sl@0: ShowGN(*(authorityName.At(i))); sl@0: } sl@0: } sl@0: if (ext->AuthorityCertSerialNumber().Length() > 0) sl@0: { sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(_L("Authority cert serial no = ")); sl@0: iOut.writeOctetString(ext->AuthorityCertSerialNumber()); sl@0: iOut.writeNewLine(); sl@0: } sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(_L("Key Id = ")); sl@0: iOut.writeOctetString(ext->KeyId()); sl@0: iOut.writeNewLine(); sl@0: CleanupStack::PopAndDestroy(); sl@0: } sl@0: } sl@0: sl@0: void X509CertWriter::ShowSKI(const CX509Certificate& aCert) sl@0: { sl@0: const CX509CertExtension* skiExt = aCert.Extension(KSubjectKeyId); sl@0: if (skiExt) sl@0: { sl@0: iOut.writeString(_L("Subject Key ID = ")); sl@0: iOut.writeNewLine(); sl@0: const CX509SubjectKeyIdExt* ext = CX509SubjectKeyIdExt::NewLC(skiExt->Data()); sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(_L("Key Id = ")); sl@0: iOut.writeOctetString(ext->KeyId()); sl@0: iOut.writeNewLine(); sl@0: CleanupStack::PopAndDestroy(); sl@0: } sl@0: } sl@0: sl@0: void X509CertWriter::ShowGN(const CX509GeneralName& aName) sl@0: { sl@0: iOut.writeSpaces(4); sl@0: switch(aName.Tag()) sl@0: { sl@0: case 1: sl@0: { sl@0: //rfc822 sl@0: CX509RFC822NameSubtree* email = CX509RFC822NameSubtree::NewLC(aName.Data()); sl@0: const RArray& rep = email->Rep(); sl@0: TInt count = rep.Count(); sl@0: for (TInt i = 0; i < count; i++) sl@0: { sl@0: iOut.writeString(rep[i]); sl@0: iOut.writeSpaces(1); sl@0: } sl@0: iOut.writeNewLine(); sl@0: CleanupStack::PopAndDestroy();//email sl@0: break; sl@0: } sl@0: case 2: sl@0: { sl@0: //dns name sl@0: CX509DNSNameSubtree* dns = CX509DNSNameSubtree::NewLC(aName.Data()); sl@0: const RArray& rep = dns->Rep(); sl@0: TInt count = rep.Count(); sl@0: for (TInt i = 0; i < count; i++) sl@0: { sl@0: iOut.writeString(rep[i]); sl@0: iOut.writeSpaces(1); sl@0: } sl@0: CleanupStack::PopAndDestroy();//dns sl@0: break; sl@0: } sl@0: case 4: sl@0: { sl@0: //DN sl@0: CX500DistinguishedName* dN = CX500DistinguishedName::NewLC(aName.Data()); sl@0: ShowDN(*dN); sl@0: CleanupStack::PopAndDestroy(); sl@0: break; sl@0: } sl@0: case 6: sl@0: { sl@0: //uri sl@0: CX509IPBasedURI* uri = CX509IPBasedURI::NewLC(aName.Data()); sl@0: iOut.writeString(uri->Name()); sl@0: iOut.writeNewLine(); sl@0: CleanupStack::PopAndDestroy();//uri sl@0: break; sl@0: } sl@0: case 7: sl@0: { sl@0: //ip address//!!!!not done for writing to file yet!!! sl@0: CX509IPSubnetMask* ip = CX509IPSubnetMask::NewLC(aName.Data()); sl@0: TPtrC8 pBA(ip->BaseAddress()); sl@0: TInt counter; sl@0: counter = pBA.Length(); sl@0: TPtrC8 pM(ip->Mask()); sl@0: counter = pM.Length(); sl@0: CleanupStack::PopAndDestroy(); sl@0: break; sl@0: } sl@0: } sl@0: } sl@0: sl@0: sl@0: void X509CertWriter::ShowFingerprint(const CX509Certificate& aCertificate) sl@0: { sl@0: iOut.writeOctetString(aCertificate.Fingerprint()); sl@0: iOut.writeNewLine(); sl@0: } sl@0: sl@0: void X509CertWriter::ShowValidityPeriod(const CX509Certificate& aCertificate) sl@0: { sl@0: const CValidityPeriod& vp = aCertificate.ValidityPeriod(); sl@0: iOut.writeString(_L("Validity Period = ")); sl@0: iOut.writeNewLine(); 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: iOut.writeSpaces(4); sl@0: iOut.writeString(_L("Valid From = ")); sl@0: iOut.writeString(dateString1); sl@0: iOut.writeNewLine(); 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: iOut.writeSpaces(4); sl@0: iOut.writeString(_L("Valid Until = ")); sl@0: sl@0: iOut.writeString(dateString2); sl@0: iOut.writeNewLine(); sl@0: } sl@0: sl@0: //extensions sl@0: void X509CertWriter::ShowExtensions(const CX509Certificate& aCertificate) sl@0: { sl@0: const CArrayPtrFlat& exts = aCertificate.Extensions(); sl@0: TInt count = exts.Count(); sl@0: for (TInt i = 0; i < count; i++) sl@0: { sl@0: const CX509CertExtension* ext = exts.At(i); sl@0: iOut.writeString(_L("extension")); sl@0: iOut.writeNum(i); sl@0: if (!(ext->Critical())) sl@0: { sl@0: iOut.writeString(_L(" not")); sl@0: } sl@0: iOut.writeString(_L(" critical")); sl@0: iOut.writeString(_L(" ID = ")); sl@0: TPtrC id(ext->Id()); sl@0: iOut.writeString(id); sl@0: iOut.writeNewLine(); sl@0: if (id == KBasicConstraints) sl@0: { sl@0: ShowBC(*ext); sl@0: } sl@0: if (id == KSubjectAltName) sl@0: { sl@0: iOut.writeString(_L("SubjectAltName: \n")); sl@0: ShowAltName(*ext); sl@0: } sl@0: if (id == KIssuerAltName) sl@0: { sl@0: iOut.writeString(_L("IssuerAltName: \n")); sl@0: ShowAltName(*ext); sl@0: } sl@0: if (id == KKeyUsage) sl@0: { sl@0: ShowKU(*ext); sl@0: } sl@0: if (id == KNameConstraints) sl@0: { sl@0: ShowNC(*ext); sl@0: } sl@0: if (id == KPolicyConstraints) sl@0: { sl@0: ShowPC(*ext); sl@0: } sl@0: if (id == KCertPolicies) sl@0: { sl@0: ShowCP(*ext); sl@0: } sl@0: if (id == KPolicyMapping) sl@0: { sl@0: ShowPM(*ext); sl@0: } sl@0: if (id == KAuthorityKeyId) sl@0: { sl@0: ShowAKI(aCertificate); sl@0: } sl@0: if (id == KSubjectKeyId) sl@0: { sl@0: ShowSKI(aCertificate); sl@0: } sl@0: if (id == KExtendedKeyUsage) sl@0: { sl@0: ShowEKU(*ext); sl@0: } sl@0: } sl@0: } sl@0: sl@0: void X509CertWriter::ShowBC(const CX509CertExtension& aExt) sl@0: { sl@0: iOut.writeString(_L("Basic Constraints:")); sl@0: iOut.writeNewLine(); sl@0: CX509BasicConstraintsExt* ext = CX509BasicConstraintsExt::NewLC(aExt.Data()); sl@0: if (ext->IsCA()) sl@0: { sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(_L("CA cert")); sl@0: iOut.writeNewLine(); sl@0: if (ext->MaxChainLength() < KMaxTInt) sl@0: { sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(_L("Max Chain Length = ")); sl@0: iOut.writeNum(ext->MaxChainLength()); sl@0: iOut.writeNewLine(); sl@0: } sl@0: } sl@0: else sl@0: { sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(_L("EE cert")); sl@0: iOut.writeNewLine(); sl@0: } sl@0: CleanupStack::PopAndDestroy(); sl@0: } sl@0: sl@0: void X509CertWriter::ShowAltName(const CX509CertExtension& aExt) sl@0: { sl@0: CX509AltNameExt* ext = CX509AltNameExt::NewLC(aExt.Data()); sl@0: const CArrayPtrFlat& names = ext->AltName(); sl@0: TInt count = names.Count(); sl@0: for (TInt i = 0; i < count; i++) sl@0: { sl@0: ShowGN(*(names.At(i))); sl@0: } sl@0: CleanupStack::PopAndDestroy(); sl@0: } sl@0: sl@0: sl@0: _LIT(KDigSig, "digital signature"); sl@0: _LIT(KNonRep, "non-repudiation"); sl@0: _LIT(KKeyEnc, "key encipherment"); sl@0: _LIT(KDataEnc, "data encipherment"); sl@0: _LIT(KKeyAgree, "key agreement"); sl@0: _LIT(KCertSign, "key cert sign"); sl@0: _LIT(KCRLSign, "crl sign"); sl@0: _LIT(KEnciph, "encipher only"); sl@0: _LIT(KDeciph, "decipher only"); sl@0: sl@0: void X509CertWriter::ShowKU(const CX509CertExtension& aExt) sl@0: { sl@0: iOut.writeString(_L("Key Usage:")); sl@0: iOut.writeNewLine(); sl@0: CX509KeyUsageExt* ext = CX509KeyUsageExt::NewLC(aExt.Data()); sl@0: if (ext->IsSet(EX509DigitalSignature)) sl@0: { sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(KDigSig); sl@0: iOut.writeNewLine(); sl@0: } sl@0: if (ext->IsSet(EX509NonRepudiation)) sl@0: { sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(KNonRep); sl@0: iOut.writeNewLine(); sl@0: } sl@0: if (ext->IsSet(EX509KeyEncipherment)) sl@0: { sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(KKeyEnc); sl@0: iOut.writeNewLine(); sl@0: } sl@0: if (ext->IsSet(EX509DataEncipherment)) sl@0: { sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(KDataEnc); sl@0: iOut.writeNewLine(); sl@0: } sl@0: if (ext->IsSet(EX509KeyAgreement)) sl@0: { sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(KKeyAgree); sl@0: iOut.writeNewLine(); sl@0: } sl@0: if (ext->IsSet(EX509KeyCertSign)) sl@0: { sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(KCertSign); sl@0: iOut.writeNewLine(); sl@0: } sl@0: if (ext->IsSet(EX509CRLSign)) sl@0: { sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(KCRLSign); sl@0: iOut.writeNewLine(); sl@0: } sl@0: if (ext->IsSet(EX509EncipherOnly)) sl@0: { sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(KEnciph); sl@0: iOut.writeNewLine(); sl@0: } sl@0: if (ext->IsSet(EX509DecipherOnly)) sl@0: { sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(KDeciph); sl@0: iOut.writeNewLine(); sl@0: } sl@0: CleanupStack::PopAndDestroy();//ext sl@0: } sl@0: sl@0: void X509CertWriter::ShowSubtrees(const CArrayPtrFlat& aSubtrees) sl@0: { sl@0: TInt count = aSubtrees.Count(); sl@0: for (TInt i = 0; i < count; i++) sl@0: { sl@0: const CX509GeneralSubtree* subtree = aSubtrees.At(i); sl@0: ShowGN(subtree->Name()); sl@0: ///!!!!!don't write these outFile either!! sl@0: } sl@0: } sl@0: sl@0: void X509CertWriter::ShowNC(const CX509CertExtension& aExt) sl@0: {//!!!!don't write these outFile sl@0: sl@0: CX509NameConstraintsExt* ext = CX509NameConstraintsExt::NewLC(aExt.Data()); sl@0: ShowSubtrees(ext->ExcludedSubtrees()); sl@0: ShowSubtrees(ext->PermittedSubtrees()); sl@0: CleanupStack::PopAndDestroy(); sl@0: } sl@0: sl@0: void X509CertWriter::ShowPC(const CX509CertExtension& /*aExt*/) sl@0: {//!!!!don't write these outFile sl@0: //CX509PolicyConstraintsExt* ext = CX509PolicyConstraintsExt::NewLC(aExt.Data()); sl@0: //TX509PolicyConstraint required = ext->ExplicitPolicyRequired(); sl@0: //TX509PolicyConstraint mapping = ext->InhibitPolicyMapping(); sl@0: //CleanupStack::PopAndDestroy(); sl@0: } sl@0: sl@0: void X509CertWriter::ShowCP(const CX509CertExtension& aExt) sl@0: { sl@0: iOut.writeString(_L("Cert Policies = ")); sl@0: iOut.writeNewLine(); sl@0: sl@0: CX509CertPoliciesExt* ext = CX509CertPoliciesExt::NewLC(aExt.Data()); sl@0: const CArrayPtrFlat& policies = ext->Policies(); sl@0: TInt count = policies.Count(); sl@0: for (TInt i = 0; i < count; i++) sl@0: { sl@0: const CX509CertPolicyInfo* policy = policies.At(i); sl@0: sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(_L("Policy ID = ")); sl@0: iOut.writeString(policy->Id()); sl@0: iOut.writeNewLine(); sl@0: const CArrayPtrFlat& qualifiers = policy->Qualifiers(); sl@0: TInt qCount = qualifiers.Count(); sl@0: sl@0: if (qCount > 0) sl@0: { sl@0: sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(_L("Qualified by: ")); sl@0: iOut.writeNewLine(); sl@0: } sl@0: sl@0: for (TInt i = 0; i < qCount; i++) sl@0: { sl@0: CX509PolicyQualifierInfo* qualifier = qualifiers.At(i); sl@0: sl@0: iOut.writeSpaces(8); sl@0: iOut.writeString(_L("Qualifier ID = ")); sl@0: iOut.writeString(qualifier->Id()); sl@0: iOut.writeNewLine(); sl@0: } sl@0: } sl@0: CleanupStack::PopAndDestroy();//ext sl@0: } sl@0: sl@0: void X509CertWriter::ShowPM(const CX509CertExtension& aExt) sl@0: {//!!!!we don't write this one outFile either sl@0: CX509PolicyMappingExt* ext = CX509PolicyMappingExt::NewLC(aExt.Data()); sl@0: const CArrayPtrFlat& mappings = ext->Mappings(); sl@0: TInt count = mappings.Count(); sl@0: for (TInt i = 0; i < count; i++) sl@0: { sl@0: //const CX509PolicyMapping* mapping = mappings.At(i); sl@0: } sl@0: CleanupStack::PopAndDestroy(); sl@0: } sl@0: sl@0: sl@0: void X509CertWriter::ShowEKU(const CX509CertExtension& aExt) sl@0: { sl@0: iOut.writeString(_L("Extended Key Usage = ")); sl@0: iOut.writeNewLine(); sl@0: sl@0: CX509ExtendedKeyUsageExt* ext = CX509ExtendedKeyUsageExt::NewLC(aExt.Data()); sl@0: const CArrayPtrFlat& usages = ext->KeyUsages(); sl@0: TInt count = usages.Count(); sl@0: for (TInt i = 0; i < count; i++) sl@0: { sl@0: iOut.writeSpaces(4); sl@0: iOut.writeString(usages.At(i)->Des()); sl@0: iOut.writeNewLine(); sl@0: } sl@0: CleanupStack::PopAndDestroy(); sl@0: } sl@0: sl@0: void X509CertWriter::ShowSignature(const CX509Certificate& /*aCert*/) sl@0: { sl@0: /* HBufC8* sig = aCert.SignatureL(); sl@0: CleanupStack::PushL(sig); sl@0: User::LeaveIfError(outFile.Write(sig->Des())); sl@0: User::LeaveIfError(outFile.Flush()); // Commit data sl@0: CleanupStack::PopAndDestroy();*/ sl@0: } sl@0: sl@0: void X509CertWriter::WriteEncodings(const CX509Certificate& aCertificate) sl@0: { sl@0: iOut.writeString(_L("Version:")); sl@0: iOut.writeNewLine(); sl@0: WriteEncoding(aCertificate, CX509Certificate::EVersionNumber); sl@0: iOut.writeNewLine(); sl@0: sl@0: iOut.writeString(_L("Serial Number:")); sl@0: iOut.writeNewLine(); sl@0: WriteEncoding(aCertificate, CX509Certificate::ESerialNumber); sl@0: iOut.writeNewLine(); sl@0: sl@0: iOut.writeString(_L("Algorithm:")); sl@0: iOut.writeNewLine(); sl@0: WriteEncoding(aCertificate, CX509Certificate::EAlgorithmId); sl@0: iOut.writeNewLine(); sl@0: sl@0: iOut.writeString(_L("Issuer:")); sl@0: iOut.writeNewLine(); sl@0: WriteEncoding(aCertificate, CX509Certificate::EIssuerName); sl@0: iOut.writeNewLine(); sl@0: sl@0: iOut.writeString(_L("Validity:")); sl@0: iOut.writeNewLine(); sl@0: WriteEncoding(aCertificate, CX509Certificate::EValidityPeriod); sl@0: iOut.writeNewLine(); sl@0: sl@0: iOut.writeString(_L("Subject:")); sl@0: iOut.writeNewLine(); sl@0: WriteEncoding(aCertificate, CX509Certificate::ESubjectName); sl@0: iOut.writeNewLine(); sl@0: sl@0: iOut.writeString(_L("Public Key:")); sl@0: iOut.writeNewLine(); sl@0: WriteEncoding(aCertificate, CX509Certificate::ESubjectPublicKeyInfo); sl@0: iOut.writeNewLine(); sl@0: sl@0: iOut.writeString(_L("Issuer ID:")); sl@0: iOut.writeNewLine(); sl@0: WriteEncoding(aCertificate, CX509Certificate::EIssuerUID); sl@0: iOut.writeNewLine(); sl@0: sl@0: iOut.writeString(_L("Subject ID:")); sl@0: iOut.writeNewLine(); sl@0: WriteEncoding(aCertificate, CX509Certificate::ESubjectUID); sl@0: iOut.writeNewLine(); sl@0: sl@0: iOut.writeString(_L("Extensions:")); sl@0: iOut.writeNewLine(); sl@0: WriteEncoding(aCertificate, CX509Certificate::EExtensionList); sl@0: iOut.writeNewLine(); sl@0: } sl@0: sl@0: void X509CertWriter::WriteEncoding(const CX509Certificate& aCertificate, const TUint aIndex) sl@0: { sl@0: if (aCertificate.DataElementEncoding(aIndex)) sl@0: { sl@0: iOut.writeOctetString(*(aCertificate.DataElementEncoding(aIndex))); sl@0: } sl@0: } sl@0: sl@0: #endif // SHOW_EXTENDED sl@0: sl@0: /**********************************************************/ sl@0: sl@0: WTLSCertWriter::WTLSCertWriter(Output& aOut) sl@0: :iOut(aOut) sl@0: { sl@0: } sl@0: sl@0: void WTLSCertWriter::WriteCert(const CWTLSCertificate& aCertificate) sl@0: { sl@0: iOut.writeString(_L("\t\tIssuer Name = ")); sl@0: HBufC* issuer = aCertificate.IssuerL(); sl@0: iOut.writeString(*issuer); sl@0: delete issuer; sl@0: iOut.writeNewLine(); sl@0: iOut.writeString(_L("\t\tSubject Name = ")); sl@0: HBufC* subject = aCertificate.SubjectL(); sl@0: iOut.writeString(*subject); sl@0: delete subject; sl@0: iOut.writeNewLine(); sl@0: } sl@0: sl@0: void WTLSCertWriter::ShowName(const CWTLSName& /*aName*/) sl@0: { sl@0: // iOut.writeString(aName.Name()); sl@0: } sl@0: sl@0: