aboutsummaryrefslogtreecommitdiffstats
path: root/src/gpgcontext.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpgcontext.h')
-rw-r--r--src/gpgcontext.h183
1 files changed, 183 insertions, 0 deletions
diff --git a/src/gpgcontext.h b/src/gpgcontext.h
new file mode 100644
index 0000000..5b8f93c
--- /dev/null
+++ b/src/gpgcontext.h
@@ -0,0 +1,183 @@
+/*
+ * gpgcontext.h
+ *
+ * Copyright 2008 gpg4usb-team <[email protected]>
+ *
+ * This file is part of gpg4usb.
+ *
+ * Gpg4usb is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Gpg4usb 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with gpg4usb. If not, see <http://www.gnu.org/licenses/>
+ */
+
+#ifndef __SGPGMEPP_CONTEXT_H__
+#define __SGPGMEPP_CONTEXT_H__
+
+#include "gpgconstants.h"
+#include <locale.h>
+#include <errno.h>
+#include <gpgme.h>
+#include <QLinkedList>
+#include <QtGui>
+
+QT_BEGIN_NAMESPACE
+class QMessageBox;
+class sstream;
+class QApplication;
+class QByteArray;
+class QString;
+QT_END_NAMESPACE
+
+class GpgKey
+{
+public:
+ GpgKey() {
+ privkey = false;
+ }
+ QString id;
+ QString name;
+ QString email;
+ QString fpr;
+ bool privkey;
+ bool expired;
+ bool revoked;
+};
+
+typedef QLinkedList< GpgKey > GpgKeyList;
+
+class GpgImportedKey
+{
+public:
+ QString fpr;
+ int importStatus;
+};
+
+typedef QLinkedList< GpgImportedKey > GpgImportedKeyList;
+
+class GpgImportInformation
+{
+public:
+ GpgImportInformation() {
+ considered = 0;
+ no_user_id = 0;
+ imported = 0;
+ imported_rsa = 0;
+ unchanged = 0;
+ new_user_ids = 0;
+ new_sub_keys = 0;
+ new_signatures = 0;
+ new_revocations = 0;
+ secret_read = 0;
+ secret_imported = 0;
+ secret_unchanged = 0;
+ not_imported = 0;
+ }
+
+ int considered;
+ int no_user_id;
+ int imported;
+ int imported_rsa;
+ int unchanged;
+ int new_user_ids;
+ int new_sub_keys;
+ int new_signatures;
+ int new_revocations;
+ int secret_read;
+ int secret_imported;
+ int secret_unchanged;
+ int not_imported;
+ GpgImportedKeyList importedKeys;
+};
+
+namespace GpgME
+{
+
+class GpgContext : public QObject
+{
+ Q_OBJECT
+
+public:
+ GpgContext(); // Constructor
+ ~GpgContext(); // Destructor
+ GpgImportInformation importKey(QByteArray inBuffer);
+ bool exportKeys(QStringList *uidList, QByteArray *outBuffer);
+ void generateKey(QString *params);
+ GpgKeyList listKeys();
+ void deleteKeys(QStringList *uidList);
+ bool encrypt(QStringList *uidList, const QByteArray &inBuffer,
+ QByteArray *outBuffer);
+ bool decrypt(const QByteArray &inBuffer, QByteArray *outBuffer);
+ void clearPasswordCache();
+ void exportSecretKey(QString uid, QByteArray *outBuffer);
+ gpgme_key_t getKeyDetails(QString uid);
+ gpgme_signature_t verify(QByteArray *inBuffer, QByteArray *sigBuffer = NULL);
+// void decryptVerify(QByteArray in);
+ bool sign(QStringList *uidList, const QByteArray &inBuffer, QByteArray *outBuffer, bool detached = false);
+ /**
+ * @details If text contains PGP-message, put a linebreak before the message,
+ * so that gpgme can decrypt correctly
+ *
+ * @param in Pointer to the QBytearray to check.
+ */
+ void preventNoDataErr(QByteArray *in);
+
+ GpgKey getKeyByFpr(QString fpr);
+ GpgKey getKeyById(QString id);
+
+ static QString gpgErrString(gpgme_error_t err);
+ static QString getGpgmeVersion();
+
+ /**
+ * @brief
+ *
+ * @param text
+ * @return \li 2, if the text is completly signed,
+ * \li 1, if the text is partially signed,
+ * \li 0, if the text is not signed at all.
+ */
+ int textIsSigned(const QByteArray &text);
+ QString beautifyFingerprint(QString fingerprint);
+
+signals:
+ void signalKeyDBChanged();
+
+private slots:
+ void slotRefreshKeyList();
+
+private:
+ gpgme_ctx_t mCtx;
+ gpgme_data_t in, out;
+ gpgme_error_t err;
+ gpgme_error_t readToBuffer(gpgme_data_t in, QByteArray *outBuffer);
+ QByteArray mPasswordCache;
+ QSettings settings;
+ bool debug;
+ GpgKeyList mKeyList;
+ int checkErr(gpgme_error_t err) const;
+ int checkErr(gpgme_error_t err, QString comment) const;
+
+ static gpgme_error_t passphraseCb(void *hook, const char *uid_hint,
+ const char *passphrase_info,
+ int last_was_bad, int fd);
+ gpgme_error_t passphrase(const char *uid_hint,
+ const char *passphrase_info,
+ int last_was_bad, int fd);
+
+ void executeGpgCommand(QStringList arguments,
+ QByteArray *stdOut,
+ QByteArray *stdErr);
+ QString gpgBin;
+ QString gpgKeys;
+};
+} // namespace GpgME
+
+#endif // __SGPGMEPP_CONTEXT_H__