|
|
657fb1 |
From e6d91a00f0782f7551552d851f38c9ef188f7308 Mon Sep 17 00:00:00 2001
|
|
|
657fb1 |
From: Panu Matilainen <pmatilai@redhat.com>
|
|
|
657fb1 |
Date: Tue, 10 Oct 2017 15:04:38 +0300
|
|
|
657fb1 |
Subject: [PATCH 09/33] Eliminate redundant signature length calculation
|
|
|
657fb1 |
function
|
|
|
657fb1 |
|
|
|
657fb1 |
The actual signing function knows the length already, we just need to
|
|
|
657fb1 |
return it and then we can insert it if there was anything at all
|
|
|
657fb1 |
to sign.
|
|
|
657fb1 |
---
|
|
|
657fb1 |
sign/rpmsignfiles.c | 40 ++++++++++++++--------------------------
|
|
|
657fb1 |
1 file changed, 14 insertions(+), 26 deletions(-)
|
|
|
657fb1 |
|
|
|
657fb1 |
diff --git a/sign/rpmsignfiles.c b/sign/rpmsignfiles.c
|
|
|
657fb1 |
index de7a73cfd..9fe6e6d41 100644
|
|
|
657fb1 |
--- a/sign/rpmsignfiles.c
|
|
|
657fb1 |
+++ b/sign/rpmsignfiles.c
|
|
|
657fb1 |
@@ -33,7 +33,7 @@ static const char *hash_algo_name[] = {
|
|
|
657fb1 |
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
|
|
|
657fb1 |
|
|
|
657fb1 |
static char *signFile(const char *algo, const uint8_t *fdigest, int diglen,
|
|
|
657fb1 |
-const char *key, char *keypass)
|
|
|
657fb1 |
+const char *key, char *keypass, uint32_t *siglenp)
|
|
|
657fb1 |
{
|
|
|
657fb1 |
char *fsignature;
|
|
|
657fb1 |
unsigned char digest[diglen];
|
|
|
657fb1 |
@@ -56,32 +56,18 @@ const char *key, char *keypass)
|
|
|
657fb1 |
return NULL;
|
|
|
657fb1 |
}
|
|
|
657fb1 |
|
|
|
657fb1 |
+ *siglenp = siglen + 1;
|
|
|
657fb1 |
/* convert file signature binary to hex */
|
|
|
657fb1 |
fsignature = pgpHexStr(signature, siglen+1);
|
|
|
657fb1 |
return fsignature;
|
|
|
657fb1 |
}
|
|
|
657fb1 |
|
|
|
657fb1 |
-static uint32_t signatureLength(const char *algo, int diglen, const char *key,
|
|
|
657fb1 |
-char *keypass)
|
|
|
657fb1 |
-{
|
|
|
657fb1 |
- unsigned char digest[diglen];
|
|
|
657fb1 |
- unsigned char signature[MAX_SIGNATURE_LENGTH];
|
|
|
657fb1 |
-
|
|
|
657fb1 |
- memset(digest, 0, diglen);
|
|
|
657fb1 |
- memset(signature, 0, MAX_SIGNATURE_LENGTH);
|
|
|
657fb1 |
- signature[0] = '\x03';
|
|
|
657fb1 |
-
|
|
|
657fb1 |
- uint32_t siglen = sign_hash(algo, digest, diglen, key, keypass,
|
|
|
657fb1 |
- signature+1);
|
|
|
657fb1 |
- return siglen + 1;
|
|
|
657fb1 |
-}
|
|
|
657fb1 |
-
|
|
|
657fb1 |
rpmRC rpmSignFiles(Header sigh, Header h, const char *key, char *keypass)
|
|
|
657fb1 |
{
|
|
|
657fb1 |
struct rpmtd_s td;
|
|
|
657fb1 |
int algo;
|
|
|
657fb1 |
int diglen;
|
|
|
657fb1 |
- uint32_t siglen;
|
|
|
657fb1 |
+ uint32_t siglen = 0;
|
|
|
657fb1 |
const char *algoname;
|
|
|
657fb1 |
const uint8_t *digest;
|
|
|
657fb1 |
char *signature = NULL;
|
|
|
657fb1 |
@@ -108,14 +94,6 @@ rpmRC rpmSignFiles(Header sigh, Header h, const char *key, char *keypass)
|
|
|
657fb1 |
|
|
|
657fb1 |
headerDel(sigh, RPMTAG_FILESIGNATURELENGTH);
|
|
|
657fb1 |
headerDel(sigh, RPMTAG_FILESIGNATURES);
|
|
|
657fb1 |
- siglen = signatureLength(algoname, diglen, key, keypass);
|
|
|
657fb1 |
-
|
|
|
657fb1 |
- rpmtdReset(&td);
|
|
|
657fb1 |
- td.tag = RPMSIGTAG_FILESIGNATURELENGTH;
|
|
|
657fb1 |
- td.type = RPM_INT32_TYPE;
|
|
|
657fb1 |
- td.data = &siglen;
|
|
|
657fb1 |
- td.count = 1;
|
|
|
657fb1 |
- headerPut(sigh, &td, HEADERPUT_DEFAULT);
|
|
|
657fb1 |
|
|
|
657fb1 |
rpmtdReset(&td);
|
|
|
657fb1 |
td.tag = RPMSIGTAG_FILESIGNATURES;
|
|
|
657fb1 |
@@ -125,7 +103,7 @@ rpmRC rpmSignFiles(Header sigh, Header h, const char *key, char *keypass)
|
|
|
657fb1 |
|
|
|
657fb1 |
while (rpmfiNext(fi) >= 0) {
|
|
|
657fb1 |
digest = rpmfiFDigest(fi, NULL, NULL);
|
|
|
657fb1 |
- signature = signFile(algoname, digest, diglen, key, keypass);
|
|
|
657fb1 |
+ signature = signFile(algoname, digest, diglen, key, keypass, &siglen);
|
|
|
657fb1 |
if (!signature) {
|
|
|
657fb1 |
rpmlog(RPMLOG_ERR, _("signFile failed\n"));
|
|
|
657fb1 |
goto exit;
|
|
|
657fb1 |
@@ -137,6 +115,16 @@ rpmRC rpmSignFiles(Header sigh, Header h, const char *key, char *keypass)
|
|
|
657fb1 |
}
|
|
|
657fb1 |
signature = _free(signature);
|
|
|
657fb1 |
}
|
|
|
657fb1 |
+
|
|
|
657fb1 |
+ if (siglen > 0) {
|
|
|
657fb1 |
+ rpmtdReset(&td);
|
|
|
657fb1 |
+ td.tag = RPMSIGTAG_FILESIGNATURELENGTH;
|
|
|
657fb1 |
+ td.type = RPM_INT32_TYPE;
|
|
|
657fb1 |
+ td.data = &siglen;
|
|
|
657fb1 |
+ td.count = 1;
|
|
|
657fb1 |
+ headerPut(sigh, &td, HEADERPUT_DEFAULT);
|
|
|
657fb1 |
+ }
|
|
|
657fb1 |
+
|
|
|
657fb1 |
rc = RPMRC_OK;
|
|
|
657fb1 |
|
|
|
657fb1 |
exit:
|
|
|
657fb1 |
--
|
|
|
657fb1 |
2.13.5
|
|
|
657fb1 |
|