00001
00029 #ifndef cryptplugwrapper_h
00030 #define cryptplugwrapper_h
00031
00032 #include "cryptplug.h"
00033
00034 #ifndef LIBKLEOPATRA_NO_COMPAT
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 #include <kdemacros.h>
00050
00051 #include "kleo/cryptobackend.h"
00052
00053 #include <qdatetime.h>
00054
00055 #include <qvaluelist.h>
00056 #include <qpair.h>
00057 #include <qstringlist.h>
00058 #include <qstring.h>
00059
00060
00061 class KConfigBase;
00062 class QGpgMECryptoConfig;
00063
00064 namespace GpgME {
00065 class ImportResult;
00066 class KeyGenerationResult;
00067 }
00068
00069 namespace Kleo {
00070 class KeyListJob;
00071 class EncryptJob;
00072 class DecryptJob;
00073 class SignJob;
00074 class VerifyDetachedJob;
00075 class VerifyOpaqueJob;
00076 class KeyGenerationJob;
00077 class ImportJob;
00078 class ExportJob;
00079 class DownloadJob;
00080 class DeleteJob;
00081 class SignEncryptJob;
00082 class DecryptVerifyJob;
00083 class CryptoConfig;
00084 class RefreshKeysJob;
00085 }
00086
00227 class CryptPlugWrapper;
00435 class StructuringInfoWrapper {
00436 public:
00437 StructuringInfoWrapper( CryptPlugWrapper* wrapper );
00438 ~StructuringInfoWrapper();
00439 void reset();
00440 CryptPlug::StructuringInfo data;
00441 private:
00442 void initMe();
00443 void freeMe();
00444 bool _initDone;
00445 CryptPlugWrapper* _wrapper;
00446 };
00447
00448
00449
00453 class CryptPlugWrapper : public Kleo::CryptoBackend::Protocol {
00454 public:
00455 static QString errorIdToText( int errId, bool & isPassphraseError );
00456
00467 typedef enum {
00468 InitStatus_undef = 0,
00469
00470 InitStatus_Ok = 1,
00471 InitStatus_NoLibName = 2,
00472 InitStatus_LoadError = 0x1000,
00473 InitStatus_InitError = 0x2000
00474 } InitStatus;
00475
00501 enum {
00502 SigStatus_UNKNOWN = 0x0000,
00503 SigStatus_VALID = SigStat_VALID,
00504 SigStatus_GREEN = SigStat_GREEN,
00505 SigStatus_RED = SigStat_RED,
00506 SigStatus_KEY_REVOKED = SigStat_KEY_REVOKED,
00507 SigStatus_KEY_EXPIRED = SigStat_KEY_EXPIRED,
00508 SigStatus_SIG_EXPIRED = SigStat_SIG_EXPIRED,
00509 SigStatus_KEY_MISSING = SigStat_KEY_MISSING,
00510 SigStatus_CRL_MISSING = SigStat_CRL_MISSING,
00511 SigStatus_CRL_TOO_OLD = SigStat_CRL_TOO_OLD,
00512 SigStatus_BAD_POLICY = SigStat_BAD_POLICY,
00513 SigStatus_SYS_ERROR = SigStat_SYS_ERROR,
00514
00515 SigStatus_NUMERICAL_CODE = 0x8000
00516 };
00517 typedef unsigned long SigStatusFlags;
00518
00519
00520 enum {
00521 CertStatus_EXPIRES_NEVER = CRYPTPLUG_CERT_DOES_NEVER_EXPIRE
00522 };
00523
00524
00551 CryptPlugWrapper( const QString& name=QString::null,
00552 const QString& libName=QString::null,
00553 const QString& update=QString::null,
00554 bool active = false );
00555
00565 ~CryptPlugWrapper();
00566
00567 QString protocol() const;
00568
00569 QString name() const {
00570 return protocol();
00571 }
00572
00598 void setActive( bool active );
00599
00607 bool active() const;
00608
00609
00634 bool setLibName( const QString& libName );
00635
00644 QString libName() const;
00645
00646
00651 void setDisplayName( const QString& name );
00652
00653
00658 QString displayName() const;
00659
00660
00668 QString libVersion() const;
00669
00674 QString updateURL() const;
00675
00679 void setUpdateURL( const QString& url );
00680
00681 private:
00699 bool initialize( InitStatus* initStatus, QString* errorMsg );
00700
00701 public:
00714 void deinitialize();
00715
00728 InitStatus initStatus( QString* errorMsg ) const;
00729
00730
00745 bool hasFeature( Feature );
00746
00747
00759 const char* bugURL();
00760
00761
00765 void setSignatureAlgorithm( SignatureAlgorithm );
00766
00770 SignatureAlgorithm signatureAlgorithm();
00771
00776 void setWarnSendUnsigned( bool );
00777
00778
00783 bool warnSendUnsigned();
00784
00785
00790 void setSignatureCertificateExpiryNearWarning( bool );
00791
00796 bool signatureCertificateExpiryNearWarning( void );
00797
00803 void setSignatureCertificateExpiryNearInterval( int );
00804
00810 int signatureCertificateExpiryNearInterval( void );
00811
00816 void setCACertificateExpiryNearWarning( bool );
00817
00822 bool caCertificateExpiryNearWarning( void );
00823
00829 void setCACertificateExpiryNearInterval( int );
00830
00836 int caCertificateExpiryNearInterval( void );
00837
00842 void setRootCertificateExpiryNearWarning( bool );
00843
00848 bool rootCertificateExpiryNearWarning( void );
00849
00855 void setRootCertificateExpiryNearInterval( int );
00856
00862 int rootCertificateExpiryNearInterval( void );
00863
00864
00868 void setEncryptionAlgorithm( EncryptionAlgorithm );
00869
00873 EncryptionAlgorithm encryptionAlgorithm();
00874
00880 void setEncryptEmail( EncryptEmail );
00881
00887 EncryptEmail encryptEmail();
00888
00893 void setWarnSendUnencrypted( bool );
00894
00899 bool warnSendUnencrypted();
00900
00906 void setAlwaysEncryptToSelf( bool ) KDE_DEPRECATED;
00907
00913 bool alwaysEncryptToSelf() KDE_DEPRECATED;
00914
00915
00920 void setSaveMessagesEncrypted( bool );
00921
00926 bool saveMessagesEncrypted();
00927
00932 void setCheckCertificatePath( bool );
00933
00938 bool checkCertificatePath();
00939
00940
00945 void setReceiverCertificateExpiryNearWarning( bool );
00946
00951 bool receiverCertificateExpiryNearWarning();
00952
00957 void setReceiverCertificateExpiryNearWarningInterval( int );
00958
00963 int receiverCertificateExpiryNearWarningInterval();
00964
00965
00970 void setCertificateInChainExpiryNearWarning( bool );
00971
00976 bool certificateInChainExpiryNearWarning();
00977
00982 void setCertificateInChainExpiryNearWarningInterval( int );
00983
00988 int certificateInChainExpiryNearWarningInterval();
00989
00990
00995 void setReceiverEmailAddressNotInCertificateWarning( bool );
00996
01001 bool receiverEmailAddressNotInCertificateWarning();
01002
01003
01008 void setEncryptionUseCRLs( bool );
01009
01014 bool encryptionUseCRLs();
01015
01021 void setEncryptionCRLExpiryNearWarning( bool );
01022
01028 bool encryptionCRLExpiryNearWarning();
01029
01035 void setEncryptionCRLNearExpiryInterval( int );
01036
01042 int encryptionCRLNearExpiryInterval();
01043
01044
01049 void setCertificateSource( CertificateSource );
01050
01055 CertificateSource certificateSource();
01056
01057
01094 bool signMessage( const char* cleartext,
01095 char** ciphertext,
01096 const size_t* cipherLen,
01097 const char* certificate,
01098 StructuringInfoWrapper& structuring,
01099 int* errId,
01100 char** errTxt );
01101
01102
01103
01104
01105
01106
01107
01108 void freeSignatureMetaData( CryptPlug::SignatureMetaData* );
01109
01110
01132 bool checkMessageSignature( char** cleartext,
01133 const char* signaturetext,
01134 bool signatureIsBinary,
01135 int signatureLen,
01136 CryptPlug::SignatureMetaData* sigmeta );
01137
01142 bool storeCertificatesFromMessage( const char* ciphertext );
01143
01144
01153 bool findCertificates( const char* addressee,
01154 char** certificates,
01155 int* newSize,
01156 bool secretOnly );
01157
01193 bool encryptMessage( const char* cleartext,
01194 const char** ciphertext,
01195 const size_t* cipherLen,
01196 const char* addressee,
01197 StructuringInfoWrapper& structuring,
01198 int* errId,
01199 char** errTxt );
01200
01232 bool encryptAndSignMessage( const char* cleartext,
01233 const char** ciphertext,
01234 const char* certificate,
01235 StructuringInfoWrapper& structuring );
01236
01247 bool decryptMessage( const char* ciphertext,
01248 bool cipherIsBinary,
01249 int cipherLen,
01250 char** cleartext,
01251 const char* certificate,
01252 int* errId,
01253 char** errTxt );
01254
01267 bool decryptAndCheckMessage( const char* ciphertext,
01268 bool cipherIsBinary,
01269 int cipherLen,
01270 char** cleartext,
01271 const char* certificate,
01272 bool* signatureFound,
01273 CryptPlug::SignatureMetaData* sigmeta,
01274 int* errId,
01275 char** errTxt );
01276
01277
01278 struct CertificateInfo {
01279 QStringList userid;
01280 QString userid_0_org;
01281 QString serial;
01282 QString fingerprint;
01283
01284 QString issuer_org;
01285 QString issuer_reord;
01286 QString chainid;
01287
01288 QDateTime created;
01289 QDateTime expire;
01290
01291 bool secret : 1;
01292 bool invalid : 1;
01293 bool expired : 1;
01294 bool disabled : 1;
01295
01296 bool sign : 1;
01297 bool encrypt : 1;
01298 bool certify : 1;
01299
01300 QValueList< QPair<QString,QString> > dn;
01301 };
01302
01303 typedef QValueList<CryptPlugWrapper::CertificateInfo> CertificateInfoList;
01304
01305 CertificateInfoList listKeys(const QString& pattern = QString::null,
01306 bool remote = false,
01307 bool *truncated = 0 );
01308
01309 Kleo::KeyListJob * keyListJob( bool remote=false, bool includeSigs=false, bool validate=true ) const;
01310 Kleo::EncryptJob * encryptJob( bool armor=false, bool textmode=false ) const;
01311 Kleo::DecryptJob * decryptJob() const;
01312 Kleo::SignJob * signJob( bool armor=false, bool textMode=false ) const;
01313 Kleo::VerifyDetachedJob * verifyDetachedJob( bool textmode=false) const;
01314 Kleo::VerifyOpaqueJob * verifyOpaqueJob( bool textmode=false ) const;
01315 Kleo::KeyGenerationJob * keyGenerationJob() const;
01316
01317 Kleo::ImportJob * importJob() const;
01318 Kleo::ExportJob * publicKeyExportJob( bool armor=false ) const;
01319 Kleo::ExportJob * secretKeyExportJob( bool armor=false ) const;
01320 Kleo::DownloadJob * downloadJob( bool armor=false ) const;
01321 Kleo::DeleteJob * deleteJob() const;
01322
01323 Kleo::SignEncryptJob * signEncryptJob( bool armor=false, bool textmode=false ) const;
01324 Kleo::DecryptVerifyJob * decryptVerifyJob( bool textmode=false ) const;
01325 Kleo::RefreshKeysJob * refreshKeysJob() const;
01326
01327 GpgME::ImportResult importCertificate( const char* data, size_t length );
01328
01329 CryptPlug * cryptPlug() const { return _cp; }
01330
01331 private:
01332 QString _name;
01333 QString _libName;
01334 QString _updateURL;
01335 bool _active;
01336 InitStatus _initStatus;
01337 QString _lastError;
01338 CryptPlug* _cp;
01339
01340 bool mAlwaysEncryptToSelf;
01341 class Config;
01342 Config * _config;
01343 QGpgMECryptoConfig * _cryptoConfig;
01344 };
01345
01346 #endif // !LIBKLEOPATRA_NO_COMPAT
01347
01348 #endif // cryptplugwrapper_h