aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gpgme.h.in8
-rw-r--r--src/keylist.c18
-rw-r--r--src/verify.c24
3 files changed, 40 insertions, 10 deletions
diff --git a/src/gpgme.h.in b/src/gpgme.h.in
index 57f34469..00a4bed3 100644
--- a/src/gpgme.h.in
+++ b/src/gpgme.h.in
@@ -650,9 +650,11 @@ struct _gpgme_tofu_info
unsigned short encrcount;
/* Number of seconds since Epoch when the first and the most
- * recently seen message were verified. 0 means unknown. */
- unsigned long firstseen;
- unsigned long lastseen;
+ * recently seen message were verified/decrypted. 0 means unknown. */
+ unsigned long signfirst;
+ unsigned long signlast;
+ unsigned long encrfirst;
+ unsigned long encrlast;
/* If non-NULL a human readable string summarizing the TOFU data. */
char *description;
diff --git a/src/keylist.c b/src/keylist.c
index 9f1e68db..f7912e6b 100644
--- a/src/keylist.c
+++ b/src/keylist.c
@@ -466,11 +466,25 @@ parse_tfs_record (gpgme_user_id_t uid, char **field, int nfield)
err = _gpgme_strtoul_field (field[6], &uval);
if (err)
goto inv_engine;
- ti->firstseen = uval;
+ ti->signfirst = uval;
err = _gpgme_strtoul_field (field[7], &uval);
if (err)
goto inv_engine;
- ti->lastseen = uval;
+ ti->signlast = uval;
+
+ if (nfield > 9)
+ {
+ /* This condition is only to allow for gpg 2.1.15 - can
+ * eventually be removed. */
+ err = _gpgme_strtoul_field (field[8], &uval);
+ if (err)
+ goto inv_engine;
+ ti->encrfirst = uval;
+ err = _gpgme_strtoul_field (field[9], &uval);
+ if (err)
+ goto inv_engine;
+ ti->encrlast = uval;
+ }
/* Ready. */
uid->tofu = ti;
diff --git a/src/verify.c b/src/verify.c
index 92eb3334..5ac937d9 100644
--- a/src/verify.c
+++ b/src/verify.c
@@ -755,20 +755,21 @@ parse_tofu_user (gpgme_signature_t sig, char *args, gpgme_protocol_t protocol)
/* Parse a TOFU_STATS line and store it in the last tofu info of SIG.
*
- * TOFU_STATS <validity> <sign-count> <encr-count> [<policy> [<tm1> <tm2>]]
+ * TOFU_STATS <validity> <sign-count> <encr-count> \
+ * [<policy> [<tm1> <tm2> <tm3> <tm4>]]
*/
static gpgme_error_t
parse_tofu_stats (gpgme_signature_t sig, char *args)
{
gpgme_error_t err;
gpgme_tofu_info_t ti;
- char *field[6];
+ char *field[8];
int nfields;
unsigned long uval;
if (!sig->key || !sig->key->_last_uid || !(ti = sig->key->_last_uid->tofu))
return trace_gpg_error (GPG_ERR_INV_ENGINE); /* No TOFU_USER seen. */
- if (ti->firstseen || ti->signcount || ti->validity || ti->policy)
+ if (ti->signfirst || ti->signcount || ti->validity || ti->policy)
return trace_gpg_error (GPG_ERR_INV_ENGINE); /* Already set. */
nfields = _gpgme_split_fields (args, field, DIM (field));
@@ -824,11 +825,24 @@ parse_tofu_stats (gpgme_signature_t sig, char *args)
err = _gpgme_strtoul_field (field[4], &uval);
if (err)
return trace_gpg_error (GPG_ERR_INV_ENGINE);
- ti->firstseen = uval;
+ ti->signfirst = uval;
err = _gpgme_strtoul_field (field[5], &uval);
if (err)
return trace_gpg_error (GPG_ERR_INV_ENGINE);
- ti->lastseen = uval;
+ ti->signlast = uval;
+ if (nfields > 7)
+ {
+ /* This condition is only to allow for gpg 2.1.15 - can
+ * eventually be removed. */
+ err = _gpgme_strtoul_field (field[6], &uval);
+ if (err)
+ return trace_gpg_error (GPG_ERR_INV_ENGINE);
+ ti->encrfirst = uval;
+ err = _gpgme_strtoul_field (field[7], &uval);
+ if (err)
+ return trace_gpg_error (GPG_ERR_INV_ENGINE);
+ ti->encrlast = uval;
+ }
return 0;
}