libkpgp
kpgpkey.h00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef KPGPKEY_H
00020 #define KPGPKEY_H
00021
00022 #include <time.h>
00023
00024 #include <qcstring.h>
00025 #include <qstring.h>
00026 #include <qstringlist.h>
00027 #include <qvaluelist.h>
00028
00029 namespace Kpgp {
00030
00034 typedef enum
00035 {
00036 KPGP_VALIDITY_UNKNOWN = 0,
00037 KPGP_VALIDITY_UNDEFINED = 1,
00038 KPGP_VALIDITY_NEVER = 2,
00039 KPGP_VALIDITY_MARGINAL = 3,
00040 KPGP_VALIDITY_FULL = 4,
00041 KPGP_VALIDITY_ULTIMATE = 5
00042 } Validity;
00043
00046 typedef enum
00047 {
00048 NeverEncrypt = -1,
00049 UnknownEncryptPref = 0,
00050 AlwaysEncrypt = 1,
00051 AlwaysEncryptIfPossible = 2,
00052 AlwaysAskForEncryption = 3,
00053 AskWheneverPossible = 4
00054 } EncryptPref;
00055
00056
00057 typedef QCString KeyID;
00058
00059 class KeyIDList : public QValueList<KeyID>
00060 {
00061 public:
00062 KeyIDList() { }
00063 KeyIDList( const KeyIDList& l ) : QValueList<KeyID>(l) { }
00064 KeyIDList( const QValueList<KeyID>& l ) : QValueList<KeyID>(l) { }
00065 KeyIDList( const KeyID& i ) { append(i); }
00066
00067 QStringList toStringList() const;
00068
00069 static KeyIDList fromStringList( const QStringList& );
00070 };
00071
00074 class UserID
00075 {
00076 public:
00078 UserID(const QString& str,
00079 const Validity validity = KPGP_VALIDITY_UNKNOWN,
00080 const bool revoked = false,
00081 const bool invalid = false);
00082 ~UserID() {};
00083
00085 QString text() const;
00086
00088 bool revoked() const;
00089
00091 bool invalid() const;
00092
00094 Validity validity() const;
00095
00097 void setText(const QString& str);
00098
00100 void setRevoked(const bool revoked);
00101
00103 void setInvalid(const bool invalid);
00104
00107 void setValidity(const Validity validity);
00108
00109 protected:
00110 bool mRevoked : 1;
00111 bool mInvalid : 1;
00112 Validity mValidity;
00113 QString mText;
00114 };
00115
00116 typedef QPtrList<UserID> UserIDList;
00117 typedef QPtrListIterator<UserID> UserIDListIterator;
00118
00119 inline QString UserID::text() const
00120 {
00121 return mText;
00122 }
00123
00124 inline bool UserID::revoked() const
00125 {
00126 return mRevoked;
00127 }
00128
00129 inline bool UserID::invalid() const
00130 {
00131 return mInvalid;
00132 }
00133
00134 inline Validity UserID::validity() const
00135 {
00136 return mValidity;
00137 }
00138
00139 inline void UserID::setText(const QString& str)
00140 {
00141 mText = str;
00142 }
00143
00144 inline void UserID::setRevoked(const bool revoked)
00145 {
00146 mRevoked = revoked;
00147 }
00148
00149 inline void UserID::setInvalid(const bool invalid)
00150 {
00151 mInvalid = invalid;
00152 }
00153
00154 inline void UserID::setValidity(const Validity validity)
00155 {
00156 mValidity = validity;
00157 }
00158
00159
00162 class Subkey
00163 {
00164 public:
00166 Subkey(const KeyID& keyID, const bool secret = false);
00167 ~Subkey() {};
00168
00170 bool secret() const;
00171
00173 bool revoked() const;
00174
00176 bool expired() const;
00177
00179 bool disabled() const;
00180
00182 bool invalid() const;
00183
00185 bool canEncrypt() const;
00186
00188 bool canSign() const;
00189
00191 bool canCertify() const;
00192
00194 unsigned int keyAlgorithm() const;
00195
00197 unsigned int keyLength() const;
00198
00201 KeyID longKeyID() const;
00202
00204 KeyID keyID() const;
00205
00207 QCString fingerprint() const;
00208
00210 time_t creationDate() const;
00211
00213 time_t expirationDate() const;
00214
00216 void setSecret(const bool secret);
00217
00219 void setRevoked(const bool revoked);
00220
00222 void setExpired(const bool expired);
00223
00225 void setDisabled(const bool disabled);
00226
00228 void setInvalid(const bool invalid);
00229
00232 void setCanEncrypt(const bool canEncrypt);
00233
00236 void setCanSign(const bool canSign);
00237
00240 void setCanCertify(const bool canCertify);
00241
00243 void setKeyAlgorithm(const unsigned int keyAlgo);
00244
00246 void setKeyLength(const unsigned int keyLen);
00247
00249 void setKeyID(const KeyID& keyID);
00250
00252 void setFingerprint(const QCString& fingerprint);
00253
00256 void setCreationDate(const time_t creationDate);
00257
00260 void setExpirationDate(const time_t expirationDate);
00261
00262 protected:
00263 bool mSecret : 1;
00264
00265 bool mRevoked : 1;
00266 bool mExpired : 1;
00267 bool mDisabled : 1;
00268 bool mInvalid : 1;
00269 bool mCanEncrypt : 1;
00270 bool mCanSign : 1;
00271 bool mCanCertify : 1;
00272
00273 unsigned int mKeyAlgo;
00274 unsigned int mKeyLen;
00275 KeyID mKeyID;
00276 QCString mFingerprint;
00277 time_t mTimestamp;
00278 time_t mExpiration;
00279 };
00280
00281 inline bool Subkey::secret() const
00282 {
00283 return mSecret;
00284 }
00285
00286 inline bool Subkey::revoked() const
00287 {
00288 return mRevoked;
00289 }
00290
00291 inline bool Subkey::expired() const
00292 {
00293 return mExpired;
00294 }
00295
00296 inline bool Subkey::disabled() const
00297 {
00298 return mDisabled;
00299 }
00300
00301 inline bool Subkey::invalid() const
00302 {
00303 return mInvalid;
00304 }
00305
00306 inline bool Subkey::canEncrypt() const
00307 {
00308 return mCanEncrypt;
00309 }
00310
00311 inline bool Subkey::canSign() const
00312 {
00313 return mCanSign;
00314 }
00315
00316 inline bool Subkey::canCertify() const
00317 {
00318 return mCanCertify;
00319 }
00320
00321 inline unsigned int Subkey::keyAlgorithm() const
00322 {
00323 return mKeyAlgo;
00324 }
00325
00326 inline unsigned int Subkey::keyLength() const
00327 {
00328 return mKeyLen;
00329 }
00330
00331 inline KeyID Subkey::longKeyID() const
00332 {
00333 return mKeyID;
00334 }
00335
00336 inline KeyID Subkey::keyID() const
00337 {
00338 return mKeyID.right(8);
00339 }
00340
00341 inline QCString Subkey::fingerprint() const
00342 {
00343 return mFingerprint;
00344 }
00345
00346 inline time_t Subkey::creationDate() const
00347 {
00348 return mTimestamp;
00349 }
00350
00351 inline time_t Subkey::expirationDate() const
00352 {
00353 return mExpiration;
00354 }
00355
00356 inline void Subkey::setSecret(const bool secret)
00357 {
00358 mSecret = secret;
00359 }
00360
00361 inline void Subkey::setRevoked(const bool revoked)
00362 {
00363 mRevoked = revoked;
00364 }
00365
00366 inline void Subkey::setExpired(const bool expired)
00367 {
00368 mExpired = expired;
00369 }
00370
00371 inline void Subkey::setDisabled(const bool disabled)
00372 {
00373 mDisabled = disabled;
00374 }
00375
00376 inline void Subkey::setInvalid(const bool invalid)
00377 {
00378 mInvalid = invalid;
00379 }
00380
00381 inline void Subkey::setCanEncrypt(const bool canEncrypt)
00382 {
00383 mCanEncrypt = canEncrypt;
00384 }
00385
00386 inline void Subkey::setCanSign(const bool canSign)
00387 {
00388 mCanSign = canSign;
00389 }
00390
00391 inline void Subkey::setCanCertify(const bool canCertify)
00392 {
00393 mCanCertify = canCertify;
00394 }
00395
00396 inline void Subkey::setKeyAlgorithm(const unsigned int keyAlgo)
00397 {
00398 mKeyAlgo = keyAlgo;
00399 }
00400
00401 inline void Subkey::setKeyLength(const unsigned int keyLen)
00402 {
00403 mKeyLen = keyLen;
00404 }
00405
00406 inline void Subkey::setKeyID(const KeyID& keyID)
00407 {
00408 mKeyID = keyID;
00409 }
00410
00411 inline void Subkey::setFingerprint(const QCString& fingerprint)
00412 {
00413 mFingerprint = fingerprint;
00414 }
00415
00416 inline void Subkey::setCreationDate(const time_t creationDate)
00417 {
00418 mTimestamp = creationDate;
00419 }
00420
00421 inline void Subkey::setExpirationDate(const time_t expirationDate)
00422 {
00423 mExpiration = expirationDate;
00424 }
00425
00426 typedef QPtrList<Subkey> SubkeyList;
00427 typedef QPtrListIterator<Subkey> SubkeyListIterator;
00428
00429
00432 class Key
00433 {
00434 public:
00437 Key( const KeyID& keyid = KeyID(),
00438 const QString& uid = QString::null,
00439 const bool secret = false);
00440 ~Key();
00441
00443 void clear();
00444
00446 bool secret() const;
00447
00449 bool revoked() const;
00450
00452 bool expired() const;
00453
00455 bool disabled() const;
00456
00458 bool invalid() const;
00459
00461 bool canEncrypt() const;
00462
00464 bool canSign() const;
00465
00467 bool canCertify() const;
00468
00470 void setSecret(const bool secret);
00471
00473 void setRevoked(const bool revoked);
00474
00476 void setExpired(const bool expired);
00477
00479 void setDisabled(const bool disabled);
00480
00482 void setInvalid(const bool invalid);
00483
00486 void setCanEncrypt(const bool canEncrypt);
00487
00490 void setCanSign(const bool canSign);
00491
00494 void setCanCertify(const bool canCertify);
00495
00496
00498 EncryptPref encryptionPreference();
00499
00501 void setEncryptionPreference( const EncryptPref encrPref );
00502
00503
00506 QString primaryUserID() const;
00507
00510 KeyID primaryKeyID() const;
00511
00514 QCString primaryFingerprint() const;
00515
00517 bool isNull() const;
00518
00521 time_t creationDate() const;
00522
00526 Validity keyTrust() const;
00527
00530 Validity keyTrust( const QString& uid ) const;
00531
00536 void cloneKeyTrust( const Key* key );
00537
00541 bool isValid() const;
00542
00546 bool isValidEncryptionKey() const;
00547
00550 bool isValidSigningKey() const;
00551
00553 const UserIDList userIDs() const;
00554
00556 const SubkeyList subkeys() const;
00557
00560 void addUserID(const QString& uid,
00561 const Validity validity = KPGP_VALIDITY_UNKNOWN,
00562 const bool revoked = false,
00563 const bool invalid = false);
00564
00566 void addUserID(const UserID *userID);
00567
00571 bool matchesUserID(const QString& str, bool cs = true);
00572
00575 void addSubkey(const KeyID& keyID, const bool secret = false);
00576
00578 void addSubkey(const Subkey *subkey);
00579
00581 Subkey *getSubkey(const KeyID& keyID);
00582
00584 void setFingerprint(const KeyID& keyID, const QCString& fpr);
00585
00586 protected:
00587 bool mSecret : 1;
00588
00589 bool mRevoked : 1;
00590 bool mExpired : 1;
00591 bool mDisabled : 1;
00592 bool mInvalid : 1;
00593 bool mCanEncrypt : 1;
00594 bool mCanSign : 1;
00595 bool mCanCertify : 1;
00596
00597 EncryptPref mEncryptPref;
00598
00599 SubkeyList mSubkeys;
00600 UserIDList mUserIDs;
00601 };
00602
00603 inline bool Key::secret() const
00604 {
00605 return mSecret;
00606 }
00607
00608 inline bool Key::revoked() const
00609 {
00610 return mRevoked;
00611 }
00612
00613 inline bool Key::expired() const
00614 {
00615 return mExpired;
00616 }
00617
00618 inline bool Key::disabled() const
00619 {
00620 return mDisabled;
00621 }
00622
00623 inline bool Key::invalid() const
00624 {
00625 return mInvalid;
00626 }
00627
00628 inline bool Key::canEncrypt() const
00629 {
00630 return mCanEncrypt;
00631 }
00632
00633 inline bool Key::canSign() const
00634 {
00635 return mCanSign;
00636 }
00637
00638 inline bool Key::canCertify() const
00639 {
00640 return mCanCertify;
00641 }
00642
00643 inline void Key::setSecret(const bool secret)
00644 {
00645 mSecret = secret;
00646 }
00647
00648 inline void Key::setRevoked(const bool revoked)
00649 {
00650 mRevoked = revoked;
00651 }
00652
00653 inline void Key::setExpired(const bool expired)
00654 {
00655 mExpired = expired;
00656 }
00657
00658 inline void Key::setDisabled(const bool disabled)
00659 {
00660 mDisabled = disabled;
00661 }
00662
00663 inline void Key::setInvalid(const bool invalid)
00664 {
00665 mInvalid = invalid;
00666 }
00667
00668 inline void Key::setCanEncrypt(const bool canEncrypt)
00669 {
00670 mCanEncrypt = canEncrypt;
00671 }
00672
00673 inline void Key::setCanSign(const bool canSign)
00674 {
00675 mCanSign = canSign;
00676 }
00677
00678 inline void Key::setCanCertify(const bool canCertify)
00679 {
00680 mCanCertify = canCertify;
00681 }
00682
00683 inline EncryptPref Key::encryptionPreference()
00684 {
00685 return mEncryptPref;
00686 }
00687
00688 inline void Key::setEncryptionPreference( const EncryptPref encrPref )
00689 {
00690 mEncryptPref = encrPref;
00691 }
00692
00693 inline QString Key::primaryUserID() const
00694 {
00695 UserID *uid = mUserIDs.getFirst();
00696
00697 if (uid)
00698 return uid->text();
00699 else
00700 return QString::null;
00701 }
00702
00703 inline KeyID Key::primaryKeyID() const
00704 {
00705 Subkey *key = mSubkeys.getFirst();
00706
00707 if (key)
00708 return key->keyID();
00709 else
00710 return KeyID();
00711 }
00712
00713 inline QCString Key::primaryFingerprint() const
00714 {
00715 Subkey *key = mSubkeys.getFirst();
00716
00717 if (key)
00718 return key->fingerprint();
00719 else
00720 return QCString();
00721 }
00722
00723 inline const UserIDList Key::userIDs() const
00724 {
00725 return mUserIDs;
00726 }
00727
00728 inline const SubkeyList Key::subkeys() const
00729 {
00730 return mSubkeys;
00731 }
00732
00733 inline bool Key::isNull() const
00734 {
00735 return (mUserIDs.isEmpty() || mSubkeys.isEmpty());
00736 }
00737
00738 inline time_t Key::creationDate() const
00739 {
00740 if( !mSubkeys.isEmpty() )
00741 return mSubkeys.getFirst()->creationDate();
00742 else
00743 return -1;
00744 }
00745
00746 inline void Key::addUserID(const UserID *userID)
00747 {
00748 if (userID)
00749 mUserIDs.append(userID);
00750 }
00751
00752 inline void Key::addSubkey(const Subkey *subkey)
00753 {
00754 if (subkey)
00755 mSubkeys.append(subkey);
00756 }
00757
00758
00759
00760 typedef QPtrList<Key> KeyListBase;
00761 typedef QPtrListIterator<Key> KeyListIterator;
00762
00763 class KeyList : public KeyListBase
00764 {
00765 public:
00766 ~KeyList()
00767 { clear(); }
00768
00769 private:
00770 int compareItems( QPtrCollection::Item s1, QPtrCollection::Item s2 )
00771 {
00772
00773 return QString::compare((static_cast<Key*>(s1))->primaryUserID().lower(),
00774 (static_cast<Key*>(s2))->primaryUserID().lower());
00775 }
00776 };
00777
00778 }
00779
00780 #endif
|