00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
#include "kpgpkey.h"
00020
#include "kdebug.h"
00021
00022
namespace Kpgp {
00023
00024
00025
00028
QStringList KeyIDList::toStringList()
const
00029
{
00030
QStringList res;
00031
for( KeyIDList::ConstIterator it = begin(); it != end(); ++it ) {
00032 res << (*it).data();
00033 }
00034
return res;
00035 }
00036
00039 KeyIDList KeyIDList::fromStringList(
const QStringList& l )
00040 {
00041 KeyIDList res;
00042
for( QStringList::ConstIterator it = l.begin(); it != l.end(); ++it ) {
00043 res << (*it).local8Bit();
00044 }
00045
return res;
00046 }
00047
00048
00049
00050 UserID::UserID(
const QString& str,
const Validity validity,
00051
const bool revoked,
const bool invalid)
00052 {
00053 mText = str;
00054 mValidity = validity;
00055 mRevoked = revoked;
00056 mInvalid = invalid;
00057 }
00058
00059
00060
00061
00062 Subkey::Subkey(
const KeyID& keyID,
const bool secret)
00063 {
00064 mSecret = secret;
00065 mKeyID = keyID;
00066
00067 mRevoked =
false;
00068 mExpired =
false;
00069 mDisabled =
false;
00070 mInvalid =
false;
00071 mCanEncrypt =
false;
00072 mCanSign =
false;
00073 mCanCertify =
false;
00074 mKeyAlgo = 0;
00075 mKeyLen = 0;
00076 mFingerprint = 0;
00077 mTimestamp = 0;
00078 mExpiration = 0;
00079 }
00080
00081
00082
00083
00084 Key::Key(
const KeyID& keyid,
const QString& uid,
const bool secret) :
00085 mSubkeys(), mUserIDs()
00086 {
00087 mSecret = secret;
00088
if (!keyid.isEmpty())
00089
addSubkey(keyid, secret);
00090
if (!uid.isEmpty())
00091
addUserID(uid);
00092
00093 mRevoked =
false;
00094 mExpired =
false;
00095 mDisabled =
false;
00096 mInvalid =
false;
00097 mCanEncrypt =
false;
00098 mCanSign =
false;
00099 mCanCertify =
false;
00100
00101 mEncryptPref = UnknownEncryptPref;
00102 }
00103
00104 Key::~Key()
00105 {
00106
00107 mUserIDs.setAutoDelete(
true);
00108 mUserIDs.clear();
00109 mSubkeys.setAutoDelete(
true);
00110 mSubkeys.clear();
00111 }
00112
00113
void
00114 Key::clear()
00115 {
00116 mSecret =
false;
00117 mRevoked =
false;
00118 mExpired =
false;
00119 mDisabled =
false;
00120 mInvalid =
false;
00121 mCanEncrypt =
false;
00122 mCanSign =
false;
00123 mCanCertify =
false;
00124
00125 mEncryptPref = UnknownEncryptPref;
00126
00127 mSubkeys.setAutoDelete(
true);
00128 mSubkeys.clear();
00129 mUserIDs.setAutoDelete(
true);
00130 mUserIDs.clear();
00131 }
00132
00133 Validity
00134 Key::keyTrust()
const
00135
{
00136 Validity trust = KPGP_VALIDITY_UNKNOWN;
00137
00138
for(
UserIDListIterator it(mUserIDs); it.current(); ++it )
00139 {
00140
if( (*it)->validity() > trust )
00141 trust = (*it)->validity();
00142 }
00143
00144
return trust;
00145 }
00146
00147 Validity
00148 Key::keyTrust(
const QString& uid )
const
00149
{
00150 Validity trust = KPGP_VALIDITY_UNKNOWN;
00151
00152
if( uid.isEmpty() )
00153
return trust;
00154
00155
for(
UserIDListIterator it(mUserIDs); it.current(); ++it )
00156 {
00157
if( (*it)->text() == uid )
00158 trust = (*it)->validity();
00159 }
00160
00161
return trust;
00162 }
00163
00164
void
00165 Key::cloneKeyTrust(
const Key* key )
00166 {
00167
if( !key )
00168
return;
00169
00170
for(
UserIDListIterator it(mUserIDs); it.current(); ++it )
00171 {
00172 (*it)->setValidity( key->
keyTrust( (*it)->text() ) );
00173 }
00174 }
00175
00176
bool
00177 Key::isValid()
const
00178
{
00179
return ( !mRevoked && !mExpired && !mDisabled && !mInvalid );
00180 }
00181
00182
00183
bool
00184 Key::isValidEncryptionKey()
const
00185
{
00186
return ( !mRevoked && !mExpired && !mDisabled && !mInvalid && mCanEncrypt );
00187 }
00188
00189
00190
bool
00191 Key::isValidSigningKey()
const
00192
{
00193
return ( !mRevoked && !mExpired && !mDisabled && !mInvalid && mCanSign );
00194 }
00195
00196
00197 void Key::addUserID(
const QString &uid,
const Validity validity,
00198
const bool revoked,
const bool invalid)
00199 {
00200
if (!uid.isEmpty()) {
00201
UserID *userID =
new UserID(uid, validity, revoked, invalid);
00202 mUserIDs.append(userID);
00203 }
00204 }
00205
00206 bool Key::matchesUserID(
const QString& str,
bool cs)
00207 {
00208
if (str.isEmpty() || mUserIDs.isEmpty())
00209
return false;
00210
00211
for (
UserIDListIterator it(mUserIDs); it.current(); ++it) {
00212
if (((*it)->text().find(str, 0, cs)) != -1)
00213
return true;
00214 }
00215
00216
return false;
00217 }
00218
00219 void Key::addSubkey(
const KeyID& keyID,
const bool secret)
00220 {
00221
if (!keyID.isEmpty()) {
00222
Subkey *key =
new Subkey(keyID, secret);
00223 mSubkeys.append(key);
00224 }
00225 }
00226
00227 Subkey *Key::getSubkey(
const KeyID& keyID)
00228 {
00229
if (keyID.isEmpty() || mSubkeys.isEmpty())
00230
return 0;
00231
00232
00233
bool longKeyID = (keyID.length() == 16);
00234
00235
for (
SubkeyListIterator it(mSubkeys); it.current(); ++it) {
00236
if (longKeyID) {
00237
if ((*it)->longKeyID() == keyID)
00238
return (*it);
00239 }
00240
else {
00241
if ((*it)->keyID() == keyID)
00242
return (*it);
00243 }
00244 }
00245
00246
return 0;
00247 }
00248
00249 void Key::setFingerprint(
const KeyID& keyID,
const QCString &fpr)
00250 {
00251
Subkey *key;
00252
if ((key =
getSubkey(keyID)) != 0) {
00253 key->
setFingerprint(fpr);
00254 }
00255
else
00256 kdDebug(5006) <<
"Error: Can't set fingerprint. A subkey with key ID 0x"
00257 << keyID <<
" doesn't exist." << endl;
00258 }
00259
00260 }