rpmpgp.h File Reference

OpenPGP constants and structures from RFC-2440. More...

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <rpm/rpmtypes.h>
#include <rpm/rpmstring.h>
Include dependency graph for rpmpgp.h:

Go to the source code of this file.

Data Structures

struct  pgpValTbl_s
struct  pgpPktPubkey_s
 5.1. More...
struct  pgpPktSigV3_s
 5.2.2. More...
struct  pgpPktSigV4_s
 5.2.3. More...
union  pgpPktSig_u
 5.2. More...
struct  pgpPktSymkey_s
 5.3. More...
struct  pgpPktOnepass_s
 5.4. More...
struct  pgpPktKeyV3_s
 5.5.1. More...
struct  pgpPktKeyV4_s
 The version 4 format is similar to the version 3 format except for the absence of a validity period. More...
union  pgpPktKey_u
 5.5.3. More...
struct  pgpPktCdata_s
struct  pgpPktEdata_s
struct  pgpPktLdata_s
struct  pgpPktTrust_s
struct  pgpPktUid_s
union  pgpPktPre_u

Defines

#define PGPARMOR_ERROR   PGPARMOR_ERR_NO_BEGIN_PGP

Typedefs

typedef struct DIGEST_CTX_s * DIGEST_CTX
typedef struct rpmDigestBundle_s * rpmDigestBundle
typedef struct pgpDig_s * pgpDig
typedef struct pgpDigParams_s * pgpDigParams
typedef uint8_t pgpKeyID_t [8]
typedef uint8_t pgpTime_t [4]
typedef struct pgpValTbl_spgpValTbl
typedef enum pgpTag_e pgpTag
 4.3.
typedef struct pgpPktPubkey_s pgpPktPubkey
 5.1.
typedef enum pgpSigType_e pgpSigType
 5.2.1.
typedef enum pgpPubkeyAlgo_e pgpPubkeyAlgo
 9.1.
typedef enum pgpSymkeyAlgo_e pgpSymkeyAlgo
 9.2.
typedef enum pgpCompressAlgo_e pgpCompressAlgo
 9.3.
typedef enum pgpHashAlgo_e pgpHashAlgo
 9.4.
typedef struct pgpPktSigV3_spgpPktSigV3
 5.2.2.
typedef struct pgpPktSigV4_spgpPktSigV4
 5.2.3.
typedef enum pgpSubType_e pgpSubType
 5.2.3.1.
typedef union pgpPktSig_upgpPktSig
 5.2.
typedef struct pgpPktSymkey_s pgpPktSymkey
 5.3.
typedef struct pgpPktOnepass_spgpPktOnepass
 5.4.
typedef struct pgpPktKeyV3_spgpPktKeyV3
 5.5.1.
typedef struct pgpPktKeyV4_spgpPktKeyV4
 The version 4 format is similar to the version 3 format except for the absence of a validity period.
typedef union pgpPktKey_u pgpPktKey
 5.5.3.
typedef struct pgpPktCdata_s pgpPktCdata
typedef struct pgpPktEdata_s pgpPktEdata
typedef struct pgpPktLdata_s pgpPktLdata
typedef struct pgpPktTrust_s pgpPktTrust
typedef struct pgpPktUid_s pgpPktUid
typedef enum pgpArmor_e pgpArmor
typedef enum pgpArmorKey_e pgpArmorKey
typedef enum rpmDigestFlags_e rpmDigestFlags
 Bit(s) to control digest operation.

Enumerations

enum  pgpTag_e {
  PGPTAG_RESERVED = 0, PGPTAG_PUBLIC_SESSION_KEY = 1, PGPTAG_SIGNATURE = 2, PGPTAG_SYMMETRIC_SESSION_KEY = 3,
  PGPTAG_ONEPASS_SIGNATURE = 4, PGPTAG_SECRET_KEY = 5, PGPTAG_PUBLIC_KEY = 6, PGPTAG_SECRET_SUBKEY = 7,
  PGPTAG_COMPRESSED_DATA = 8, PGPTAG_SYMMETRIC_DATA = 9, PGPTAG_MARKER = 10, PGPTAG_LITERAL_DATA = 11,
  PGPTAG_TRUST = 12, PGPTAG_USER_ID = 13, PGPTAG_PUBLIC_SUBKEY = 14, PGPTAG_COMMENT_OLD = 16,
  PGPTAG_PHOTOID = 17, PGPTAG_ENCRYPTED_MDC = 18, PGPTAG_MDC = 19, PGPTAG_PRIVATE_60 = 60,
  PGPTAG_COMMENT = 61, PGPTAG_PRIVATE_62 = 62, PGPTAG_CONTROL = 63
}
 

