summaryrefslogtreecommitdiffstats
path: root/kio/kssl/ksslpkcs7.cc
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commitce4a32fe52ef09d8f5ff1dd22c001110902b60a2 (patch)
tree5ac38a06f3dde268dc7927dc155896926aaf7012 /kio/kssl/ksslpkcs7.cc
downloadtdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.tar.gz
tdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kio/kssl/ksslpkcs7.cc')
-rw-r--r--kio/kssl/ksslpkcs7.cc208
1 files changed, 208 insertions, 0 deletions
diff --git a/kio/kssl/ksslpkcs7.cc b/kio/kssl/ksslpkcs7.cc
new file mode 100644
index 000000000..14210b1bd
--- /dev/null
+++ b/kio/kssl/ksslpkcs7.cc
@@ -0,0 +1,208 @@
+/* This file is part of the KDE project
+ *
+ * Copyright (C) 2001 George Staikos <staikos@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <kopenssl.h>
+
+#include <qstring.h>
+#include <qfile.h>
+#include <ksslall.h>
+#include <kdebug.h>
+#include <ktempfile.h>
+#include <kmdcodec.h>
+
+#include <assert.h>
+
+#ifdef KSSL_HAVE_SSL
+#define sk_new kossl->sk_new
+#define sk_push kossl->sk_push
+#define sk_free kossl->sk_free
+#define sk_value kossl->sk_value
+#define sk_num kossl->sk_num
+#define sk_dup kossl->sk_dup
+#endif
+
+
+KSSLPKCS7::KSSLPKCS7() {
+ _pkcs = NULL;
+ _cert = NULL;
+ kossl = KOSSL::self();
+}
+
+
+
+KSSLPKCS7::~KSSLPKCS7() {
+#ifdef KSSL_HAVE_SSL
+ if (_pkcs) kossl->PKCS7_free(_pkcs);
+#endif
+ if (_cert) delete _cert;
+}
+
+
+KSSLPKCS7* KSSLPKCS7::fromString(QString base64) {
+#ifdef KSSL_HAVE_SSL
+KTempFile ktf;
+
+ if (base64.isEmpty()) return NULL;
+ QByteArray qba, qbb = QCString(base64.latin1()).copy();
+ KCodecs::base64Decode(qbb, qba);
+ ktf.file()->writeBlock(qba);
+ ktf.close();
+ KSSLPKCS7* rc = loadCertFile(ktf.name());
+ ktf.unlink();
+ return rc;
+#endif
+return NULL;
+}
+
+
+
+KSSLPKCS7* KSSLPKCS7::loadCertFile(QString filename) {
+#ifdef KSSL_HAVE_SSL
+QFile qf(filename);
+PKCS7 *newpkcs = NULL;
+
+ if (!qf.open(IO_ReadOnly))
+ return NULL;
+
+ FILE *fp = fdopen(qf.handle(), "r");
+ if (!fp) return NULL;
+
+ newpkcs = KOSSL::self()->d2i_PKCS7_fp(fp, &newpkcs);
+
+ if (!newpkcs) return NULL;
+
+ KSSLPKCS7 *c = new KSSLPKCS7;
+ c->setCert(newpkcs);
+
+ return c;
+#endif
+return NULL;
+}
+
+
+void KSSLPKCS7::setCert(PKCS7 *c) {
+#ifdef KSSL_HAVE_SSL
+ _pkcs = c;
+ //STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7);
+ //X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si);
+ // set _chain and _cert here.
+#endif
+}
+
+
+KSSLCertificate *KSSLPKCS7::getCertificate() {
+ return _cert;
+}
+
+
+KSSLCertChain *KSSLPKCS7::getChain() {
+ return _chain;
+}
+
+
+QString KSSLPKCS7::toString() {
+QString base64;
+#ifdef KSSL_HAVE_SSL
+unsigned char *p;
+int len;
+
+ len = kossl->i2d_PKCS7(_pkcs, NULL);
+ if (len >= 0) {
+ char *buf = new char[len];
+ p = (unsigned char *)buf;
+ kossl->i2d_PKCS7(_pkcs, &p);
+ QByteArray qba;
+ qba.setRawData(buf, len);
+ base64 = KCodecs::base64Encode(qba);
+ qba.resetRawData(buf, len);
+ delete[] buf;
+ }
+#endif
+return base64;
+}
+
+
+
+bool KSSLPKCS7::toFile(QString filename) {
+#ifdef KSSL_HAVE_SSL
+QFile out(filename);
+
+ if (!out.open(IO_WriteOnly)) return false;
+
+ int fd = out.handle();
+ FILE *fp = fdopen(fd, "w");
+
+ if (!fp) {
+ unlink(filename.latin1());
+ return false;
+ }
+
+ kossl->i2d_PKCS7_fp(fp, _pkcs);
+
+ fclose(fp);
+ return true;
+#endif
+return false;
+}
+
+
+KSSLCertificate::KSSLValidation KSSLPKCS7::validate() {
+#ifdef KSSL_HAVE_SSL
+KSSLCertificate::KSSLValidation xx = _cert->validate();
+return xx;
+#else
+return KSSLCertificate::NoSSL;
+#endif
+}
+
+
+KSSLCertificate::KSSLValidation KSSLPKCS7::revalidate() {
+ if (_cert)
+ return _cert->revalidate();
+ return KSSLCertificate::Unknown;
+}
+
+
+bool KSSLPKCS7::isValid() {
+return (validate() == KSSLCertificate::Ok);
+}
+
+
+QString KSSLPKCS7::name() {
+ if (_cert)
+ return _cert->getSubject();
+ return QString();
+}
+
+
+#ifdef KSSL_HAVE_SSL
+#undef sk_new
+#undef sk_push
+#undef sk_free
+#undef sk_value
+#undef sk_num
+#undef sk_dup
+#endif
+