00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
#ifndef KPGPBASE_H
00020
#define KPGPBASE_H
00021
00022
#include <qstring.h>
00023
#include <qcstring.h>
00024
#include <qstringlist.h>
00025
00026
#include "kpgpkey.h"
00027
#include "kpgpblock.h"
00028
00029
namespace Kpgp {
00030
00031
class Base
00032 {
00033
public:
00034
00036 Base();
00037
virtual ~Base();
00038
00039
00041
virtual int encrypt( Block& ,
const KeyIDList& ) {
return OK; }
00042
00044
virtual int clearsign( Block& ,
const char *) {
return OK; }
00045
00047
virtual int encsign( Block& ,
const KeyIDList& ,
00048
const char * = 0) {
return OK; }
00049
00051
virtual int decrypt( Block& ,
const char * = 0) {
return OK; }
00052
00054
virtual int verify( Block& block ) {
return decrypt( block, 0 ); }
00055
00056
00062
virtual Key* readPublicKey(
const KeyID&,
const bool =
false,
00063 Key* = 0 )
00064 {
return 0; }
00065
00067
virtual KeyList publicKeys(
const QStringList & =
QStringList() )
00068 {
return KeyList(); }
00069
00071
virtual KeyList secretKeys(
const QStringList & =
QStringList() )
00072 {
return KeyList(); }
00073
00076
virtual QCString getAsciiPublicKey(
const KeyID& ) {
return QCString(); }
00077
00080
virtual int signKey(
const KeyID& ,
const char *) {
return OK; }
00081
00082
00085
virtual QString lastErrorMessage() const;
00086
00087
00088 protected:
00089 virtual
int run( const
char *cmd, const
char *passphrase = 0,
00090
bool onlyReadFromPGP = false );
00091 virtual
int runGpg( const
char *cmd, const
char *passphrase = 0,
00092
bool onlyReadFromGnuPG = false );
00093 virtual
void clear();
00094
00095
QCString addUserId();
00096
00097
QCString input;
00098
QCString output;
00099
QCString error;
00100
QString errMsg;
00101
00102
QCString mVersion;
00103
00104
int status;
00105
00106 };
00107
00108
00109
00110 class Base2 : public Base
00111 {
00112
00113
public:
00114 Base2();
00115
virtual ~Base2();
00116
00117
virtual int encrypt( Block& block,
const KeyIDList& recipients );
00118
virtual int clearsign( Block& block,
const char *passphrase );
00119
virtual int encsign( Block& block,
const KeyIDList& recipients,
00120
const char *passphrase = 0 );
00121
virtual int decrypt( Block& block,
const char *passphrase = 0 );
00122
virtual int verify( Block& block ) {
return decrypt( block, 0 ); }
00123
00124
virtual Key* readPublicKey(
const KeyID& keyID,
00125
const bool readTrust =
false,
00126 Key* key = 0 );
00127
virtual KeyList publicKeys(
const QStringList & patterns =
QStringList() );
00128
virtual KeyList secretKeys(
const QStringList & patterns =
QStringList() );
00129
virtual QCString getAsciiPublicKey(
const KeyID& keyID );
00130
virtual int signKey(
const KeyID& keyID,
const char *passphrase );
00131
00132
protected:
00133 KeyList doGetPublicKeys(
const QCString & cmd,
00134
const QStringList & patterns );
00135
virtual KeyList parseKeyList(
const QCString&,
bool );
00136
00137
private:
00138 Key* parsePublicKeyData(
const QCString& output, Key* key = 0 );
00139
void parseTrustDataForKey( Key* key,
const QCString& str );
00140 };
00141
00142
class BaseG :
public Base
00143 {
00144
00145
public:
00146 BaseG();
00147
virtual ~BaseG();
00148
00149
virtual int encrypt( Block& block,
const KeyIDList& recipients );
00150
virtual int clearsign( Block& block,
const char *passphrase );
00151
virtual int encsign( Block& block,
const KeyIDList& recipients,
00152
const char *passphrase = 0 );
00153
virtual int decrypt( Block& block,
const char *passphrase = 0 );
00154
virtual int verify( Block& block ) {
return decrypt( block, 0 ); }
00155
00156
virtual Key* readPublicKey(
const KeyID& keyID,
00157
const bool readTrust =
false,
00158 Key* key = 0 );
00159
virtual KeyList publicKeys(
const QStringList & patterns =
QStringList() );
00160
virtual KeyList secretKeys(
const QStringList & patterns =
QStringList() );
00161
virtual QCString getAsciiPublicKey(
const KeyID& keyID );
00162
virtual int signKey(
const KeyID& keyID,
const char *passphrase );
00163
00164
private:
00165 Key* parseKeyData(
const QCString& output,
int& offset, Key* key = 0 );
00166 KeyList parseKeyList(
const QCString&,
bool );
00167 };
00168
00169
00170
class Base5 :
public Base
00171 {
00172
00173
public:
00174 Base5();
00175
virtual ~Base5();
00176
00177
virtual int encrypt( Block& block,
const KeyIDList& recipients );
00178
virtual int clearsign( Block& block,
const char *passphrase );
00179
virtual int encsign( Block& block,
const KeyIDList& recipients,
00180
const char *passphrase = 0 );
00181
virtual int decrypt( Block& block,
const char *passphrase = 0 );
00182
virtual int verify( Block& block ) {
return decrypt( block, 0 ); }
00183
00184
virtual Key* readPublicKey(
const KeyID& keyID,
00185
const bool readTrust =
false,
00186 Key* key = 0 );
00187
virtual KeyList publicKeys(
const QStringList & patterns =
QStringList() );
00188
virtual KeyList secretKeys(
const QStringList & patterns =
QStringList() );
00189
virtual QCString getAsciiPublicKey(
const KeyID& keyID );
00190
virtual int signKey(
const KeyID& keyID,
const char *passphrase );
00191
00192
private:
00193 Key* parseKeyData(
const QCString& output,
int& offset, Key* key = 0 );
00194 Key* parseSingleKey(
const QCString& output, Key* key = 0 );
00195 KeyList parseKeyList(
const QCString& output,
bool );
00196
void parseTrustDataForKey( Key* key,
const QCString& str );
00197 };
00198
00199
00200
class Base6 :
public Base2
00201 {
00202
00203
public:
00204 Base6();
00205
virtual ~Base6();
00206
00207
virtual int decrypt( Block& block,
const char *passphrase = 0 );
00208
virtual int verify( Block& block ) {
return decrypt( block, 0 ); }
00209
00210
virtual Key* readPublicKey(
const KeyID& keyID,
00211
const bool readTrust =
false,
00212 Key* key = 0 );
00213
virtual KeyList publicKeys(
const QStringList & patterns =
QStringList() );
00214
virtual KeyList secretKeys(
const QStringList & patterns =
QStringList() );
00215
00216
virtual int isVersion6();
00217
00218
protected:
00219
virtual KeyList parseKeyList(
const QCString &,
bool );
00220
00221
private:
00222 Key* parseKeyData(
const QCString& output,
int& offset, Key* key = 0 );
00223 Key* parseSingleKey(
const QCString& output, Key* key = 0 );
00224
void parseTrustDataForKey( Key* key,
const QCString& str );
00225 };
00226
00227
00228
00229
00230
inline QString
00231 Base::lastErrorMessage()
const
00232
{
00233
return errMsg;
00234 }
00235
00236
00237 }
00238
00239
#endif