4.3.

More...
enum  pgpSigType_e {
  PGPSIGTYPE_BINARY = 0x00, PGPSIGTYPE_TEXT = 0x01, PGPSIGTYPE_STANDALONE = 0x02, PGPSIGTYPE_GENERIC_CERT = 0x10,
  PGPSIGTYPE_PERSONA_CERT = 0x11, PGPSIGTYPE_CASUAL_CERT = 0x12, PGPSIGTYPE_POSITIVE_CERT = 0x13, PGPSIGTYPE_SUBKEY_BINDING = 0x18,
  PGPSIGTYPE_SIGNED_KEY = 0x1F, PGPSIGTYPE_KEY_REVOKE = 0x20, PGPSIGTYPE_SUBKEY_REVOKE = 0x28, PGPSIGTYPE_CERT_REVOKE = 0x30,
  PGPSIGTYPE_TIMESTAMP = 0x40
}
 

5.2.1.

More...
enum  pgpPubkeyAlgo_e {
  PGPPUBKEYALGO_RSA = 1, PGPPUBKEYALGO_RSA_ENCRYPT = 2, PGPPUBKEYALGO_RSA_SIGN = 3, PGPPUBKEYALGO_ELGAMAL_ENCRYPT = 16,
  PGPPUBKEYALGO_DSA = 17, PGPPUBKEYALGO_EC = 18, PGPPUBKEYALGO_ECDSA = 19, PGPPUBKEYALGO_ELGAMAL = 20,
  PGPPUBKEYALGO_DH = 21
}
 

9.1.

More...
enum  pgpSymkeyAlgo_e {
  PGPSYMKEYALGO_PLAINTEXT = 0, PGPSYMKEYALGO_IDEA = 1, PGPSYMKEYALGO_TRIPLE_DES = 2, PGPSYMKEYALGO_CAST5 = 3,
  PGPSYMKEYALGO_BLOWFISH = 4, PGPSYMKEYALGO_SAFER = 5, PGPSYMKEYALGO_DES_SK = 6, PGPSYMKEYALGO_AES_128 = 7,
  PGPSYMKEYALGO_AES_192 = 8, PGPSYMKEYALGO_AES_256 = 9, PGPSYMKEYALGO_TWOFISH = 10, PGPSYMKEYALGO_NOENCRYPT = 110
}
 

9.2.

More...
enum  pgpCompressAlgo_e { PGPCOMPRESSALGO_NONE = 0, PGPCOMPRESSALGO_ZIP = 1, PGPCOMPRESSALGO_ZLIB = 2, PGPCOMPRESSALGO_BZIP2 = 3 }
 

9.3.

More...
enum  pgpHashAlgo_e {
  PGPHASHALGO_MD5 = 1, PGPHASHALGO_SHA1 = 2, PGPHASHALGO_RIPEMD160 = 3, PGPHASHALGO_MD2 = 5,
  PGPHASHALGO_TIGER192 = 6, PGPHASHALGO_HAVAL_5_160 = 7, PGPHASHALGO_SHA256 = 8, PGPHASHALGO_SHA384 = 9,
  PGPHASHALGO_SHA512 = 10
}
 

9.4.

