diff -r 09b1ac925e3f -r 03674e5abf46 pkiutilities/untrustedcertificatedialog/src/untrustedcertificateinfo_symbian.cpp --- a/pkiutilities/untrustedcertificatedialog/src/untrustedcertificateinfo_symbian.cpp Tue Aug 31 16:04:40 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,227 +0,0 @@ -/* -* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "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: Certificate info class for TLS untrusted certificate dialog. -* -*/ - -#include "untrustedcertificateinfo_symbian.h" -#include // TAlgorithmId -#include // CX509Certificate -#include // X509CertNameParser -#include // CMD5 - - -// ======== LOCAL FUNCTIONS ======== - -// ---------------------------------------------------------------------------- -// mapAlgorithm() -// ---------------------------------------------------------------------------- -// -UntrustedCertificateInfoBase::Algorithm mapAlgorithm(TAlgorithmId aAlgId) -{ - UntrustedCertificateInfoBase::Algorithm algorithm = - UntrustedCertificateInfoBase::Unknown; - switch(aAlgId) { - case ERSA: - algorithm = UntrustedCertificateInfoBase::RSA; - break; - case EDSA: - algorithm = UntrustedCertificateInfoBase::DSA; - break; - case EDH: - algorithm = UntrustedCertificateInfoBase::DH; - break; - case EMD2: - algorithm = UntrustedCertificateInfoBase::MD2; - break; - case EMD5: - algorithm = UntrustedCertificateInfoBase::MD5; - break; - case ESHA1: - algorithm = UntrustedCertificateInfoBase::SHA1; - break; - case ESHA224: - algorithm = UntrustedCertificateInfoBase::SHA224; - break; - case ESHA256: - algorithm = UntrustedCertificateInfoBase::SHA256; - break; - case ESHA384: - algorithm = UntrustedCertificateInfoBase::SHA384; - break; - case ESHA512: - algorithm = UntrustedCertificateInfoBase::SHA512; - break; - default: - break; - } - return algorithm; -} - -// ---------------------------------------------------------------------------- -// convertDateTime() -// ---------------------------------------------------------------------------- -// -void convertDateTime(const TTime& aFromTime, QDateTime& aToDateTime) -{ - const TDateTime &symbianDateTime = aFromTime.DateTime(); - - QDate date(symbianDateTime.Year(), symbianDateTime.Month()+1, symbianDateTime.Day()+1); - QTime time(symbianDateTime.Hour(), symbianDateTime.Minute(), symbianDateTime.Second()); - aToDateTime.setDate(date); - aToDateTime.setTime(time); -} - - -// ======== MEMBER FUNCTIONS ======== - -// ---------------------------------------------------------------------------- -// UntrustedCertificateInfoSymbian::UntrustedCertificateInfoSymbian() -// ---------------------------------------------------------------------------- -// -UntrustedCertificateInfoSymbian::UntrustedCertificateInfoSymbian( - const QByteArray &aEncodedCert) : UntrustedCertificateInfoBase(), - mCert(0), mMd5Fingerprint() -{ - QT_TRAP_THROWING(ConstructL(aEncodedCert)); -} - -// ---------------------------------------------------------------------------- -// UntrustedCertificateInfoSymbian::~UntrustedCertificateInfoSymbian() -// ---------------------------------------------------------------------------- -// -UntrustedCertificateInfoSymbian::~UntrustedCertificateInfoSymbian() -{ - delete mCert; -} - -// ---------------------------------------------------------------------------- -// UntrustedCertificateInfoSymbian::commonNameMatches() -// ---------------------------------------------------------------------------- -// -bool UntrustedCertificateInfoSymbian::commonNameMatches(const QString &siteName) const -{ - bool matches = false; - QT_TRAP_THROWING(matches = CommonNameMatchesL(siteName)); - return matches; -} - -// ---------------------------------------------------------------------------- -// UntrustedCertificateInfoSymbian::certificateDetails() -// ---------------------------------------------------------------------------- -// -QString UntrustedCertificateInfoSymbian::certificateDetails(const QString &siteName) const -{ - // 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; -} - -// ---------------------------------------------------------------------------- -// UntrustedCertificateInfoSymbian::ConstructL() -// ---------------------------------------------------------------------------- -// -void UntrustedCertificateInfoSymbian::ConstructL(const QByteArray &aEncodedCert) -{ - TPtrC8 encodedCert( reinterpret_cast( aEncodedCert.constData() ), - aEncodedCert.length() ); - - ASSERT( mCert == 0 ); - mCert = CX509Certificate::NewL( encodedCert ); - - 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 = NULL; - X509CertNameParser::IssuerFullNameL( *mCert, issuerBuf ); - CleanupStack::PushL( issuerBuf ); - QT_TRYCATCH_LEAVING( mIssuerName = - QString::fromUtf16(issuerBuf->Ptr(), issuerBuf->Length())); - CleanupStack::PopAndDestroy( issuerBuf ); - - TPtrC8 fingerprint = mCert->Fingerprint(); - QT_TRYCATCH_LEAVING( mFingerprint = QByteArray::fromRawData( - reinterpret_cast(fingerprint.Ptr()), fingerprint.Length()) ); - - mMd5Fingerprint = Md5FingerprintL( mCert->Encoding() ); - - 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 = mCert->SigningAlgorithm(); - mDigestAlgorithm = mapAlgorithm(alg.DigestAlgorithm().Algorithm()); - mAsymmetricAlgorithm = mapAlgorithm(alg.AsymmetricAlgorithm().Algorithm()); -} - -// ---------------------------------------------------------------------------- -// UntrustedCertificateInfoSymbian::CommonNameMatchesL() -// ---------------------------------------------------------------------------- -// -bool UntrustedCertificateInfoSymbian::CommonNameMatchesL(const QString &siteName) const -{ - bool matches = false; - const CX500DistinguishedName& distinguishedName = mCert->SubjectName(); - HBufC* commonNameSymbian = distinguishedName.ExtractFieldL( KX520CommonName ); - if (commonNameSymbian) { - CleanupStack::PushL(commonNameSymbian); - QString commonName = QString::fromRawData( - reinterpret_cast(commonNameSymbian->Ptr()), - commonNameSymbian->Length()); - matches = ( commonName == siteName ); // TODO: accept '*' chars in commonName? - CleanupStack::PopAndDestroy(commonNameSymbian); - } - 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; -} -