diff options
Diffstat (limited to 'pica-client/openssltool.cpp')
| -rw-r--r-- | pica-client/openssltool.cpp | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/pica-client/openssltool.cpp b/pica-client/openssltool.cpp new file mode 100644 index 0000000..29cb3b7 --- /dev/null +++ b/pica-client/openssltool.cpp @@ -0,0 +1,133 @@ +#include "openssltool.h" +#include <QProcess> +#include <QRegExp> +#include <QMessageBox> + +OpenSSLTool::OpenSSLTool() +{ +} + +QString OpenSSLTool::NameFromCertFile(QString cert_file) +{ + // + QProcess openssl; + + openssl.start("openssl",QStringList()<<"x509"<<"-in"<<cert_file<<"-subject"<<"-nameopt"<<"oneline,-esc_msb,utf8"<<"-noout"); + if (!openssl.waitForStarted()) + return QString(); + + if (!openssl.waitForFinished()) + return QString(); + + QByteArray result = openssl.readAll(); + QRegExp rx("CN = [0-9]+\\#([^\\s\\#]+)"); + + + QString name=QString::fromUtf8( result.constData()); + + if (name.contains(rx)) + { + name=rx.cap(1); + } + + // +return name; +} + +QString OpenSSLTool::NameFromCertString(QString cert_pem) +{ + QProcess openssl; + + openssl.start("openssl",QStringList()<<"x509"<<"-subject"<<"-nameopt"<<"oneline,-esc_msb,utf8"<<"-noout"); + if (!openssl.waitForStarted()) + return QString(); + + openssl.write(cert_pem.toAscii()); + + if (!openssl.waitForFinished()) + return QString(); + + QByteArray result = openssl.readAll(); + QRegExp rx("CN = [0-9]+\\#([^\\s\\#]+)"); + + + QString name=QString::fromUtf8( result.constData()); + + if (name.contains(rx)) + { + name=rx.cap(1); + } + + // +return name; +} + +QString OpenSSLTool::CertTextFromString(QString cert_pem) +{ + QProcess openssl; + qint64 ret; + char *data; + QByteArray ba; + + openssl.start("openssl", QStringList()<<"x509"<<"-noout"<<"-text"<<"-nameopt"<<"multiline,-esc_msb,utf8"); + + if (!openssl.waitForStarted()) + return QString(); + + ba = cert_pem.toAscii(); + ret = openssl.write(data = (char*)ba.constData()); + openssl.closeWriteChannel(); + + if (!openssl.waitForFinished()) + return QString(); + + return QString::fromUtf8(openssl.readAllStandardOutput().constData()); +} + +bool OpenSSLTool::GenRSAKeySignal(quint32 numbits, QString keyfile, QObject *receiver, const char *finished_slot) +{ + openssl_.start("openssl", QStringList()<<"genrsa"<<"-out"<<keyfile<<QString::number(numbits)); + + if (!openssl_.waitForStarted()) + return false; + + openssl_.disconnect(&openssl_, SIGNAL(finished(int,QProcess::ExitStatus)), 0, 0); + openssl_.connect(&openssl_, SIGNAL(finished(int,QProcess::ExitStatus)),receiver, finished_slot); + + return true; +} + +bool OpenSSLTool::GenCSRSignal(QString csr_file, QString keyfile, QString subject, QObject *receiver, const char *finished_slot) +{ + openssl_.start("openssl", + QStringList() + <<"req" + <<"-out"<<csr_file + <<"-key"<<keyfile + <<"-subj"<<"/CN=" + subject + <<"-new" + <<"-days"<<"3680" + <<"-utf8" + <<"-batch"); + + if (!openssl_.waitForStarted()) + return false; + + openssl_.disconnect(&openssl_, SIGNAL(finished(int,QProcess::ExitStatus)), 0, 0); + openssl_.connect(&openssl_, SIGNAL(finished(int,QProcess::ExitStatus)),receiver, finished_slot); + + return true; +} + +QString OpenSSLTool::ReadStdErr() +{ + return QString::fromUtf8(openssl_.readAllStandardError().constData()); +} + +QString OpenSSLTool::ReadStdOut() +{ + return QString::fromUtf8(openssl_.readAllStandardOutput().constData()); +} + + + |