More...
enum  pgpSubType_e {
  PGPSUBTYPE_NONE = 0, PGPSUBTYPE_SIG_CREATE_TIME = 2, PGPSUBTYPE_SIG_EXPIRE_TIME = 3, PGPSUBTYPE_EXPORTABLE_CERT = 4,
  PGPSUBTYPE_TRUST_SIG = 5, PGPSUBTYPE_REGEX = 6, PGPSUBTYPE_REVOCABLE = 7, PGPSUBTYPE_KEY_EXPIRE_TIME = 9,
  PGPSUBTYPE_ARR = 10, PGPSUBTYPE_PREFER_SYMKEY = 11, PGPSUBTYPE_REVOKE_KEY = 12, PGPSUBTYPE_ISSUER_KEYID = 16,
  PGPSUBTYPE_NOTATION = 20, PGPSUBTYPE_PREFER_HASH = 21, PGPSUBTYPE_PREFER_COMPRESS = 22, PGPSUBTYPE_KEYSERVER_PREFERS = 23,
  PGPSUBTYPE_PREFER_KEYSERVER = 24, PGPSUBTYPE_PRIMARY_USERID = 25, PGPSUBTYPE_POLICY_URL = 26, PGPSUBTYPE_KEY_FLAGS = 27,
  PGPSUBTYPE_SIGNER_USERID = 28, PGPSUBTYPE_REVOKE_REASON = 29, PGPSUBTYPE_FEATURES = 30, PGPSUBTYPE_EMBEDDED_SIG = 32,
  PGPSUBTYPE_INTERNAL_100 = 100, PGPSUBTYPE_INTERNAL_101 = 101, PGPSUBTYPE_INTERNAL_102 = 102, PGPSUBTYPE_INTERNAL_103 = 103,
  PGPSUBTYPE_INTERNAL_104 = 104, PGPSUBTYPE_INTERNAL_105 = 105, PGPSUBTYPE_INTERNAL_106 = 106, PGPSUBTYPE_INTERNAL_107 = 107,
  PGPSUBTYPE_INTERNAL_108 = 108, PGPSUBTYPE_INTERNAL_109 = 109, PGPSUBTYPE_INTERNAL_110 = 110, PGPSUBTYPE_CRITICAL = 128
}
 

5.2.3.1.

More...
enum  pgpArmor_e {
  PGPARMOR_ERR_CRC_CHECK = -7, PGPARMOR_ERR_BODY_DECODE = -6, PGPARMOR_ERR_CRC_DECODE = -5, PGPARMOR_ERR_NO_END_PGP = -4,
  PGPARMOR_ERR_UNKNOWN_PREAMBLE_TAG = -3, PGPARMOR_ERR_UNKNOWN_ARMOR_TYPE = -2, PGPARMOR_ERR_NO_BEGIN_PGP = -1
}
enum  pgpArmorKey_e {
  PGPARMORKEY_VERSION = 1, PGPARMORKEY_COMMENT = 2, PGPARMORKEY_MESSAGEID = 3, PGPARMORKEY_HASH = 4,
  PGPARMORKEY_CHARSET = 5
}
enum  rpmDigestFlags_e { RPMDIGEST_NONE = 0 }
 

Bit(s) to control digest operation.

More...

Functions

static unsigned int pgpGrab (const uint8_t *s, size_t nbytes)
 Return (native-endian) integer from big-endian representation.
static size_t pgpLen (const uint8_t *s, size_t *lenp)
 Return length of an OpenPGP packet.
char * pgpHexStr (const uint8_t *p, size_t plen)
 Return hex formatted representation of bytes.
int pgpPubkeyFingerprint (const uint8_t *pkt, size_t pktlen, pgpKeyID_t keyid)
 Calculate OpenPGP public key fingerprint.
int pgpExtractPubkeyFingerprint (const char *b64pkt, pgpKeyID_t keyid)
 Extract OpenPGP public key fingerprint from base64 encoded packet.
int pgpPrtPkts (const uint8_t *pkts, size_t pktlen, pgpDig dig, int printing)
 Print/parse a OpenPGP packet(s).
pgpArmor pgpReadPkts (const char *fn, uint8_t **pkt, size_t *pktlen)
 Parse armored OpenPGP packets from a file.
pgpArmor pgpParsePkts (const char *armor, uint8_t **pkt, size_t *pktlen)
 Parse armored OpenPGP packets from memory.
char * pgpArmorWrap (int atype, const unsigned char *s, size_t ns)
 Wrap a OpenPGP packets in ascii armor for transport.
pgpDig pgpNewDig (void)
 Create a container for parsed OpenPGP packet(s).
