56 lines
1.9 KiB
Diff
56 lines
1.9 KiB
Diff
|
|
From 55849d2d6e16096dbd30fd3a5c751f13bb03484b Mon Sep 17 00:00:00 2001
|
||
|
|
From: Demi Marie Obenour <demi@invisiblethingslab.com>
|
||
|
|
Date: Sun, 27 Mar 2022 12:04:46 -0400
|
||
|
|
Subject: [PATCH] Add a hashed flag to pgpPrtSubtype()
|
||
|
|
|
||
|
|
This is needed for key usage flags parsing, as key usage flags outside
|
||
|
|
of the hashed region must be ignored. For now, just use it to
|
||
|
|
unconditionally ignore unhashed creation time subpackets.
|
||
|
|
---
|
||
|
|
rpmio/rpmpgp.c | 8 +++++---
|
||
|
|
1 file changed, 5 insertions(+), 3 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/rpmio/rpmpgp.c b/rpmio/rpmpgp.c
|
||
|
|
index 59c80d7..9b8503e 100644
|
||
|
|
--- a/rpmio/rpmpgp.c
|
||
|
|
+++ b/rpmio/rpmpgp.c
|
||
|
|
@@ -437,7 +437,7 @@ int pgpSignatureType(pgpDigParams _digp)
|
||
|
|
}
|
||
|
|
|
||
|
|
static int pgpPrtSubType(const uint8_t *h, size_t hlen, pgpSigType sigtype,
|
||
|
|
- pgpDigParams _digp)
|
||
|
|
+ pgpDigParams _digp, int hashed)
|
||
|
|
{
|
||
|
|
const uint8_t *p = h;
|
||
|
|
size_t plen = 0, i;
|
||
|
|
@@ -474,6 +474,8 @@ static int pgpPrtSubType(const uint8_t *h, size_t hlen, pgpSigType sigtype,
|
||
|
|
pgpPrtVal(" ", pgpKeyServerPrefsTbl, p[i]);
|
||
|
|
break;
|
||
|
|
case PGPSUBTYPE_SIG_CREATE_TIME: /* signature creation time */
|
||
|
|
+ if (!hashed)
|
||
|
|
+ break; /* RFC 4880 §5.2.3.4 creation time MUST be hashed */
|
||
|
|
if (plen-1 != sizeof(_digp->time))
|
||
|
|
break; /* other lengths not understood */
|
||
|
|
if (_digp->saved & PGPDIG_SIG_HAS_CREATION_TIME)
|
||
|
|
@@ -666,7 +668,7 @@ static int pgpPrtSig(pgpTag tag, const uint8_t *h, size_t hlen,
|
||
|
|
_digp->hashlen = sizeof(*v) + plen;
|
||
|
|
_digp->hash = memcpy(xmalloc(_digp->hashlen), v, _digp->hashlen);
|
||
|
|
}
|
||
|
|
- if (pgpPrtSubType(p, plen, v->sigtype, _digp))
|
||
|
|
+ if (pgpPrtSubType(p, plen, v->sigtype, _digp, 1))
|
||
|
|
return 1;
|
||
|
|
p += plen;
|
||
|
|
|
||
|
|
@@ -680,7 +682,7 @@ static int pgpPrtSig(pgpTag tag, const uint8_t *h, size_t hlen,
|
||
|
|
if ((p + plen) > hend)
|
||
|
|
return 1;
|
||
|
|
|
||
|
|
- if (pgpPrtSubType(p, plen, v->sigtype, _digp))
|
||
|
|
+ if (pgpPrtSubType(p, plen, v->sigtype, _digp, 0))
|
||
|
|
return 1;
|
||
|
|
p += plen;
|
||
|
|
|
||
|
|
--
|
||
|
|
1.8.3.1
|
||
|
|
|