OpenPGP Implementation Progress

OpenPGP RFCs

PGPy is focused on eventually reaching complete OpenPGP implementation, adhering to the base OpenPGP message format specification, and its extension RFCs.

RFC 4880

PGPy is currently focused on achieving RFC 4880 compliance for OpenPGP, which is the latest complete OpenPGP Message Format specification. It supersedes RFC 1991 and RFC 2440.

Tag 18

Symmetrically Encrypted and Integrity Protected Data Packet

Tag 1

Public-Key Encrypted Session Key Packets

Tag 2

Signature Packet

Tag 4

One-Pass Signature Packet

Tag 5

Secret-Key Packet

Tag 6

Public-Key Packet

Tag 7

Secret-Subkey Packet

Tag 14

Public-SubKey Packet

Tag 2

Signature Packet

Tag 3

Symmetric-Key Encrypted Session Key Packet

Tag 5

Secret-Key Packet

Tag 6

Public-Key Packet

Tag 7

Secret-Subkey Packet

Tag 14

Public-SubKey Packet

Tag 8

Compressed Data Packet

Tag 9

Symmetrically Encrypted Data Packet

Tag 10

Marker Packet

Tag 11

Literal Data Packet

Tag 12

Trust Packet

Tag 13

User ID Packet

Tag 17

User Attribute Packet

Tag 19

Modification Detection Code Packet

0x02

Signature Creation Time

0x03

Signature Expiration Time

0x04

Exportable Certification

0x05

Trust Signature

0x06

Regular Expression

0x07

Revocable

0x09

Key Expiration Time

0x0B

Preferred Symmetric Algorithms

0x0C

Revocation Key

0x10

Issuer

0x14

Notation Data

0x15

Preferred Hash Algorithms

0x16

Preferred Compression Algorithms

0x17

Key Server Preferences

0x18

Preferred Key Server

0x19

Primary User ID

0x1A

Policy URI

0x1B

Key Flags

0x1C

Signer’s User ID

0x1D

Reason For Revocation

0x1E

Features

0x1F

Signature Target

0x20

Embedded Signature

0x01

Image

ASCII

ASCII armored PGP blocks

binary

binary PGP packets

GPG

GPG <= 2.0.x keyrings

KBX

GPG >= 2.1.x keyboxes

Retrieve

Retrieve from HKP key servers

Upload

Submit to HKP key servers

RSA

RSA

DSA

DSA

ElGamal

ElGamal

Protect

Protect private keys encryped with CAST5

Protect

Protect private keys encryped with Blowfish

Protect

Protect private keys encryped with AES

Protect

Protect private keys encryped with Twofish

Unprotect

Unprotect private keys encrypted with IDEA [1]

Unprotect

Unprotect private keys encrypted with Triple-DES

Unprotect

Unprotect private keys encrypted with CAST5

Unprotect

Unprotect private keys encrypted with Blowfish

Unprotect

Unprotect private keys encrypted with AES

Unprotect

Unprotect private keys encrypted with Twofish

Load

Load Keys

Generate

Generate Keys

Generate

Generate Subkeys

Sign

Generate detached signatures of binary documents

Sign

Generate inline signatures of canonical documents

Sign

Sign messages

Sign

Sign keys

Sign

Certify User IDs

Sign

Certify User Attributes

Sign

Generate key binding signatures

Sign

Revoke certifications

Sign

Revoke keys

Sign

Revoke subkeys

Sign

Generate timestamp signatures

Sign

Generate standalone signatures

Sign

Generate third party confirmation signatures

Verify

Verify detached signatures

Verify

Verify inline signatures of canonical documents

Verify

Verify messages

Verify

Verify key signatures

Verify

Verify User ID certification signatures

Verify

Verify User Attribute certification signatures

Verify

Verify key binding signatures

Verify

Verify key revocation signatures

Verify

Verify subkey revocation signatures

Verify

Verify certification revocation signatures

Verify

Verify timestamp signatures

Verify

Verify standalone signatures

Verify

Verify third party confirmation signatures

Revocation

Designate Revocation Key

Revocation

Revoke (Sub)Key with Self Signature

Revocation

Revoke (Sub)Key using Designated Revocation Key

Encryption

Encrypt data/messages

Decryption

Decrypt data/messages

Load

Load Keys

Generate

Generate Keys

Generate

Generate Subkeys

Sign

Generate detached signatures of binary documents

Sign

Generate inline signatures of canonical documents

Sign

One-Pass Sign messages

Sign

Sign messages

Sign

Sign keys

Sign

Certify User IDs

Sign

Certify User Attributes

Sign

Generate key binding signatures

Sign

Revoke certifications

Sign

Revoke keys

Sign

Revoke subkeys

Sign

Generate timestamp signatures

Sign

Generate standalone signatures

Sign

Generate third party confirmation signatures

Verify

Verify detached signatures

Verify

Verify inline signatures of canonical documents

Verify

Verify messages

Verify

Verify key signatures

Verify

Verify User ID certification signatures

Verify

Verify User Attribute certification signatures

Verify

Verify key binding signatures

Verify

Verify key revocation signatures

Verify

Verify subkey revocation signatures

Verify

Verify certification revocation signatures

Verify

Verify timestamp signatures

Verify

Verify standalone signatures