void pgpCleanDig (pgpDig dig)
 Release (malloc'd) data from container.
pgpDig pgpFreeDig (pgpDig dig)
 Destroy a container for parsed OpenPGP packet(s).
rpmRC pgpVerifySig (pgpDig dig, DIGEST_CTX hashctx)
 Verify a PGP signature.
char * pgpIdentItem (pgpDigParams digp)
 Return a string identification of a PGP signature/pubkey.
int rpmInitCrypto (void)
 Perform cryptography initialization.
int rpmFreeCrypto (void)
 Shutdown cryptography.
DIGEST_CTX rpmDigestDup (DIGEST_CTX octx)
 Duplicate a digest context.
size_t rpmDigestLength (pgpHashAlgo hashalgo)
 Obtain digest length in bytes.
DIGEST_CTX rpmDigestInit (pgpHashAlgo hashalgo, rpmDigestFlags flags)
 Initialize digest.
int rpmDigestUpdate (DIGEST_CTX ctx, const void *data, size_t len)
 Update context with next plain text buffer.
int rpmDigestFinal (DIGEST_CTX ctx, void **datap, size_t *lenp, int asAscii)
 Return digest and destroy context.
rpmDigestBundle rpmDigestBundleNew (void)
 Create a new digest bundle.
rpmDigestBundle rpmDigestBundleFree (rpmDigestBundle bundle)
 Free a digest bundle and all contained digest contexts.
int rpmDigestBundleAdd (rpmDigestBundle bundle, pgpHashAlgo algo, rpmDigestFlags flags)
 Add a new type of digest to a bundle.
int rpmDigestBundleUpdate (rpmDigestBundle bundle, const void *data, size_t len)
 Update contexts within bundle with next plain text buffer.
int rpmDigestBundleFinal (rpmDigestBundle bundle, pgpHashAlgo algo, void **datap, size_t *lenp, int asAscii)
 Return digest from a bundle and destroy context, see rpmDigestFinal().
DIGEST_CTX rpmDigestBundleDupCtx (rpmDigestBundle bundle, pgpHashAlgo algo)
 Duplicate a digest context from a bundle.

Detailed Description

OpenPGP constants and structures from RFC-2440.

Text from RFC-2440 in comments is Copyright (C) The Internet Society (1998). All Rights Reserved.

Definition in file rpmpgp.h.


Define Documentation

#define PGPARMOR_ERROR   PGPARMOR_ERR_NO_BEGIN_PGP

Definition at line 902 of file rpmpgp.h.


Typedef Documentation

typedef uint8_t pgpKeyID_t[8]

Definition at line 36 of file rpmpgp.h.

typedef struct pgpPktCdata_s pgpPktCdata
typedef struct pgpPktEdata_s pgpPktEdata
typedef struct pgpPktLdata_s pgpPktLdata
typedef struct pgpPktSymkey_s pgpPktSymkey

5.3.

Symmetric-Key Encrypted Session-Key Packets (Tag 3)

The Symmetric-Key Encrypted Session Key packet holds the symmetric- key encryption of a session key used to encrypt a message. Zero or more Encrypted Session Key packets and/or Symmetric-Key Encrypted Session Key packets may precede a Symmetrically Encrypted Data Packet that holds an encrypted message. The message is encrypted with a session key, and the session key is itself encrypted and stored in the Encrypted Session Key packet or the Symmetric-Key Encrypted Session Key packet.

If the Symmetrically Encrypted Data Packet is preceded by one or more Symmetric-Key Encrypted Session Key packets, each specifies a passphrase that may be used to decrypt the message. This allows a message to be encrypted to a number of public keys, and also to one or more pass phrases. This packet type is new, and is not generated by PGP 2.x or PGP 5.0.

The body of this packet consists of:

  • A one-octet version number. The only currently defined version is 4.
  • A one-octet number describing the symmetric algorithm used.
  • A string-to-key (S2K) specifier, length as defined above.
  • Optionally, the encrypted session key itself, which is decrypted with the string-to-key object.
typedef struct pgpPktTrust_s pgpPktTrust
typedef struct pgpPktUid_s pgpPktUid
typedef uint8_t pgpTime_t[4]

Definition at line 37 of file rpmpgp.h.

typedef struct rpmDigestBundle_s* rpmDigestBundle

Definition at line 26 of file rpmpgp.h.


Generated on 8 Jan 2010 for rpm by  doxygen 1.6.1