Fix PGP v4 fingerprint calculation (rhbz#493777)
authorPanu Matilainen <pmatilai@redhat.com>
Thu, 9 Apr 2009 10:05:00 +0000 (13:05 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Thu, 9 Apr 2009 10:45:22 +0000 (13:45 +0300)
- patch from openSUSE / Michael Schroeder
(cherry picked from commit 7a8aecbc8651cab2bd945db8ffd749f9a165bdf1)

rpmio/rpmpgp.c

index d0f8e81..47cc764 100644 (file)
@@ -1097,6 +1097,7 @@ int pgpPubkeyFingerprint(const uint8_t * pkt, size_t pktlen, pgpKeyID_t keyid)
     case 4:
       {        pgpPktKeyV4 v = (pgpPktKeyV4) (h);
        uint8_t * d = NULL;
+       uint8_t in[3];
        size_t dlen;
        int i;
 
@@ -1113,7 +1114,12 @@ int pgpPubkeyFingerprint(const uint8_t * pkt, size_t pktlen, pgpKeyID_t keyid)
        }
 
        ctx = rpmDigestInit(PGPHASHALGO_SHA1, RPMDIGEST_NONE);
-       (void) rpmDigestUpdate(ctx, pkt, (se-pkt));
+       i = se - h;
+       in[0] = 0x99;
+       in[1] = i >> 8;
+       in[2] = i;
+       (void) rpmDigestUpdate(ctx, in, 3);
+       (void) rpmDigestUpdate(ctx, h, i);
        (void) rpmDigestFinal(ctx, (void **)&d, &dlen, 0);
 
        if (d) {