summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIngo Klöcker <[email protected]>2026-07-30 15:35:44 +0200
committerIngo Klöcker <[email protected]>2026-07-30 15:35:44 +0200
commit31eb884e8f102ed3cf1220ccdd77e6e1931a9a7b (patch)
treee2149ac273a61eec24fc1b292f6cd2e0d5340dd7 /src
parentIgnore TRUST_ status lines if no NEWSIG was seen (diff)
downloadgpgme-31eb884e8f102ed3cf1220ccdd77e6e1931a9a7b.tar.gz
gpgme-31eb884e8f102ed3cf1220ccdd77e6e1931a9a7b.zip
Handle new SIGINFO status line
* src/gpgme.h.in (gpgme_status_code_t): Add status code for SIGINFO. * src/status-table.c (status_table): Add "SIGINFO". * src/verify.c (parse_sig_info): New. (_gpgme_verify_status_handler): Handle SIGINFO status line. -- GnuPG-bug-id: 8368
Diffstat (limited to 'src')
-rw-r--r--src/gpgme.h.in3
-rw-r--r--src/status-table.c1
-rw-r--r--src/verify.c23
3 files changed, 26 insertions, 1 deletions
diff --git a/src/gpgme.h.in b/src/gpgme.h.in
index a42453a6..c3fb843a 100644
--- a/src/gpgme.h.in
+++ b/src/gpgme.h.in
@@ -2737,7 +2737,8 @@ typedef enum
GPGME_STATUS_VERIFICATION_COMPLIANCE_MODE = 100,
GPGME_STATUS_CANCELED_BY_USER = 101,
GPGME_STATUS_ENCRYPTION_COMPLIANCE_MODE = 102,
- GPGME_STATUS_SESSION_HASH = 103
+ GPGME_STATUS_SESSION_HASH = 103,
+ GPGME_STATUS_SIGINFO = 104
}
gpgme_status_code_t;
diff --git a/src/status-table.c b/src/status-table.c
index 1b94e101..6c48e41f 100644
--- a/src/status-table.c
+++ b/src/status-table.c
@@ -125,6 +125,7 @@ static struct status_table_s status_table[] =
{ "SHM_GET_HIDDEN", GPGME_STATUS_SHM_GET_HIDDEN },
{ "SHM_INFO", GPGME_STATUS_SHM_INFO },
{ "SIGEXPIRED", GPGME_STATUS_SIGEXPIRED },
+ { "SIGINFO", GPGME_STATUS_SIGINFO },
{ "SIG_CREATED", GPGME_STATUS_SIG_CREATED },
{ "SIG_ID", GPGME_STATUS_SIG_ID },
{ "SIG_SUBPACKET", GPGME_STATUS_SIG_SUBPACKET },
diff --git a/src/verify.c b/src/verify.c
index 7ae18cb8..8179e4a8 100644
--- a/src/verify.c
+++ b/src/verify.c
@@ -487,6 +487,24 @@ parse_valid_sig (gpgme_signature_t sig, char *args, gpgme_protocol_t protocol)
static gpgme_error_t
+parse_sig_info (gpgme_signature_t sig, char *args)
+{
+ char *end = args;
+ char *tail;
+
+ if (!*args)
+ /* We require at least the creation time. */
+ return gpg_error (GPG_ERR_GENERAL);
+
+ sig->timestamp = _gpgme_parse_timestamp (end, &tail);
+ if (sig->timestamp == -1 || end == tail || (*tail && *tail != ' '))
+ return trace_gpg_error (GPG_ERR_INV_ENGINE);
+
+ return 0;
+}
+
+
+static gpgme_error_t
parse_notation (gpgme_signature_t sig, gpgme_status_code_t code, char *args)
{
gpgme_error_t err;
@@ -969,6 +987,11 @@ _gpgme_verify_status_handler (void *priv, gpgme_status_code_t code, char *args)
return sig ? parse_valid_sig (sig, args, ctx->protocol)
: trace_gpg_error (GPG_ERR_INV_ENGINE);
+ case GPGME_STATUS_SIGINFO:
+ opd->only_newsig_seen = 0;
+ return sig ? parse_sig_info (sig, args)
+ : trace_gpg_error (GPG_ERR_INV_ENGINE);
+
case GPGME_STATUS_NODATA:
opd->only_newsig_seen = 0;
if (!sig)