# lib/signature.c File Reference

`#include "system.h"`
`#include "rpmio_internal.h"`
`#include <rpmlib.h>`
`#include <rpmmacro.h>`
`#include "md5.h"`
`#include "misc.h"`
`#include "rpmlead.h"`
`#include "signature.h"`
`#include "debug.h"`

Go to the source code of this file.

## Defines

#define | X(_x) (unsigned)((_x) & 0xff)

## Typedefs

typedef int(*) | md5func (const char *fn, byte *digest)

## Functions

int | rpmLookupSignatureType (int action)
| Return type of signature in effect for building.
const char * | rpmDetectPGPVersion (pgpVersion *pgpVer)
| Return path to pgp executable of given type, or NULL when not found.
static rpmRC | checkSize (FD_t fd, int siglen, int pad, int datalen)
| Check package size.
rpmRC | rpmReadSignature (FD_t fd, Header *headerp, sigType sig_type)
| Read (and verify header+archive size) signature header.
int | rpmWriteSignature (FD_t fd, Header h)
| Write signature header.
Header | rpmNewSignature (void)
| Return new, empty (signature) header instance.
Header | rpmFreeSignature (Header h)
| Destroy signature header from package.
static int | makePGPSignature (const char *file, void **sig, int_32 *size, const char *passPhrase)
static int | makeGPGSignature (const char *file, void **sig, int_32 *size, const char *passPhrase)
int | rpmAddSignature (Header h, const char *file, int_32 sigTag, const char *passPhrase)
| Generate a signature of data in file, insert in header.
static rpmVerifySignatureReturn | verifySizeSignature (const char *datafile, int_32 size, char *result)
static rpmVerifySignatureReturn | verifyMD5Signature (const char *datafile, const byte *sig, char *result, md5func fn)
static rpmVerifySignatureReturn | verifyPGPSignature (const char *datafile, const void *sig, int count, char *result)
static rpmVerifySignatureReturn | verifyGPGSignature (const char *datafile, const void *sig, int count, char *result)
static int | checkPassPhrase (const char *passPhrase, const int sigTag)
char * | rpmGetPassPhrase (const char *prompt, const int sigTag)
| Read a pass phrase from the user.
rpmVerifySignatureReturn | rpmVerifySignature (const char *file, int_32 sigTag, const void *sig, int count, char *result)
| Verify a signature from a package.

## Detailed Description

Definition in file signature.c.

## Define Documentation

#define X | ( | _x |  | ) | (unsigned)((_x) & 0xff)

Definition at line 504 of file signature.c.

Referenced by verifyMD5Signature().

## Typedef Documentation

typedef int(*) md5func(const char *fn,byte *digest)

Definition at line 33 of file signature.c.

## Function Documentation

static int checkPassPhrase | ( | const char * | passPhrase,
|  | const int | sigTag |
| ) |  |  | `[static]`

Definition at line 775 of file signature.c.

References _, dosetenv(), errno, PGP_2, PGP_5, PGP_NOTDETECTED, PGP_UNKNOWN, poptParseArgvString(), rpmDetectPGPVersion(), RPMERR_EXEC, RPMERR_SIGGEN, rpmError, rpmExpand(), rpmIsVerbose, RPMSIGTAG_GPG, RPMSIGTAG_PGP, RPMSIGTAG_PGP5, and strerror().

Referenced by rpmGetPassPhrase().

static rpmRC checkSize | ( | FD_t | fd,
|  | int | siglen,
|  | int | pad,
|  | int | datalen |
| ) |  |  | `[inline, static]`

Check package size.

Todo:
  rpmio: use fdSize rather than fstat(2) to get file size.

Parameters:

  | fd | package file handle
  | siglen | signature header size
  | pad | signature padding
  | datalen | length of header+payload

Returns:
  rpmRC return code

Definition at line 115 of file signature.c.

References _, Fileno(), RPMMESS_DEBUG, rpmMessage, RPMRC_BADSIZE, RPMRC_FAIL, and RPMRC_OK.

Referenced by rpmReadSignature().

static int makeGPGSignature | ( | const char * | file,
|  | void ** | sig,
|  | int_32 * | size,
|  | const char * | passPhrase |
| ) |  |  | `[static]`

Definition at line 357 of file signature.c.

References _, _free(), addMacro(), alloca(), delMacro(), dosetenv(), errno, Fclose(), Ferror(), Fopen(), poptParseArgvString(), RPMERR_EXEC, RPMERR_SIGGEN, rpmError, rpmExpand(), RPMMESS_DEBUG, rpmMessage, stpcpy(), strerror(), timedRead, and xmalloc().

Referenced by rpmAddSignature().

static int makePGPSignature | ( | const char * | file,
|  | void ** | sig,
|  | int_32 * | size,
|  | const char * | passPhrase |
| ) |  |  | `[static]`

Definition at line 245 of file signature.c.

References _, _free(), addMacro(), alloca(), delMacro(), dosetenv(), errno, Fclose(), Ferror(), Fopen(), PGP_2, PGP_5, PGP_NOTDETECTED, PGP_UNKNOWN, poptParseArgvString(), rpmDetectPGPVersion(), RPMERR_EXEC, RPMERR_SIGGEN, rpmError, rpmExpand(), RPMMESS_DEBUG, rpmMessage, stpcpy(), strerror(), timedRead, and xmalloc().

Referenced by rpmAddSignature().

static rpmVerifySignatureReturn verifyGPGSignature | ( | const char * | datafile,
|  | const void * | sig,
|  | int | count,
|  | char * | result |
| ) |  |  | `[static]`

Definition at line 685 of file signature.c.

References _, _free(), addMacro(), delMacro(), dosetenv(), errno, Fclose(), Ferror(), file, Fopen(), Fwrite(), makeTempFile(), poptParseArgvString(), RPMERR_EXEC, rpmError, rpmExpand(), rpmGetPath(), RPMSIG_BAD, RPMSIG_NOKEY, RPMSIG_OK, strerror(), and xstrncasecmp().

Referenced by rpmVerifySignature().

static rpmVerifySignatureReturn verifyMD5Signature | ( | const char * | datafile,
|  | const byte * | sig,
|  | char * | result,
|  | md5func | fn |
| ) |  |  | `[static]`

Definition at line 507 of file signature.c.

References RPMSIG_BAD, RPMSIG_OK, and X.

Referenced by rpmVerifySignature().

static rpmVerifySignatureReturn verifyPGPSignature | ( | const char * | datafile,
|  | const void * | sig,
|  | int | count,
|  | char * | result |
| ) |  |  | `[static]`

Definition at line 544 of file signature.c.

References _, _free(), addMacro(), delMacro(), dosetenv(), errno, Fclose(), Ferror(), file, Fopen(), Fwrite(), makeTempFile(), PGP_2, PGP_5, PGP_NOTDETECTED, PGP_UNKNOWN, poptParseArgvString(), rpmDetectPGPVersion(), RPMERR_EXEC, rpmError, rpmExpand(), rpmGetPath(), RPMSIG_BAD, RPMSIG_NOKEY, RPMSIG_NOTTRUSTED, RPMSIG_OK, and strerror().

Referenced by rpmVerifySignature().

static rpmVerifySignatureReturn verifySizeSignature | ( | const char * | datafile,
|  | int_32 | size,
|  | char * | result |
| ) |  |  | `[static]`

Definition at line 486 of file signature.c.

References RPMSIG_BAD, and RPMSIG_OK.

Referenced by rpmVerifySignature().