sizetag = RPMSIGTAG_LONGSIZE;
payloadtag = RPMSIGTAG_LONGARCHIVESIZE;
}
- (void) rpmAddSignature(sig, sigtarget, sizetag, NULL);
- (void) rpmAddSignature(sig, sigtarget, RPMSIGTAG_MD5, NULL);
+ (void) rpmGenDigest(sig, sigtarget, sizetag);
+ (void) rpmGenDigest(sig, sigtarget, RPMSIGTAG_MD5);
if (SHA1) {
/* XXX can't use rpmtdFromFoo() on RPMSIGTAG_* items */
deleteSigs(sigh);
/*
- * rpmAddSignature() internals parse the actual signing result and
+ * rpmGenSignature() internals parse the actual signing result and
* use appropriate DSA/RSA tags regardless of what we pass from here.
* RPMSIGTAG_GPG is only used to signal its an actual signature
* and not just a digest we're adding, and says nothing
* about the actual tags that gets created.
*/
- if (rpmAddSignature(sigh, sigtarget, RPMSIGTAG_GPG, passPhrase) == 0) {
+ if (rpmGenSignature(sigh, sigtarget, RPMSIGTAG_GPG, passPhrase) == 0) {
/* Lets see what we got and whether its the same signature as before */
rpmSigTag sigtag = headerIsEntry(sigh, RPMSIGTAG_DSA) ?
RPMSIGTAG_DSA : RPMSIGTAG_RSA;
int nsigs = sizeof(sigs) / sizeof(rpmSigTag);
for (int i = 0; i < nsigs; i++) {
(void) headerDel(sigh, sigs[i]);
- if (rpmAddSignature(sigh, sigtarget, sigs[i], passPhrase))
+ if (rpmGenDigest(sigh, sigtarget, sigs[i]))
goto exit;
}
}
return ret;
}
+int rpmGenSignature(Header sigh, const char * file, rpmSigTag sigTag,
+ const char * passPhrase)
+{
+ uint8_t * pkt = NULL;
+ size_t pktlen;
+ int ret = -1; /* assume failure. */
+
+ switch (sigTag) {
+ case RPMSIGTAG_PGP5: /* XXX legacy */
+ case RPMSIGTAG_PGP:
+ case RPMSIGTAG_GPG: {
+ rpmSigTag hdrtag;
+ if (makeGPGSignature(file, &sigTag, &pkt, &pktlen, passPhrase)
+ || !sighdrPut(sigh, sigTag, RPM_BIN_TYPE, pkt, pktlen))
+ break;
+ /* XXX Piggyback a header-only DSA/RSA signature as well. */
+ hdrtag = (sigTag == RPMSIGTAG_GPG) ? RPMSIGTAG_DSA : RPMSIGTAG_RSA;
+ ret = makeHDRSignature(sigh, file, hdrtag, passPhrase);
+ } break;
+ case RPMSIGTAG_RSA:
+ case RPMSIGTAG_DSA:
+ ret = makeHDRSignature(sigh, file, sigTag, passPhrase);
+ break;
+ default:
+ break;
+ }
+ free(pkt);
+
+ return ret;
+}
+
static int makeHDRDigest(Header sigh, const char * file, rpmSigTag sigTag)
{
Header h = NULL;
return ret;
}
-int rpmAddSignature(Header sigh, const char * file, rpmSigTag sigTag,
- const char * passPhrase)
+int rpmGenDigest(Header sigh, const char * file, rpmSigTag sigTag)
{
struct stat st;
uint8_t * pkt = NULL;
break;
ret = 0;
break;
- case RPMSIGTAG_PGP5: /* XXX legacy */
- case RPMSIGTAG_PGP:
- case RPMSIGTAG_GPG: {
- rpmSigTag hdrtag;
- if (makeGPGSignature(file, &sigTag, &pkt, &pktlen, passPhrase)
- || !sighdrPut(sigh, sigTag, RPM_BIN_TYPE, pkt, pktlen))
- break;
- /* XXX Piggyback a header-only DSA/RSA signature as well. */
- hdrtag = (sigTag == RPMSIGTAG_GPG) ? RPMSIGTAG_DSA : RPMSIGTAG_RSA;
- ret = makeHDRSignature(sigh, file, hdrtag, passPhrase);
- } break;
- case RPMSIGTAG_RSA:
- case RPMSIGTAG_DSA:
- ret = makeHDRSignature(sigh, file, sigTag, passPhrase);
- break;
case RPMSIGTAG_SHA1:
ret = makeHDRDigest(sigh, file, sigTag);
break;
int rpmWriteSignature(FD_t fd, Header h);
/** \ingroup signature
+ * Generate digest(s) from a header+payload file, save in signature header.
+ * @param sigh signature header
+ * @param file header+payload file name
+ * @param sigTag type of digest(s) to add
+ * @return 0 on success, -1 on failure
+ */
+int rpmGenDigest(Header sigh, const char * file, rpmSigTag sigTag);
+
+/** \ingroup signature
* Generate signature(s) from a header+payload file, save in signature header.
* @param sigh signature header
* @param file header+payload file name
* @param passPhrase private key pass phrase
* @return 0 on success, -1 on failure
*/
-int rpmAddSignature(Header sigh, const char * file,
+int rpmGenSignature(Header sigh, const char * file,
rpmSigTag sigTag, const char * passPhrase);
/** \ingroup signature