summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPanu Matilainen <pmatilai@redhat.com>2016-11-22 09:34:12 +0200
committerPanu Matilainen <pmatilai@redhat.com>2016-11-22 10:19:24 +0200
commit8d83c4361f4a451ee7bc2869d77fde07eb3c8991 (patch)
tree9dc3b765c89c3ac97303368cc55dbd84f62c7292
parent0823ad375f639d9df2aa93c8a73e9bb74f0e7c94 (diff)
downloadrpm-8d83c4361f4a451ee7bc2869d77fde07eb3c8991.tar.gz
Refactor headerSigVerify() to take a hdrblob as argument
-rw-r--r--lib/package.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/lib/package.c b/lib/package.c
index 66588531b..b84e8e5c8 100644
--- a/lib/package.c
+++ b/lib/package.c
@@ -164,9 +164,7 @@ static void ei2td(const struct entryInfo_s *info,
* one, otherwisereturn RPMRC_NOTFOUND to signal for plain sanity check.
*/
static rpmRC headerSigVerify(rpmKeyring keyring, rpmVSFlags vsflags,
- int il, int dl, int ril, int rdl,
- entryInfo pe, unsigned char * dataStart,
- char **buf)
+ hdrblob blob, char **buf)
{
rpmRC rc = RPMRC_FAIL;
pgpDigParams sig = NULL;
@@ -178,25 +176,25 @@ static rpmRC headerSigVerify(rpmKeyring keyring, rpmVSFlags vsflags,
memset(&einfo, 0, sizeof(einfo));
/* Find a header-only digest/signature tag. */
- for (int i = ril; i < il; i++) {
- ei2h(pe+i, &einfo);
+ for (int i = blob->ril; i < blob->il; i++) {
+ ei2h(blob->pe+i, &einfo);
switch (einfo.tag) {
case RPMTAG_SHA1HEADER:
if (vsflags & RPMVSF_NOSHA1HEADER)
break;
if (sigtd.tag == 0)
- ei2td(&einfo, dataStart, 0, &sigtd);
+ ei2td(&einfo, blob->dataStart, 0, &sigtd);
break;
case RPMTAG_RSAHEADER:
if (vsflags & RPMVSF_NORSAHEADER)
break;
- ei2td(&einfo, dataStart, einfo.count, &sigtd);
+ ei2td(&einfo, blob->dataStart, einfo.count, &sigtd);
break;
case RPMTAG_DSAHEADER:
if (vsflags & RPMVSF_NODSAHEADER)
break;
- ei2td(&einfo, dataStart, einfo.count, &sigtd);
+ ei2td(&einfo, blob->dataStart, einfo.count, &sigtd);
break;
default:
break;
@@ -214,12 +212,12 @@ static rpmRC headerSigVerify(rpmKeyring keyring, rpmVSFlags vsflags,
if (sinfo.hashalgo) {
DIGEST_CTX ctx = rpmDigestInit(sinfo.hashalgo, RPMDIGEST_NONE);
- int32_t ildl[2] = { htonl(ril), htonl(rdl) };
+ int32_t ildl[2] = { htonl(blob->ril), htonl(blob->rdl) };
rpmDigestUpdate(ctx, rpm_header_magic, sizeof(rpm_header_magic));
rpmDigestUpdate(ctx, ildl, sizeof(ildl));
- rpmDigestUpdate(ctx, pe, (ril * sizeof(*pe)));
- rpmDigestUpdate(ctx, dataStart, rdl);
+ rpmDigestUpdate(ctx, blob->pe, (blob->ril * sizeof(*blob->pe)));
+ rpmDigestUpdate(ctx, blob->dataStart, blob->rdl);
rc = rpmVerifySignature(keyring, &sigtd, sig, ctx, buf);
@@ -240,11 +238,8 @@ static rpmRC headerVerify(rpmKeyring keyring, rpmVSFlags vsflags,
rpmRC rc = RPMRC_NOTFOUND; /* assume not found */
/* Verify header-only digest/signature if there is one we can use. */
- if (blob->il > blob->ril) {
- rc = headerSigVerify(keyring, vsflags,
- blob->il, blob->dl, blob->ril, blob->rdl,
- blob->pe, blob->dataStart, &buf);
- }
+ if (blob->il > blob->ril)
+ rc = headerSigVerify(keyring, vsflags, blob, &buf);
if (rc == RPMRC_NOTFOUND && buf == NULL) {
rasprintf(&buf, "Header sanity check: OK");