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.