7 #include <netinet/in.h>
12 #define _RPMHKP_INTERNAL
24 #define alloca_strdup(_s) strcpy(alloca(strlen(_s)+1), (_s))
59 keyid =
pgpGrab(sigp->signid+4, 4);
103 if (hdrp) *hdrp =
NULL;
111 {
const char item[] =
"Lead";
128 {
const char item[] =
"Signature";
134 (msg && *msg ? msg :
_(
"read failed\n")));
149 #define _chk(_mask) (she->tag == 0 && !(vsflags & (_mask)))
189 {
const char item[] =
"Header";
201 if (opx > 0 && op !=
NULL) {
223 dig->pub =
_free(dig->pub);
231 dig->pub =
_free(dig->pub);
255 xx = rpmhkpLoadSignature(
NULL, dig, pp);
256 if (dig->signature.version != 3 && dig->signature.version != 4) {
258 _(
"skipping package %s with unverifiable V%u signature\n"),
259 fn, dig->signature.version);
266 unsigned char * hmagic =
NULL;
280 if (hmagic && nmagic > 0) {
282 dig->nbytes += nmagic;
293 xx = rpmhkpLoadSignature(
NULL, dig, pp);
294 if (dig->signature.version != 3 && dig->signature.version != 4) {
296 _(
"skipping package %s with unverifiable V%u signature\n"),
297 fn, dig->signature.version);
306 unsigned char * hmagic =
NULL;
320 if (hmagic && nmagic > 0) {
322 dig->nbytes += nmagic;
335 while ((count =
Fread(buf,
sizeof(buf[0]),
sizeof(
buf), fd)) > 0)
336 dig->nbytes +=
count;
365 rpmlog(lvl,
"%s: %s\n", fn, buf);
static void fdInitDigest(FD_t fd, pgpHashAlgo hashalgo, int _flags)
Attach digest to fd.
rpmop rpmtsOp(rpmts ts, rpmtsOpX opx)
Retrieve operation timestamp from a transaction set.
rpmlog(RPMLOG_ERR,"%s\n", buf)
rpmtime_t rpmswAdd(rpmop to, rpmop from)
Sum statistic counters.
int pgpPktLen(const rpmuint8_t *pkt, size_t pleft, pgpPkt pp)
static char *size_t nb
fgets(3) analogue that reads \ continuations.
struct rpmts_s * rpmts
The RPM Transaction Set.
pgpDig rpmtsDig(rpmts ts)
Get OpenPGP packet parameters, i.e.
rpmiob rpmiobFree(rpmiob iob)
Destroy a I/O buffer instance.
rpmtime_t rpmswSub(rpmop to, rpmop from)
Subtract statistic counters.
rpmiob rpmiobAppend(rpmiob iob, const char *s, size_t nl)
Append string to I/O buffer.
unsigned char rpmuint8_t
Private int typedefs to avoid C99 portability issues.
enum rpmRC_e rpmRC
RPM return codes.
memset(_r, 0, sizeof(*_r))
pgpVSFlags pgpDigVSFlags
Disabler bits(s) for signature/digest checking.
const char * Fstrerror(FD_t fd)
strerror(3) clone.
assert(key->size==sizeof(hdrNum))
enum pgpHashAlgo_e pgpHashAlgo
9.4.
enum rpmtsOpX_e rpmtsOpX
Indices for timestamps.
void * pgpStatsAccumulator(pgpDig dig, int opx)
Return pgpDig container accumulator structure.
int rpmDigestUpdate(DIGEST_CTX ctx, const void *data, size_t len)
Update context with next plain text buffer.
pgpDigParams pgpGetSignature(pgpDig dig)
Return OpenPGP signature parameters.
rpmRC rpmReadPackageFile(rpmts ts, FD_t fd, const char *fn, Header *hdrp)
Return package header from file handle, verifying digests/signatures.
The FD_t File Handle data structure.
Generate and verify rpm package signatures.
DIGEST_CTX rpmDigestInit(pgpHashAlgo hashalgo, rpmDigestFlags flags)
Initialize digest.
static void fdSetDig(FD_t fd, pgpDig dig)
size_t Fread(void *buf, size_t size, size_t nmemb, FD_t fd)
fread(3) clone.
static unsigned int nextkeyid
pgpVSFlags rpmVSFlags
Bit(s) to control digest and signature verification.
Cumulative statistics for an operation.
rpmiob rpmiobNew(size_t len)
Create an I/O buffer.
rpmuint32_t pgpGetSigtag(pgpDig dig)
Get signature tag.
Methods to handle package elements.
static void fdStealDigest(FD_t fd, pgpDig dig)
const void * pgpGetSig(pgpDig dig)
Get signature tag data, i.e.
Structures and prototypes used for an "rpmts" transaction set.
struct pgpDigParams_s * pgpDigParams
static void
Print copy of spec file, filling in Group/Description/Summary from specspo.
static unsigned int nkeyids
int pgpSetSig(pgpDig dig, rpmuint32_t sigtag, rpmuint32_t sigtype, const void *sig, rpmuint32_t siglen)
Set signature tag info, i.e.
char * buf
Parse (and execute) macro undefinition.
static rpmop fdstat_op(FD_t fd, fdOpX opx)
static unsigned int pgpGrab(const rpmuint8_t *s, size_t nbytes)
Return (native-endian) integer from big-endian representation.
static int pgpStashKeyid(pgpDig dig)
Remember current key id.
rpmRC rpmpkgRead(const char *fn, FD_t fd, void *ptr, const char **msg)
Read item from file descriptor.
static void * _free(const void *p)
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
pgpArmor pgpArmorUnwrap(rpmiob iob, rpmuint8_t **pkt, size_t *pktlen)
Parse armored OpenPGP packets from an iob.
rpmRC rpmVerifySignature(void *_dig, char *result)
Verify a signature from a package.
static unsigned int nkeyids_max
void rpmtsCleanDig(rpmts ts)
Free signature verification data.