diff -r 63339781d179 -r 09b1ac925e3f pkiutilities/untrustedcertificatedialog/src/untrustedcertificateinfobase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/untrustedcertificatedialog/src/untrustedcertificateinfobase.cpp Tue Aug 31 16:04:40 2010 +0300 @@ -0,0 +1,268 @@ +/* +* 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 "UntrustedCertificateInfoBase.h" + +const char *KHexNumberFormatSimple = "%X"; +const char *KHexNumberFormatTwoDigitsWithLeadingZeroes = "%02X"; +const int KCharsPerBlock = 2; +const char KBlockSeparator = ' '; + + +// ======== MEMBER FUNCTIONS ======== + +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::UntrustedCertificateInfoBase() +// ---------------------------------------------------------------------------- +// +UntrustedCertificateInfoBase::UntrustedCertificateInfoBase() : QObject(), + mSubjectName(), mIssuerName(), mFingerprint(), mSerialNumber(), mValidFrom(), mValidTo(), + mFormat(UnknownCertificate), mDigestAlgorithm(Unknown), mAsymmetricAlgorithm(Unknown) +{ +} + +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::~UntrustedCertificateInfoBase() +// ---------------------------------------------------------------------------- +// +UntrustedCertificateInfoBase::~UntrustedCertificateInfoBase() +{ +} + +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::subjectName() +// ---------------------------------------------------------------------------- +// +const QString UntrustedCertificateInfoBase::subjectName() const +{ + return mSubjectName; +} + +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::issuerName() +// ---------------------------------------------------------------------------- +// +const QString UntrustedCertificateInfoBase::issuerName() const +{ + return mIssuerName; +} + +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::fingerprint() +// ---------------------------------------------------------------------------- +// +const QByteArray UntrustedCertificateInfoBase::fingerprint() const +{ + return mFingerprint; +} + +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::serialNumber() +// ---------------------------------------------------------------------------- +// +const QByteArray UntrustedCertificateInfoBase::serialNumber() const +{ + return mSerialNumber; +} + +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::validFrom() +// ---------------------------------------------------------------------------- +// +const QDateTime UntrustedCertificateInfoBase::validFrom() const +{ + return mValidFrom; +} + +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::validTo() +// ---------------------------------------------------------------------------- +// +const QDateTime UntrustedCertificateInfoBase::validTo() const +{ + return mValidTo; +} + +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::format() +// ---------------------------------------------------------------------------- +// +const QString UntrustedCertificateInfoBase::format() const +{ + QString format; + switch (mFormat) { + case X509Certificate: + //: Type name for X509 certificates displayed in certificate details. + // TODO: localised UI string + format = tr("X.509"); + break; + default: + //: Type name for unknown certificates displayed in certificate details. + // TODO: localised UI string + format = tr("Unknown"); + break; + } + return format; +} + +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::digestAlgorithm() +// ---------------------------------------------------------------------------- +// +const QString UntrustedCertificateInfoBase::digestAlgorithm() const +{ + return algorithmName(mDigestAlgorithm); +} + +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::AsymmetricAlgorithm() +// ---------------------------------------------------------------------------- +// +const QString UntrustedCertificateInfoBase::asymmetricAlgorithm() const +{ + return algorithmName(mAsymmetricAlgorithm); +} + +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::AsymmetricAlgorithm() +// ---------------------------------------------------------------------------- +// +const QString UntrustedCertificateInfoBase::combinedAlgorithmName() const +{ + if (mDigestAlgorithm != Unknown && mAsymmetricAlgorithm != Unknown) { + //: Format to combine digest and asymmetric algorithm names. + //: %1 is digest (signing) and %2 is asymmetric (public-key) algorithm. + // TODO: localised UI string needed + return tr("%1%2").arg(digestAlgorithm()).arg(asymmetricAlgorithm()); + } + //: Algorithm name for unknown algorithm. + // TODO: localised UI string needed + return tr("Unknown"); +} + +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::formattedFingerprint() +// ---------------------------------------------------------------------------- +// +const QString UntrustedCertificateInfoBase::formattedFingerprint( + const QByteArray &byteArray) const +{ + QString formatted; + + QString number; + int blockIndex = 0; + int count = byteArray.count(); + for (int index = 0; index < count; ++index) { + if (blockIndex == KCharsPerBlock) { + formatted.append(KBlockSeparator); + blockIndex = 0; + } + number.sprintf(KHexNumberFormatTwoDigitsWithLeadingZeroes, + static_cast(byteArray.at(index))); + formatted.append(number); + ++blockIndex; + } + + return formatted; +} + +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::formattedSerialNumber() +// ---------------------------------------------------------------------------- +// +const QString UntrustedCertificateInfoBase::formattedSerialNumber( + const QByteArray &serialNumber) const +{ + QString formatted; + + QString number; + int count = serialNumber.count(); + for (int index = 0; index < count; ++index) { + number.sprintf(KHexNumberFormatSimple, + static_cast(serialNumber.at(index))); + formatted.append(number); + } + + return formatted; +} + +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::isDateValid() +// ---------------------------------------------------------------------------- +// +bool UntrustedCertificateInfoBase::isDateValid() const +{ + QDateTime current = QDateTime::currentDateTime(); + return (mValidFrom <= current && mValidTo >= current); +} + +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::algorithmName() +// ---------------------------------------------------------------------------- +// +const QString UntrustedCertificateInfoBase::algorithmName(Algorithm algorithm) const +{ + QString name; + switch (algorithm) { + case RSA: + //: Certificate details algorithm name + // TODO: localized UI string + name = tr("RSA"); + break; + case DSA: + //: Certificate details algorithm name + // TODO: localized UI string + name = tr("DSA"); + break; + case DH: + //: Certificate details algorithm name + // TODO: localized UI string + name = tr("DH"); + break; + case MD2: + //: Certificate details algorithm name + // TODO: localized UI string + name = tr("MD2"); + break; + case MD5: + //: Certificate details algorithm name + // TODO: localized UI string + name = tr("MD5"); + break; + case SHA1: + //: Certificate details algorithm name + // TODO: localized UI string + name = tr("SHA1"); + break; + case SHA224: + case SHA256: + case SHA384: + case SHA512: + //: Certificate details algorithm name + // TODO: localized UI string + name = tr("SHA2"); + break; + case Unknown: + default: + //: Certificate details algorithm name + // TODO: localized UI string + name = tr("Unknown"); + break; + } + return name; +} +