pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: pkgsrc/security/netpgpverify



Module Name:    pkgsrc
Committed By:   riastradh
Date:           Sun Jan  4 06:19:40 UTC 2026

Modified Files:
        pkgsrc/security/netpgpverify: Makefile
        pkgsrc/security/netpgpverify/files: Makefile.in libverify.c
Added Files:
        pkgsrc/security/netpgpverify/files: gpg2test gpg2test.gpg2
            keypubring.gpg2 keysecring.gpg2

Log Message:
security/netpgpverify: Handle issuer fingerprint subpackets.

This is an extremely dodgy stop-gap measure to verify signatures
produced by gpg2.  It does nothing to address pervasive problems in
netpgpverify, like PR security/57449 or PR bin/59823, or even more
narrowly scoped problems with using keyids instead of fingerprints.
I'm a little reluctant to even commit this stop-gap because the
problems are so bad, and a band-aid won't fix a spurting carotid.

The symptom is:

> ./netpgpverify -k keypubring.gpg2 gpg2test.gpg2
> Ignoring unusual/reserved signature subpacket 34
> Signature did not match contents -- Signature key id 38fa6a2833ed1efa does not match onepass keyid

Test case generated by:

mkdir -m 0700 gpghome
gpg2 --homedir gpghome --batch --passphrase '' \
    --quick-gen-key user%example.com@localhost rsa2048 sign never
echo hello world >gpg2test
gpg2 --homedir gpghome --batch --no-comments --no-emit-version \
    --output gpg2test.gpg2 --sign gpg2test
gpg2 --homedir gpghome --batch --no-comments --no-emit-version \
    --export-secret-keys >keysecring.gpg2
gpg2 --homedir gpghome --batch --no-comments --no-emit-version \
    --export >keypubring.gpg2


To generate a diff of this commit:
cvs rdiff -u -r1.22 -r1.23 pkgsrc/security/netpgpverify/Makefile
cvs rdiff -u -r1.9 -r1.10 pkgsrc/security/netpgpverify/files/Makefile.in
cvs rdiff -u -r0 -r1.1 pkgsrc/security/netpgpverify/files/gpg2test \
    pkgsrc/security/netpgpverify/files/gpg2test.gpg2 \
    pkgsrc/security/netpgpverify/files/keypubring.gpg2 \
    pkgsrc/security/netpgpverify/files/keysecring.gpg2
cvs rdiff -u -r1.31 -r1.32 pkgsrc/security/netpgpverify/files/libverify.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: pkgsrc/security/netpgpverify/Makefile
diff -u pkgsrc/security/netpgpverify/Makefile:1.22 pkgsrc/security/netpgpverify/Makefile:1.23
--- pkgsrc/security/netpgpverify/Makefile:1.22  Sun Nov  1 11:28:35 2020
+++ pkgsrc/security/netpgpverify/Makefile       Sun Jan  4 06:19:39 2026
@@ -1,6 +1,7 @@
-# $NetBSD: Makefile,v 1.22 2020/11/01 11:28:35 wiz Exp $
+# $NetBSD: Makefile,v 1.23 2026/01/04 06:19:39 riastradh Exp $
 
 DISTNAME=              netpgpverify-${VERSION}
+PKGREVISION=           1
 CATEGORIES=            security
 MASTER_SITES=          # empty
 DISTFILES=             # empty

Index: pkgsrc/security/netpgpverify/files/Makefile.in
diff -u pkgsrc/security/netpgpverify/files/Makefile.in:1.9 pkgsrc/security/netpgpverify/files/Makefile.in:1.10
--- pkgsrc/security/netpgpverify/files/Makefile.in:1.9  Sun Nov  1 11:28:35 2020
+++ pkgsrc/security/netpgpverify/files/Makefile.in      Sun Jan  4 06:19:39 2026
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile.in,v 1.9 2020/11/01 11:28:35 wiz Exp $
+# $NetBSD: Makefile.in,v 1.10 2026/01/04 06:19:39 riastradh Exp $
 
 PROG=netpgpverify
 
@@ -49,6 +49,8 @@ tst:
        ./${PROG} -k pubring.gpg noversion.asc
        @echo "testing dash-escaped text"
        ./${PROG} -k pubring.gpg dash-escaped-text.asc
+       @echo "testing gpg2-generated signature"
+       ./${PROG} -k keypubring.gpg2 gpg2test.gpg2
 
 clean:
        rm -rf *.core ${OBJS} ${PROG}

Index: pkgsrc/security/netpgpverify/files/libverify.c
diff -u pkgsrc/security/netpgpverify/files/libverify.c:1.31 pkgsrc/security/netpgpverify/files/libverify.c:1.32
--- pkgsrc/security/netpgpverify/files/libverify.c:1.31 Sun Nov  1 11:28:35 2020
+++ pkgsrc/security/netpgpverify/files/libverify.c      Sun Jan  4 06:19:40 2026
@@ -1183,10 +1183,29 @@ read_sig_subpackets(pgpv_t *pgp, pgpv_si
                        sigpkt->sig.revoked = *p++ + 1;
                        sigpkt->sig.why_revoked = (char *)(void *)p;
                        break;
-               case SUBPKT_ISSUER_FINGERPRINT:
+               case SUBPKT_ISSUER_FINGERPRINT: {
+                       /* RFC 9580, Sec. 5.2.3.35 Issuer Fingerprint */
+                       unsigned N;
+
                        sigpkt->sig.ifver = *p;
+                       switch (sigpkt->sig.ifver) {
+                       case 4:
+                               N = 20;
+                               break;
+                       case 6:
+                               N = 32;
+                               break;
+                       default:
+                               printf("unknown issuer fpr version %d\n",
+                                   sigpkt->sig.ifver);
+                               return 0;
+                       }
                        sigpkt->sig.issuer_fingerprint = &p[1];
+                       memcpy(sigpkt->sig.signer,
+                           &p[1 + N - sizeof(sigpkt->sig.signer)],
+                           sizeof(sigpkt->sig.signer));
                        break;
+               }
                default:
                        printf("Ignoring unusual/reserved signature subpacket %d\n", subpkt.tag);
                        break;

Added files:

Index: pkgsrc/security/netpgpverify/files/gpg2test
diff -u /dev/null pkgsrc/security/netpgpverify/files/gpg2test:1.1
--- /dev/null   Sun Jan  4 06:19:40 2026
+++ pkgsrc/security/netpgpverify/files/gpg2test Sun Jan  4 06:19:39 2026
@@ -0,0 +1 @@
+hello world
Index: pkgsrc/security/netpgpverify/files/gpg2test.gpg2
Binary files are different
Index: pkgsrc/security/netpgpverify/files/keypubring.gpg2
Binary files are different
Index: pkgsrc/security/netpgpverify/files/keysecring.gpg2
Binary files are different



Home | Main Index | Thread Index | Old Index