You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

192 lines
4.8 KiB

/** KPGP: Pretty good privacy en-/decryption class
* This code is under GPL V2.0
*
* @author Lars Knoll <knoll@mpi-hd.mpg.de>
*/
#ifndef KPGP_H
#define KPGP_H
#include <stdio.h>
#include <qstring.h>
#include <qstrlist.h>
#include <qlined.h>
#include <qdialog.h>
#include <qcursor.h>
class Kpgp: public QObject
{
Q_OBJECT
enum Action {
TEST = 0,
ENCRYPT = 1,
SIGN = 2,
ENCSIGN = 3,
DECRYPT = 4,
PUBKEYS = 5,
SIGNKEY = 6
};
public:
Kpgp();
~Kpgp();
void readConfig();
void writeConfig(bool sync);
/** sets the message to en- or decrypt
returns TRUE if the message contains any pgp encoded or signed
parts
The format is then:
frontmatter()
----- BEGIN PGP ...
message()
----- END PGP ...
backmatter()
*/
bool setMessage(const QString mess);
/** gets the de- (or en)crypted message */
const QString message(void) const;
/** gets the part before the decrypted message */
const QString frontmatter(void) const;
/** gets the part after the decrypted message */
const QString backmatter(void) const;
/** decrypts the message if the passphrase is good.
returns false otherwise */
bool decrypt(void);
/** encrypt the message for a list of persons. */
bool encryptFor(const QStrList& receivers, bool sign = TRUE);
/** sign the message. */
bool sign(void);
/** sign a key in the keyring with users signature. */
bool signKey(QString _key);
/** get the known public keys. */
const QStrList* keys(void);
/** check if we have a public key for given person. */
bool havePublicKey(QString person);
/** is the message encrypted ? */
bool isEncrypted(void) const;
/** the persons who can decrypt the message */
const QStrList* receivers(void) const;
/** shows the secret key which is needed
to decrypt the message */
const QString KeyToDecrypt(void) const;
/** is the message signed by someone */
bool isSigned(void) const;
/** it is signed by ... */
QString signedBy(void) const;
/** keyID of signer */
QString signedByKey(void) const;
/** is the signature good ? */
bool goodSignature(void) const;
/** always encrypt message to oneself? */
void setEncryptToSelf(bool flag);
bool encryptToSelf(void) const;
/** store passphrase in pgp object
Problem: passphrase stays in memory.
Advantage: you can call en-/decrypt without always passing the
passphrase */
bool storePassPhrase(void) const;
void setStorePassPhrase(bool);
/** Set pass phrase */
void setPassPhrase(const QString pass);
/** change the passphrase of the actual secret key */
bool changePassPhrase(const QString oldPass, const QString newPass);
/** set a user identity to use (if you have more than one...)
* by default, pgp uses the identity which was generated last. */
void setUser(const QString user);
/** Returns the actual user identity. */
const QString user(void) const { return pgpUser; }
/** clears everything from memory */
void clear(bool erasePassPhrase = FALSE);
/** returns the last error that occured */
const QString lastErrorMsg(void) const;
/// did we find a pgp executable?
bool havePGP(void) const;
// FIXME: key management
// static methods
/** return the actual pgp object */
static Kpgp *getKpgp();
/** pops up a modal window which asks for the passphrase
puts the window on top of the parent, or in the middle of the screen,
if parent = 0 */
static const QString askForPass(QWidget *parent = 0);
/** does the whole decryption in one step. Pops up a message box
if it needs to ask for a passphrase */
static const QString decode(const QString text, bool returnHTML = FALSE);
private:
// test if the PGP executable is found and if there is a passphrase
// set or given. Returns TRUE if everything is ok, and FALSE (together
// with some warning message) if something is missing.
bool prepare(bool needPassPhrase=FALSE);
// cleanup passphrase if it should not be stored.
void cleanupPass(void);
bool checkForPGP(void);
bool runPGP(int action = TEST, const char *args = 0);
bool parseInfo(int action);
static Kpgp *kpgpObject;
QString input;
QString signature;
QString signatureID;
QString keyNeeded;
QString pgpUser; // was: secKey
QStrList persons;
QStrList publicKeys;
QString info;
QString output;
QString front;
QString back;
QString errMsg;
bool flagNoPGP;
bool flagEncrypted;
bool flagSigned;
bool flagSigIsGood;
bool flagEncryptToSelf;
bool havePassPhrase;
bool pgpRunning;
bool storePass;
QString passPhrase;
};
class KpgpPass : public QDialog
{
Q_OBJECT
public:
KpgpPass(QWidget *parent = 0, const char *name = 0);
~KpgpPass();
static QString getPassphrase(QWidget *parent = 0);
private:
QString getPhrase();
QLineEdit *lineedit;
QCursor *cursor;
};
#endif