Loading...
Searching...
No Matches
rpmpgp.h File Reference
OpenPGP API.
`#include <string.h>`
`#include <stdio.h>`
`#include <stdlib.h>`
`#include <rpm/rpmtypes.h>`
`#include <rpm/rpmstring.h>`
`#include <rpm/rpmcrypto.h>`
Include dependency graph for rpmpgp.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

## Classes

struct | pgpPktPubkey_s
struct | pgpPktSigV3_s
struct | pgpPktSigV4_s
union | pgpPktSig_u
struct | pgpPktSymkey_s
struct | pgpPktOnepass_s
struct | pgpPktKeyV3_s
struct | pgpPktKeyV4_s
union | pgpPktKey_u
struct | pgpPktCdata_s
struct | pgpPktEdata_s
struct | pgpPktLdata_s
struct | pgpPktTrust_s
struct | pgpPktUid_s
union | pgpPktPre_u

## Macros

#define | PGP_KEYID_LEN 8
#define | PGPARMOR_ERROR PGPARMOR_ERR_NO_BEGIN_PGP

## Typedefs

typedef struct pgpDigParams_s * | pgpDigParams
typedef uint8_t | pgpKeyID_t[PGP_KEYID_LEN]
typedef uint8_t | pgpTime_t[4]
typedef enum pgpTag_e | pgpTag
typedef struct pgpPktPubkey_s | pgpPktPubkey
typedef enum pgpSigType_e | pgpSigType
typedef enum pgpPubkeyAlgo_e | pgpPubkeyAlgo
typedef enum pgpSymkeyAlgo_e | pgpSymkeyAlgo
typedef enum pgpCompressAlgo_e | pgpCompressAlgo
typedef enum pgpHashAlgo_e | pgpHashAlgo
typedef enum pgpCurveId_e | pgpCurveId
typedef struct pgpPktSigV3_s * | pgpPktSigV3
typedef struct pgpPktSigV4_s * | pgpPktSigV4
typedef enum pgpSubType_e | pgpSubType
typedef union pgpPktSig_u * | pgpPktSig
typedef struct pgpPktSymkey_s | pgpPktSymkey
typedef struct pgpPktOnepass_s * | pgpPktOnepass
typedef struct pgpPktKeyV3_s * | pgpPktKeyV3
typedef struct pgpPktKeyV4_s * | pgpPktKeyV4
typedef union pgpPktKey_u | pgpPktKey
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 pgpValType_e | pgpValType

## 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
}

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
}

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 , PGPPUBKEYALGO_EDDSA = 22 }
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 }
enum | pgpCompressAlgo_e { PGPCOMPRESSALGO_NONE = 0 , PGPCOMPRESSALGO_ZIP = 1 , PGPCOMPRESSALGO_ZLIB = 2 , PGPCOMPRESSALGO_BZIP2 = 3 }
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 , PGPHASHALGO_SHA224 = 11 }
enum | pgpCurveId_e { PGPCURVE_NIST_P_256 = 1 , PGPCURVE_NIST_P_384 = 2 , PGPCURVE_NIST_P_521 = 3 , PGPCURVE_BRAINPOOL_P256R1 = 4 , PGPCURVE_BRAINPOOL_P512R1 = 5 , PGPCURVE_ED25519 = 6 , PGPCURVE_CURVE25519 = 7 }

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
}

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 , PGPARMOR_NONE = 0 ,
PGPARMOR_MESSAGE = 1 , PGPARMOR_PUBKEY = 2 , PGPARMOR_SIGNATURE = 3 , PGPARMOR_SIGNED_MESSAGE = 4 ,
PGPARMOR_FILE = 5 , PGPARMOR_PRIVKEY = 6 , PGPARMOR_SECKEY = 7
}

enum | pgpArmorKey_e { PGPARMORKEY_VERSION = 1 , PGPARMORKEY_COMMENT = 2 , PGPARMORKEY_MESSAGEID = 3 , PGPARMORKEY_HASH = 4 , PGPARMORKEY_CHARSET = 5 }
enum | pgpValType_e { PGPVAL_TAG = 1 , PGPVAL_ARMORBLOCK = 2 , PGPVAL_ARMORKEY = 3 , PGPVAL_SIGTYPE = 4 , PGPVAL_SUBTYPE = 5 , PGPVAL_PUBKEYALGO = 6 , PGPVAL_SYMKEYALGO = 7 , PGPVAL_COMPRESSALGO = 8 , PGPVAL_HASHALGO = 9 , PGPVAL_SERVERPREFS = 10 }

## Functions

const char * | pgpValString (pgpValType type, uint8_t val)
int | pgpPubkeyFingerprint (const uint8_t *pkt, size_t pktlen, uint8_t **fp, size_t *fplen)
int | pgpPubkeyKeyID (const uint8_t *pkt, size_t pktlen, pgpKeyID_t keyid)
int | pgpPrtParams (const uint8_t *pkts, size_t pktlen, unsigned int pkttype, pgpDigParams *ret)
int | pgpPrtParams2 (const uint8_t *pkts, size_t pktlen, unsigned int pkttype, pgpDigParams *ret, char **lints)
int | pgpPrtParamsSubkeys (const uint8_t *pkts, size_t pktlen, pgpDigParams mainkey, pgpDigParams **subkeys, int *subkeysCount)
pgpArmor | pgpReadPkts (const char *fn, uint8_t **pkt, size_t *pktlen)
pgpArmor | pgpParsePkts (const char *armor, uint8_t **pkt, size_t *pktlen)
int | pgpPubKeyCertLen (const uint8_t *pkts, size_t pktslen, size_t *certlen)
rpmRC | pgpPubKeyLint (const uint8_t *pkts, size_t pktslen, char **explanation)
char * | pgpArmorWrap (int atype, const unsigned char *s, size_t ns)
int | pgpDigParamsCmp (pgpDigParams p1, pgpDigParams p2)
unsigned int | pgpDigParamsAlgo (pgpDigParams digp, unsigned int algotype)
const uint8_t * | pgpDigParamsSignID (pgpDigParams digp)
const char * | pgpDigParamsUserID (pgpDigParams digp)
int | pgpDigParamsVersion (pgpDigParams digp)
uint32_t | pgpDigParamsCreationTime (pgpDigParams digp)
pgpDigParams | pgpDigParamsFree (pgpDigParams digp)
rpmRC | pgpVerifySignature (pgpDigParams key, pgpDigParams sig, DIGEST_CTX hashctx)
rpmRC | pgpVerifySignature2 (pgpDigParams key, pgpDigParams sig, DIGEST_CTX hashctx, char **lints)
int | pgpSignatureType (pgpDigParams sig)
char * | pgpIdentItem (pgpDigParams digp)

## 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.

EdDSA algorithm identifier value taken from https://datatracker.ietf.org/doc/draft-ietf-openpgp-rfc4880bis/ This value is used in gnupg since version 2.1.0

## Typedef Documentation

## pgpPktSymkey

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.