Verify

Verify third party confirmation signatures

Revocation

Designate Revocation Key

Revocation

Revoke (Sub)Key with Self Signature

Revocation

Revoke (Sub)Key using Designated Revocation Key

Load

Load Keys

Generate

Generate Keys

Generate

Generate Subkeys

Encryption

Encrypt data/messages

Decryption

Decrypt data/messages

Encryption

Encrypt data/messages using symmetric ciphers with passphrases

Decryption

Decrypt data/messages using symmetric ciphers with passphrases

Progress

Versioned Packets, v1

Versioned Packets, v3

Versioned Packets, v4

Unversioned Packets

Signature Subpackets

User Attribute Subpackets

Storage Formats

Other Sources

Key Types

Key Actions

RSA Key Actions

DSA Key Actions

ElGamal Key Actions

Other Actions

RFC 4398

RFC 4398 covers publishing and retrieving PGP public keys via DNS CERT records.

DNS CERT

Look up and retrieve keys stored in Content-based DNS CERT records

DNS CERT

Look up and retrieve keys stored in Purpose-based DNS CERT records

Progress

Key Sources

RFC 5581

RFC 5581 extends RFC 4880 to officially add support for the Camellia cipher

Encryption

Camellia [1]

Decryption

Camellia [1]

Progress

Actions

RFC 6637

RFC 6637 extends OpenPGP to officially add support for elliptic curve cryptography

ECDH

Elliptic Curve Diffie-Hellman

ECDSA

Elliptic Curve Digital Signature Algorithm

Curve

NIST P-256

Curve

NIST P-386

Curve

NIST P-521

Load

Load Keys

Generate

Generate Keys

Generate

Generate Subkeys

KDF

Encode KDF data for encryption

KDF

Decode KDF data for decryption

Load

Load Keys

Generate

Generate Keys

Generate

Generate Subkeys

Sign

Generate detached signatures of binary documents

Sign

Generate inline signatures of canonical documents

Sign

One-Pass Sign messages

Sign

Sign messages

Sign

Sign keys

Sign

Certify User IDs

Sign

Certify User Attributes

Sign

Generate key binding signatures

Sign

Revoke certifications

Sign

Revoke keys

Sign

Revoke subkeys

Sign

Generate timestamp signatures

Sign

Generate standalone signatures

Sign

Generate third party confirmation signatures

Verify

Verify detached signatures

Verify

Verify inline signatures of canonical documents

Verify

Verify messages

Verify

Verify key signatures

Verify

Verify Use r ID certification signatures

Verify

Verify User Attribute certification signatures

Verify

Verify key binding signatures

Verify

Verify key revocation signatures

Verify

Verify subkey revocation signatures

Verify

Verify certification revocation signatures

Verify

Verify timestamp signatures

Verify

Verify standalone signatures

Verify

Verify third party confirmation signatures

Revocation

Designate Revocation Key

Revocation

Revoke (Sub)Key with Self Signature

Revocation

Revoke (Sub)Key using Designated Revocation Key

Progress

Key Types

Curves

ECDH Key Actions

ECDSA Key Actions

Non-RFC Extensions

This section covers things that are considered extensions to PGP, but are not codified in the form of an RFC.

DNS PKA

Publishing OpenPGP keys in DNS

DNS PKA

Look up and retrieve keys stored in DNS PKA records.

Progress

Other Sources

OpenPGP HTTP Keyserver Protocol (HKP)

The protocol is specified in Marc Horowitz’s thesis paper, and an expired RFC draft by David Shaw, draft-shaw-openpgp-hkp-00.

Discovery

Round robin DNS and SRV lookups (section 7. Locating a HKP Keyserver)

Index

Look up keys on key server, with multiple possible matches (section 3.1.2.2. The “index” Operation)

Get

Retrieve keys from key server, single fingerprint fetch (section 3.1.2.1. The “get” operation)

Post

Send keys to key server (section 4. Submitting Keys To A Keyserver)

Progress

HKP

OpenPGP Web Key Service (WKS)

LocatesOpenPGP keys by mail address using a Web service and the HTTPS protocol. Protocol specified in an in-progress RFC draft by Werner Koch, draft-koch-openpgp-webkey-service

Discovery

Fetches keys matching a UID from the server, using DNS and SRV lookups (section 3.1. Key Discovery)

Update

Update keys on the WKS (section 4. Web Key Directory Update Protocol)

Progress

WKS

EdDSA for OpenPGP

Use of Ed25519 with ECDSA and ECDH in OpenPGP is currently specified in an in-progress RFC draft by Werner Koch, draft-ietf-openpgp-rfc4880bis.

Curve

Ed25519

Curve

X25519

Progress

Curves

Additional Curves for OpenPGP

Some additional curves that can be used with ECDSA/ECDH that are not explicitly called out in RFC 6637, but have standardized OIDs and are implemented in other software.

Curve

Brainpool P-256

Curve

Brainpool P-384

Curve

Brainpool P-512

Curve

Curve25519 [1]

Curve

SECP256K1

Progress

Curves

Note

Use of Brainpool curves with ECDSA/ECDH

Although these curves are not explicitly mentioned in an RFC for OpenPGP at this point, GnuPG 2.1.x+ does support using them. As such, they have been included here.