diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/src/untrustedcertificateinfo_symbian.cpp --- a/pkiutilities/untrustedcertificatedialog/src/untrustedcertificateinfo_symbian.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/untrustedcertificatedialog/src/untrustedcertificateinfo_symbian.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -18,7 +18,8 @@ #include "untrustedcertificateinfo_symbian.h" #include // TAlgorithmId #include // CX509Certificate -#include +#include // X509CertNameParser +#include // CMD5 // ======== LOCAL FUNCTIONS ======== @@ -72,17 +73,14 @@ // convertDateTime() // ---------------------------------------------------------------------------- // -QDateTime convertDateTime(const TTime& aTime) +void convertDateTime(const TTime& aFromTime, QDateTime& aToDateTime) { - const TDateTime &symbianDateTime = aTime.DateTime(); + const TDateTime &symbianDateTime = aFromTime.DateTime(); - QDateTime dateTime; QDate date(symbianDateTime.Year(), symbianDateTime.Month()+1, symbianDateTime.Day()+1); QTime time(symbianDateTime.Hour(), symbianDateTime.Minute(), symbianDateTime.Second()); - dateTime.setDate(date); - dateTime.setTime(time); - - return dateTime; + aToDateTime.setDate(date); + aToDateTime.setTime(time); } @@ -93,9 +91,10 @@ // ---------------------------------------------------------------------------- // UntrustedCertificateInfoSymbian::UntrustedCertificateInfoSymbian( - const CX509Certificate& aCert) : UntrustedCertificateInfoBase(), iCert(0) + const QByteArray &aEncodedCert) : UntrustedCertificateInfoBase(), + mCert(0), mMd5Fingerprint() { - QT_TRAP_THROWING(ConstructL(aCert)); + QT_TRAP_THROWING(ConstructL(aEncodedCert)); } // ---------------------------------------------------------------------------- @@ -104,7 +103,7 @@ // UntrustedCertificateInfoSymbian::~UntrustedCertificateInfoSymbian() { - delete iCert; + delete mCert; } // ---------------------------------------------------------------------------- @@ -119,39 +118,26 @@ } // ---------------------------------------------------------------------------- -// UntrustedCertificateInfoSymbian::isPermanentAcceptAllowed() -// ---------------------------------------------------------------------------- -// -bool UntrustedCertificateInfoSymbian::isPermanentAcceptAllowed() const -{ - return isDateValid(); -} - -// ---------------------------------------------------------------------------- // UntrustedCertificateInfoSymbian::certificateDetails() // ---------------------------------------------------------------------------- // -QString UntrustedCertificateInfoSymbian::certificateDetails() const +QString UntrustedCertificateInfoSymbian::certificateDetails(const QString &siteName) const { - QString details; - QTextStream stream(&details); - // TODO: localised UI strings needed - stream << tr("Issuer:\n%1\n").arg(issuerName()); - stream << endl; - stream << tr("Subject:\n%1\n").arg(subjectName()); - stream << endl; - stream << tr("Valid from:\n%1\n").arg(validFrom().toString()); - stream << endl; - stream << tr("Valid until:\n%1\n").arg(validTo().toString()); - stream << endl; - stream << tr("Certificate format:\n%1\n").arg(format()); - stream << endl; - stream << tr("Algorithm:\n%1\n").arg(combinedAlgorithmName()); - stream << endl; - stream << tr("Serial number:\n%1\n").arg(formattedSerialNumber()); - stream << endl; - stream << tr("Fingerprint (SHA1):\n%1\n").arg(formattedFingerprint()); - // TODO: MD5 fingerprint missing + // TODO: localized UI string needed + QString details = tr("Service:\n%1\n\nIssuer:\n%2\n\nSubject:\n%3\n\n" + "Valid from:\n%4\n\nValid until:\n%5\n\nCertificate format:\n%6\n\n" + "Algorithm:\n%7\n\nSerial number:\n%8\n\n" + "Fingerprint (SHA1):\n%9\n\nFingerprint (MD5):\n%10") + .arg(siteName) // %1 + .arg(issuerName()) // %2 + .arg(subjectName()) // %3 + .arg(validFrom().toString()) // %4 + .arg(validTo().toString()) // %5 + .arg(format()) // %6 + .arg(combinedAlgorithmName()) // %7 + .arg(formattedSerialNumber(serialNumber())) // %8 + .arg(formattedFingerprint(fingerprint())) // %9 + .arg(formattedFingerprint(mMd5Fingerprint)); // %10 return details; } @@ -159,34 +145,45 @@ // UntrustedCertificateInfoSymbian::ConstructL() // ---------------------------------------------------------------------------- // -void UntrustedCertificateInfoSymbian::ConstructL(const CX509Certificate& aCert) +void UntrustedCertificateInfoSymbian::ConstructL(const QByteArray &aEncodedCert) { - ASSERT( iCert == 0 ); - iCert = CX509Certificate::NewL( aCert ); + TPtrC8 encodedCert( reinterpret_cast( aEncodedCert.constData() ), + aEncodedCert.length() ); + + ASSERT( mCert == 0 ); + mCert = CX509Certificate::NewL( encodedCert ); - HBufC16* subjectBuf = iCert->SubjectL(); - mSubjectName = QString::fromUtf16(subjectBuf->Ptr(), subjectBuf->Length()); - delete subjectBuf; + HBufC16* subjectBuf = NULL; + X509CertNameParser::SubjectFullNameL( *mCert, subjectBuf ); + CleanupStack::PushL( subjectBuf ); + QT_TRYCATCH_LEAVING( mSubjectName = + QString::fromUtf16(subjectBuf->Ptr(), subjectBuf->Length()) ); + CleanupStack::PopAndDestroy( subjectBuf ); - HBufC16* issuerBuf = iCert->IssuerL(); - mIssuerName = QString::fromUtf16(issuerBuf->Ptr(), issuerBuf->Length()); - delete issuerBuf; - - TPtrC8 fingerprint = iCert->Fingerprint(); - mFingerprint = QByteArray::fromRawData( - reinterpret_cast(fingerprint.Ptr()), fingerprint.Length()); + HBufC16* issuerBuf = NULL; + X509CertNameParser::IssuerFullNameL( *mCert, issuerBuf ); + CleanupStack::PushL( issuerBuf ); + QT_TRYCATCH_LEAVING( mIssuerName = + QString::fromUtf16(issuerBuf->Ptr(), issuerBuf->Length())); + CleanupStack::PopAndDestroy( issuerBuf ); - TPtrC8 serialNumber = iCert->SerialNumber(); - mSerialNumber = QByteArray::fromRawData( - reinterpret_cast(serialNumber.Ptr()), serialNumber.Length()); + TPtrC8 fingerprint = mCert->Fingerprint(); + QT_TRYCATCH_LEAVING( mFingerprint = QByteArray::fromRawData( + reinterpret_cast(fingerprint.Ptr()), fingerprint.Length()) ); + + mMd5Fingerprint = Md5FingerprintL( mCert->Encoding() ); - const CValidityPeriod& validityPeriod = iCert->ValidityPeriod(); - mValidFrom = convertDateTime(validityPeriod.Start()); - mValidTo = convertDateTime(validityPeriod.Finish()); + TPtrC8 serialNumber = mCert->SerialNumber(); + QT_TRYCATCH_LEAVING( mSerialNumber = QByteArray::fromRawData( + reinterpret_cast(serialNumber.Ptr()), serialNumber.Length()) ); + + const CValidityPeriod& validityPeriod = mCert->ValidityPeriod(); + convertDateTime(validityPeriod.Start(), mValidFrom); + convertDateTime(validityPeriod.Finish(), mValidTo); mFormat = X509Certificate; - const CSigningAlgorithmIdentifier& alg = iCert->SigningAlgorithm(); + const CSigningAlgorithmIdentifier& alg = mCert->SigningAlgorithm(); mDigestAlgorithm = mapAlgorithm(alg.DigestAlgorithm().Algorithm()); mAsymmetricAlgorithm = mapAlgorithm(alg.AsymmetricAlgorithm().Algorithm()); } @@ -198,7 +195,7 @@ bool UntrustedCertificateInfoSymbian::CommonNameMatchesL(const QString &siteName) const { bool matches = false; - const CX500DistinguishedName& distinguishedName = iCert->SubjectName(); + const CX500DistinguishedName& distinguishedName = mCert->SubjectName(); HBufC* commonNameSymbian = distinguishedName.ExtractFieldL( KX520CommonName ); if (commonNameSymbian) { CleanupStack::PushL(commonNameSymbian); @@ -211,3 +208,20 @@ return matches; } +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoSymbian::Md5FingerprintL() +// ---------------------------------------------------------------------------- +// +QByteArray UntrustedCertificateInfoSymbian::Md5FingerprintL( const TDesC8& aEncodedCert ) const +{ + CMD5* md5 = CMD5::NewL(); + CleanupStack::PushL( md5 ); + + const TPtrC8 fingerprintSymbian = md5->Hash( aEncodedCert ); + QByteArray fingerprint( reinterpret_cast( fingerprintSymbian.Ptr() ), + fingerprintSymbian.Length() ); + + CleanupStack::PopAndDestroy( md5 ); + return fingerprint; +} +