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.

Progress
Versioned Packets, v1
Tag 18 Symmetrically Encrypted and Integrity Protected Data Packet
Versioned Packets, v3
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
Versioned Packets, v4
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
Unversioned Packets
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
Signature Subpackets
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
User Attribute Subpackets
0x01 Image
Storage Formats
ASCII ASCII armored PGP blocks
binary binary PGP packets
GPG GPG <= 2.0.x keyrings
KBX GPG >= 2.1.x keyboxes
Other Sources
Retrieve Retrieve from HKP key servers
Upload Submit to HKP key servers
Key Types
RSA RSA
DSA DSA
ElGamal ElGamal
Key Actions
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
RSA Key Actions
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
DSA Key Actions
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
ElGamal Key Actions
Load Load Keys
Generate Generate Keys
Generate Generate Subkeys
Encryption Encrypt data/messages
Decryption Decrypt data/messages
Other Actions
Encryption Encrypt data/messages using symmetric ciphers with passphrases
Decryption Decrypt data/messages using symmetric ciphers with passphrases

RFC 4398

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

Progress
Key Sources
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

RFC 5581

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

Progress
Actions
Encryption Camellia [1]
Decryption Camellia [1]

RFC 6637

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

Progress
Key Types
ECDH Elliptic Curve Diffie-Hellman
ECDSA Elliptic Curve Digital Signature Algorithm
Curves
Curve NIST P-256
Curve NIST P-386
Curve NIST P-521
ECDH Key Actions
Load Load Keys
Generate Generate Keys
Generate Generate Subkeys
KDF Encode KDF data for encryption
KDF Decode KDF data for decryption
ECDSA Key Actions
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

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

Progress
Other Sources
DNS PKA Look up and retrieve keys stored in DNS PKA records.

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.

Progress
HKP
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)

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

Progress
WKS
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)

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.

Progress
Curves
Curve Ed25519
Curve X25519

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.

Progress
Curves
Curve Brainpool P-256
Curve Brainpool P-384
Curve Brainpool P-512
Curve Curve25519 [1]
Curve SECP256K1

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.

[1](1, 2, 3, 4) Cipher availability depends on the currently installed OpenSSL being compiled with support for it