Mercurial > trustbridge
view ui/certificate_win.h @ 75:ec0f4efefb7b
Add profiling options for all C/CXX code if requested
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Wed, 19 Mar 2014 15:36:35 +0000 |
parents | dc1e1e9e62ce |
children | 17e1c8f37d72 |
line wrap: on
line source
#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