comparison mcabber/mcabber/pgp.c @ 2200:fec172dbacc7

Check all signatures and stop immediately if one could be verified
author Sven Gaerner <sgaerner@gmx.net>
date Sun, 01 Feb 2015 20:55:22 +0100
parents 8811fe9d6ef0
children ff18feb75a6d
comparison
equal deleted inserted replaced
2199:527ba1c1873e 2200:fec172dbacc7
260 if (!err) { 260 if (!err) {
261 err = gpgme_op_verify(ctx, data_sign, data_text, 0); 261 err = gpgme_op_verify(ctx, data_sign, data_text, 0);
262 if (!err) { 262 if (!err) {
263 gpgme_verify_result_t vr = gpgme_op_verify_result(ctx); 263 gpgme_verify_result_t vr = gpgme_op_verify_result(ctx);
264 if (vr && vr->signatures) { 264 if (vr && vr->signatures) {
265 char *r = vr->signatures->fpr; 265 gpgme_signature_t s = NULL;
266 // Found the fingerprint. Let's try to get the key id. 266 // check all signatures and stop if the first could be verified
267 if (!gpgme_get_key(ctx, r, &key, 0) && key) { 267 for (s = vr->signatures;
268 r = key->subkeys->keyid; 268 (s != NULL) && (verified_key != NULL);
269 gpgme_key_release(key); 269 s = s->next) {
270 } 270 // Found the fingerprint. Let's try to get the key id.
271 // r is a static variable, let's copy it. 271 if (NULL != s->fpr) {
272 verified_key = g_strdup(r); 272 if (!gpgme_get_key(ctx, s->fpr, &key, 0)) {
273 *sigsum = vr->signatures->summary; 273 if (key) {
274 // For some reason summary could be 0 when status is 0 too, 274 verified_key = g_strdup(key->subkeys->keyid);
275 // which means the signature is valid... 275 gpgme_key_release(key);
276 if (!*sigsum && !vr->signatures->status) 276 }
277 *sigsum = GPGME_SIGSUM_GREEN; 277 }
278 }
279 *sigsum = s->summary;
280 // For some reason summary could be 0 when status is 0 too,
281 // which means the signature is valid...
282 if ((!*sigsum) && (!s->status))
283 *sigsum = GPGME_SIGSUM_GREEN;
284 }
278 } 285 }
279 } 286 }
280 gpgme_data_release(data_text); 287 gpgme_data_release(data_text);
281 } 288 }
282 gpgme_data_release(data_sign); 289 gpgme_data_release(data_sign);