diff options
Diffstat (limited to 'src/gpgcontext.h')
-rw-r--r-- | src/gpgcontext.h | 183 |
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__ |