Mercurial > trustbridge
view ui/certificate_win.h @ 488:b8b0f9685ffa
merged.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Thu, 24 Apr 2014 14:56:13 +0200 |
parents | 17e1c8f37d72 |
children |
line wrap: on
line source
/* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik * Software engineering by Intevation GmbH * * This file is Free Software under the GNU GPL (v>=2) * and comes with ABSOLUTELY NO WARRANTY! * See LICENSE.txt for details. */ #include "certificate.h" #ifdef Q_OS_WIN #include <QDebug> Certificate::Certificate(const QByteArray& asn1data) : mValid(false) { // asn1data is expected to be \0 terminated as this is what // qt does in ::fromBase64 so the actual asn1data is // size() - 1 and not size() Q_ASSERT (asn1data[asn1data.size()] == '\0'); DWORD sizeOfName = 0; DWORD sizeOfCert = asn1data.size() - 1; mPCertContext = CertCreateCertificateContext(X509_ASN_ENCODING, (const BYTE *) asn1data.constData(), sizeOfCert); if (!mPCertContext) { qDebug() << "Error creating certificate context. Err: " << GetLastError(); return; } sizeOfName = CertGetNameStringW(pCertContext, CERT_NAME_FRIENDLY_DISPLAY_TYPE, 0, NULL, NULL, 0); if (sizeOfName <= 1) { // Probably some fallbacks would be nice here? Let's see if this // is a problem in testing. qDebug() << "Failed to get friendly name. Don't know what to do!"; } else { WCHAR certName[sizeOfName]; DWORD actSize = CertGetNameStringW(pCertContext, CERT_NAME_FRIENDLY_DISPLAY_TYPE, 0, NULL, certName, sizeOfName); Q_ASSERT (actSize == sizeOfName); mShortDescription = QString::fromWCharArray(certName, sizeOfName); } } Certificate::~Certificate() { if (mPCertContext) { CertFreeCertificateContext(pCertContext); } } QString Certificate::shortDescription() { if (!isValid()) { return QString::fromLatin1(tr("Invalid Certificate")); } return mShortDescription; } #endif