rpm  4.5
Functions | Variables
signature.c File Reference
#include "system.h"
#include "rpmio_internal.h"
#include <rpmlib.h>
#include <rpmmacro.h>
#include "rpmdb.h"
#include "rpmts.h"
#include "misc.h"
#include "legacy.h"
#include "rpmlead.h"
#include "signature.h"
#include "header_internal.h"
#include "debug.h"
Include dependency graph for signature.c:

Go to the source code of this file.

Functions

int rpmLookupSignatureType (int action)
 Return type of signature needed for signing/building. More...
 
const char * rpmDetectPGPVersion (pgpVersion *pgpVer)
 Return path to pgp executable of given type, or NULL when not found. More...
 
static rpmRC printSize (FD_t fd, int siglen, int pad, size_t datalen)
 Print package size. More...
 
rpmRC rpmReadSignature (FD_t fd, Header *sighp, sigType sig_type, const char **msg)
 Read (and verify header+payload size) signature header. More...
 
int rpmWriteSignature (FD_t fd, Header sigh)
 Write signature header. More...
 
Header rpmNewSignature (void)
 Return new, empty (signature) header instance. More...
 
Header rpmFreeSignature (Header sigh)
 Destroy signature header from package. More...
 
static int makePGPSignature (const char *file, int_32 *sigTagp, byte **pktp, int_32 *pktlenp, const char *passPhrase)
 Generate PGP signature(s) for a header+payload file. More...
 
static int makeGPGSignature (const char *file, int_32 *sigTagp, byte **pktp, int_32 *pktlenp, const char *passPhrase)
 Generate GPG signature(s) for a header+payload file. More...
 
static int makeHDRSignature (Header sigh, const char *file, int_32 sigTag, const char *passPhrase)
 Generate header only signature(s) from a header+payload file. More...
 
int rpmAddSignature (Header sigh, const char *file, int_32 sigTag, const char *passPhrase)
 Generate signature(s) from a header+payload file, save in signature header. More...
 
static int checkPassPhrase (const char *passPhrase, const int sigTag)
 
char * rpmGetPassPhrase (const char *prompt, const int sigTag)
 Read a pass phrase using getpass(3), confirm with gpg/pgp helper binaries. More...
 
static const char * rpmSigString (rpmRC res)
 
static rpmRC verifySizeSignature (const rpmts ts, char *t)
 
static rpmRC verifyMD5Signature (const rpmts ts, char *t, DIGEST_CTX md5ctx)
 
static rpmRC verifySHA1Signature (const rpmts ts, char *t, DIGEST_CTX sha1ctx)
 Verify header immutable region SHA1 digest. More...
 
static unsigned char nibble (char c)
 Convert hex to binary nibble. More...
 
static rpmRC verifyRSASignature (rpmts ts, char *t, DIGEST_CTX md5ctx)
 Verify RSA signature. More...
 
static rpmRC verifyDSASignature (rpmts ts, char *t, DIGEST_CTX sha1ctx)
 Verify DSA signature. More...
 
rpmRC rpmVerifySignature (const rpmts ts, char *result)
 Verify a signature from a package. More...
 

Variables

static unsigned char header_magic [8]
 

Function Documentation

static int checkPassPhrase ( const char *  passPhrase,
const int  sigTag 
)
static
static int makeGPGSignature ( const char *  file,
int_32 sigTagp,
byte **  pktp,
int_32 pktlenp,
const char *  passPhrase 
)
static

Generate GPG signature(s) for a header+payload file.

Parameters
fileheader+payload file name
Return values
*sigTagpsignature tag
*pktpsignature packet(s)
*pktlenpsignature packet(s) length
Parameters
passPhraseprivate key pass phrase
Returns
0 on success, 1 on failure

Definition at line 545 of file signature.c.

References _, _free(), addMacro(), alloca(), D_, delMacro(), dosetenv(), errno, Fclose(), Ferror(), Fopen(), pgpFreeDig(), pgpNewDig(), pgpPrtPkts(), PGPPUBKEYALGO_DSA, PGPPUBKEYALGO_RSA, pgpDigParams_s::pubkey_algo, RPMERR_EXEC, RPMERR_SIGGEN, rpmError, rpmExpand(), RPMMESS_DEBUG, rpmMessage, RPMSIGTAG_DSA, RPMSIGTAG_GPG, RPMSIGTAG_MD5, RPMSIGTAG_PGP, RPMSIGTAG_PGP5, RPMSIGTAG_RSA, RPMSIGTAG_SHA1, RPMSIGTAG_SIZE, pgpDig_s::signature, stpcpy(), timedRead(), unsetenv(), and xmalloc().

Referenced by makeHDRSignature(), and rpmAddSignature().

