aheinecke@21: #include "certificate.h" aheinecke@82: #include aheinecke@21: #include aheinecke@21: aheinecke@94: #include aheinecke@94: aheinecke@83: Certificate::Certificate(const QString& b64Line) : aheinecke@81: mValid(false), aheinecke@81: mShortDescription(QObject::tr("Invalid Certificate")) aheinecke@81: { aheinecke@82: int ret = -1; aheinecke@82: char buf[2000]; aheinecke@94: x509_crt x509cert; aheinecke@81: aheinecke@83: /* Cut of the first two chars (e.g. I: and decode) */ aheinecke@83: QByteArray asn1data = QByteArray::fromBase64( aheinecke@83: b64Line.right(b64Line.size() - 2).toLatin1()); aheinecke@83: aheinecke@94: x509_crt_init(&x509cert); aheinecke@94: ret = x509_crt_parse(&x509cert, aheinecke@82: (const unsigned char*) asn1data.constData(), aheinecke@82: asn1data.size()); aheinecke@82: if (ret != 0) { aheinecke@82: qDebug() << "Parsing certificate failed with error: " << ret; aheinecke@94: x509_crt_free(&x509cert); aheinecke@82: return; aheinecke@82: } aheinecke@82: aheinecke@94: ret = x509_crt_info(buf, 2000, "", &x509cert); aheinecke@94: x509_crt_free(&x509cert); aheinecke@82: aheinecke@82: if (ret <= 0) { aheinecke@82: qDebug() << "Getting certificate info failed with error: " << ret; aheinecke@82: return; aheinecke@82: } aheinecke@82: aheinecke@82: /* In case of success the return value is the size of the information aheinecke@82: * written into buf aheinecke@82: * */ aheinecke@83: aheinecke@83: mDetails = QString::fromUtf8(buf, ret); aheinecke@83: aheinecke@83: mShortDescription = mDetails; /* TODO */ aheinecke@82: aheinecke@82: mValid = true; aheinecke@83: aheinecke@83: mBaseLine = b64Line; aheinecke@81: }