/* kpgpbase.h Copyright (C) 2001,2002 the KPGP authors See file AUTHORS.kpgp for details This file is part of KPGP, the KDE PGP/GnuPG support library. KPGP 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 2 of the License, or (at your option) any later version. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef KPGPBASE_H #define KPGPBASE_H #include <tqstring.h> #include <tqcstring.h> #include <tqstringlist.h> #include "kpgpkey.h" #include "kpgpblock.h" namespace Kpgp { class Base { public: /** virtual class used internally by kpgp */ Base(); virtual ~Base(); /** Encrypts the message with the given keys. */ virtual int encrypt( Block& , const KeyIDList& ) { return OK; } /** Clearsigns the message with the currently set key. */ virtual int clearsign( Block& , const TQString& ) { return OK; } /** Encrypts and signs the message with the given keys. */ virtual int encsign( Block& , const KeyIDList& , const TQString& = TQString::null) { return OK; } /** Decrypts the message. */ virtual int decrypt( Block& , const TQString& = TQString::null) { return OK; } /** Verifies the message. */ virtual int verify( Block& block ) { return decrypt( block, 0 ); } /** Reads the key data for the given key and returns it. If <em>readTrust</em> is true then the trust of this key will be determined. If <em>key</em> is not null then the key data will be stored in given key. */ virtual Key* readPublicKey( const KeyID&, const bool = false, Key* = 0 ) { return 0; } /** Returns the list of public keys in the users public keyring. */ virtual KeyList publicKeys( const TQStringList & = TQStringList() ) { return KeyList(); } /** Returns the list of secret keys in the users secret keyring. */ virtual KeyList secretKeys( const TQStringList & = TQStringList() ) { return KeyList(); } /** Returns the ascii armored data of the public key with the given key id. */ virtual TQCString getAsciiPublicKey(const KeyID& ) { return TQCString(); } /** Signs the given key with the currently set user key. This is currently not implemented. */ virtual int signKey(const KeyID& , const TQString& ) { return OK; } /** Returns an error message if an error occurred during the last operation. */ virtual TQString lastErrorMessage() const; protected: virtual int run( const char *cmd, const TQString &passphrase = TQString::null, bool onlyReadFromPGP = false ); virtual int runGpg( const char *cmd, const TQString &passphrase = TQString::null, bool onlyReadFromGnuPG = false ); virtual void clear(); TQCString addUserId(); TQCString input; TQCString output; TQCString error; TQString errMsg; TQCString mVersion; int status; }; // --------------------------------------------------------------------------- class Base2 : public Base { public: Base2(); virtual ~Base2(); virtual int encrypt( Block& block, const KeyIDList& recipients ); virtual int clearsign( Block& block, const TQString &passphrase ); virtual int encsign( Block& block, const KeyIDList& recipients, const TQString &passphrase = TQString::null ); virtual int decrypt( Block& block, const TQString &passphrase = TQString::null ); virtual int verify( Block& block ) { return decrypt( block, 0 ); } virtual Key* readPublicKey( const KeyID& keyID, const bool readTrust = false, Key* key = 0 ); virtual KeyList publicKeys( const TQStringList & patterns = TQStringList() ); virtual KeyList secretKeys( const TQStringList & patterns = TQStringList() ); virtual TQCString getAsciiPublicKey( const KeyID& keyID ); virtual int signKey( const KeyID& keyID, const TQString &passphrase ); protected: KeyList doGetPublicKeys( const TQCString & cmd, const TQStringList & patterns ); virtual KeyList parseKeyList( const TQCString&, bool ); private: Key* parsePublicKeyData( const TQCString& output, Key* key = 0 ); void parseTrustDataForKey( Key* key, const TQCString& str ); }; class BaseG : public Base { public: BaseG(); virtual ~BaseG(); virtual int encrypt( Block& block, const KeyIDList& recipients ); virtual int clearsign( Block& block, const TQString &passphrase ); virtual int encsign( Block& block, const KeyIDList& recipients, const TQString &passphrase = TQString::null ); virtual int decrypt( Block& block, const TQString &passphrase = TQString::null ); virtual int verify( Block& block ) { return decrypt( block, 0 ); } virtual Key* readPublicKey( const KeyID& keyID, const bool readTrust = false, Key* key = 0 ); virtual KeyList publicKeys( const TQStringList & patterns = TQStringList() ); virtual KeyList secretKeys( const TQStringList & patterns = TQStringList() ); virtual TQCString getAsciiPublicKey( const KeyID& keyID ); virtual int signKey( const KeyID& keyID, const TQString &passphrase ); private: Key* parseKeyData( const TQCString& output, int& offset, Key* key = 0 ); KeyList parseKeyList( const TQCString&, bool ); }; class Base5 : public Base { public: Base5(); virtual ~Base5(); virtual int encrypt( Block& block, const KeyIDList& recipients ); virtual int clearsign( Block& block, const TQString &passphrase ); virtual int encsign( Block& block, const KeyIDList& recipients, const TQString &passphrase = TQString::null ); virtual int decrypt( Block& block, const TQString &passphrase = TQString::null ); virtual int verify( Block& block ) { return decrypt( block, 0 ); } virtual Key* readPublicKey( const KeyID& keyID, const bool readTrust = false, Key* key = 0 ); virtual KeyList publicKeys( const TQStringList & patterns = TQStringList() ); virtual KeyList secretKeys( const TQStringList & patterns = TQStringList() ); virtual TQCString getAsciiPublicKey( const KeyID& keyID ); virtual int signKey( const KeyID& keyID, const TQString &passphrase ); private: Key* parseKeyData( const TQCString& output, int& offset, Key* key = 0 ); Key* parseSingleKey( const TQCString& output, Key* key = 0 ); KeyList parseKeyList( const TQCString& output, bool ); void parseTrustDataForKey( Key* key, const TQCString& str ); }; class Base6 : public Base2 { public: Base6(); virtual ~Base6(); virtual int decrypt( Block& block, const TQString &passphrase = TQString::null ); virtual int verify( Block& block ) { return decrypt( block, 0 ); } virtual Key* readPublicKey( const KeyID& keyID, const bool readTrust = false, Key* key = 0 ); virtual KeyList publicKeys( const TQStringList & patterns = TQStringList() ); virtual KeyList secretKeys( const TQStringList & patterns = TQStringList() ); virtual int isVersion6(); protected: virtual KeyList parseKeyList( const TQCString &, bool ); private: Key* parseKeyData( const TQCString& output, int& offset, Key* key = 0 ); Key* parseSingleKey( const TQCString& output, Key* key = 0 ); void parseTrustDataForKey( Key* key, const TQCString& str ); }; // --------------------------------------------------------------------------- // inlined functions inline TQString Base::lastErrorMessage() const { return errMsg; } } // namespace Kpgp #endif