1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/security/cryptoservices/certificateandkeymgmt/tcertstore/t_certstoreout.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,668 @@
1.4 +/*
1.5 +* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
1.6 +* All rights reserved.
1.7 +* This component and the accompanying materials are made available
1.8 +* under the terms of the License "Eclipse Public License v1.0"
1.9 +* which accompanies this distribution, and is available
1.10 +* at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.11 +*
1.12 +* Initial Contributors:
1.13 +* Nokia Corporation - initial contribution.
1.14 +*
1.15 +* Contributors:
1.16 +*
1.17 +* Description:
1.18 +* TCERTSTOREOUT.CPP
1.19 +*
1.20 +*/
1.21 +
1.22 +
1.23 +#include "t_certstoreout.h"
1.24 +
1.25 +X509CertWriter::X509CertWriter(Output& aOut)
1.26 + :iOut(aOut)
1.27 + {
1.28 + }
1.29 +
1.30 +void X509CertWriter::WriteCert(const CX509Certificate& aCertificate)
1.31 + {
1.32 +#ifdef SHOW_EXTENDED
1.33 + ShowSerialNumber(aCertificate.SerialNumber());
1.34 + ShowValidityPeriod(aCertificate);
1.35 + iOut.writeString(_L("Issuer Name = "));
1.36 + iOut.writeNewLine();
1.37 + ShowDN(aCertificate.IssuerName());
1.38 + iOut.writeString(_L("Subject Name = "));
1.39 + iOut.writeNewLine();
1.40 + ShowDN(aCertificate.SubjectName());
1.41 + ShowSigningAlgorithm(aCertificate.SigningAlgorithm());
1.42 + ShowExtensions(aCertificate);
1.43 + WriteEncodings(aCertificate);
1.44 +#endif // SHOW_EXTENDED
1.45 + iOut.writeString(_L("\t\tShort Issuer Name = "));
1.46 + HBufC* issuer = aCertificate.IssuerL();
1.47 + iOut.writeString(*issuer);
1.48 + iOut.writeNewLine();
1.49 + delete issuer;
1.50 +
1.51 + iOut.writeString(_L("\t\tShort Subject Name = "));
1.52 + HBufC* subject = aCertificate.SubjectL();
1.53 + iOut.writeString(*subject);
1.54 + iOut.writeNewLine();
1.55 + delete subject;
1.56 + }
1.57 +
1.58 +// The rest of these are only compiled of SHOW_EXTENDED defined - this
1.59 +// eliminates warnings from WINS/UREL build
1.60 +#ifdef SHOW_EXTENDED
1.61 +void X509CertWriter::ShowSigningAlgorithm(const CSigningAlgorithmIdentifier& aSigningAlgorithm)
1.62 + {
1.63 + iOut.writeString(_L("Signed using: "));
1.64 + iOut.writeNewLine();
1.65 + iOut.writeSpaces(4);
1.66 + iOut.writeString(_L("Asymmetric algorithm = "));
1.67 + const CAlgorithmIdentifier& algId = aSigningAlgorithm.AsymmetricAlgorithm();
1.68 + switch(algId.Algorithm())
1.69 + {
1.70 + case ERSA:
1.71 + {
1.72 + iOut.writeString(_L("RSA"));
1.73 + break;
1.74 + }
1.75 + case EDSA:
1.76 + {
1.77 + iOut.writeString(_L("DSA"));
1.78 + break;
1.79 + }
1.80 + case EDH:
1.81 + {
1.82 + iOut.writeString(_L("DH"));
1.83 + break;
1.84 + }
1.85 + default:
1.86 + iOut.writeString(_L("Unknown"));
1.87 + break;
1.88 + }
1.89 + iOut.writeNewLine();
1.90 + iOut.writeSpaces(4);
1.91 + iOut.writeString(_L("Digest algorithm = "));
1.92 + const CAlgorithmIdentifier& digestId = aSigningAlgorithm.DigestAlgorithm();
1.93 + switch(digestId.Algorithm())
1.94 + {
1.95 + case EMD2:
1.96 + {
1.97 + iOut.writeString(_L("MD2"));
1.98 + break;
1.99 + }
1.100 + case EMD5:
1.101 + {
1.102 + iOut.writeString(_L("MD5"));
1.103 + break;
1.104 + }
1.105 + case ESHA1:
1.106 + {
1.107 + iOut.writeString(_L("SHA1"));
1.108 + break;
1.109 + }
1.110 + default:
1.111 + iOut.writeString(_L("Unknown"));
1.112 + }
1.113 + iOut.writeNewLine();
1.114 + }
1.115 +
1.116 +void X509CertWriter::ShowSerialNumber(const TPtrC8& aSerialNumber)
1.117 + {
1.118 + iOut.writeString(_L("Serial Number = "));
1.119 + iOut.writeOctetString(aSerialNumber);
1.120 + iOut.writeNewLine();
1.121 + }
1.122 +
1.123 +//dn display code
1.124 +void X509CertWriter::ShowAVA(const CX520AttributeTypeAndValue& aAva)
1.125 + {
1.126 + iOut.writeString(aAva.Type());
1.127 + HBufC* val = aAva.ValueL();
1.128 + CleanupStack::PushL(val);
1.129 + iOut.writeString(_L(" = "));
1.130 + iOut.writeString(val->Des());
1.131 + CleanupStack::PopAndDestroy();
1.132 + }
1.133 +
1.134 +void X509CertWriter::ShowDN(const CX500DistinguishedName& aName)
1.135 + {
1.136 + TInt count = aName.Count();
1.137 + for (TInt i = 0; i < count; i++)
1.138 + {
1.139 + const CX520AttributeTypeAndValue& ava = aName.Element(i);
1.140 + iOut.writeSpaces(4);
1.141 + ShowAVA(ava);
1.142 + iOut.writeNewLine();
1.143 + }
1.144 + }
1.145 +
1.146 +void X509CertWriter::ShowAKI(const CX509Certificate& aCert)
1.147 + {
1.148 + const CX509CertExtension* akiExt = aCert.Extension(KAuthorityKeyId);
1.149 + if (akiExt)
1.150 + {
1.151 + iOut.writeString(_L("Authority Key ID = "));
1.152 + iOut.writeNewLine();
1.153 + const CX509AuthorityKeyIdExt* ext = CX509AuthorityKeyIdExt::NewLC(akiExt->Data());
1.154 + const CArrayPtrFlat<CX509GeneralName>& authorityName = ext->AuthorityName();
1.155 + TInt count = authorityName.Count();
1.156 + if (count > 0)
1.157 + {
1.158 + iOut.writeSpaces(4);
1.159 + iOut.writeString(_L("Authority name = "));
1.160 + iOut.writeNewLine();
1.161 + for (TInt i = 0; i < count; i++)
1.162 + {
1.163 + ShowGN(*(authorityName.At(i)));
1.164 + }
1.165 + }
1.166 + if (ext->AuthorityCertSerialNumber().Length() > 0)
1.167 + {
1.168 + iOut.writeSpaces(4);
1.169 + iOut.writeString(_L("Authority cert serial no = "));
1.170 + iOut.writeOctetString(ext->AuthorityCertSerialNumber());
1.171 + iOut.writeNewLine();
1.172 + }
1.173 + iOut.writeSpaces(4);
1.174 + iOut.writeString(_L("Key Id = "));
1.175 + iOut.writeOctetString(ext->KeyId());
1.176 + iOut.writeNewLine();
1.177 + CleanupStack::PopAndDestroy();
1.178 + }
1.179 + }
1.180 +
1.181 +void X509CertWriter::ShowSKI(const CX509Certificate& aCert)
1.182 + {
1.183 + const CX509CertExtension* skiExt = aCert.Extension(KSubjectKeyId);
1.184 + if (skiExt)
1.185 + {
1.186 + iOut.writeString(_L("Subject Key ID = "));
1.187 + iOut.writeNewLine();
1.188 + const CX509SubjectKeyIdExt* ext = CX509SubjectKeyIdExt::NewLC(skiExt->Data());
1.189 + iOut.writeSpaces(4);
1.190 + iOut.writeString(_L("Key Id = "));
1.191 + iOut.writeOctetString(ext->KeyId());
1.192 + iOut.writeNewLine();
1.193 + CleanupStack::PopAndDestroy();
1.194 + }
1.195 + }
1.196 +
1.197 +void X509CertWriter::ShowGN(const CX509GeneralName& aName)
1.198 + {
1.199 + iOut.writeSpaces(4);
1.200 + switch(aName.Tag())
1.201 + {
1.202 + case 1:
1.203 + {
1.204 + //rfc822
1.205 + CX509RFC822NameSubtree* email = CX509RFC822NameSubtree::NewLC(aName.Data());
1.206 + const RArray<TPtrC>& rep = email->Rep();
1.207 + TInt count = rep.Count();
1.208 + for (TInt i = 0; i < count; i++)
1.209 + {
1.210 + iOut.writeString(rep[i]);
1.211 + iOut.writeSpaces(1);
1.212 + }
1.213 + iOut.writeNewLine();
1.214 + CleanupStack::PopAndDestroy();//email
1.215 + break;
1.216 + }
1.217 + case 2:
1.218 + {
1.219 + //dns name
1.220 + CX509DNSNameSubtree* dns = CX509DNSNameSubtree::NewLC(aName.Data());
1.221 + const RArray<TPtrC>& rep = dns->Rep();
1.222 + TInt count = rep.Count();
1.223 + for (TInt i = 0; i < count; i++)
1.224 + {
1.225 + iOut.writeString(rep[i]);
1.226 + iOut.writeSpaces(1);
1.227 + }
1.228 + CleanupStack::PopAndDestroy();//dns
1.229 + break;
1.230 + }
1.231 + case 4:
1.232 + {
1.233 + //DN
1.234 + CX500DistinguishedName* dN = CX500DistinguishedName::NewLC(aName.Data());
1.235 + ShowDN(*dN);
1.236 + CleanupStack::PopAndDestroy();
1.237 + break;
1.238 + }
1.239 + case 6:
1.240 + {
1.241 + //uri
1.242 + CX509IPBasedURI* uri = CX509IPBasedURI::NewLC(aName.Data());
1.243 + iOut.writeString(uri->Name());
1.244 + iOut.writeNewLine();
1.245 + CleanupStack::PopAndDestroy();//uri
1.246 + break;
1.247 + }
1.248 + case 7:
1.249 + {
1.250 + //ip address//!!!!not done for writing to file yet!!!
1.251 + CX509IPSubnetMask* ip = CX509IPSubnetMask::NewLC(aName.Data());
1.252 + TPtrC8 pBA(ip->BaseAddress());
1.253 + TInt counter;
1.254 + counter = pBA.Length();
1.255 + TPtrC8 pM(ip->Mask());
1.256 + counter = pM.Length();
1.257 + CleanupStack::PopAndDestroy();
1.258 + break;
1.259 + }
1.260 + }
1.261 + }
1.262 +
1.263 +
1.264 +void X509CertWriter::ShowFingerprint(const CX509Certificate& aCertificate)
1.265 + {
1.266 + iOut.writeOctetString(aCertificate.Fingerprint());
1.267 + iOut.writeNewLine();
1.268 + }
1.269 +
1.270 +void X509CertWriter::ShowValidityPeriod(const CX509Certificate& aCertificate)
1.271 + {
1.272 + const CValidityPeriod& vp = aCertificate.ValidityPeriod();
1.273 + iOut.writeString(_L("Validity Period = "));
1.274 + iOut.writeNewLine();
1.275 + const TTime& start = vp.Start();
1.276 + const TTime& finish = vp.Finish();
1.277 + TBuf<30> dateString1;
1.278 + start.FormatL(dateString1,(_L("%H%:1%T:%S %*E%*D %X%*N%Y %1 %2 %3")));
1.279 +
1.280 + iOut.writeSpaces(4);
1.281 + iOut.writeString(_L("Valid From = "));
1.282 + iOut.writeString(dateString1);
1.283 + iOut.writeNewLine();
1.284 +
1.285 + TBuf<30> dateString2;
1.286 + finish.FormatL(dateString2,(_L("%H%:1%T:%S %*E%*D %X%*N%Y %1 %2 %3")));
1.287 +
1.288 + iOut.writeSpaces(4);
1.289 + iOut.writeString(_L("Valid Until = "));
1.290 +
1.291 + iOut.writeString(dateString2);
1.292 + iOut.writeNewLine();
1.293 + }
1.294 +
1.295 +//extensions
1.296 +void X509CertWriter::ShowExtensions(const CX509Certificate& aCertificate)
1.297 + {
1.298 + const CArrayPtrFlat<CX509CertExtension>& exts = aCertificate.Extensions();
1.299 + TInt count = exts.Count();
1.300 + for (TInt i = 0; i < count; i++)
1.301 + {
1.302 + const CX509CertExtension* ext = exts.At(i);
1.303 + iOut.writeString(_L("extension"));
1.304 + iOut.writeNum(i);
1.305 + if (!(ext->Critical()))
1.306 + {
1.307 + iOut.writeString(_L(" not"));
1.308 + }
1.309 + iOut.writeString(_L(" critical"));
1.310 + iOut.writeString(_L(" ID = "));
1.311 + TPtrC id(ext->Id());
1.312 + iOut.writeString(id);
1.313 + iOut.writeNewLine();
1.314 + if (id == KBasicConstraints)
1.315 + {
1.316 + ShowBC(*ext);
1.317 + }
1.318 + if (id == KSubjectAltName)
1.319 + {
1.320 + iOut.writeString(_L("SubjectAltName: \n"));
1.321 + ShowAltName(*ext);
1.322 + }
1.323 + if (id == KIssuerAltName)
1.324 + {
1.325 + iOut.writeString(_L("IssuerAltName: \n"));
1.326 + ShowAltName(*ext);
1.327 + }
1.328 + if (id == KKeyUsage)
1.329 + {
1.330 + ShowKU(*ext);
1.331 + }
1.332 + if (id == KNameConstraints)
1.333 + {
1.334 + ShowNC(*ext);
1.335 + }
1.336 + if (id == KPolicyConstraints)
1.337 + {
1.338 + ShowPC(*ext);
1.339 + }
1.340 + if (id == KCertPolicies)
1.341 + {
1.342 + ShowCP(*ext);
1.343 + }
1.344 + if (id == KPolicyMapping)
1.345 + {
1.346 + ShowPM(*ext);
1.347 + }
1.348 + if (id == KAuthorityKeyId)
1.349 + {
1.350 + ShowAKI(aCertificate);
1.351 + }
1.352 + if (id == KSubjectKeyId)
1.353 + {
1.354 + ShowSKI(aCertificate);
1.355 + }
1.356 + if (id == KExtendedKeyUsage)
1.357 + {
1.358 + ShowEKU(*ext);
1.359 + }
1.360 + }
1.361 + }
1.362 +
1.363 +void X509CertWriter::ShowBC(const CX509CertExtension& aExt)
1.364 + {
1.365 + iOut.writeString(_L("Basic Constraints:"));
1.366 + iOut.writeNewLine();
1.367 + CX509BasicConstraintsExt* ext = CX509BasicConstraintsExt::NewLC(aExt.Data());
1.368 + if (ext->IsCA())
1.369 + {
1.370 + iOut.writeSpaces(4);
1.371 + iOut.writeString(_L("CA cert"));
1.372 + iOut.writeNewLine();
1.373 + if (ext->MaxChainLength() < KMaxTInt)
1.374 + {
1.375 + iOut.writeSpaces(4);
1.376 + iOut.writeString(_L("Max Chain Length = "));
1.377 + iOut.writeNum(ext->MaxChainLength());
1.378 + iOut.writeNewLine();
1.379 + }
1.380 + }
1.381 + else
1.382 + {
1.383 + iOut.writeSpaces(4);
1.384 + iOut.writeString(_L("EE cert"));
1.385 + iOut.writeNewLine();
1.386 + }
1.387 + CleanupStack::PopAndDestroy();
1.388 + }
1.389 +
1.390 +void X509CertWriter::ShowAltName(const CX509CertExtension& aExt)
1.391 + {
1.392 + CX509AltNameExt* ext = CX509AltNameExt::NewLC(aExt.Data());
1.393 + const CArrayPtrFlat<CX509GeneralName>& names = ext->AltName();
1.394 + TInt count = names.Count();
1.395 + for (TInt i = 0; i < count; i++)
1.396 + {
1.397 + ShowGN(*(names.At(i)));
1.398 + }
1.399 + CleanupStack::PopAndDestroy();
1.400 + }
1.401 +
1.402 +
1.403 +_LIT(KDigSig, "digital signature");
1.404 +_LIT(KNonRep, "non-repudiation");
1.405 +_LIT(KKeyEnc, "key encipherment");
1.406 +_LIT(KDataEnc, "data encipherment");
1.407 +_LIT(KKeyAgree, "key agreement");
1.408 +_LIT(KCertSign, "key cert sign");
1.409 +_LIT(KCRLSign, "crl sign");
1.410 +_LIT(KEnciph, "encipher only");
1.411 +_LIT(KDeciph, "decipher only");
1.412 +
1.413 +void X509CertWriter::ShowKU(const CX509CertExtension& aExt)
1.414 + {
1.415 + iOut.writeString(_L("Key Usage:"));
1.416 + iOut.writeNewLine();
1.417 + CX509KeyUsageExt* ext = CX509KeyUsageExt::NewLC(aExt.Data());
1.418 + if (ext->IsSet(EX509DigitalSignature))
1.419 + {
1.420 + iOut.writeSpaces(4);
1.421 + iOut.writeString(KDigSig);
1.422 + iOut.writeNewLine();
1.423 + }
1.424 + if (ext->IsSet(EX509NonRepudiation))
1.425 + {
1.426 + iOut.writeSpaces(4);
1.427 + iOut.writeString(KNonRep);
1.428 + iOut.writeNewLine();
1.429 + }
1.430 + if (ext->IsSet(EX509KeyEncipherment))
1.431 + {
1.432 + iOut.writeSpaces(4);
1.433 + iOut.writeString(KKeyEnc);
1.434 + iOut.writeNewLine();
1.435 + }
1.436 + if (ext->IsSet(EX509DataEncipherment))
1.437 + {
1.438 + iOut.writeSpaces(4);
1.439 + iOut.writeString(KDataEnc);
1.440 + iOut.writeNewLine();
1.441 + }
1.442 + if (ext->IsSet(EX509KeyAgreement))
1.443 + {
1.444 + iOut.writeSpaces(4);
1.445 + iOut.writeString(KKeyAgree);
1.446 + iOut.writeNewLine();
1.447 + }
1.448 + if (ext->IsSet(EX509KeyCertSign))
1.449 + {
1.450 + iOut.writeSpaces(4);
1.451 + iOut.writeString(KCertSign);
1.452 + iOut.writeNewLine();
1.453 + }
1.454 + if (ext->IsSet(EX509CRLSign))
1.455 + {
1.456 + iOut.writeSpaces(4);
1.457 + iOut.writeString(KCRLSign);
1.458 + iOut.writeNewLine();
1.459 + }
1.460 + if (ext->IsSet(EX509EncipherOnly))
1.461 + {
1.462 + iOut.writeSpaces(4);
1.463 + iOut.writeString(KEnciph);
1.464 + iOut.writeNewLine();
1.465 + }
1.466 + if (ext->IsSet(EX509DecipherOnly))
1.467 + {
1.468 + iOut.writeSpaces(4);
1.469 + iOut.writeString(KDeciph);
1.470 + iOut.writeNewLine();
1.471 + }
1.472 + CleanupStack::PopAndDestroy();//ext
1.473 + }
1.474 +
1.475 +void X509CertWriter::ShowSubtrees(const CArrayPtrFlat<CX509GeneralSubtree>& aSubtrees)
1.476 + {
1.477 + TInt count = aSubtrees.Count();
1.478 + for (TInt i = 0; i < count; i++)
1.479 + {
1.480 + const CX509GeneralSubtree* subtree = aSubtrees.At(i);
1.481 + ShowGN(subtree->Name());
1.482 + ///!!!!!don't write these outFile either!!
1.483 + }
1.484 + }
1.485 +
1.486 +void X509CertWriter::ShowNC(const CX509CertExtension& aExt)
1.487 + {//!!!!don't write these outFile
1.488 +
1.489 + CX509NameConstraintsExt* ext = CX509NameConstraintsExt::NewLC(aExt.Data());
1.490 + ShowSubtrees(ext->ExcludedSubtrees());
1.491 + ShowSubtrees(ext->PermittedSubtrees());
1.492 + CleanupStack::PopAndDestroy();
1.493 + }
1.494 +
1.495 +void X509CertWriter::ShowPC(const CX509CertExtension& /*aExt*/)
1.496 + {//!!!!don't write these outFile
1.497 + //CX509PolicyConstraintsExt* ext = CX509PolicyConstraintsExt::NewLC(aExt.Data());
1.498 + //TX509PolicyConstraint required = ext->ExplicitPolicyRequired();
1.499 + //TX509PolicyConstraint mapping = ext->InhibitPolicyMapping();
1.500 + //CleanupStack::PopAndDestroy();
1.501 + }
1.502 +
1.503 +void X509CertWriter::ShowCP(const CX509CertExtension& aExt)
1.504 + {
1.505 + iOut.writeString(_L("Cert Policies = "));
1.506 + iOut.writeNewLine();
1.507 +
1.508 + CX509CertPoliciesExt* ext = CX509CertPoliciesExt::NewLC(aExt.Data());
1.509 + const CArrayPtrFlat<CX509CertPolicyInfo>& policies = ext->Policies();
1.510 + TInt count = policies.Count();
1.511 + for (TInt i = 0; i < count; i++)
1.512 + {
1.513 + const CX509CertPolicyInfo* policy = policies.At(i);
1.514 +
1.515 + iOut.writeSpaces(4);
1.516 + iOut.writeString(_L("Policy ID = "));
1.517 + iOut.writeString(policy->Id());
1.518 + iOut.writeNewLine();
1.519 + const CArrayPtrFlat<CX509PolicyQualifierInfo>& qualifiers = policy->Qualifiers();
1.520 + TInt qCount = qualifiers.Count();
1.521 +
1.522 + if (qCount > 0)
1.523 + {
1.524 +
1.525 + iOut.writeSpaces(4);
1.526 + iOut.writeString(_L("Qualified by: "));
1.527 + iOut.writeNewLine();
1.528 + }
1.529 +
1.530 + for (TInt i = 0; i < qCount; i++)
1.531 + {
1.532 + CX509PolicyQualifierInfo* qualifier = qualifiers.At(i);
1.533 +
1.534 + iOut.writeSpaces(8);
1.535 + iOut.writeString(_L("Qualifier ID = "));
1.536 + iOut.writeString(qualifier->Id());
1.537 + iOut.writeNewLine();
1.538 + }
1.539 + }
1.540 + CleanupStack::PopAndDestroy();//ext
1.541 + }
1.542 +
1.543 +void X509CertWriter::ShowPM(const CX509CertExtension& aExt)
1.544 + {//!!!!we don't write this one outFile either
1.545 + CX509PolicyMappingExt* ext = CX509PolicyMappingExt::NewLC(aExt.Data());
1.546 + const CArrayPtrFlat<CX509PolicyMapping>& mappings = ext->Mappings();
1.547 + TInt count = mappings.Count();
1.548 + for (TInt i = 0; i < count; i++)
1.549 + {
1.550 + //const CX509PolicyMapping* mapping = mappings.At(i);
1.551 + }
1.552 + CleanupStack::PopAndDestroy();
1.553 + }
1.554 +
1.555 +
1.556 +void X509CertWriter::ShowEKU(const CX509CertExtension& aExt)
1.557 + {
1.558 + iOut.writeString(_L("Extended Key Usage = "));
1.559 + iOut.writeNewLine();
1.560 +
1.561 + CX509ExtendedKeyUsageExt* ext = CX509ExtendedKeyUsageExt::NewLC(aExt.Data());
1.562 + const CArrayPtrFlat<HBufC>& usages = ext->KeyUsages();
1.563 + TInt count = usages.Count();
1.564 + for (TInt i = 0; i < count; i++)
1.565 + {
1.566 + iOut.writeSpaces(4);
1.567 + iOut.writeString(usages.At(i)->Des());
1.568 + iOut.writeNewLine();
1.569 + }
1.570 + CleanupStack::PopAndDestroy();
1.571 + }
1.572 +
1.573 +void X509CertWriter::ShowSignature(const CX509Certificate& /*aCert*/)
1.574 + {
1.575 +/* HBufC8* sig = aCert.SignatureL();
1.576 + CleanupStack::PushL(sig);
1.577 + User::LeaveIfError(outFile.Write(sig->Des()));
1.578 + User::LeaveIfError(outFile.Flush()); // Commit data
1.579 + CleanupStack::PopAndDestroy();*/
1.580 + }
1.581 +
1.582 +void X509CertWriter::WriteEncodings(const CX509Certificate& aCertificate)
1.583 + {
1.584 + iOut.writeString(_L("Version:"));
1.585 + iOut.writeNewLine();
1.586 + WriteEncoding(aCertificate, CX509Certificate::EVersionNumber);
1.587 + iOut.writeNewLine();
1.588 +
1.589 + iOut.writeString(_L("Serial Number:"));
1.590 + iOut.writeNewLine();
1.591 + WriteEncoding(aCertificate, CX509Certificate::ESerialNumber);
1.592 + iOut.writeNewLine();
1.593 +
1.594 + iOut.writeString(_L("Algorithm:"));
1.595 + iOut.writeNewLine();
1.596 + WriteEncoding(aCertificate, CX509Certificate::EAlgorithmId);
1.597 + iOut.writeNewLine();
1.598 +
1.599 + iOut.writeString(_L("Issuer:"));
1.600 + iOut.writeNewLine();
1.601 + WriteEncoding(aCertificate, CX509Certificate::EIssuerName);
1.602 + iOut.writeNewLine();
1.603 +
1.604 + iOut.writeString(_L("Validity:"));
1.605 + iOut.writeNewLine();
1.606 + WriteEncoding(aCertificate, CX509Certificate::EValidityPeriod);
1.607 + iOut.writeNewLine();
1.608 +
1.609 + iOut.writeString(_L("Subject:"));
1.610 + iOut.writeNewLine();
1.611 + WriteEncoding(aCertificate, CX509Certificate::ESubjectName);
1.612 + iOut.writeNewLine();
1.613 +
1.614 + iOut.writeString(_L("Public Key:"));
1.615 + iOut.writeNewLine();
1.616 + WriteEncoding(aCertificate, CX509Certificate::ESubjectPublicKeyInfo);
1.617 + iOut.writeNewLine();
1.618 +
1.619 + iOut.writeString(_L("Issuer ID:"));
1.620 + iOut.writeNewLine();
1.621 + WriteEncoding(aCertificate, CX509Certificate::EIssuerUID);
1.622 + iOut.writeNewLine();
1.623 +
1.624 + iOut.writeString(_L("Subject ID:"));
1.625 + iOut.writeNewLine();
1.626 + WriteEncoding(aCertificate, CX509Certificate::ESubjectUID);
1.627 + iOut.writeNewLine();
1.628 +
1.629 + iOut.writeString(_L("Extensions:"));
1.630 + iOut.writeNewLine();
1.631 + WriteEncoding(aCertificate, CX509Certificate::EExtensionList);
1.632 + iOut.writeNewLine();
1.633 + }
1.634 +
1.635 +void X509CertWriter::WriteEncoding(const CX509Certificate& aCertificate, const TUint aIndex)
1.636 + {
1.637 + if (aCertificate.DataElementEncoding(aIndex))
1.638 + {
1.639 + iOut.writeOctetString(*(aCertificate.DataElementEncoding(aIndex)));
1.640 + }
1.641 + }
1.642 +
1.643 +#endif // SHOW_EXTENDED
1.644 +
1.645 +/**********************************************************/
1.646 +
1.647 +WTLSCertWriter::WTLSCertWriter(Output& aOut)
1.648 + :iOut(aOut)
1.649 + {
1.650 + }
1.651 +
1.652 +void WTLSCertWriter::WriteCert(const CWTLSCertificate& aCertificate)
1.653 + {
1.654 + iOut.writeString(_L("\t\tIssuer Name = "));
1.655 + HBufC* issuer = aCertificate.IssuerL();
1.656 + iOut.writeString(*issuer);
1.657 + delete issuer;
1.658 + iOut.writeNewLine();
1.659 + iOut.writeString(_L("\t\tSubject Name = "));
1.660 + HBufC* subject = aCertificate.SubjectL();
1.661 + iOut.writeString(*subject);
1.662 + delete subject;
1.663 + iOut.writeNewLine();
1.664 + }
1.665 +
1.666 +void WTLSCertWriter::ShowName(const CWTLSName& /*aName*/)
1.667 + {
1.668 +// iOut.writeString(aName.Name());
1.669 + }
1.670 +
1.671 +