# 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 | 118/139
--- | ---
Versioned Packets, v1 | 1/1
  ✓
  Tag 18

  Symetrically Encrypted and Integrity Protected Data Packet

Versioned Packets, v3 | 2/7
  ✓
  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 | 6/6
  ✓
  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 | 8/8
  ✓
  Tag 8

  Compressed Data Packet

  ✓
  Tag 9

  Symetrically 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 | 22/23
  ✓
  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 | 1/1
  ✓
  0x01

  Image

Storage Formats | 3/4
  ✓
  ASCII

  ASCII armored PGP blocks

  ✓
  binary

  binary PGP packets

  ✓
  GPG

  GPG <= 2.0.x keyrings

  KBX

  GPG >= 2.1.x keyboxes

Other Sources | 0/2
  Retrieve

  Retrieve from HKP key servers

  Upload

  Submit to HKP key servers

Key Types | 3/3
  ✓
  RSA

  RSA

  ✓
  DSA

  DSA

  ✓
  ElGamal

  ElGamal

Key Actions | 8/10
  ✓
  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 | 31/34
  ✓
  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 | 30/33
  ✓
  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 | 1/5
  ✓
  Load

  Load Keys

  Generate

  Generate Keys

  Generate

  Generate Subkeys

  Encryption

  Encrypt data/messages

  Decryption

  Decrypt data/messages

Other Actions | 2/2
  ✓
  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 | 0/2
--- | ---
Key Sources | 0/2
  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 | 2/2
--- | ---
Actions | 2/2
  ✓
  Encryption

  Camellia 1

  ✓
  Decryption

  Camellia 1

### RFC 6637

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

Progress | 40/43
--- | ---
Key Types | 2/2
  ✓
  ECDH

  Elliptic Curve Diffie-Hellman

  ✓
  ECDSA

  Elliptic Curve Digital Signature Algorithm

Curves | 3/3
  ✓
  Curve

  NIST P-256

  ✓
  Curve

  NIST P-386

  ✓
  Curve

  NIST P-521

ECDH Key Actions | 5/5
  ✓
  Load

  Load Keys

  ✓
  Generate

  Generate Keys

  ✓
  Generate

  Generate Subkeys

  ✓
  KDF

  Encode KDF data for encryption

  ✓
  KDF

  Decode KDF data for decryption

ECDSA Key Actions | 30/33
  ✓
  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 | 0/1
--- | ---
Other Sources | 0/1
  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 | 0/4
--- | ---
HKP | 0/4
  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 | 0/2
--- | ---
WKS | 0/2
  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 | 2/2
--- | ---
Curves | 2/2
  ✓
  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 | 5/5
--- | ---
Curves | 5/5
  ✓
  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