static int makeHDRSignature ( Header  sigh,
const char *  file,
int_32  sigTag,
const char *  passPhrase 
)
static

Generate header only signature(s) from a header+payload file.

Parameters
sighsignature header
fileheader+payload file name
sigTagtype of signature(s) to add
passPhraseprivate key pass phrase
Returns
0 on success, -1 on failure

Definition at line 696 of file signature.c.

References _free(), Fclose(), Ferror(), Fopen(), header_magic, HEADER_MAGIC_YES, headerAddEntry(), headerFree(), headerFreeData(), headerGetEntry(), headerIsEntry(), headerRead(), headerWrite(), makeGPGSignature(), makePGPSignature(), makeTempFile(), PGPHASHALGO_SHA1, RPM_BIN_TYPE, RPM_STRING_TYPE, RPMDIGEST_NONE, rpmDigestFinal(), rpmDigestInit(), rpmDigestUpdate(), RPMSIGTAG_DSA, RPMSIGTAG_GPG, RPMSIGTAG_MD5, RPMSIGTAG_PGP, RPMSIGTAG_PGP5, RPMSIGTAG_RSA, RPMSIGTAG_SHA1, RPMSIGTAG_SIZE, and RPMTAG_HEADERIMMUTABLE.

Referenced by rpmAddSignature().

static int makePGPSignature ( const char *  file,
int_32 sigTagp,
byte **  pktp,
int_32 pktlenp,
const char *  passPhrase 
)
static

Generate PGP signature(s) for a header+payload file.

Parameters
fileheader+payload file name
Return values
*sigTagpsignature tag
*pktpsignature packet(s)
*pktlenpsignature packet(s) length
Parameters
passPhraseprivate key pass phrase
Returns
0 on success, 1 on failure

Definition at line 395 of file signature.c.

References _, _free(), addMacro(), alloca(), D_, delMacro(), dosetenv(), errno, Fclose(), Ferror(), Fopen(), PGP_2, PGP_5, PGP_NOTDETECTED, PGP_UNKNOWN, pgpFreeDig(), pgpNewDig(), pgpPrtPkts(), rpmDetectPGPVersion(), RPMERR_EXEC, RPMERR_SIGGEN, rpmError, rpmExpand(), RPMMESS_DEBUG, rpmMessage, pgpDig_s::signature, stpcpy(), timedRead(), unsetenv(), and xmalloc().

Referenced by makeHDRSignature(), and rpmAddSignature().

static unsigned char nibble ( char  c)
inlinestatic

Convert hex to binary nibble.

Parameters
chex character
Returns
binary nibble

Definition at line 1180 of file signature.c.

Referenced by verifyRSASignature().

static rpmRC printSize ( FD_t  fd,
int  siglen,
int  pad,
size_t  datalen 
)
inlinestatic

Print package size.

Todo:
rpmio: use fdSize rather than fstat(2) to get file size.
Parameters
fdpackage file handle
siglensignature header size
padsignature padding
datalenlength of header+payload
Returns
rpmRC return code

Definition at line 118 of file signature.c.

References D_, Fileno(), RPMMESS_DEBUG, rpmMessage, RPMRC_FAIL, and RPMRC_OK.

Referenced by rpmReadSignature().

static const char* rpmSigString ( rpmRC  res)
static
static rpmRC verifyDSASignature ( rpmts  ts,
char *  t,
DIGEST_CTX  sha1ctx 
)
static
static rpmRC verifyMD5Signature ( const rpmts  ts,
char *  t,
DIGEST_CTX  md5ctx 
)
static
static rpmRC verifyRSASignature ( rpmts  ts,
char *  t,
DIGEST_CTX  md5ctx 
)
static
static rpmRC verifySHA1Signature ( const rpmts  ts,
char *  t,
DIGEST_CTX  sha1ctx 
)
static

Verify header immutable region SHA1 digest.

Parameters
tstransaction set
Return values
tverbose success/failure text
Parameters
sha1ctx
Returns
RPMRC_OK on success

Definition at line 1127 of file signature.c.

References _, _free(), rpmDigestDup(), rpmDigestFinal(), RPMRC_FAIL, RPMRC_NOKEY, RPMRC_OK, rpmSigString(), rpmswEnter(), rpmswExit(), RPMTS_OP_DIGEST, rpmtsDig(), rpmtsOp(), rpmtsSig(), rpmtsSiglen(), and stpcpy().

Referenced by rpmVerifySignature().

static rpmRC verifySizeSignature ( const rpmts  ts,
char *  t 
)
static

Variable Documentation

unsigned char header_magic[8]
static
Initial value:
= {
0x8e, 0xad, 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00
}

Definition at line 150 of file signature.c.

Referenced by makeHDRSignature(), and rpmReadSignature().