1 /* 2 signjob.h 3 4 This file is part of qgpgme, the Qt API binding for gpgme 5 Copyright (c) 2004, 2007 Klarälvdalens Datakonsult AB 6 Copyright (c) 2016 by Bundesamt für Sicherheit in der Informationstechnik 7 Software engineering by Intevation GmbH 8 9 QGpgME is free software; you can redistribute it and/or 10 modify it under the terms of the GNU General Public License as 11 published by the Free Software Foundation; either version 2 of the 12 License, or (at your option) any later version. 13 14 QGpgME is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with this program; if not, write to the Free Software 21 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 22 23 In addition, as a special exception, the copyright holders give 24 permission to link the code of this program with any edition of 25 the Qt library by Trolltech AS, Norway (or with modified versions 26 of Qt that use the same license as Qt), and distribute linked 27 combinations including the two. You must obey the GNU General 28 Public License in all respects for all of the code used other than 29 Qt. If you modify this file, you may extend this exception to 30 your version of the file, but you are not obligated to do so. If 31 you do not wish to do so, delete this exception statement from 32 your version. 33 */ 34 35 #ifndef __KLEO_SIGNJOB_H__ 36 #define __KLEO_SIGNJOB_H__ 37 38 #include "job.h" 39 40 #ifdef BUILDING_QGPGME 41 # include "global.h" 42 #else 43 # include <gpgme++/global.h> 44 #endif 45 46 47 #include <vector> 48 #include <memory> 49 50 class QByteArray; 51 class QIODevice; 52 53 namespace GpgME 54 { 55 class Error; 56 class Key; 57 class SigningResult; 58 } 59 60 namespace QGpgME 61 { 62 63 /** 64 @short An abstract base class for asynchronous signing 65 66 To use a SignJob, first obtain an instance from the CryptoBackend 67 implementation, connect the progress() and result() signals to 68 suitable slots and then start the signing with a call to 69 start(). This call might fail, in which case the SignJob instance 70 will have scheduled it's own destruction with a call to 71 QObject::deleteLater(). 72 73 After result() is emitted, the SignJob will schedule it's own 74 destruction by calling QObject::deleteLater(). 75 */ 76 class QGPGME_EXPORT SignJob : public Job 77 { 78 Q_OBJECT 79 protected: 80 explicit SignJob(QObject *parent); 81 public: 82 ~SignJob(); 83 84 /** 85 Starts the signing operation. \a signers is the list of keys to 86 sign \a plainText with. Empty (null) keys are ignored. 87 */ 88 virtual GpgME::Error start(const std::vector<GpgME::Key> &signers, 89 const QByteArray &plainText, 90 GpgME::SignatureMode mode) = 0; 91 92 /*! 93 \overload 94 95 If \a signature is non-null the signature is written 96 there. Otherwise, it will be delivered in the second argument of 97 result(). 98 99 \throws GpgME::Exception if starting fails 100 */ 101 virtual void start(const std::vector<GpgME::Key> &signers, 102 const std::shared_ptr<QIODevice> &plainText, 103 const std::shared_ptr<QIODevice> &signature, 104 GpgME::SignatureMode mode) = 0; 105 106 virtual GpgME::SigningResult exec(const std::vector<GpgME::Key> &signers, 107 const QByteArray &plainText, 108 GpgME::SignatureMode mode, 109 QByteArray &signature) = 0; 110 111 /*! 112 This is a hack to request BASE64 output (instead of whatever 113 comes out normally). 114 */ 115 virtual void setOutputIsBase64Encoded(bool) = 0; 116 117 Q_SIGNALS: 118 void result(const GpgME::SigningResult &result, const QByteArray &signature, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error()); 119 }; 120 121 } 122 123 #endif // __KLEO_SIGNJOB_H__ 124