rpm 4.19.0
The RPM Package Manager
Loading...
Searching...
No Matches
Classes | Macros | Typedefs | Enumerations | Functions
rpmpgp.h File Reference
#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_spgpPktSigV3
 
typedef struct pgpPktSigV4_spgpPktSigV4
 
typedef enum pgpSubType_e pgpSubType
 
typedef union pgpPktSig_upgpPktSig
 
typedef struct pgpPktSymkey_s pgpPktSymkey
 
typedef struct pgpPktOnepass_spgpPktOnepass
 
typedef struct pgpPktKeyV3_spgpPktKeyV3
 
typedef struct pgpPktKeyV4_spgpPktKeyV4
 
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.