aheinecke@21: #include "certificate.h" aheinecke@21: aheinecke@21: #ifdef Q_OS_WIN aheinecke@21: aheinecke@21: #include aheinecke@21: aheinecke@21: Certificate::Certificate(const QByteArray& asn1data) : mValid(false) { aheinecke@21: aheinecke@21: // asn1data is expected to be \0 terminated as this is what aheinecke@21: // qt does in ::fromBase64 so the actual asn1data is aheinecke@21: // size() - 1 and not size() aheinecke@21: Q_ASSERT (asn1data[asn1data.size()] == '\0'); aheinecke@21: DWORD sizeOfName = 0; aheinecke@21: aheinecke@21: DWORD sizeOfCert = asn1data.size() - 1; aheinecke@21: aheinecke@21: mPCertContext = CertCreateCertificateContext(X509_ASN_ENCODING, aheinecke@21: (const BYTE *) asn1data.constData(), sizeOfCert); aheinecke@21: aheinecke@21: if (!mPCertContext) { aheinecke@21: qDebug() << "Error creating certificate context. Err: " << aheinecke@21: GetLastError(); aheinecke@21: return; aheinecke@21: } aheinecke@21: aheinecke@21: sizeOfName = CertGetNameStringW(pCertContext, aheinecke@21: CERT_NAME_FRIENDLY_DISPLAY_TYPE, aheinecke@21: 0, aheinecke@21: NULL, aheinecke@21: NULL, aheinecke@21: 0); aheinecke@21: aheinecke@21: if (sizeOfName <= 1) { aheinecke@21: // Probably some fallbacks would be nice here? Let's see if this aheinecke@21: // is a problem in testing. aheinecke@21: qDebug() << "Failed to get friendly name. Don't know what to do!"; aheinecke@21: } else { aheinecke@21: WCHAR certName[sizeOfName]; aheinecke@21: DWORD actSize = CertGetNameStringW(pCertContext, aheinecke@21: CERT_NAME_FRIENDLY_DISPLAY_TYPE, aheinecke@21: 0, aheinecke@21: NULL, aheinecke@21: certName, aheinecke@21: sizeOfName); aheinecke@21: Q_ASSERT (actSize == sizeOfName); aheinecke@21: aheinecke@21: mShortDescription = QString::fromWCharArray(certName, sizeOfName); aheinecke@21: } aheinecke@21: aheinecke@21: } aheinecke@21: aheinecke@21: Certificate::~Certificate() { aheinecke@21: if (mPCertContext) { aheinecke@21: CertFreeCertificateContext(pCertContext); aheinecke@21: } aheinecke@21: } aheinecke@21: aheinecke@21: QString Certificate::shortDescription() { aheinecke@21: if (!isValid()) { aheinecke@21: return QString::fromLatin1(tr("Invalid Certificate")); aheinecke@21: } aheinecke@21: return mShortDescription; aheinecke@21: } aheinecke@21: aheinecke@21: #endif