summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPanu Matilainen <pmatilai@redhat.com>2017-04-11 18:52:45 +0300
committerPanu Matilainen <pmatilai@redhat.com>2017-04-11 19:00:45 +0300
commitd4a4cf5cd7fa61afdb5d19c2374d7b7594890fc0 (patch)
treef8dfd6d47052bd08725717d53a09d503a6ff89ea
parent011cfeceab11da824de60e478b614a09883c23f1 (diff)
downloadrpm-d4a4cf5cd7fa61afdb5d19c2374d7b7594890fc0.tar.gz
Construct digest verification messages dynamically
-rw-r--r--lib/signature.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/lib/signature.c b/lib/signature.c
index 7660f0a2a..23574df72 100644
--- a/lib/signature.c
+++ b/lib/signature.c
@@ -377,13 +377,26 @@ static const char * rpmSigString(rpmRC res)
return str;
}
+static const char *rangeName(int range)
+{
+ switch (range) {
+ case RPMSIG_HEADER: return _("Header ");
+ case RPMSIG_PAYLOAD: return _("Payload ");
+ }
+ /* trad. output for (RPMSIG_HEADER|RPMSIG_PAYLOAD) range is "" */
+ return "";
+}
+
static rpmRC verifyDigest(struct rpmsinfo_s *sinfo, DIGEST_CTX digctx,
- const char *title, char **msg)
+ char **msg)
{
rpmRC res = RPMRC_FAIL; /* assume failure */
char * dig = NULL;
size_t diglen = 0;
DIGEST_CTX ctx = rpmDigestDup(digctx);
+ char *title = rstrscat(NULL, rangeName(sinfo->range),
+ pgpValString(PGPVAL_HASHALGO, sinfo->hashalgo),
+ _(" digest:"), NULL);
if (rpmDigestFinal(ctx, (void **)&dig, &diglen, 1) || diglen == 0) {
rasprintf(msg, "%s %s", title, rpmSigString(res));
@@ -400,6 +413,7 @@ static rpmRC verifyDigest(struct rpmsinfo_s *sinfo, DIGEST_CTX digctx,
exit:
free(dig);
+ free(title);
return res;
}
@@ -415,11 +429,10 @@ static rpmRC
verifySignature(rpmKeyring keyring, struct rpmsinfo_s *sinfo,
DIGEST_CTX hashctx, char **msg)
{
- int isHdr = (sinfo->range == RPMSIG_HEADER);
rpmRC res = rpmKeyringVerifySig(keyring, sinfo->sig, hashctx);
char *sigid = pgpIdentItem(sinfo->sig);
- rasprintf(msg, "%s%s: %s", isHdr ? _("Header ") : "", sigid,
+ rasprintf(msg, "%s%s: %s", rangeName(sinfo->range), sigid,
rpmSigString(res));
free(sigid);
return res;
@@ -437,16 +450,10 @@ rpmVerifySignature(rpmKeyring keyring, struct rpmsinfo_s *sinfo,
switch (sinfo->tag) {
case RPMSIGTAG_MD5:
- res = verifyDigest(sinfo, ctx, _("MD5 digest:"), &msg);
- break;
case RPMSIGTAG_SHA1:
- res = verifyDigest(sinfo, ctx, _("Header SHA1 digest:"), &msg);
- break;
case RPMSIGTAG_SHA256:
- res = verifyDigest(sinfo, ctx, _("Header SHA256 digest:"), &msg);
- break;
case RPMTAG_PAYLOADDIGEST:
- res = verifyDigest(sinfo, ctx, _("Payload SHA256 digest:"), &msg);
+ res = verifyDigest(sinfo, ctx, &msg);
break;
case RPMSIGTAG_RSA:
case RPMSIGTAG_DSA: