[PATCH] show s/mime keyid for successfully checked signatures
Robert Jäschke via Mutt-dev <[email protected]> Wed, 1 Jul 2026 15:46:03 +0200
| Newsgroups | gmane.mail.mutt.devel |
|---|---|
| Message-ID | <[email protected]> |
--+/ZBwG44sxRANq7X
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Hello,
with respect to my post "get id of key used for s/mime signature" on the
mutt-users list, I have written a brief patch to show the key id. To
reduce code duplication, I added a function mutt_align to curs_lib.c,
but I am not sure whether that's the best place to go. I hope my aged C
skills have not introduced too many errors, so feedback is very welcome.
Best regards,
Robert
-- >8 --
---
crypt-gpgme.c | 21 +++++++--------------
curs_lib.c | 12 ++++++++++++
protos.h | 1 +
3 files changed, 20 insertions(+), 14 deletions(-)
diff --git a/crypt-gpgme.c b/crypt-gpgme.c
index ccae5503..e42be23d 100644
--- a/crypt-gpgme.c
+++ b/crypt-gpgme.c
@@ -1619,9 +1619,8 @@ static void show_one_sig_validity(gpgme_ctx_t ctx, in=
t idx, STATE *s)
static void print_smime_keyinfo(const char *msg, gpgme_signature_t sig,
gpgme_key_t key, STATE *s)
{
- int msgwid;
gpgme_user_id_t uids =3D NULL;
- int i, aka =3D 0;
+ int aka =3D 0;
=20
state_puts(msg, s);
state_puts(" ", s);
@@ -1634,18 +1633,17 @@ static void print_smime_keyinfo(const char *msg, gp=
gme_signature_t sig,
continue;
if (aka)
{
- msgwid =3D mutt_strwidth(msg) - mutt_strwidth(_("aka: ")) + 1;
- if (msgwid < 0)
- msgwid =3D 0;
- for (i =3D 0; i < msgwid; i++)
- state_puts(" ", s);
- state_puts(_("aka: "), s);
+ mutt_align(msg, _("aka: "), s);
}
state_puts(uids->uid, s);
state_puts("\n", s);
=20
aka =3D 1;
}
+
+ mutt_align(msg, _("KeyId: "), s);
+ state_puts(key->fpr, s);
+ state_puts("\n", s);
}
else
{
@@ -1666,12 +1664,7 @@ static void print_smime_keyinfo(const char *msg, gpg=
me_signature_t sig,
"Jan 1 1970" is not the created date. */
if (sig->timestamp)
{
- msgwid =3D mutt_strwidth(msg) - mutt_strwidth(_("created: ")) + 1;
- if (msgwid < 0)
- msgwid =3D 0;
- for (i =3D 0; i < msgwid; i++)
- state_puts(" ", s);
- state_puts(_("created: "), s);
+ mutt_align(msg, _("created: "), s);
print_time(sig->timestamp, s);
state_puts("\n", s);
}
diff --git a/curs_lib.c b/curs_lib.c
index 5c93cbb0..e6d1f7d5 100644
--- a/curs_lib.c
+++ b/curs_lib.c
@@ -1654,3 +1654,15 @@ int mutt_strwidth(const char *s)
}
return w;
}
+
+void mutt_align(const char *msg, const char *key, STATE *s)
+{
+ int msgwid =3D mutt_strwidth(msg) - mutt_strwidth(_(key)) + 1;
+ int i;
+
+ if (msgwid < 0)
+ msgwid =3D 0;
+ for (i =3D 0; i < msgwid; i++)
+ state_puts(" ", s);
+ state_puts(key, s);
+}
diff --git a/protos.h b/protos.h
index 4958aa0e..407f4859 100644
--- a/protos.h
+++ b/protos.h
@@ -407,6 +407,7 @@ int mutt_smtp_send(const ADDRESS *, const ADDRESS *, co=
nst ADDRESS *,
size_t mutt_wstr_trunc(const char *, size_t, size_t, size_t *);
int mutt_charlen(const char *s, int *);
int mutt_strwidth(const char *);
+void mutt_align(const char *msg, const char *key, STATE *s);
int mutt_compose_menu(SEND_CONTEXT *);
int mutt_thread_set_flag(HEADER *, int, int, int);
int mutt_user_is_recipient(HEADER *);
--=20
2.47.3
--+/ZBwG44sxRANq7X
Content-Type: application/pkcs7-signature; name="smime.p7s"
Content-Disposition: attachment; filename="smime.p7s"
Content-Transfer-Encoding: base64
MIIOkQYJKoZIhvcNAQcCoIIOgjCCDn4CAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0B
BwGgggwQMIIGRDCCBCygAwIBAgIQFfmubKqNLtTTb3h/Htx7ATANBgkqhkiG9w0BAQsFADBv
MQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
IEluc3RpdHV0aW9ucyBDQTEnMCUGA1UEAwweSEFSSUNBIENsaWVudCBSU0EgUm9vdCBDQSAy
MDIxMB4XDTI1MDEwMzExMTMwOFoXDTM5MTIzMTExMTMwN1owYzELMAkGA1UEBhMCR1IxNzA1
BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0Ex
GzAZBgNVBAMMEkdFQU5UIFMvTUlNRSBSU0EgMTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCC
AYoCggGBAKu4bq/+byKjHo25Xz32YBmO+Wrkmc+UmfcdXSCI7yawwU9JSMEHAAKAASaJpLr9
JAyt+tlB/rn/SaznSwY4ipBIffR0D5k/ndfiI553dWgI4i/tkOGlNej/7JyE2CS9kTlOOs6p
g5HaDpwqjAhCkje+IByg5gKWH6lzvMJo5jQOtsGB2q6e5cYKwa9LJOAcR8iquds9LFssbHSM
uVdSuTjpAjcGLqWfW++C0YXpWD+UonjQ6lNEuiKUDmrFc+SEtLw56lYtp4uuxm4LW/HQSsx+
oGwMBqaR6HhBQ3LydONjsbcbegRqJZFJoLsnwIHorEag44UIvjXzYJAx/NTiwVdHldO7cEvW
scDbyQLR9koBoliq2HrgYFQs7NQxU+7MLNSh8i6znWVNISUEg36M//I8BZl4VqD70ELlhKKN
7rx+i7BwKOd2gxdWgFJhkPyQu9o+82R9epXiRblo/rdkyv+2BFR7VpbgPUzncdi8/0h4dP/q
QFYnA+Df0FFj7gYczwIDAQABo4IBZjCCAWIwEgYDVR0TAQH/BAgwBgEB/wIBADAfBgNVHSME
GDAWgBSg1gc9XiT3e6BELiRSDRmqKwSRpzBQBggrBgEFBQcBAQREMEIwQAYIKwYBBQUHMAKG
NGh0dHA6Ly9jcnQuaGFyaWNhLmdyL0hBUklDQS1DbGllbnQtUm9vdC0yMDIxLVJTQS5jZXIw
RAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9yZXBvLmhhcmljYS5n
ci9kb2N1bWVudHMvQ1BTMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDBFBgNVHR8E
PjA8MDqgOKA2hjRodHRwOi8vY3JsLmhhcmljYS5nci9IQVJJQ0EtQ2xpZW50LVJvb3QtMjAy
MS1SU0EuY3JsMB0GA1UdDgQWBBTrsi87/a4CzCpEBl0lzR0SImiwRzAOBgNVHQ8BAf8EBAMC
AYYwDQYJKoZIhvcNAQELBQADggIBADveuEX23DwrkygKtsF7DmcTGmi8SE20jmJLe0TMT8Nw
s1NqppE0ACym1agtY1IjUFm5MWabG/IcvRTh8sB9cRZgDQMqZLNCLofqL4aj/dKBXH4bwH2M
VdjNHBoGvZkyhRz/kBE+x1vaWXclhWQMOX5nVvRMfiEJiYotMP7KM88IaVZ9DkGJJEVftsnU
WuvCWUtjagD6XWlqLHjNl+LufiZ/h9lDvaWqG1/obfdStgofMc30RL+ES6gYKRwZpCA1coFz
XV7Cnwx8toTl8bReqCNXexKzxlqAcRXPOmlKkJQuqRI297oNuMPnoNZCY+yLnxyd4kZuu0Xc
OTNTpVjM8bvg8ACqhSYanrNDi/zTiTk7gwm9GyH1X45fFNGNEFgpIaApjT2UELukDOmP18Zw
C4EQeHawPJIqffMEmUJm6qbRPKGnNmcyygh4iZU3QbkRLLp3Z6QV3WoTEqyf5mL9qTGS6WJG
65L8oaKw1Xh/bdGuVIDyBahpfP2c2pCd0UH6+x73Rrq9GFlOijVr2OQSvKhzETNG917SvcUR
CBhMnIQFUXqHQyIY60eH1po6WtNOq/1K5kpOG6Sq1RVc02LEit48uK4tRMVUKekSOjruGXW3
8DmAriPcMHjI6VQbqjc0Sq1VPz76ee4FM5uLviSUZHYqDDqMWa8LFImK9iiKI8E3MIIFxDCC
BCygAwIBAgIQfh3o+ir0hw+EC7O2MrF1MzANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJH
UjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
cyBDQTEbMBkGA1UEAwwSR0VBTlQgUy9NSU1FIFJTQSAxMB4XDTI1MDUwNzA5MTk1NVoXDTI3
MDUwNzA5MTk1NVowgcYxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCZXJsaW4xKDAmBgNVBAoM
H0h1bWJvbGR0LVVuaXZlcnNpdGFldCB6dSBCZXJsaW4xETAPBgNVBGEMCEdPVkRFK0JFMREw
DwYDVQQEDAhKYWVzY2hrZTEPMA0GA1UEKgwGUm9iZXJ0MRgwFgYDVQQDDA9Sb2JlcnQgSmFl
c2Noa2UxKzApBgkqhkiG9w0BCQEWHHJvYmVydC5qYWVzY2hrZUBodS1iZXJsaW4uZGUwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCp71us8EXSVsah77i60l9QS76U/7DzeRKF
l3LEjAUET/a8XHTqBEP/7Nss4HucaZwoYIi42qRfzS2T9hPsM9g6jBZ1682+bJvGGkpZwwCH
24+f5UbLvuhQN0t1dF2coEYLnvKdxqVyZL/xYQmFVQVv7Gd7B8wwjQEPEEiyiiggMNE2+mHB
uK7VBWMGRHIWdt4MUNzmBi4sbBubn2C0CAAgiGOSG7nRmEfg+iMwgeBuE0WPDbtEOvEoM1PG
v3KPGBZP463tnlk/5OrWpsqtSqRW0c7ioKF1j1X+SWfr8CPm5bGxt3yxYIzJI6E7zBZmXqlB
XRqTOSTfyOt0g18rxkn5AgMBAAGjggGOMIIBijAfBgNVHSMEGDAWgBTrsi87/a4CzCpEBl0l
zR0SImiwRzBKBggrBgEFBQcBAQQ+MDwwOgYIKwYBBQUHMAKGLmh0dHA6Ly9jcnQuaGFyaWNh
LmdyL0hBUklDQS1HRUFOVC1TTUlNRS1SMS5jZXIwJwYDVR0RBCAwHoEccm9iZXJ0LmphZXNj
aGtlQGh1LWJlcmxpbi5kZTBjBgNVHSAEXDBaMAkGB2eBDAEFAwIwCAYGBACPegEDMEMGDSsG
AQQBgc8RAQECBAIwMjAwBggrBgEFBQcCARYkaHR0cHM6Ly9yZXBvLmhhcmljYS5nci9kb2N1
bWVudHMvQ1BTMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDA/BgNVHR8EODA2MDSg
MqAwhi5odHRwOi8vY3JsLmhhcmljYS5nci9IQVJJQ0EtR0VBTlQtU01JTUUtUjEuY3JsMB0G
A1UdDgQWBBTuUThOMmukadgeawl9pONbOwubrDAOBgNVHQ8BAf8EBAMCBaAwDQYJKoZIhvcN
AQELBQADggGBAEBBHxAlgUbfSbJKsDkgSiPYPsvdcUYnPX2RJTQWqrQuUK5BOVT2pt5hAEoa
31F3+MWMc4AOs5KHLa01ypudmRO6EsZqNqf/AhHpiq06Cw5cMRZSDgAsvKqn7TTSxtBk7K+D
jBxRwH00IZ0SflnonYNDMC00k+yuP5qDhfvdMDQ9//wAgU3+6rDEjUmriGSIaiZoqd8OfgSP
tnZU1xUoHUXb8SPiPtA4opuimoYvdD/QW5OXr1UDHpHQxRHNSiHwRgv5zvX6YdT5OXyss47x
XXr+RCqqa1/RBUdFl0jU+u+5WfoXMM9gXq1v5B84dTVoBTbucoEWwlqrPvqbLsc/07sAMjcn
4w/KjCcrHmF2OtjYUzV1xx+5R4vo6U03BYsgluE7qK8LSoI2JDbp9yQow/CHnyAVGivcgjuU
6MbvV9osr/uP20LDZFclCNxsYslXFKhDhD7++3t6W6pHA4WQqiCtnmA5sw7GoSJB+Ve6UA/v
luXvoyOEt9kmNtrkLz7dkDGCAkUwggJBAgEBMHcwYzELMAkGA1UEBhMCR1IxNzA1BgNVBAoM
LkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExGzAZBgNV
BAMMEkdFQU5UIFMvTUlNRSBSU0EgMQIQfh3o+ir0hw+EC7O2MrF1MzANBglghkgBZQMEAgEF
AKCBoDAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0yNjA3MDEx
MzQ2MDNaMC8GCSqGSIb3DQEJBDEiBCApLtady4lO8cWNDupEenhtMhmwQqch6Ih0EUYLupGw
ADA1BgkqhkiG9w0BCQ8xKDAmMAsGCWCGSAFlAwQBKjALBglghkgBZQMEAQIwCgYIKoZIhvcN
AwcwDQYJKoZIhvcNAQEBBQAEggEAA60XJZhBRgVHk+Qav0+r56aeMHdxPzJcGqd39LT1SjQ0
g4ja1i7tIeDWhTXPvGUfJ/ATkWhaLlaMJ+h09WwMZ3pkyaoGKrfop6vwhHIqcS23Wtx5te9W
ZVSmHr58SwzLBkZocoFJP1ixiHGksIWNALxywv3rADF13+6KVvjcnft9WMUz0V98YeOA+mJC
4CbIKj08Ewi/n1VScKeihv16hORpOvtesHSnBMkGbZK+aHOjJ9kASuMRonFV3YfPmBl0zhg0
n0mA+XfWpkN6vYmZPrcD/QTWe0tzck76XEx8zl9NGXzdA0qCe6/gdMdUPO7+Rl8PBulT1aLw
R4UJnHYF9Q==
--+/ZBwG44sxRANq7X--