<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.4.13 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-openpgp-crypto-refresh-06" category="std" consensus="true" submissionType="IETF" obsoletes="4880, 5581, 6637">

  <front>
    <title>OpenPGP Message Format</title>

    <author initials="W." surname="Koch" fullname="Werner Koch" role="editor">
      <organization>GnuPG e.V.</organization>
      <address>
        <postal>
          <street>Rochusstr. 44</street>
          <city>Duesseldorf</city>
          <code>40479</code>
          <country>Germany</country>
        </postal>
        <email>wk@gnupg.org</email>
        <uri>https://gnupg.org/verein</uri>
      </address>
    </author>
    <author initials="P." surname="Wouters" fullname="Paul Wouters" role="editor">
      <organization>Aiven</organization>
      <address>
        <email>paul.wouters@aiven.io</email>
      </address>
    </author>
    <author initials="D." surname="Huigens" fullname="Daniel Huigens">
      <organization>Proton AG</organization>
      <address>
        <email>d.huigens@protonmail.com</email>
      </address>
    </author>
    <author initials="J." surname="Winter" fullname="Justus Winter">
      <organization>Sequoia-PGP</organization>
      <address>
        <email>justus@sequoia-pgp.org</email>
      </address>
    </author>
    <author initials="." surname="Yutaka N" fullname="Yutaka Niibe">
      <organization>FSIJ</organization>
      <address>
        <email>gniibe@fsij.org</email>
      </address>
    </author>

    <date year="2022" month="June" day="06"/>

    <area>sec</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document specifies the message formats used in OpenPGP.
OpenPGP provides encryption with public-key or symmetric cryptographic algorithms, digital signatures, compression and key management.</t>

<t>This document is maintained in order to publish all necessary information needed to develop interoperable applications based on the OpenPGP format.
It is not a step-by-step cookbook for writing an application.
It describes only the format and methods needed to read, check, generate, and write conforming packets crossing any network.
It does not deal with storage and implementation questions.
It does, however, discuss implementation issues necessary to avoid security flaws.</t>

<t>This document obsoletes: RFC 4880 (OpenPGP), RFC 5581 (Camellia in OpenPGP) and RFC 6637 (Elliptic Curves in OpenPGP).</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>This document provides information on the message-exchange packet formats used by OpenPGP to provide encryption, decryption, signing, and key management functions.
It is a revision of RFC 4880, "OpenPGP Message Format", which is a revision of RFC 2440, which itself replaces RFC 1991, "PGP Message Exchange Formats" <xref target="RFC1991"/> <xref target="RFC2440"/> <xref target="RFC4880"/>.</t>

<t>This document obsoletes: RFC 4880 (OpenPGP), RFC 5581 (Camellia in OpenPGP) and RFC 6637 (Elliptic Curves in OpenPGP).</t>

<section anchor="terms"><name>Terms</name>

<t><list style="symbols">
  <t>OpenPGP - This is a term for security software that uses PGP 5 as a basis, formalized in this document.</t>
  <t>PGP - Pretty Good Privacy.
PGP is a family of software systems developed by Philip R. Zimmermann from which OpenPGP is based.</t>
  <t>PGP 2 - This version of PGP has many variants; where necessary a more detailed version number is used here.
PGP 2 uses only RSA, MD5, and IDEA for its cryptographic transforms.
An informational RFC, RFC 1991, was written describing this version of PGP.</t>
  <t>PGP 5 - This version of PGP is formerly known as "PGP 3" in the community.
It has new formats and corrects a number of problems in the PGP 2 design.
It is referred to here as PGP 5 because that software was the first release of the "PGP 3" code base.</t>
  <t>GnuPG - GNU Privacy Guard, also called GPG.
GnuPG is an OpenPGP implementation that avoids all encumbered algorithms.
Consequently, early versions of GnuPG did not include RSA public keys.</t>
</list></t>

<t>"PGP", "Pretty Good", and "Pretty Good Privacy" are trademarks of PGP Corporation and are used with permission.
The term "OpenPGP" refers to the protocol described in this and related documents.</t>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL</bcp14>
NOT", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<t>The key words "PRIVATE USE", "SPECIFICATION <bcp14>REQUIRED</bcp14>", and "RFC <bcp14>REQUIRED</bcp14>" that appear in this document when used to describe namespace allocation are to be interpreted as described in <xref target="RFC8126"/>.</t>

</section>
</section>
<section anchor="general-functions"><name>General functions</name>

<t>OpenPGP provides data integrity services for messages and data files by using these core technologies:</t>

<t><list style="symbols">
  <t>digital signatures</t>
  <t>encryption</t>
  <t>compression</t>
  <t>Radix-64 conversion</t>
</list></t>

<t>In addition, OpenPGP provides key management and certificate services, but many of these are beyond the scope of this document.</t>

<section anchor="confidentiality-via-encryption"><name>Confidentiality via Encryption</name>

<t>OpenPGP combines symmetric-key encryption and public-key encryption to provide confidentiality.
When made confidential, first the object is encrypted using a symmetric encryption algorithm.
Each symmetric key is used only once, for a single object.
A new "session key" is generated as a random number for each object (sometimes referred to as a session).
Since it is used only once, the session key is bound to the message and transmitted with it.
To protect the key, it is encrypted with the receiver's public key.
The sequence is as follows:</t>

<t><list style="numbers">
  <t>The sender creates a message.</t>
  <t>The sending OpenPGP generates a random number to be used as a session key for this message only.</t>
  <t>The session key is encrypted using each recipient's public key.
These "encrypted session keys" start the message.</t>
  <t>The sending OpenPGP encrypts the message using the session key, which forms the remainder of the message.</t>
  <t>The receiving OpenPGP decrypts the session key using the recipient's private key.</t>
  <t>The receiving OpenPGP decrypts the message using the session key.
If the message was compressed, it will be decompressed.</t>
</list></t>

<t>With symmetric-key encryption, an object may be encrypted with a symmetric key derived from a passphrase (or other shared secret), or a two-stage mechanism similar to the public-key method described above in which a session key is itself encrypted with a symmetric algorithm keyed from a shared secret.</t>

<t>Both digital signature and confidentiality services may be applied to the same message.
First, a signature is generated for the message and attached to the message.
Then the message plus signature is encrypted using a symmetric session key.
Finally, the session key is encrypted using public-key encryption and prefixed to the encrypted block.</t>

</section>
<section anchor="authentication-via-digital-signature"><name>Authentication via Digital Signature</name>

<t>The digital signature uses a hash code or message digest algorithm, and a public-key signature algorithm.
The sequence is as follows:</t>

<t><list style="numbers">
  <t>The sender creates a message.</t>
  <t>The sending software generates a hash code of the message.</t>
  <t>The sending software generates a signature from the hash code using the sender's private key.</t>
  <t>The binary signature is attached to the message.</t>
  <t>The receiving software keeps a copy of the message signature.</t>
  <t>The receiving software generates a new hash code for the received message and verifies it using the message's signature.
If the verification is successful, the message is accepted as authentic.</t>
</list></t>

</section>
<section anchor="compression"><name>Compression</name>

<t>If an implementation does not implement compression, its authors should be aware that most OpenPGP messages in the world are compressed.
Thus, it may even be wise for a space-constrained implementation to implement decompression, but not compression.</t>

</section>
<section anchor="conversion-to-radix-64"><name>Conversion to Radix-64</name>

<t>OpenPGP's underlying native representation for encrypted messages, signature certificates, and keys is a stream of arbitrary octets.
Some systems only permit the use of blocks consisting of seven-bit, printable text.
For transporting OpenPGP's native raw binary octets through channels that are not safe to raw binary data, a printable encoding of these binary octets is needed.
OpenPGP provides the service of converting the raw 8-bit binary octet stream to a stream of printable ASCII characters, called Radix-64 encoding or ASCII Armor.</t>

<t>Implementations <bcp14>SHOULD</bcp14> provide Radix-64 conversions.</t>

</section>
<section anchor="signature-only-applications"><name>Signature-Only Applications</name>

<t>OpenPGP is designed for applications that use both encryption and signatures, but there are a number of problems that are solved by a signature-only implementation.
Although this specification requires both encryption and signatures, it is reasonable for there to be subset implementations that are non-conformant only in that they omit encryption.</t>

</section>
</section>
<section anchor="data-element-formats"><name>Data Element Formats</name>

<t>This section describes the data elements used by OpenPGP.</t>

<section anchor="scalar-numbers"><name>Scalar Numbers</name>

<t>Scalar numbers are unsigned and are always stored in big-endian format.
Using n[k] to refer to the kth octet being interpreted, the value of a two-octet scalar is ((n[0] &lt;&lt; 8) + n[1]).
The value of a four-octet scalar is ((n[0] &lt;&lt; 24) + (n[1] &lt;&lt; 16) + (n[2] &lt;&lt; 8) + n[3]).</t>

</section>
<section anchor="mpi"><name>Multiprecision Integers</name>

<t>Multiprecision integers (also called MPIs) are unsigned integers used to hold large integers such as the ones used in cryptographic calculations.</t>

<t>An MPI consists of two pieces: a two-octet scalar that is the length of the MPI in bits followed by a string of octets that contain the actual integer.</t>

<t>These octets form a big-endian number; a big-endian number can be made into an MPI by prefixing it with the appropriate length.</t>

<t>Examples:</t>

<t>(all numbers are in hexadecimal)</t>

<t>The string of octets [00 00] forms an MPI with the value 0.
The string of octets [00 01 01] forms an MPI with the value 1.
The string [00 09 01 FF] forms an MPI with the value of 511.</t>

<t>Additional rules:</t>

<t>The size of an MPI is ((MPI.length + 7) / 8) + 2 octets.</t>

<t>The length field of an MPI describes the length starting from its most significant non-zero bit.
Thus, the MPI [00 02 01] is not formed correctly.
It should be [00 01 01].</t>

<t>Unused bits of an MPI <bcp14>MUST</bcp14> be zero.</t>

<t>Also note that when an MPI is encrypted, the length refers to the plaintext MPI.
It may be ill-formed in its ciphertext.</t>

<section anchor="using-mpis-to-encode-other-data"><name>Using MPIs to encode other data</name>

<t>Note that MPIs are used in some places used to encode non-integer data, such as an elliptic curve point (see <xref target="ec-point-wire-formats"/>, or an octet string of known, fixed length (see <xref target="ec-scalar-wire-formats"/>).
The wire representation is the same: two octets of length in bits counted from the first non-zero bit, followed by the smallest series of octets that can represent the value while stripping off any leading zero octets.</t>

</section>
</section>
<section anchor="key-ids"><name>Key IDs</name>

<t>A Key ID is an eight-octet scalar that identifies a key.
Implementations <bcp14>SHOULD NOT</bcp14> assume that Key IDs are unique.
<xref target="key-ids-fingerprints"/> describes how Key IDs are formed.</t>

</section>
<section anchor="text"><name>Text</name>

<t>Unless otherwise specified, the character set for text is the UTF-8 <xref target="RFC3629"/> encoding of Unicode <xref target="ISO10646"/>.</t>

</section>
<section anchor="time-fields"><name>Time Fields</name>

<t>A time field is an unsigned four-octet number containing the number of seconds elapsed since midnight, 1 January 1970 UTC.</t>

</section>
<section anchor="keyrings"><name>Keyrings</name>

<t>A keyring is a collection of one or more keys in a file or database.
Traditionally, a keyring is simply a sequential list of keys, but may be any suitable database.
It is beyond the scope of this standard to discuss the details of keyrings or other databases.</t>

</section>
<section anchor="string-to-key-s2k-specifiers"><name>String-to-Key (S2K) Specifiers</name>

<t>A string-to-key (S2K) specifier is used to convert a passphrase string into a symmetric-key encryption/decryption key.
They are used in two places, currently: to encrypt the secret part of private keys in the private keyring, and to convert passphrases to encryption keys for symmetrically encrypted messages.</t>

<section anchor="s2k-types"><name>String-to-Key (S2K) Specifier Types</name>

<t>There are four types of S2K specifiers currently supported, and some reserved values:</t>

<texttable title="S2K type registry">
      <ttcol align='right'>ID</ttcol>
      <ttcol align='left'>S2K Type</ttcol>
      <ttcol align='left'>Generate?</ttcol>
      <ttcol align='left'>S2K field size (octets)</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0</c>
      <c>Simple S2K</c>
      <c>N</c>
      <c>2</c>
      <c><xref target="s2k-simple"/></c>
      <c>1</c>
      <c>Salted S2K</c>
      <c>Only when string is high entropy</c>
      <c>10</c>
      <c><xref target="s2k-salted"/></c>
      <c>2</c>
      <c>Reserved value</c>
      <c>N</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>3</c>
      <c>Iterated and Salted S2K</c>
      <c>Y</c>
      <c>11</c>
      <c><xref target="s2k-iter-salted"/></c>
      <c>4</c>
      <c>Argon2</c>
      <c>Y</c>
      <c>20</c>
      <c><xref target="s2k-argon2"/></c>
      <c>100 to 110</c>
      <c>Private/Experimental S2K</c>
      <c>As appropriate</c>
      <c>&#160;</c>
      <c>&#160;</c>
</texttable>

<t>These are described in the subsections below.</t>

<section anchor="s2k-simple"><name>Simple S2K</name>

<t>This directly hashes the string to produce the key data.
See below for how this hashing is done.</t>

<figure><artwork><![CDATA[
  Octet 0:        0x00
  Octet 1:        hash algorithm
]]></artwork></figure>

<t>Simple S2K hashes the passphrase to produce the session key.
The manner in which this is done depends on the size of the session key (which will depend on the cipher used) and the size of the hash algorithm's output.
If the hash size is greater than the session key size, the high-order (leftmost) octets of the hash are used as the key.</t>

<t>If the hash size is less than the key size, multiple instances of the hash context are created --- enough to produce the required key data.
These instances are preloaded with 0, 1, 2, ...
octets of zeros (that is to say, the first instance has no preloading, the second gets preloaded with 1 octet of zero, the third is preloaded with two octets of zeros, and so forth).</t>

<t>As the data is hashed, it is given independently to each hash context.
Since the contexts have been initialized differently, they will each produce different hash output.
Once the passphrase is hashed, the output data from the multiple hashes is concatenated, first hash leftmost, to produce the key data, with any excess octets on the right discarded.</t>

</section>
<section anchor="s2k-salted"><name>Salted S2K</name>

<t>This includes a "salt" value in the S2K specifier --- some arbitrary data --- that gets hashed along with the passphrase string, to help prevent dictionary attacks.</t>

<figure><artwork><![CDATA[
  Octet 0:        0x01
  Octet 1:        hash algorithm
  Octets 2-9:     8-octet salt value
]]></artwork></figure>

<t>Salted S2K is exactly like Simple S2K, except that the input to the hash function(s) consists of the 8 octets of salt from the S2K specifier, followed by the passphrase.</t>

</section>
<section anchor="s2k-iter-salted"><name>Iterated and Salted S2K</name>

<t>This includes both a salt and an octet count.
The salt is combined with the passphrase and the resulting value is hashed repeatedly.
This further increases the amount of work an attacker must do to try dictionary attacks.</t>

<figure><artwork><![CDATA[
  Octet  0:        0x03
  Octet  1:        hash algorithm
  Octets 2-9:      8-octet salt value
  Octet  10:       count, a one-octet, coded value
]]></artwork></figure>

<t>The count is coded into a one-octet number using the following formula:</t>

<figure><artwork><![CDATA[
  #define EXPBIAS 6
      count = ((Int32)16 + (c & 15)) << ((c >> 4) + EXPBIAS);
]]></artwork></figure>

<t>The above formula is in C, where "Int32" is a type for a 32-bit integer, and the variable "c" is the coded count, Octet 10.</t>

<t>Iterated-Salted S2K hashes the passphrase and salt data multiple times.
The total number of octets to be hashed is specified in the encoded count in the S2K specifier.
Note that the resulting count value is an octet count of how many octets will be hashed, not an iteration count.</t>

<t>Initially, one or more hash contexts are set up as with the other S2K algorithms, depending on how many octets of key data are needed.
Then the salt, followed by the passphrase data, is repeatedly hashed until the number of octets specified by the octet count has been hashed.
The one exception is that if the octet count is less than the size of the salt plus passphrase, the full salt plus passphrase will be hashed even though that is greater than the octet count.
After the hashing is done, the data is unloaded from the hash context(s) as with the other S2K algorithms.</t>

</section>
<section anchor="s2k-argon2"><name>Argon2</name>

<t>This S2K method hashes the passphrase using Argon2, specified in <xref target="RFC9106"/>.
This provides memory-hardness, further protecting the passphrase against brute-force attacks.</t>

<figure><artwork><![CDATA[
  Octet  0:        0x04
  Octets 1-16:     16-octet salt value
  Octet  17:       one-octet number of passes t
  Octet  18:       one-octet degree of parallelism p
  Octet  19:       one-octet exponent indicating the memory size m
]]></artwork></figure>

<t>The salt <bcp14>SHOULD</bcp14> be unique for each password.</t>

<t>The number of passes t and the degree of parallelism p <bcp14>MUST</bcp14> be non-zero.</t>

<t>The memory size m is 2**encoded_m kibibytes of RAM, where "encoded_m" is the encoded memory size in Octet 19.
The encoded memory size <bcp14>MUST</bcp14> be a value from 3+ceil(log_2(p)) to 31, such that the decoded memory size m is a value from 8*p to 2**31.
Note that memory-hardness size is indicated in kibibytes (KiB), not octets.</t>

<t>Argon2 is invoked with the passphrase as P, the salt as S, the values of t, p and m as described above, the required key size as the tag length T, 0x13 as the version v, and Argon2id as the type.</t>

<t>For the recommended values of t, p and m, see Section 4 of <xref target="RFC9106"/>.
If the recommended value of m for a given application is not a power of 2, it is <bcp14>RECOMMENDED</bcp14> to round up to the next power of 2 if the resulting performance would be acceptable, and round down otherwise (keeping in mind that m must be at least 8*p).</t>

<t>As an example, with the first recommended option (t=1, p=4, m=2**21), the full S2K specifier would be:</t>

<figure><artwork><![CDATA[
  04 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
  XX 01 04 15
]]></artwork></figure>

<t>(where XX represents a random octet of salt).</t>

</section>
</section>
<section anchor="string-to-key-usage"><name>String-to-Key Usage</name>

<t>Simple S2K and Salted S2K specifiers can be brute-forced when used with a low-entropy string, such as those typically provided by users.
In addition, the usage of Simple S2K can lead to key and IV reuse (see <xref target="skesk"/>).
Therefore, when generating S2K specifiers, implementations <bcp14>MUST NOT</bcp14> use Simple S2K, and <bcp14>SHOULD NOT</bcp14> use Salted S2K unless the implementation knows that the string is high-entropy (for example, it generated the string itself using a known-good source of randomness).
It is <bcp14>RECOMMENDED</bcp14> that implementations use Argon2.</t>

<section anchor="secret-key-encryption"><name>Secret-Key Encryption</name>

<t>An S2K specifier can be stored in the secret keyring to specify how to convert the passphrase to a key that unlocks the secret data.
Older versions of PGP just stored a symmetric cipher algorithm octet preceding the secret data or a zero to indicate that the secret data was unencrypted.
The MD5 hash function was always used to convert the passphrase to a key for the specified cipher algorithm.</t>

<t>For compatibility, when an S2K specifier is used, the special value 253, 254, or 255 is stored in the position where the cipher algorithm octet would have been in the old data structure.
This is then followed immediately by a one-octet algorithm identifier, and other fields relevant to the type of encryption used.</t>

<t>Therefore, the first octet of the secret key material describes how the secret key data is presented.
The structures differ based on the version of the enclosing OpenPGP packet.
The tables below summarize the details described in <xref target="secret-key-packet-formats"/>.</t>

<t>In the tables below, <spanx style="verb">check(x)</spanx> means the "2-octet checksum" meaning the sum of all octets in x mod 65536.</t>

<texttable title="Version 4 Secret Key protection details" anchor="v4-secret-key-protection-details">
      <ttcol align='left'>First octet</ttcol>
      <ttcol align='left'>Encryption parameter fields</ttcol>
      <ttcol align='left'>Encryption</ttcol>
      <ttcol align='left'>Generate?</ttcol>
      <c>0</c>
      <c>-</c>
      <c>cleartext secrets || check(secrets)</c>
      <c>Yes</c>
      <c>Known symmetric cipher algo ID (see <xref target="symmetric-algos"/>)</c>
      <c>IV</c>
      <c>CFB(MD5(password), secrets || check(secrets))</c>
      <c>No</c>
      <c>253</c>
      <c>cipher-algo, AEAD-mode, S2K-specifier, nonce</c>
      <c>AEAD(S2K(password), secrets, pubkey)</c>
      <c>Yes</c>
      <c>254</c>
      <c>cipher-algo, S2K-specifier, IV</c>
      <c>CFB(S2K(password), secrets || SHA1(secrets))</c>
      <c>Yes</c>
      <c>255</c>
      <c>cipher-algo, S2K-specifier, IV</c>
      <c>CFB(S2K(password), secrets || check(secrets))</c>
      <c>No</c>
</texttable>

<t>Each row with "Generate?" marked as "No" is described for backward compatibility, and <bcp14>MUST NOT</bcp14> be generated.</t>

<t>A version 5 secret key that is cryptographically protected is stored with an additional pair of length counts, each of which is one octet wide:</t>

<texttable title="Version 5 Secret Key protection details" anchor="v5-secret-key-protection-details">
      <ttcol align='left'>First octet</ttcol>
      <ttcol align='left'>Encryption parameter fields</ttcol>
      <ttcol align='left'>Encryption</ttcol>
      <c>0</c>
      <c>-</c>
      <c>cleartext secrets || check(secrets)</c>
      <c>253</c>
      <c>params-length, cipher-algo, AEAD-mode, S2K-specifier-length, S2K-specifier, nonce</c>
      <c>AEAD(S2K(password), secrets, pubkey)</c>
      <c>254</c>
      <c>params-length, cipher-algo, S2K-specifier-length, S2K-specifier, IV</c>
      <c>CFB(S2K(password), secrets || SHA1(secrets))</c>
</texttable>

<t>An implementation <bcp14>MUST NOT</bcp14> create and <bcp14>MUST</bcp14> reject as malformed a secret key packet where the S2K usage octet is anything but 253 and the S2K specifier type is Argon2.</t>

</section>
<section anchor="symmetric-key-message-encryption"><name>Symmetric-Key Message Encryption</name>

<t>OpenPGP can create a Symmetric-key Encrypted Session Key (ESK) packet at the front of a message.
This is used to allow S2K specifiers to be used for the passphrase conversion or to create messages with a mix of symmetric-key ESKs and public-key ESKs.
This allows a message to be decrypted either with a passphrase or a public-key pair.</t>

<t>PGP 2 always used IDEA with Simple string-to-key conversion when encrypting a message with a symmetric algorithm.
See <xref target="sed"/>.
This <bcp14>MUST NOT</bcp14> be generated, but <bcp14>MAY</bcp14> be consumed for backward-compatibility.</t>

</section>
</section>
</section>
</section>
<section anchor="packet-syntax"><name>Packet Syntax</name>

<t>This section describes the packets used by OpenPGP.</t>

<section anchor="overview"><name>Overview</name>

<t>An OpenPGP message is constructed from a number of records that are traditionally called packets.
A packet is a chunk of data that has a tag specifying its meaning.
An OpenPGP message, keyring, certificate, and so forth consists of a number of packets.
Some of those packets may contain other OpenPGP packets (for example, a compressed data packet, when uncompressed, contains OpenPGP packets).</t>

<t>Each packet consists of a packet header, followed by the packet body.
The packet header is of variable length.</t>

<t>When handling a stream of packets, the length information in each packet header is the canonical source of packet boundaries.
An implementation handling a packet stream that wants to find the next packet <bcp14>MUST</bcp14> look for it at the precise offset indicated in the previous packet header.</t>

<t>Additionally, some packets contain internal length indicators (for example, a subfield within the packet).
In the event that a subfield length indicator within a packet implies inclusion of octets outside the range indicated in the packet header, a parser <bcp14>MUST</bcp14> truncate the subfield at the octet boundary indicated in the packet header.
Such a truncation renders the packet malformed and unusable.
An implementation <bcp14>MUST NOT</bcp14> interpret octets outside the range indicated in the packet header as part of the contents of the packet.</t>

</section>
<section anchor="packet-headers"><name>Packet Headers</name>

<t>The first octet of the packet header is called the "Packet Tag".
It determines the format of the header and denotes the packet contents.
The remainder of the packet header is the length of the packet.</t>

<t>There are two packet formats, the (current) OpenPGP packet format specified by this document and its predecessors and the Legacy packet format as used by PGP 2.x implementations.</t>

<t>Note that the most significant bit is the leftmost bit, called bit 7.
A mask for this bit is 0x80 in hexadecimal.</t>

<figure><artwork><![CDATA[
       ┌───────────────┐
  PTag │7 6 5 4 3 2 1 0│
       └───────────────┘
  Bit 7 -- Always one
  Bit 6 -- Always one (except for Legacy packet format)
]]></artwork></figure>

<t>The Legacy packet format <bcp14>MAY</bcp14> be used when consuming packets to facilitate interoperability with legacy implementations and accessing archived data.
The Legacy packet format <bcp14>SHOULD NOT</bcp14> be used to generate new data, unless the recipient is known to only support the Legacy packet format.</t>

<t>An implementation that consumes and re-distributes pre-existing OpenPGP data (such as Transferable Public Keys) may encounter packets framed with the Legacy packet format.
Such an implementation <bcp14>MAY</bcp14> either re-distribute these packets in their Legacy format, or transform them to the current OpenPGP packet format before re-distribution.</t>

<t>The current OpenPGP packet format packets contain:</t>

<figure><artwork><![CDATA[
  Bits 5 to 0 -- packet tag
]]></artwork></figure>

<t>Legacy packet format packets contain:</t>

<figure><artwork><![CDATA[
  Bits 5 to 2 -- packet tag
  Bits 1 to 0 -- length-type
]]></artwork></figure>

<section anchor="openpgp-packet-format"><name>OpenPGP Format Packet Lengths</name>

<t>OpenPGP format packets have four possible ways of encoding length:</t>

<t><list style="numbers">
  <t>A one-octet Body Length header encodes packet lengths of up to 191 octets.</t>
  <t>A two-octet Body Length header encodes packet lengths of 192 to 8383 octets.</t>
  <t>A five-octet Body Length header encodes packet lengths of up to 4,294,967,295 (0xFFFFFFFF) octets in length.
(This actually encodes a four-octet scalar number.)</t>
  <t>When the length of the packet body is not known in advance by the issuer, Partial Body Length headers encode a packet of indeterminate length, effectively making it a stream.</t>
</list></t>

<section anchor="one-octet-lengths"><name>One-Octet Lengths</name>

<t>A one-octet Body Length header encodes a length of 0 to 191 octets.
This type of length header is recognized because the one octet value is less than 192.
The body length is equal to:</t>

<figure><artwork><![CDATA[
  bodyLen = 1st_octet;
]]></artwork></figure>

</section>
<section anchor="two-octet-lengths"><name>Two-Octet Lengths</name>

<t>A two-octet Body Length header encodes a length of 192 to 8383 octets.
It is recognized because its first octet is in the range 192 to 223.
The body length is equal to:</t>

<figure><artwork><![CDATA[
  bodyLen = ((1st_octet - 192) << 8) + (2nd_octet) + 192
]]></artwork></figure>

</section>
<section anchor="five-octet-lengths"><name>Five-Octet Lengths</name>

<t>A five-octet Body Length header consists of a single octet holding the value 255, followed by a four-octet scalar.
The body length is equal to:</t>

<figure><artwork><![CDATA[
  bodyLen = (2nd_octet << 24) | (3rd_octet << 16) |
            (4th_octet << 8)  | 5th_octet
]]></artwork></figure>

<t>This basic set of one, two, and five-octet lengths is also used internally to some packets.</t>

</section>
<section anchor="partial-body-lengths"><name>Partial Body Lengths</name>

<t>A Partial Body Length header is one octet long and encodes the length of only part of the data packet.
This length is a power of 2, from 1 to 1,073,741,824 (2 to the 30th power).
It is recognized by its one octet value that is greater than or equal to 224, and less than 255.
The Partial Body Length is equal to:</t>

<figure><artwork><![CDATA[
  partialBodyLen = 1 << (1st_octet & 0x1F);
]]></artwork></figure>

<t>Each Partial Body Length header is followed by a portion of the packet body data.
The Partial Body Length header specifies this portion's length.
Another length header (one octet, two-octet, five-octet, or partial) follows that portion.
The last length header in the packet <bcp14>MUST NOT</bcp14> be a Partial Body Length header.
Partial Body Length headers may only be used for the non-final parts of the packet.</t>

<t>Note also that the last Body Length header can be a zero-length header.</t>

<t>An implementation <bcp14>MAY</bcp14> use Partial Body Lengths for data packets, be they literal, compressed, or encrypted.
The first partial length <bcp14>MUST</bcp14> be at least 512 octets long.
Partial Body Lengths <bcp14>MUST NOT</bcp14> be used for any other packet types.</t>

</section>
</section>
<section anchor="legacy-packet-format"><name>Legacy Format Packet Lengths</name>

<t>The meaning of the length-type in Legacy format packets is:</t>

<dl>
  <dt>
0  </dt>
  <dd>
    <t>The packet has a one-octet length.
The header is 2 octets long.</t>
  </dd>
  <dt>
1  </dt>
  <dd>
    <t>The packet has a two-octet length.
The header is 3 octets long.</t>
  </dd>
  <dt>
2  </dt>
  <dd>
    <t>The packet has a four-octet length.
The header is 5 octets long.</t>
  </dd>
  <dt>
3  </dt>
  <dd>
    <t>The packet is of indeterminate length.
The header is 1 octet long, and the implementation must determine how long the packet is.
If the packet is in a file, this means that the packet extends until the end of the file.
The OpenPGP format headers have a mechanism for precisely encoding data of indeterminate length.
An implementation <bcp14>MUST NOT</bcp14> generate a Legacy format packet with indeterminate length.
An implementation <bcp14>MAY</bcp14> interpret an indeterminate length Legacy format packet in order to deal with historic data, or data generated by a legacy system.</t>
  </dd>
</dl>

</section>
<section anchor="packet-length-examples"><name>Packet Length Examples</name>

<t>These examples show ways that OpenPGP format packets might encode the packet lengths.</t>

<t>A packet with length 100 may have its length encoded in one octet: 0x64.
This is followed by 100 octets of data.</t>

<t>A packet with length 1723 may have its length encoded in two octets: 0xC5, 0xFB.
This header is followed by the 1723 octets of data.</t>

<t>A packet with length 100000 may have its length encoded in five octets: 0xFF, 0x00, 0x01, 0x86, 0xA0.</t>

<t>It might also be encoded in the following octet stream: 0xEF, first 32768 octets of data; 0xE1, next two octets of data; 0xE0, next one octet of data; 0xF0, next 65536 octets of data; 0xC5, 0xDD, last 1693 octets of data.
This is just one possible encoding, and many variations are possible on the size of the Partial Body Length headers, as long as a regular Body Length header encodes the last portion of the data.</t>

<t>Please note that in all of these explanations, the total length of the packet is the length of the header(s) plus the length of the body.</t>

</section>
</section>
<section anchor="packet-tags"><name>Packet Tags</name>

<t>The packet tag denotes what type of packet the body holds.
Note that Legacy format headers can only have tags less than 16, whereas OpenPGP format headers can have tags as great as 63.
The defined tags (in decimal) are as follows:</t>

<texttable title="Packet type registry" anchor="packet-type-registry">
      <ttcol align='right'>Tag</ttcol>
      <ttcol align='left'>Critical</ttcol>
      <ttcol align='left'>Packet Type</ttcol>
      <c>0</c>
      <c>yes</c>
      <c>Reserved - a packet tag <bcp14>MUST NOT</bcp14> have this value</c>
      <c>1</c>
      <c>yes</c>
      <c>Public-Key Encrypted Session Key Packet</c>
      <c>2</c>
      <c>yes</c>
      <c>Signature Packet</c>
      <c>3</c>
      <c>yes</c>
      <c>Symmetric-Key Encrypted Session Key Packet</c>
      <c>4</c>
      <c>yes</c>
      <c>One-Pass Signature Packet</c>
      <c>5</c>
      <c>yes</c>
      <c>Secret-Key Packet</c>
      <c>6</c>
      <c>yes</c>
      <c>Public-Key Packet</c>
      <c>7</c>
      <c>yes</c>
      <c>Secret-Subkey Packet</c>
      <c>8</c>
      <c>yes</c>
      <c>Compressed Data Packet</c>
      <c>9</c>
      <c>yes</c>
      <c>Symmetrically Encrypted Data Packet</c>
      <c>10</c>
      <c>yes</c>
      <c>Marker Packet</c>
      <c>11</c>
      <c>yes</c>
      <c>Literal Data Packet</c>
      <c>12</c>
      <c>yes</c>
      <c>Trust Packet</c>
      <c>13</c>
      <c>yes</c>
      <c>User ID Packet</c>
      <c>14</c>
      <c>yes</c>
      <c>Public-Subkey Packet</c>
      <c>17</c>
      <c>yes</c>
      <c>User Attribute Packet</c>
      <c>18</c>
      <c>yes</c>
      <c>Sym. Encrypted and Integrity Protected Data Packet</c>
      <c>19</c>
      <c>yes</c>
      <c>Reserved (formerly Modification Detection Code Packet)</c>
      <c>20</c>
      <c>yes</c>
      <c>Reserved (formerly AEAD Encrypted Data Packet)</c>
      <c>21</c>
      <c>yes</c>
      <c>Padding Packet</c>
      <c>22 to 39</c>
      <c>yes</c>
      <c>Unassigned Critical Packet</c>
      <c>40 to 59</c>
      <c>no</c>
      <c>Unassigned Non-Critical Packet</c>
      <c>60 to 63</c>
      <c>no</c>
      <c>Private or Experimental Values</c>
</texttable>

<section anchor="packet-criticality"><name>Packet Criticality</name>

<t>The Packet Tag space is partitioned into critical packets and non-critical packets.
If an implementation encounters a critical packet where the packet type is unknown in a Packet Sequence, it <bcp14>MUST</bcp14> reject the whole Packet Sequence (see <xref target="packet-composition"/>).
On the other hand, an unknown non-critical packet <bcp14>MUST</bcp14> be ignored.</t>

<t>Packet Tags from 0 to 39 are critical.
Packet Tags from 40 to 63 are non-critical.</t>

</section>
</section>
</section>
<section anchor="packet-types"><name>Packet Types</name>

<section anchor="pkesk"><name>Public-Key Encrypted Session Key Packets (Tag 1)</name>

<t>Zero or more Public-Key Encrypted Session Key (PKESK) packets and/or Symmetric-Key Encrypted Session Key packets (<xref target="skesk"/>) may precede an encryption container (that is, a Symmetrically Encrypted Integrity Protected Data packet or --- for historic data --- a Symmetrically Encrypted Data packet), which holds an encrypted message.
The message is encrypted with the session key, and the session key is itself encrypted and stored in the Encrypted Session Key packet(s).
The encryption container is preceded by one Public-Key Encrypted Session Key packet for each OpenPGP key to which the message is encrypted.
The recipient of the message finds a session key that is encrypted to their public key, decrypts the session key, and then uses the session key to decrypt the message.</t>

<t>The body of this packet starts with a one-octet number giving the version number of the packet type.
The currently defined versions are 3 and 5.
The remainder of the packet depends on the version.</t>

<t>The versions differ in how they identify the recipient key, and in what they encode.
The version of the PKESK packet must align with the version of the SEIPD packet (see <xref target="encrypted-message-versions"/>).</t>

<section anchor="v3-pkesk"><name>v3 PKESK</name>

<t>A version 3 Public-Key Encrypted Session Key (PKESK) packet precedes a version 1 Symmetrically Encrypted Integrity Protected Data (v1 SEIPD, see <xref target="version-one-seipd"/>) packet.
In historic data, it is sometimes found preceding a deprecated Symmetrically Encrypted Data packet (SED, see <xref target="sed"/>).
A v3 PKESK packet <bcp14>MUST NOT</bcp14> precede a v2 SEIPD packet (see <xref target="encrypted-message-versions"/>).</t>

<t>The v3 PKESK packet consists of:</t>

<t><list style="symbols">
  <t>A one-octet version number with value 3.</t>
  <t>An eight-octet number that gives the Key ID of the public key to which the session key is encrypted.
If the session key is encrypted to a subkey, then the Key ID of this subkey is used here instead of the Key ID of the primary key.
The Key ID may also be all zeros, for an "anonymous recipient" (see <xref target="pkesk-notes"/>).</t>
  <t>A one-octet number giving the public-key algorithm used.</t>
  <t>A series of values comprising the encrypted session key.
This is algorithm-specific and described below.</t>
</list></t>

<t>When creating a v3 PKESK packet, the session key is first prefixed with a one-octet algorithm identifier that specifies the symmetric encryption algorithm used to encrypt the following encryption container.
Then a two-octet checksum is appended, which is equal to the sum of the preceding session key octets, not including the algorithm identifier, modulo 65536.</t>

<t>The resulting octet string (algorithm identifier, session key, and checksum) is encrypted according to the public-key algorithm used, as described below.</t>

</section>
<section anchor="v5-pkesk"><name>v5 PKESK</name>

<t>A version 5 Public-Key Encrypted Session Key (PKESK) packet precedes a version 2 Symmetrically Encrypted Integrity Protected Data (v2 SEIPD, see <xref target="version-two-seipd"/>) packet.
A v5 PKESK packet <bcp14>MUST NOT</bcp14> precede a v1 SEIPD packet or a deprecated Symmetrically Encrypted Data packet (see <xref target="encrypted-message-versions"/>).</t>

<t>The v5 PKESK packet consists of:</t>

<t><list style="symbols">
  <t>A one-octet version number with value 5.</t>
  <t>A one octet key version number and N octets of the fingerprint of the public key or subkey to which the session key is encrypted.
Note that the length N of the fingerprint for a version 4 key is 20 octets; for a version 5 key N is 32.
The key version number may also be zero, and the fingerprint omitted (that is, the length N is zero in this case), for an "anonymous recipient" (see <xref target="pkesk-notes"/>).</t>
  <t>A one-octet number giving the public-key algorithm used.</t>
  <t>A series of values comprising the encrypted session key.
This is algorithm-specific and described below.</t>
</list></t>

<t>When creating a v5 PKESK packet, the symmetric encryption algorithm identifier is not included.
Before encrypting, a two-octet checksum is appended, which is equal to the sum of the preceding session key octets, modulo 65536.</t>

<t>The resulting octet string (session key and checksum) is encrypted according to the public-key algorithm used, as described below.</t>

</section>
<section anchor="pkesk-rsa"><name>Algorithm-Specific Fields for RSA encryption</name>

<t><list style="symbols">
  <t>Multiprecision integer (MPI) of RSA-encrypted value m**e mod n.</t>
</list></t>

<t>The value "m" in the above formula is the plaintext value described above, encoded in the PKCS#1 block encoding EME-PKCS1-v1_5 described in Section 7.2.1 of <xref target="RFC8017"/> (see also <xref target="pkcs-encoding"/>).
Note that when an implementation forms several PKESKs with one session key, forming a message that can be decrypted by several keys, the implementation <bcp14>MUST</bcp14> make a new PKCS#1 encoding for each key.</t>

</section>
<section anchor="pkesk-elgamal"><name>Algorithm-Specific Fields for Elgamal encryption</name>

<t><list style="symbols">
  <t>MPI of Elgamal (Diffie-Hellman) value g**k mod p.</t>
  <t>MPI of Elgamal (Diffie-Hellman) value m * y**k mod p.</t>
</list></t>

<t>The value "m" in the above formula is the plaintext value described above, encoded in the PKCS#1 block encoding EME-PKCS1-v1_5 described in Section 7.2.1 of <xref target="RFC8017"/> (see also <xref target="pkcs-encoding"/>).
Note that when an implementation forms several PKESKs with one session key, forming a message that can be decrypted by several keys, the implementation <bcp14>MUST</bcp14> make a new PKCS#1 encoding for each key.</t>

</section>
<section anchor="pkesk-ecdh"><name>Algorithm-Specific Fields for ECDH encryption</name>

<t><list style="symbols">
  <t>MPI of an EC point representing an ephemeral public key, in the point format associated with the curve as specified in <xref target="ec-curves"/>.</t>
  <t>A one-octet size, followed by a symmetric key encoded using the method described in <xref target="ecdh"/>.</t>
</list></t>

</section>
<section anchor="pkesk-notes"><name>Notes on PKESK</name>

<t>An implementation <bcp14>MAY</bcp14> accept or use a Key ID of all zeros, or a key version of zero and no key fingerprint, to hide the intended decryption key.
In this case, the receiving implementation would try all available private keys, checking for a valid decrypted session key.
This format helps reduce traffic analysis of messages.</t>

</section>
</section>
<section anchor="signature-packet"><name>Signature Packet (Tag 2)</name>

<t>A Signature packet describes a binding between some public key and some data.
The most common signatures are a signature of a file or a block of text, and a signature that is a certification of a User ID.</t>

<t>Three versions of Signature packets are defined.
Version 3 provides basic signature information, while versions 4 and 5 provide an expandable format with subpackets that can specify more information about the signature.</t>

<t>An implementation <bcp14>MUST</bcp14> generate a version 5 signature when signing with a version 5 key.
An implementation <bcp14>MUST</bcp14> generate a version 4 signature when signing with a version 4 key.
Implementations <bcp14>MUST NOT</bcp14> create version 3 signatures; they <bcp14>MAY</bcp14> accept version 3 signatures.</t>

<section anchor="signature-types"><name>Signature Types</name>

<t>There are a number of possible meanings for a signature, which are indicated in a signature type octet in any given signature.
Please note that the vagueness of these meanings is not a flaw, but a feature of the system.
Because OpenPGP places final authority for validity upon the receiver of a signature, it may be that one signer's casual act might be more rigorous than some other authority's positive act.
See <xref target="computing-signatures"/> for detailed information on how to compute and verify signatures of each type.</t>

<t>These meanings are as follows:</t>

<dl newline="true">
  <dt>
0x00: Signature of a binary document.  </dt>
  <dd>
    <t>This means the signer owns it, created it, or certifies that it has not been modified.</t>
  </dd>
  <dt>
0x01: Signature of a canonical text document.  </dt>
  <dd>
    <t>This means the signer owns it, created it, or certifies that it has not been modified.
The signature is calculated over the text data with its line endings converted to &lt;CR&gt;&lt;LF&gt;.</t>
  </dd>
  <dt>
0x02: Standalone signature.  </dt>
  <dd>
    <t>This signature is a signature of only its own subpacket contents.
It is calculated identically to a signature over a zero-length binary document.
V3 standalone signatures <bcp14>MUST NOT</bcp14> be generated and <bcp14>MUST</bcp14> be ignored.</t>
  </dd>
  <dt>
0x10: Generic certification of a User ID and Public-Key packet.  </dt>
  <dd>
    <t>The issuer of this certification does not make any particular assertion as to how well the certifier has checked that the owner of the key is in fact the person described by the User ID.</t>
  </dd>
  <dt>
0x11: Persona certification of a User ID and Public-Key packet.  </dt>
  <dd>
    <t>The issuer of this certification has not done any verification of the claim that the owner of this key is the User ID specified.</t>
  </dd>
  <dt>
0x12: Casual certification of a User ID and Public-Key packet.  </dt>
  <dd>
    <t>The issuer of this certification has done some casual verification of the claim of identity.</t>
  </dd>
  <dt>
0x13: Positive certification of a User ID and Public-Key packet.  </dt>
  <dd>
    <t>The issuer of this certification has done substantial verification of the claim of identity.
</t>

    <t>Most OpenPGP implementations make their "key signatures" as 0x10 certifications.
Some implementations can issue 0x11-0x13 certifications, but few differentiate between the types.</t>
  </dd>
  <dt>
0x18: Subkey Binding Signature.  </dt>
  <dd>
    <t>This signature is a statement by the top-level signing key that indicates that it owns the subkey.
This signature is calculated directly on the primary key and subkey, and not on any User ID or other packets.
A signature that binds a signing subkey <bcp14>MUST</bcp14> have an Embedded Signature subpacket in this binding signature that contains a 0x19 signature made by the signing subkey on the primary key and subkey.</t>
  </dd>
  <dt>
0x19: Primary Key Binding Signature.  </dt>
  <dd>
    <t>This signature is a statement by a signing subkey, indicating that it is owned by the primary key and subkey.
This signature is calculated the same way as a 0x18 signature: directly on the primary key and subkey, and not on any User ID or other packets.</t>
  </dd>
  <dt>
0x1F: Signature directly on a key.  </dt>
  <dd>
    <t>This signature is calculated directly on a key.
It binds the information in the Signature subpackets to the key, and is appropriate to be used for subpackets that provide information about the key, such as the Key Flags subpacket or (deprecated) Revocation Key.
It is also appropriate for statements that non-self certifiers want to make about the key itself, rather than the binding between a key and a name.</t>
  </dd>
  <dt>
0x20: Key revocation signature.  </dt>
  <dd>
    <t>The signature is calculated directly on the key being revoked.
A revoked key is not to be used.
Only revocation signatures by the key being revoked, or by a (deprecated) Revocation Key, should be considered valid revocation signatures.</t>
  </dd>
  <dt>
0x28: Subkey revocation signature.  </dt>
  <dd>
    <t>The signature is calculated directly on the subkey being revoked.
A revoked subkey is not to be used.
Only revocation signatures by the top-level signature key that is bound to this subkey, or by a (deprecated) Revocation Key, should be considered valid revocation signatures.</t>
  </dd>
  <dt>
0x30: Certification revocation signature.  </dt>
  <dd>
    <t>This signature revokes an earlier User ID certification signature (signature class 0x10 through 0x13) or direct-key signature (0x1F).
It should be issued by the same key that issued the revoked signature or by a (deprecated) Revocation Key.
The signature is computed over the same data as the certificate that it revokes, and should have a later creation date than that certificate.</t>
  </dd>
  <dt>
0x40: Timestamp signature.  </dt>
  <dd>
    <t>This signature is only meaningful for the timestamp contained in it.</t>
  </dd>
  <dt>
0x50: Third-Party Confirmation signature.  </dt>
  <dd>
    <t>This signature is a signature over some other OpenPGP Signature packet(s).
It is analogous to a notary seal on the signed data.
A third-party signature <bcp14>SHOULD</bcp14> include Signature Target subpacket(s) to give easy identification.
Note that we really do mean <bcp14>SHOULD</bcp14>.
There are plausible uses for this (such as a blind party that only sees the signature, not the key or source document) that cannot include a target subpacket.</t>
  </dd>
</dl>

</section>
<section anchor="version-three-sig"><name>Version 3 Signature Packet Format</name>

<t>The body of a version 3 Signature Packet contains:</t>

<t><list style="symbols">
  <t>One-octet version number (3).</t>
  <t>One-octet length of following hashed material.
<bcp14>MUST</bcp14> be 5.  <list style="symbols">
      <t>One-octet signature type.</t>
      <t>Four-octet creation time.</t>
    </list></t>
  <t>Eight-octet Key ID of signer.</t>
  <t>One-octet public-key algorithm.</t>
  <t>One-octet hash algorithm.</t>
  <t>Two-octet field holding left 16 bits of signed hash value.</t>
  <t>One or more multiprecision integers comprising the signature.
This portion is algorithm-specific, as described below.</t>
</list></t>

<t>The concatenation of the data to be signed, the signature type, and creation time from the Signature packet (5 additional octets) is hashed.
The resulting hash value is used in the signature algorithm.
The high 16 bits (first two octets) of the hash are included in the Signature packet to provide a way to reject some invalid signatures without performing a signature verification.</t>

<t>Algorithm-Specific Fields for RSA signatures:</t>

<t><list style="symbols">
  <t>Multiprecision integer (MPI) of RSA signature value m**d mod n.</t>
</list></t>

<t>Algorithm-Specific Fields for DSA signatures:</t>

<t><list style="symbols">
  <t>MPI of DSA value r.</t>
  <t>MPI of DSA value s.</t>
</list></t>

<t>The signature calculation is based on a hash of the signed data, as described above.
The details of the calculation are different for DSA signatures than for RSA signatures.</t>

<t>With RSA signatures, the hash value is encoded using PKCS#1 encoding type EMSA-PKCS1-v1_5 as described in Section 9.2 of <xref target="RFC8017"/>.
This requires inserting the hash value as an octet string into an ASN.1 structure.
The object identifier for the type of hash being used is included in the structure.
The hexadecimal representations for the currently defined hash algorithms are as follows:</t>

<texttable title="Hash hexadecimal representations">
      <ttcol align='left'>algorithm</ttcol>
      <ttcol align='left'>hexadecimal representation</ttcol>
      <c>MD5</c>
      <c>0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x02, 0x05</c>
      <c>RIPEMD-160</c>
      <c>0x2B, 0x24, 0x03, 0x02, 0x01</c>
      <c>SHA-1</c>
      <c>0x2B, 0x0E, 0x03, 0x02, 0x1A</c>
      <c>SHA224</c>
      <c>0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x04</c>
      <c>SHA256</c>
      <c>0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01</c>
      <c>SHA384</c>
      <c>0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02</c>
      <c>SHA512</c>
      <c>0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03</c>
</texttable>

<t>The ASN.1 Object Identifiers (OIDs) are as follows:</t>

<texttable title="Hash OIDs">
      <ttcol align='left'>algorithm</ttcol>
      <ttcol align='left'>OID</ttcol>
      <c>MD5</c>
      <c>1.2.840.113549.2.5</c>
      <c>RIPEMD-160</c>
      <c>1.3.36.3.2.1</c>
      <c>SHA-1</c>
      <c>1.3.14.3.2.26</c>
      <c>SHA224</c>
      <c>2.16.840.1.101.3.4.2.4</c>
      <c>SHA256</c>
      <c>2.16.840.1.101.3.4.2.1</c>
      <c>SHA384</c>
      <c>2.16.840.1.101.3.4.2.2</c>
      <c>SHA512</c>
      <c>2.16.840.1.101.3.4.2.3</c>
</texttable>

<t>The full hash prefixes for these are as follows:</t>

<texttable title="Hash hexadecimal prefixes">
      <ttcol align='left'>algorithm</ttcol>
      <ttcol align='left'>full hash prefix</ttcol>
      <c>MD5</c>
      <c>0x30, 0x20, 0x30, 0x0C, 0x06, 0x08, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x02, 0x05, 0x05, 0x00, 0x04, 0x10</c>
      <c>RIPEMD-160</c>
      <c>0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x24, 0x03, 0x02, 0x01, 0x05, 0x00, 0x04, 0x14</c>
      <c>SHA-1</c>
      <c>0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14</c>
      <c>SHA224</c>
      <c>0x30, 0x2D, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x04, 0x05, 0x00, 0x04, 0x1C</c>
      <c>SHA256</c>
      <c>0x30, 0x31, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20</c>
      <c>SHA384</c>
      <c>0x30, 0x41, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02, 0x05, 0x00, 0x04, 0x30</c>
      <c>SHA512</c>
      <c>0x30, 0x51, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, 0x05, 0x00, 0x04, 0x40</c>
</texttable>

<t>DSA signatures <bcp14>MUST</bcp14> use hashes that are equal in size to the number of bits of q, the group generated by the DSA key's generator value.</t>

<t>If the output size of the chosen hash is larger than the number of bits of q, the hash result is truncated to fit by taking the number of leftmost bits equal to the number of bits of q.
This (possibly truncated) hash function result is treated as a number and used directly in the DSA signature algorithm.</t>

</section>
<section anchor="version-4-and-5-signature-packet-formats"><name>Version 4 and 5 Signature Packet Formats</name>

<t>The body of a v4 or v5 Signature packet contains:</t>

<t><list style="symbols">
  <t>One-octet version number.
This is 4 for v4 signatures and 5 for v5 signatures.</t>
  <t>One-octet signature type.</t>
  <t>One-octet public-key algorithm.</t>
  <t>One-octet hash algorithm.</t>
  <t>A scalar octet count for following hashed subpacket data.
For a v4 signature, this is a two-octet field.
For a v5 signature, this is a four-octet field.
Note that this is the length in octets of all of the hashed subpackets; a pointer incremented by this number will skip over the hashed subpackets.</t>
  <t>Hashed subpacket data set (zero or more subpackets).</t>
  <t>A scalar octet count for the following unhashed subpacket data.
For a v4 signature, this is a two-octet field.
For a v5 signature, this is a four-octet field.
Note that this is the length in octets of all of the unhashed subpackets; a pointer incremented by this number will skip over the unhashed subpackets.</t>
  <t>Unhashed subpacket data set (zero or more subpackets).</t>
  <t>Two-octet field holding the left 16 bits of the signed hash value.</t>
  <t>Only for v5 signatures, a 16 octet field containing random values used as salt.</t>
  <t>One or more multiprecision integers comprising the signature.
This portion is algorithm-specific:</t>
</list></t>

<section anchor="sig-rsa"><name>Algorithm-Specific Fields for RSA signatures</name>

<t><list style="symbols">
  <t>Multiprecision integer (MPI) of RSA signature value m**d mod n.</t>
</list></t>

</section>
<section anchor="sig-dsa"><name>Algorithm-Specific Fields for DSA or ECDSA signatures</name>

<t><list style="symbols">
  <t>MPI of DSA or ECDSA value r.</t>
  <t>MPI of DSA or ECDSA value s.</t>
</list></t>

<t>A version 3 signature <bcp14>MUST NOT</bcp14> be created and <bcp14>MUST NOT</bcp14> be used with ECDSA.</t>

</section>
<section anchor="sig-eddsa"><name>Algorithm-Specific Fields for EdDSA signatures</name>

<t><list style="symbols">
  <t>Two MPI-encoded values, whose contents and formatting depend on the choice of curve used (see <xref target="curve-specific-formats"/>).</t>
</list></t>

<t>A version 3 signature <bcp14>MUST NOT</bcp14> be created and <bcp14>MUST NOT</bcp14> be used with EdDSA.</t>

<section anchor="algorithm-specific-fields-for-ed25519-signatures"><name>Algorithm-Specific Fields for Ed25519 signatures</name>

<t>The two MPIs for Ed25519 use octet strings R and S as described in <xref target="RFC8032"/>.</t>

<t><list style="symbols">
  <t>MPI of an EC point R, represented as a (non-prefixed) native (little-endian) octet string up to 32 octets.</t>
  <t>MPI of EdDSA value S, also in (non-prefixed) native little-endian format with a length up to 32 octets.</t>
</list></t>

</section>
<section anchor="algorithm-specific-fields-for-ed448-signatures"><name>Algorithm-Specific Fields for Ed448 signatures</name>

<t>For Ed448 signatures, the native signature format is used as described in <xref target="RFC8032"/>.
The two MPIs are composed as follows:</t>

<t><list style="symbols">
  <t>The first MPI has a body of 115 octets: a prefix 0x40 octet, followed by 114 octets of the native signature.</t>
  <t>The second MPI is set to 0 (this is a placeholder, and is unused).
Note that an MPI with a value of 0 is encoded on the wire as a pair of zero octets: <spanx style="verb">00 00</spanx>.</t>
</list></t>

</section>
</section>
<section anchor="notes-on-signatures"><name>Notes on Signatures</name>

<t>The concatenation of the data being signed and the signature data from the version number through the hashed subpacket data (inclusive) is hashed.
The resulting hash value is what is signed.
The high 16 bits (first two octets) of the hash are included in the Signature packet to provide a way to reject some invalid signatures without performing a signature verification.</t>

<t>There are two fields consisting of Signature subpackets.
The first field is hashed with the rest of the signature data, while the second is unhashed.
The second set of subpackets is not cryptographically protected by the signature and should include only advisory information.</t>

<t>The differences between a v4 and v5 signature are two-fold: first, a v5 signature increases the width of the size indicators for the signed data, making it more capable when signing large keys or messages.
Second, the hash is salted with 128 bit of random data (see <xref target="signature-salt-rationale"/>.</t>

<t>The algorithms for converting the hash function result to a signature are described in <xref target="computing-signatures"/>.</t>

</section>
<section anchor="signature-subpacket"><name>Signature Subpacket Specification</name>

<t>A subpacket data set consists of zero or more Signature subpackets.
In Signature packets, the subpacket data set is preceded by a two-octet (for v4 signatures) or four-octet (for v5 signatures) scalar count of the length in octets of all the subpackets.
A pointer incremented by this number will skip over the subpacket data set.</t>

<t>Each subpacket consists of a subpacket header and a body.
The header consists of:</t>

<t><list style="symbols">
  <t>the subpacket length (1, 2, or 5 octets),</t>
  <t>the subpacket type (1 octet),</t>
</list></t>

<t>and is followed by the subpacket-specific data.</t>

<t>The length includes the type octet but not this length.
Its format is similar to the "new" format packet header lengths, but cannot have Partial Body Lengths.
That is:</t>

<figure><artwork><![CDATA[
if the 1st octet <  192, then
    lengthOfLength = 1
    subpacketLen = 1st_octet

if the 1st octet >= 192 and < 255, then
    lengthOfLength = 2
    subpacketLen = ((1st_octet - 192) << 8) + (2nd_octet) + 192

if the 1st octet = 255, then
    lengthOfLength = 5
    subpacket length = [four-octet scalar starting at 2nd_octet]
]]></artwork></figure>

<t>The value of the subpacket type octet may be:</t>

<texttable title="Subpacket type registry">
      <ttcol align='right'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0</c>
      <c>Reserved</c>
      <c>1</c>
      <c>Reserved</c>
      <c>2</c>
      <c>Signature Creation Time</c>
      <c>3</c>
      <c>Signature Expiration Time</c>
      <c>4</c>
      <c>Exportable Certification</c>
      <c>5</c>
      <c>Trust Signature</c>
      <c>6</c>
      <c>Regular Expression</c>
      <c>7</c>
      <c>Revocable</c>
      <c>8</c>
      <c>Reserved</c>
      <c>9</c>
      <c>Key Expiration Time</c>
      <c>10</c>
      <c>Placeholder for backward compatibility</c>
      <c>11</c>
      <c>Preferred Symmetric Ciphers for v1 SEIPD</c>
      <c>12</c>
      <c>Revocation Key (deprecated)</c>
      <c>13 to 15</c>
      <c>Reserved</c>
      <c>16</c>
      <c>Issuer Key ID</c>
      <c>17 to 19</c>
      <c>Reserved</c>
      <c>20</c>
      <c>Notation Data</c>
      <c>21</c>
      <c>Preferred Hash Algorithms</c>
      <c>22</c>
      <c>Preferred Compression Algorithms</c>
      <c>23</c>
      <c>Key Server Preferences</c>
      <c>24</c>
      <c>Preferred Key Server</c>
      <c>25</c>
      <c>Primary User ID</c>
      <c>26</c>
      <c>Policy URI</c>
      <c>27</c>
      <c>Key Flags</c>
      <c>28</c>
      <c>Signer's User ID</c>
      <c>29</c>
      <c>Reason for Revocation</c>
      <c>30</c>
      <c>Features</c>
      <c>31</c>
      <c>Signature Target</c>
      <c>32</c>
      <c>Embedded Signature</c>
      <c>33</c>
      <c>Issuer Fingerprint</c>
      <c>34</c>
      <c>Reserved</c>
      <c>35</c>
      <c>Intended Recipient Fingerprint</c>
      <c>37</c>
      <c>Reserved (Attested Certifications)</c>
      <c>38</c>
      <c>Reserved (Key Block)</c>
      <c>39</c>
      <c>Preferred AEAD Ciphersuites</c>
      <c>100 to 110</c>
      <c>Private or experimental</c>
</texttable>

<t>An implementation <bcp14>SHOULD</bcp14> ignore any subpacket of a type that it does not recognize.</t>

<t>Bit 7 of the subpacket type is the "critical" bit.
If set, it denotes that the subpacket is one that is critical for the evaluator of the signature to recognize.
If a subpacket is encountered that is marked critical but is unknown to the evaluating software, the evaluator <bcp14>SHOULD</bcp14> consider the signature to be in error.</t>

<t>An evaluator may "recognize" a subpacket, but not implement it.
The purpose of the critical bit is to allow the signer to tell an evaluator that it would prefer a new, unknown feature to generate an error than be ignored.</t>

<t>Implementations <bcp14>SHOULD</bcp14> implement the four preferred algorithm subpackets (11, 21, 22, and 34), as well as the "Reason for Revocation" subpacket.
Note, however, that if an implementation chooses not to implement some of the preferences, it is required to behave in a polite manner to respect the wishes of those users who do implement these preferences.</t>

</section>
<section anchor="signature-subpacket-types"><name>Signature Subpacket Types</name>

<t>A number of subpackets are currently defined.
Some subpackets apply to the signature itself and some are attributes of the key.
Subpackets that are found on a self-signature are placed on a certification made by the key itself.
Note that a key may have more than one User ID, and thus may have more than one self-signature, and differing subpackets.</t>

<t>A subpacket may be found either in the hashed or unhashed subpacket sections of a signature.
If a subpacket is not hashed, then the information in it cannot be considered definitive because it is not part of the signature proper.</t>

</section>
<section anchor="self-sigs"><name>Notes on Self-Signatures</name>

<t>A self-signature is a binding signature made by the key to which the signature refers.
There are three types of self-signatures, the certification signatures (types 0x10-0x13), the direct-key signature (type 0x1F), and the subkey binding signature (type 0x18).
A cryptographically-valid self-signature should be accepted from any primary key, regardless of what Key Flags (<xref target="key-flags"/>) apply to the primary key.
In particular, a primary key does not need to have 0x01 set in the first octet of Key Flags order to make a valid self-signature.</t>

<t>For certification self-signatures, each User ID may have a self-signature, and thus different subpackets in those self-signatures.
For subkey binding signatures, each subkey in fact has a self-signature.
Subpackets that appear in a certification self-signature apply to the user name, and subpackets that appear in the subkey self-signature apply to the subkey.
Lastly, subpackets on the direct-key signature apply to the entire key.</t>

<t>Implementing software should interpret a self-signature's preference subpackets as narrowly as possible.
For example, suppose a key has two user names, Alice and Bob.
Suppose that Alice prefers the AEAD ciphersuite AES-256 with OCB, and Bob prefers Camellia-256 with GCM.
If the software locates this key via Alice's name, then the preferred AEAD ciphersuite is AES-256 with OCB; if software locates the key via Bob's name, then the preferred algorithm is Camellia-256 with GCM.
If the key is located by Key ID, the algorithm of the primary User ID of the key provides the preferred AEAD ciphersuite.</t>

<t>Revoking a self-signature or allowing it to expire has a semantic meaning that varies with the signature type.
Revoking the self-signature on a User ID effectively retires that user name.
The self-signature is a statement, "My name X is tied to my signing key K" and is corroborated by other users' certifications.
If another user revokes their certification, they are effectively saying that they no longer believe that name and that key are tied together.
Similarly, if the users themselves revoke their self-signature, then the users no longer go by that name, no longer have that email address, etc.
Revoking a binding signature effectively retires that subkey.
Revoking a direct-key signature cancels that signature.
Please see <xref target="reason-for-revocation"/> for more relevant detail.</t>

<t>Since a self-signature contains important information about the key's use, an implementation <bcp14>SHOULD</bcp14> allow the user to rewrite the self-signature, and important information in it, such as preferences and key expiration.</t>

<t>It is good practice to verify that a self-signature imported into an implementation doesn't advertise features that the implementation doesn't support, rewriting the signature as appropriate.</t>

<t>An implementation that encounters multiple self-signatures on the same object <bcp14>MUST</bcp14> select the most recent valid self-signature, and ignore all other self-signatures.</t>

<t>By convention, a version 4 key stores information about the primary Public-Key (key flags, key expiration, etc.) and the Transferable Public Key as a whole (features, algorithm preferences, etc.) in a User ID self-signature of type 0x10 or 0x13.
Some implementations require at least one User ID with a valid self-signature to be present to use a v4 key.
For this reason, it is <bcp14>RECOMMENDED</bcp14> to include at least one User ID with a self-signature in v4 keys.</t>

<t>For version 5 keys, it is <bcp14>RECOMMENDED</bcp14> to store information about the primary Public-Key as well as the Transferable Public Key as a whole (key flags, key expiration, features, algorithm preferences, etc.) in a direct-key signature (type 0x1F) over the Public-Key instead of placing that information in a User ID self-signature.
An implementation <bcp14>MUST</bcp14> ensure that a valid direct-key signature is present before using a v5 key.
This prevents certain attacks where an adversary strips a self-signature specifying a key expiration time or certain preferences.</t>

<t>An implementation <bcp14>SHOULD NOT</bcp14> require a User ID self-signature to be present in order to consume or use a key, unless the particular use is contingent on the keyholder identifying themselves with the textual label in the User ID.
For example, when refreshing a key to learn about changes in expiration, advertised features, algorithm preferences, revocation, subkey rotation, and so forth, there is no need to require a User ID self-signature.
On the other hand, when verifying a signature over an e-mail message, an implementation <bcp14>MAY</bcp14> choose to only accept a signature from a key that has a valid self-signature over a User ID that matches the message's From: header, as a way to avoid a signature transplant attack.</t>

</section>
<section anchor="signature-creation-time"><name>Signature Creation Time</name>

<t>(4-octet time field)</t>

<t>The time the signature was made.</t>

<t><bcp14>MUST</bcp14> be present in the hashed area.</t>

</section>
<section anchor="issuer-keyid-subpacket"><name>Issuer Key ID</name>

<t>(8-octet Key ID)</t>

<t>The OpenPGP Key ID of the key issuing the signature.
If the version of that key is greater than 4, this subpacket <bcp14>MUST NOT</bcp14> be included in the signature.
For these keys, consider the Issuer Fingerprint subpacket (<xref target="issuer-fingerprint-subpacket"/>) instead.</t>

<t>Note: in previous versions of this specification, this subpacket was simply known as the "Issuer" subpacket.</t>

</section>
<section anchor="key-expiration-time"><name>Key Expiration Time</name>

<t>(4-octet time field)</t>

<t>The validity period of the key.
This is the number of seconds after the key creation time that the key expires.
For a direct or certification self-signature, the key creation time is that of the primary key.
For a subkey binding signature, the key creation time is that of the subkey.
If this is not present or has a value of zero, the key never expires.
This is found only on a self-signature.</t>

</section>
<section anchor="preferred-v1-seipd"><name>Preferred Symmetric Ciphers for v1 SEIPD</name>

<t>(array of one-octet values)</t>

<t>A series of symmetric cipher algorithm identifiers indicating how the keyholder prefers to receive version 1 Symmetrically Encrypted Integrity Protected Data (<xref target="version-one-seipd"/>).
The subpacket body is an ordered list of octets with the most preferred listed first.
It is assumed that only algorithms listed are supported by the recipient's software.
Algorithm numbers are in <xref target="symmetric-algos"/>.
This is only found on a self-signature.</t>

<t>When generating a v2 SEIPD packet, this preference list is not relevant.
See <xref target="preferred-v2-seipd"/> instead.</t>

</section>
<section anchor="preferred-v2-seipd"><name>Preferred AEAD Ciphersuites</name>

<t>(array of pairs of octets indicating Symmetric Cipher and AEAD algorithms)</t>

<t>A series of paired algorithm identifiers indicating how the keyholder prefers to receive version 2 Symmetrically Encrypted Integrity Protected Data (<xref target="version-two-seipd"/>).
Each pair of octets indicates a combination of a symmetric cipher and an AEAD mode that the key holder prefers to use.
The symmetric cipher identifier precedes the AEAD identifier in each pair.
The subpacket body is an ordered list of pairs of octets with the most preferred algorithm combination listed first.</t>

<t>It is assumed that only the combinations of algorithms listed are supported by the recipient's software, with the exception of the mandatory-to-implement combination of AES-128 and OCB.
If AES-128 and OCB are not found in the subpacket, it is implicitly listed at the end.</t>

<t>AEAD algorithm numbers are listed in <xref target="aead-algorithms"/>.
Symmetric cipher algorithm numbers are listed in <xref target="symmetric-algos"/>.</t>

<t>For example, a subpacket with content of these six octets:</t>

<figure><artwork><![CDATA[
09 02 09 03 13 02
]]></artwork></figure>

<t>Indicates that the keyholder prefers to receive v2 SEIPD using AES-256 with OCB, then AES-256 with GCM, then Camellia-256 with OCB, and finally the implicit AES-128 with OCB.</t>

<t>Note that support for version 2 of the Symmetrically Encrypted Integrity Protected Data packet (<xref target="version-two-seipd"/>) in general is indicated by a Feature Flag (<xref target="features-subpacket"/>).</t>

<t>This subpacket is only found on a self-signature.</t>

<t>When generating a v1 SEIPD packet, this preference list is not relevant.
See <xref target="preferred-v1-seipd"/> instead.</t>

</section>
<section anchor="preferred-hash-algorithms"><name>Preferred Hash Algorithms</name>

<t>(array of one-octet values)</t>

<t>Message digest algorithm numbers that indicate which algorithms the key holder prefers to receive.
Like the preferred AEAD ciphersuites, the list is ordered.
Algorithm numbers are in <xref target="hash-algos"/>.
This is only found on a self-signature.</t>

</section>
<section anchor="preferred-compression-algorithms"><name>Preferred Compression Algorithms</name>

<t>(array of one-octet values)</t>

<t>Compression algorithm numbers that indicate which algorithms the key holder prefers to use.
Like the preferred AEAD ciphersuites, the list is ordered.
Algorithm numbers are in <xref target="compression-algos"/>.
A zero, or the absence of this subpacket, denotes that uncompressed data is preferred; the key holder's software might have no compression software in that implementation.
This is only found on a self-signature.</t>

</section>
<section anchor="signature-expiration-time"><name>Signature Expiration Time</name>

<t>(4-octet time field)</t>

<t>The validity period of the signature.
This is the number of seconds after the signature creation time that the signature expires.
If this is not present or has a value of zero, it never expires.</t>

</section>
<section anchor="exportable-certification"><name>Exportable Certification</name>

<t>(1 octet of exportability, 0 for not, 1 for exportable)</t>

<t>This subpacket denotes whether a certification signature is "exportable", to be used by other users than the signature's issuer.
The packet body contains a Boolean flag indicating whether the signature is exportable.
If this packet is not present, the certification is exportable; it is equivalent to a flag containing a 1.</t>

<t>Non-exportable, or "local", certifications are signatures made by a user to mark a key as valid within that user's implementation only.</t>

<t>Thus, when an implementation prepares a user's copy of a key for transport to another user (this is the process of "exporting" the key), any local certification signatures are deleted from the key.</t>

<t>The receiver of a transported key "imports" it, and likewise trims any local certifications.
In normal operation, there won't be any, assuming the import is performed on an exported key.
However, there are instances where this can reasonably happen.
For example, if an implementation allows keys to be imported from a key database in addition to an exported key, then this situation can arise.</t>

<t>Some implementations do not represent the interest of a single user (for example, a key server).
Such implementations always trim local certifications from any key they handle.</t>

</section>
<section anchor="revocable"><name>Revocable</name>

<t>(1 octet of revocability, 0 for not, 1 for revocable)</t>

<t>Signature's revocability status.
The packet body contains a Boolean flag indicating whether the signature is revocable.
Signatures that are not revocable have any later revocation signatures ignored.
They represent a commitment by the signer that he cannot revoke his signature for the life of his key.
If this packet is not present, the signature is revocable.</t>

</section>
<section anchor="trust-signature"><name>Trust Signature</name>

<t>(1 octet "level" (depth), 1 octet of trust amount)</t>

<t>Signer asserts that the key is not only valid but also trustworthy at the specified level.
Level 0 has the same meaning as an ordinary validity signature.
Level 1 means that the signed key is asserted to be a valid trusted introducer, with the 2nd octet of the body specifying the degree of trust.
Level 2 means that the signed key is asserted to be trusted to issue level 1 trust signatures; that is, the signed key is a "meta introducer".
Generally, a level n trust signature asserts that a key is trusted to issue level n-1 trust signatures.
The trust amount is in a range from 0-255, interpreted such that values less than 120 indicate partial trust and values of 120 or greater indicate complete trust.
Implementations <bcp14>SHOULD</bcp14> emit values of 60 for partial trust and 120 for complete trust.</t>

</section>
<section anchor="regular-expression"><name>Regular Expression</name>

<t>(null-terminated regular expression)</t>

<t>Used in conjunction with trust Signature packets (of level &gt; 0) to limit the scope of trust that is extended.
Only signatures by the target key on User IDs that match the regular expression in the body of this packet have trust extended by the trust Signature subpacket.
The regular expression uses the same syntax as the Henry Spencer's "almost public domain" regular expression <xref target="REGEX"/> package.
A description of the syntax is found in <xref target="regular-expressions"/>.</t>

</section>
<section anchor="revocation-key"><name>Revocation Key</name>

<t>(1 octet of class, 1 octet of public-key algorithm ID, 20 octets of v4 fingerprint)</t>

<t>This mechanism is deprecated.
Applications <bcp14>MUST NOT</bcp14> generate such a subpacket.</t>

<t>An application that wants the functionality of delegating revocation <bcp14>SHOULD</bcp14> instead use an escrowed Revocation Signature.
See <xref target="escrowed-revocations"/> for more details.</t>

<t>The remainder of this section describes how some implementations attempt to interpret this deprecated subpacket.</t>

<t>This packet was intended to authorize the specified key to issue revocation signatures for this key.
Class octet must have bit 0x80 set.
If the bit 0x40 is set, then this means that the revocation information is sensitive.
Other bits are for future expansion to other kinds of authorizations.
This is only found on a direct-key self-signature (type 0x1f).
The use on other types of self-signatures is unspecified.</t>

<t>If the "sensitive" flag is set, the keyholder feels this subpacket contains private trust information that describes a real-world sensitive relationship.
If this flag is set, implementations <bcp14>SHOULD NOT</bcp14> export this signature to other users except in cases where the data needs to be available: when the signature is being sent to the designated revoker, or when it is accompanied by a revocation signature from that revoker.
Note that it may be appropriate to isolate this subpacket within a separate signature so that it is not combined with other subpackets that need to be exported.</t>

</section>
<section anchor="notation-data"><name>Notation Data</name>

<t>(4 octets of flags, 2 octets of name length (M), 2 octets of value length (N), M octets of name data, N octets of value data)</t>

<t>This subpacket describes a "notation" on the signature that the issuer wishes to make.
The notation has a name and a value, each of which are strings of octets.
There may be more than one notation in a signature.
Notations can be used for any extension the issuer of the signature cares to make.
The "flags" field holds four octets of flags.</t>

<t>All undefined flags <bcp14>MUST</bcp14> be zero.
Defined flags are as follows:</t>

<texttable title="Signature Notation Data Subpacket Notation Flag registry">
      <ttcol align='left'>Flag</ttcol>
      <ttcol align='left'>Shorthand</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Security Recommended</ttcol>
      <ttcol align='left'>Interoperability Recommended</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0x80 0x00 0x00 0x00</c>
      <c>human-readable</c>
      <c>Notation value is text.</c>
      <c>No</c>
      <c>Yes</c>
      <c>This document</c>
</texttable>

<t>Notation names are arbitrary strings encoded in UTF-8.
They reside in two namespaces: The IETF namespace and the user namespace.</t>

<t>The IETF namespace is registered with IANA.
These names <bcp14>MUST NOT</bcp14> contain the "@" character (0x40).
This is a tag for the user namespace.</t>

<texttable title="Signature Notation Data Subpacket registry">
      <ttcol align='left'>Notation Name</ttcol>
      <ttcol align='left'>Data Type</ttcol>
      <ttcol align='left'>Allowed Values</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
</texttable>

<t>Names in the user namespace consist of a UTF-8 string tag followed by "@" followed by a DNS domain name.
Note that the tag <bcp14>MUST NOT</bcp14> contain an "@" character.
For example, the "sample" tag used by Example Corporation could be "sample@example.com".</t>

<t>Names in a user space are owned and controlled by the owners of that domain.
Obviously, it's bad form to create a new name in a DNS space that you don't own.</t>

<t>Since the user namespace is in the form of an email address, implementers <bcp14>MAY</bcp14> wish to arrange for that address to reach a person who can be consulted about the use of the named tag.
Note that due to UTF-8 encoding, not all valid user space name tags are valid email addresses.</t>

<t>If there is a critical notation, the criticality applies to that specific notation and not to notations in general.</t>

</section>
<section anchor="key-server-preferences"><name>Key Server Preferences</name>

<t>(N octets of flags)</t>

<t>This is a list of one-bit flags that indicate preferences that the key holder has about how the key is handled on a key server.
All undefined flags <bcp14>MUST</bcp14> be zero.</t>

<t>First octet:</t>

<texttable title="Key server preferences flag registry (first octet)">
      <ttcol align='left'>flag</ttcol>
      <ttcol align='left'>shorthand</ttcol>
      <ttcol align='left'>definition</ttcol>
      <c>0x80</c>
      <c>No-modify</c>
      <c>The key holder requests that this key only be modified or updated by the key holder or an administrator of the key server.</c>
</texttable>

<t>This is found only on a self-signature.</t>

</section>
<section anchor="preferred-key-server"><name>Preferred Key Server</name>

<t>(String)</t>

<t>This is a URI of a key server that the key holder prefers be used for updates.
Note that keys with multiple User IDs can have a preferred key server for each User ID.
Note also that since this is a URI, the key server can actually be a copy of the key retrieved by ftp, http, finger, etc.</t>

</section>
<section anchor="primary-user-id"><name>Primary User ID</name>

<t>(1 octet, Boolean)</t>

<t>This is a flag in a User ID's self-signature that states whether this User ID is the main User ID for this key.
It is reasonable for an implementation to resolve ambiguities in preferences, etc.
by referring to the primary User ID.
If this flag is absent, its value is zero.
If more than one User ID in a key is marked as primary, the implementation may resolve the ambiguity in any way it sees fit, but it is <bcp14>RECOMMENDED</bcp14> that priority be given to the User ID with the most recent self-signature.</t>

<t>When appearing on a self-signature on a User ID packet, this subpacket applies only to User ID packets.
When appearing on a self-signature on a User Attribute packet, this subpacket applies only to User Attribute packets.
That is to say, there are two different and independent "primaries" --- one for User IDs, and one for User Attributes.</t>

</section>
<section anchor="policy-uri"><name>Policy URI</name>

<t>(String)</t>

<t>This subpacket contains a URI of a document that describes the policy under which the signature was issued.</t>

</section>
<section anchor="key-flags"><name>Key Flags</name>

<t>(N octets of flags)</t>

<t>This subpacket contains a list of binary flags that hold information about a key.
It is a string of octets, and an implementation <bcp14>MUST NOT</bcp14> assume a fixed size.
This is so it can grow over time.
If a list is shorter than an implementation expects, the unstated flags are considered to be zero.
The defined flags are as follows:</t>

<t>First octet:</t>

<texttable title="Key flags registry (first octet)">
      <ttcol align='left'>flag</ttcol>
      <ttcol align='left'>definition</ttcol>
      <c>0x01</c>
      <c>This key may be used to make User ID certifications (signature types 0x10-0x13) or direct-key signatures (signature type 0x1F) over other keys.</c>
      <c>0x02</c>
      <c>This key may be used to sign data.</c>
      <c>0x04</c>
      <c>This key may be used to encrypt communications.</c>
      <c>0x08</c>
      <c>This key may be used to encrypt storage.</c>
      <c>0x10</c>
      <c>The private component of this key may have been split by a secret-sharing mechanism.</c>
      <c>0x20</c>
      <c>This key may be used for authentication.</c>
      <c>0x80</c>
      <c>The private component of this key may be in the possession of more than one person.</c>
</texttable>

<t>Second octet:</t>

<texttable title="Key flags registry (second octet)">
      <ttcol align='left'>flag</ttcol>
      <ttcol align='left'>definition</ttcol>
      <c>0x04</c>
      <c>Reserved (ADSK).</c>
      <c>0x08</c>
      <c>Reserved (timestamping).</c>
</texttable>

<t>Usage notes:</t>

<t>The flags in this packet may appear in self-signatures or in certification signatures.
They mean different things depending on who is making the statement --- for example, a certification signature that has the "sign data" flag is stating that the certification is for that use.
On the other hand, the "communications encryption" flag in a self-signature is stating a preference that a given key be used for communications.
Note however, that it is a thorny issue to determine what is "communications" and what is "storage".
This decision is left wholly up to the implementation; the authors of this document do not claim any special wisdom on the issue and realize that accepted opinion may change.</t>

<t>The "split key" (0x10) and "group key" (0x80) flags are placed on a self-signature only; they are meaningless on a certification signature.
They <bcp14>SHOULD</bcp14> be placed only on a direct-key signature (type 0x1F) or a subkey signature (type 0x18), one that refers to the key the flag applies to.</t>

</section>
<section anchor="signers-user-id"><name>Signer's User ID</name>

<t>(String)</t>

<t>This subpacket allows a keyholder to state which User ID is responsible for the signing.
Many keyholders use a single key for different purposes, such as business communications as well as personal communications.
This subpacket allows such a keyholder to state which of their roles is making a signature.</t>

<t>This subpacket is not appropriate to use to refer to a User Attribute packet.</t>

</section>
<section anchor="reason-for-revocation"><name>Reason for Revocation</name>

<t>(1 octet of revocation code, N octets of reason string)</t>

<t>This subpacket is used only in key revocation and certification revocation signatures.
It describes the reason why the key or certificate was revoked.</t>

<t>The first octet contains a machine-readable code that denotes the reason for the revocation:</t>

<texttable title="Reasons for revocation">
      <ttcol align='right'>Code</ttcol>
      <ttcol align='left'>Reason</ttcol>
      <c>0</c>
      <c>No reason specified (key revocations or cert revocations)</c>
      <c>1</c>
      <c>Key is superseded (key revocations)</c>
      <c>2</c>
      <c>Key material has been compromised (key revocations)</c>
      <c>3</c>
      <c>Key is retired and no longer used (key revocations)</c>
      <c>32</c>
      <c>User ID information is no longer valid (cert revocations)</c>
      <c>100-110</c>
      <c>Private Use</c>
</texttable>

<t>Following the revocation code is a string of octets that gives information about the Reason for Revocation in human-readable form (UTF-8).
The string may be null (of zero length).
The length of the subpacket is the length of the reason string plus one.
An implementation <bcp14>SHOULD</bcp14> implement this subpacket, include it in all revocation signatures, and interpret revocations appropriately.
There are important semantic differences between the reasons, and there are thus important reasons for revoking signatures.</t>

<t>If a key has been revoked because of a compromise, all signatures created by that key are suspect.
However, if it was merely superseded or retired, old signatures are still valid.
If the revoked signature is the self-signature for certifying a User ID, a revocation denotes that that user name is no longer in use.
Such a revocation <bcp14>SHOULD</bcp14> include a 0x20 code.</t>

<t>Note that any signature may be revoked, including a certification on some other person's key.
There are many good reasons for revoking a certification signature, such as the case where the keyholder leaves the employ of a business with an email address.
A revoked certification is no longer a part of validity calculations.</t>

</section>
<section anchor="features-subpacket"><name>Features</name>

<t>(N octets of flags)</t>

<t>The Features subpacket denotes which advanced OpenPGP features a user's implementation supports.
This is so that as features are added to OpenPGP that cannot be backwards-compatible, a user can state that they can use that feature.
The flags are single bits that indicate that a given feature is supported.</t>

<t>This subpacket is similar to a preferences subpacket, and only appears in a self-signature.</t>

<t>An implementation <bcp14>SHOULD NOT</bcp14> use a feature listed when sending to a user who does not state that they can use it.</t>

<t>Defined features are as follows:</t>

<t>First octet:</t>

<texttable title="Features registry">
      <ttcol align='left'>Feature</ttcol>
      <ttcol align='left'>Definition</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0x01</c>
      <c>Symmetrically Encrypted Integrity Protected Data packet version 1</c>
      <c><xref target="version-one-seipd"/></c>
      <c>0x02</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>0x04</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>0x08</c>
      <c>Symmetrically Encrypted Integrity Protected Data packet version 2</c>
      <c><xref target="version-two-seipd"/></c>
</texttable>

<t>If an implementation implements any of the defined features, it <bcp14>SHOULD</bcp14> implement the Features subpacket, too.</t>

<t>An implementation may freely infer features from other suitable implementation-dependent mechanisms.</t>

<t>See <xref target="ciphertext-malleability"/> for details about how to use the Features subpacket when generating encryption data.</t>

</section>
<section anchor="signature-target"><name>Signature Target</name>

<t>(1 octet public-key algorithm, 1 octet hash algorithm, N octets hash)</t>

<t>This subpacket identifies a specific target signature to which a signature refers.
For revocation signatures, this subpacket provides explicit designation of which signature is being revoked.
For a third-party or timestamp signature, this designates what signature is signed.
All arguments are an identifier of that target signature.</t>

<t>The N octets of hash data <bcp14>MUST</bcp14> be the size of the hash of the signature.
For example, a target signature with a SHA-1 hash <bcp14>MUST</bcp14> have 20 octets of hash data.</t>

</section>
<section anchor="embedded-signature"><name>Embedded Signature</name>

<t>(1 signature packet body)</t>

<t>This subpacket contains a complete Signature packet body as specified in <xref target="signature-packet"/>.
It is useful when one signature needs to refer to, or be incorporated in, another signature.</t>

</section>
<section anchor="issuer-fingerprint-subpacket"><name>Issuer Fingerprint</name>

<t>(1 octet key version number, N octets of fingerprint)</t>

<t>The OpenPGP Key fingerprint of the key issuing the signature.
This subpacket <bcp14>SHOULD</bcp14> be included in all signatures.
If the version of the issuing key is 4 and an Issuer Key ID subpacket (<xref target="issuer-keyid-subpacket"/>) is also included in the signature, the key ID of the Issuer Key ID subpacket <bcp14>MUST</bcp14> match the low 64 bits of the fingerprint.</t>

<t>Note that the length N of the fingerprint for a version 4 key is 20 octets; for a version 5 key N is 32.
Since the version of the signature is bound to the version of the key, the version octet here <bcp14>MUST</bcp14> match the version of the signature.
If the version octet does not match the signature version, the receiving implementation <bcp14>MUST</bcp14> treat it as a malformed signature (see <xref target="malformed-signatures"/>).</t>

</section>
<section anchor="intended-recipient-fingerprint"><name>Intended Recipient Fingerprint</name>

<t>(1 octet key version number, N octets of fingerprint)</t>

<t>The OpenPGP Key fingerprint of the intended recipient primary key.
If one or more subpackets of this type are included in a signature, it <bcp14>SHOULD</bcp14> be considered valid only in an encrypted context, where the key it was encrypted to is one of the indicated primary keys, or one of their subkeys.
This can be used to prevent forwarding a signature outside of its intended, encrypted context (see <xref target="surreptitious-forwarding"/>).</t>

<t>Note that the length N of the fingerprint for a version 4 key is 20 octets; for a version 5 key N is 32.</t>

<t>An implementation <bcp14>SHOULD</bcp14> generate this subpacket when creating a signed and encrypted message.</t>

</section>
</section>
<section anchor="computing-signatures"><name>Computing Signatures</name>

<t>All signatures are formed by producing a hash over the signature data, and then using the resulting hash in the signature algorithm.</t>

<t>When a v5 signature is made, the salt is hashed first.</t>

<t>For binary document signatures (type 0x00), the document data is hashed directly.
For text document signatures (type 0x01), the implementation <bcp14>MUST</bcp14> first canonicalize the document by converting line endings to &lt;CR&gt;&lt;LF&gt; and encoding it in UTF-8 (see <xref target="RFC3629"/>).
The resulting UTF-8 bytestream is hashed.</t>

<t>When a v4 signature is made over a key, the hash data starts with the octet 0x99, followed by a two-octet length of the key, and then body of the key packet.
When a v5 signature is made over a key, the hash data starts with the octet 0x9a, followed by a four-octet length of the key, and then body of the key packet.</t>

<t>A subkey binding signature (type 0x18) or primary key binding signature (type 0x19) then hashes the subkey using the same format as the main key (also using 0x99 or 0x9a as the first octet).
Primary key revocation signatures (type 0x20) hash only the key being revoked.
Subkey revocation signature (type 0x28) hash first the primary key and then the subkey being revoked.</t>

<t>A certification signature (type 0x10 through 0x13) hashes the User ID being bound to the key into the hash context after the above data.
A v3 certification hashes the contents of the User ID or attribute packet packet, without any header.
A v4 or v5 certification hashes the constant 0xB4 for User ID certifications or the constant 0xD1 for User Attribute certifications, followed by a four-octet number giving the length of the User ID or User Attribute data, and then the User ID or User Attribute data.</t>

<t>When a signature is made over a Signature packet (type 0x50, "Third-Party Confirmation signature"), the hash data starts with the octet 0x88, followed by the four-octet length of the signature, and then the body of the Signature packet.
(Note that this is a Legacy packet header for a Signature packet with the length-of-length field set to zero.) The unhashed subpacket data of the Signature packet being hashed is not included in the hash, and the unhashed subpacket data length value is set to zero.</t>

<t>Once the data body is hashed, then a trailer is hashed.
This trailer depends on the version of the signature.</t>

<t><list style="symbols">
  <t>A v3 signature hashes five octets of the packet body, starting from the signature type field.
This data is the signature type, followed by the four-octet signature time.</t>
  <t>A v4 or v5 signature hashes the packet body starting from its first field, the version number, through the end of the hashed subpacket data and a final extra trailer.
Thus, the hashed fields are:  <list style="symbols">
      <t>An octet indicating the signature version (0x04 for v4, 0x05 for v5),</t>
      <t>the signature type,</t>
      <t>the public-key algorithm,</t>
      <t>the hash algorithm,</t>
      <t>the hashed subpacket length,</t>
      <t>the hashed subpacket body,</t>
      <t>A second version octet (0x04 for v4, 0x05 for v5)</t>
      <t>A single octet 0xFF,</t>
      <t>A number representing the length of the hashed data from the Signature packet stopping right before the second version octet.
For a v4 signature, this is a four-octet big-endian number, considered to be an unsigned integer modulo 2**32.
For a v5 signature, this is an eight-octet big-endian number, considered to be an unsigned integer modulo 2**64.</t>
    </list></t>
</list></t>

<t>After all this has been hashed in a single hash context, the resulting hash field is used in the signature algorithm and placed at the end of the Signature packet.</t>

<section anchor="subpacket-hints"><name>Subpacket Hints</name>

<t>It is certainly possible for a signature to contain conflicting information in subpackets.
For example, a signature may contain multiple copies of a preference or multiple expiration times.
In most cases, an implementation <bcp14>SHOULD</bcp14> use the last subpacket in the signature, but <bcp14>MAY</bcp14> use any conflict resolution scheme that makes more sense.
Please note that we are intentionally leaving conflict resolution to the implementer; most conflicts are simply syntax errors, and the wishy-washy language here allows a receiver to be generous in what they accept, while putting pressure on a creator to be stingy in what they generate.</t>

<t>Some apparent conflicts may actually make sense --- for example, suppose a keyholder has a v3 key and a v4 key that share the same RSA key material.
Either of these keys can verify a signature created by the other, and it may be reasonable for a signature to contain an Issuer Key ID subpacket (<xref target="issuer-keyid-subpacket"/>) for each key, as a way of explicitly tying those keys to the signature.</t>

</section>
</section>
<section anchor="malformed-signatures"><name>Malformed and Unknown Signatures</name>

<t>In some cases, a signature packet (or its corresponding One-Pass Signature Packet, see <xref target="one-pass-sig"/>) may be malformed or unknown.
For example, it might encounter any of the following problems (this is not an exhaustive list):</t>

<t><list style="symbols">
  <t>an unknown signature type</t>
  <t>an unknown signature version</t>
  <t>an unsupported signature version</t>
  <t>an unknown "critical" subpacket (see <xref target="signature-subpacket"/>) in the hashed area</t>
  <t>a subpacket with a length that diverges from the expected length</t>
  <t>a hashed subpacket area with length that exceeds the length of the signature packet itself</t>
  <t>a known-weak hash algorithm (e.g. MD5)</t>
</list></t>

<t>When an implementation encounters such a malformed or unknown signature, it <bcp14>MUST</bcp14> ignore the signature for validation purposes.
It <bcp14>MUST NOT</bcp14> indicate a successful signature validation for such a signature.
At the same time, it <bcp14>MUST NOT</bcp14> halt processing on the packet stream or reject other signatures in the same packet stream just because an unknown or invalid signature exists.</t>

<t>This requirement is necessary for forward-compatibility.
Producing an output that indicates that no successful signatures were found is preferable to aborting processing entirely.</t>

</section>
</section>
<section anchor="skesk"><name>Symmetric-Key Encrypted Session Key Packets (Tag 3)</name>

<t>The Symmetric-Key Encrypted Session Key (SKESK) packet holds the symmetric-key encryption of a session key used to encrypt a message.
Zero or more Public-Key Encrypted Session Key packets (<xref target="pkesk"/>) and/or Symmetric-Key Encrypted Session Key packets may precede a an encryption container (that is, a Symmetrically Encrypted Integrity Protected Data packet or --- for historic data --- 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(s).</t>

<t>If the encryption container 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 passphrases.</t>

<t>The body of this packet starts with a one-octet number giving the version number of the packet type.
The currently defined versions are 4 and 5.
The remainder of the packet depends on the version.</t>

<t>The versions differ in how they encrypt the session key with the password, and in what they encode.
The version of the SKESK packet must align with the version of the SEIPD packet (see <xref target="encrypted-message-versions"/>).</t>

<section anchor="v4-skesk"><name>v4 SKESK</name>

<t>A version 4 Symmetric-Key Encrypted Session Key (SKESK) packet precedes a version 1 Symmetrically Encrypted Integrity Protected Data (v1 SEIPD, see <xref target="version-one-seipd"/>) packet.
In historic data, it is sometimes found preceding a deprecated Symmetrically Encrypted Data packet (SED, see <xref target="sed"/>).
A v4 SKESK packet <bcp14>MUST NOT</bcp14> precede a v2 SEIPD packet (see <xref target="encrypted-message-versions"/>).</t>

<t>A version 4 Symmetric-Key Encrypted Session Key packet consists of:</t>

<t><list style="symbols">
  <t>A one-octet version number with value 4.</t>
  <t>A one-octet number describing the symmetric algorithm used.</t>
  <t>A string-to-key (S2K) specifier.
The length of the string-to-key specifier depends on its type (see <xref target="s2k-types"/>).</t>
  <t>Optionally, the encrypted session key itself, which is decrypted with the string-to-key object.</t>
</list></t>

<t>If the encrypted session key is not present (which can be detected on the basis of packet length and S2K specifier size), then the S2K algorithm applied to the passphrase produces the session key for decrypting the message, using the symmetric cipher algorithm from the Symmetric-Key Encrypted Session Key packet.</t>

<t>If the encrypted session key is present, the result of applying the S2K algorithm to the passphrase is used to decrypt just that encrypted session key field, using CFB mode with an IV of all zeros.
The decryption result consists of a one-octet algorithm identifier that specifies the symmetric-key encryption algorithm used to encrypt the following encryption container, followed by the session key octets themselves.</t>

<t>Note: because an all-zero IV is used for this decryption, the S2K specifier <bcp14>MUST</bcp14> use a salt value, either a Salted S2K, an Iterated-Salted S2K, or Argon2.
The salt value will ensure that the decryption key is not repeated even if the passphrase is reused.</t>

</section>
<section anchor="v5-skesk"><name>v5 SKESK</name>

<t>A version 5 Symmetric-Key Encrypted Session Key (SKESK) packet precedes a version 2 Symmetrically Encrypted Integrity Protected Data (v2 SEIPD, see <xref target="version-two-seipd"/>) packet.
A v5 SKESK packet <bcp14>MUST NOT</bcp14> precede a v1 SEIPD packet or a deprecated Symmetrically Encrypted Data packet (see <xref target="encrypted-message-versions"/>).</t>

<t>A version 5 Symmetric-Key Encrypted Session Key packet consists of:</t>

<t><list style="symbols">
  <t>A one-octet version number with value 5.</t>
  <t>A one-octet scalar octet count of the following 5 fields.</t>
  <t>A one-octet symmetric cipher algorithm identifier.</t>
  <t>A one-octet AEAD algorithm identifier.</t>
  <t>A one-octet scalar octet count of the following field.</t>
  <t>A string-to-key (S2K) specifier.
The length of the string-to-key specifier depends on its type (see <xref target="s2k-types"/>).</t>
  <t>A starting initialization vector of size specified by the AEAD algorithm.</t>
  <t>The encrypted session key itself.</t>
  <t>An authentication tag for the AEAD mode.</t>
</list></t>

<t>HKDF is used with SHA256 as hash algorithm, the key derived from S2K as Initial Keying Material (IKM), no salt, and the Packet Tag in new format encoding (bits 7 and 6 set, bits 5-0 carry the packet tag), the packet version, and the cipher-algo and AEAD-mode used to encrypt the key material, are used as info parameter.
Then, the session key is encrypted using the resulting key, with the AEAD algorithm specified for version 2 of the Symmetrically Encrypted Integrity Protected Data packet.
Note that no chunks are used and that there is only one authentication tag.
The Packet Tag in OpenPGP format encoding (bits 7 and 6 set, bits 5-0 carry the packet tag), the packet version number, the cipher algorithm octet, and the AEAD algorithm octet are given as additional data.
For example, the additional data used with AES-128 with OCB consists of the octets 0xC3, 0x05, 0x07, and 0x02.</t>

</section>
</section>
<section anchor="one-pass-sig"><name>One-Pass Signature Packets (Tag 4)</name>

<t>The One-Pass Signature packet precedes the signed data and contains enough information to allow the receiver to begin calculating any hashes needed to verify the signature.
It allows the Signature packet to be placed at the end of the message, so that the signer can compute the entire signed message in one pass.</t>

<t>The body of this packet consists of:</t>

<t><list style="symbols">
  <t>A one-octet version number.
The currently defined versions are 3 and 5.</t>
  <t>A one-octet signature type.
Signature types are described in <xref target="signature-types"/>.</t>
  <t>A one-octet number describing the hash algorithm used.</t>
  <t>A one-octet number describing the public-key algorithm used.</t>
  <t>Only for v5 packets, a 16 octet field containing random values used as salt.
The value must match the salt field of the corresponding Signature packet.</t>
  <t>Only for v3 packets, an eight-octet number holding the Key ID of the signing key.</t>
  <t>Only for v5 packets, a one octet key version number and N octets of the fingerprint of the signing key.
Note that the length N of the fingerprint for a version 5 key is 32.
Since a v5 signature can only be made by a v5 key, the key version number <bcp14>MUST</bcp14> be 5.
An application that encounters a v5 One-Pass Signature packet where the key version number is not 5 <bcp14>MUST</bcp14> treat the signature as invalid (see <xref target="malformed-signatures"/>).</t>
  <t>A one-octet number holding a flag showing whether the signature is nested.
A zero value indicates that the next packet is another One-Pass Signature packet that describes another signature to be applied to the same message data.</t>
</list></t>

<t>When generating a one-pass signature, the OPS packet version <bcp14>MUST</bcp14> correspond to the version of the associated signature packet, except for the historical accident that v4 keys use a v3 one-pass signature packet (there is no v4 OPS):</t>

<texttable title="Versions of packets used in a one-pass signature">
      <ttcol align='left'>Signing key version</ttcol>
      <ttcol align='left'>OPS packet version</ttcol>
      <ttcol align='left'>Signature packet version</ttcol>
      <c>4</c>
      <c>3</c>
      <c>4</c>
      <c>5</c>
      <c>5</c>
      <c>5</c>
</texttable>

<t>Note that if a message contains more than one one-pass signature, then the Signature packets bracket the message; that is, the first Signature packet after the message corresponds to the last one-pass packet and the final Signature packet corresponds to the first one-pass packet.</t>

</section>
<section anchor="key-material-packet"><name>Key Material Packet</name>

<t>A key material packet contains all the information about a public or private key.
There are four variants of this packet type, and two major versions.
Consequently, this section is complex.</t>

<section anchor="key-packet-variants"><name>Key Packet Variants</name>

<section anchor="public-key-packet-tag-6"><name>Public-Key Packet (Tag 6)</name>

<t>A Public-Key packet starts a series of packets that forms an OpenPGP key (sometimes called an OpenPGP certificate).</t>

</section>
<section anchor="public-subkey-packet-tag-14"><name>Public-Subkey Packet (Tag 14)</name>

<t>A Public-Subkey packet (tag 14) has exactly the same format as a Public-Key packet, but denotes a subkey.
One or more subkeys may be associated with a top-level key.
By convention, the top-level key provides signature services, and the subkeys provide encryption services.</t>

</section>
<section anchor="secret-key-packet-tag-5"><name>Secret-Key Packet (Tag 5)</name>

<t>A Secret-Key packet contains all the information that is found in a Public-Key packet, including the public-key material, but also includes the secret-key material after all the public-key fields.</t>

</section>
<section anchor="secret-subkey-packet-tag-7"><name>Secret-Subkey Packet (Tag 7)</name>

<t>A Secret-Subkey packet (tag 7) is the subkey analog of the Secret Key packet and has exactly the same format.</t>

</section>
</section>
<section anchor="public-key-packet-formats"><name>Public-Key Packet Formats</name>

<t>There are three versions of key-material packets.</t>

<t>OpenPGP implementations <bcp14>SHOULD</bcp14> create keys with version 5 format.
V4 keys are deprecated; an implementation <bcp14>SHOULD NOT</bcp14> generate a v4 key, but <bcp14>SHOULD</bcp14> accept it.
V3 keys are deprecated; an implementation <bcp14>MUST NOT</bcp14> generate a v3 key, but <bcp14>MAY</bcp14> accept it.
V2 keys are deprecated; an implementation <bcp14>MUST NOT</bcp14> generate a v2 key, but <bcp14>MAY</bcp14> accept it.</t>

<t>A version 3 public key or public-subkey packet contains:</t>

<t><list style="symbols">
  <t>A one-octet version number (3).</t>
  <t>A four-octet number denoting the time that the key was created.</t>
  <t>A two-octet number denoting the time in days that this key is valid.
If this number is zero, then it does not expire.</t>
  <t>A one-octet number denoting the public-key algorithm of this key.</t>
  <t>A series of multiprecision integers comprising the key material:  <list style="symbols">
      <t>a multiprecision integer (MPI) of RSA public modulus n;</t>
      <t>an MPI of RSA public encryption exponent e.</t>
    </list></t>
</list></t>

<t>V3 keys are deprecated.
They contain three weaknesses.
First, it is relatively easy to construct a v3 key that has the same Key ID as any other key because the Key ID is simply the low 64 bits of the public modulus.
Secondly, because the fingerprint of a v3 key hashes the key material, but not its length, there is an increased opportunity for fingerprint collisions.
Third, there are weaknesses in the MD5 hash algorithm that make developers prefer other algorithms.
See <xref target="key-ids-fingerprints"/> for a fuller discussion of Key IDs and fingerprints.</t>

<t>V2 keys are identical to the deprecated v3 keys except for the version number.</t>

<t>The version 4 format is similar to the version 3 format except for the absence of a validity period.
This has been moved to the Signature packet.
In addition, fingerprints of version 4 keys are calculated differently from version 3 keys, as described in <xref target="key-ids-fingerprints"/>.</t>

<t>A version 4 packet contains:</t>

<t><list style="symbols">
  <t>A one-octet version number (4).</t>
  <t>A four-octet number denoting the time that the key was created.</t>
  <t>A one-octet number denoting the public-key algorithm of this key.</t>
  <t>A series of values comprising the key material.
This is algorithm-specific and described in <xref target="algorithm-specific-parts-of-keys"/>.</t>
</list></t>

<t>The version 5 format is similar to the version 4 format except for the addition of a count for the key material.
This count helps parsing secret key packets (which are an extension of the public key packet format) in the case of an unknown algorithm.
In addition, fingerprints of version 5 keys are calculated differently from version 4 keys, as described in <xref target="key-ids-fingerprints"/>.</t>

<t>A version 5 packet contains:</t>

<t><list style="symbols">
  <t>A one-octet version number (5).</t>
  <t>A four-octet number denoting the time that the key was created.</t>
  <t>A one-octet number denoting the public-key algorithm of this key.</t>
  <t>A four-octet scalar octet count for the following public key material.</t>
  <t>A series of values comprising the public key material.
This is algorithm-specific and described in <xref target="algorithm-specific-parts-of-keys"/>.</t>
</list></t>

</section>
<section anchor="secret-key-packet-formats"><name>Secret-Key Packet Formats</name>

<t>The Secret-Key and Secret-Subkey packets contain all the data of the Public-Key and Public-Subkey packets, with additional algorithm-specific secret-key data appended, usually in encrypted form.</t>

<t>The packet contains:</t>

<t><list style="symbols">
  <t>The fields of a Public-Key or Public-Subkey packet, as described above.</t>
  <t>One octet indicating string-to-key usage conventions.
Zero indicates that the secret-key data is not encrypted.
255, 254, or 253 indicates that a string-to-key specifier is being given.
Any other value is a symmetric-key encryption algorithm identifier.
A version 5 packet <bcp14>MUST NOT</bcp14> use the value 255.</t>
  <t>Only for a version 5 packet where the secret key material is encrypted (that is, where the previous octet is not zero), a one-octet scalar octet count of the cumulative length of all the following optional string-to-key parameter fields.</t>
  <t>[Optional] If string-to-key usage octet was 255, 254, or 253, a one-octet symmetric encryption algorithm.</t>
  <t>[Optional] If string-to-key usage octet was 253, a one-octet AEAD algorithm.</t>
  <t>[Optional] Only for a version 5 packet, and if string-to-key usage octet was 255, 254, or 253, an one-octet count of the following field.</t>
  <t>[Optional] If string-to-key usage octet was 255, 254, or 253, a string-to-key (S2K) specifier.
The length of the string-to-key specifier depends on its type (see <xref target="s2k-types"/>).</t>
  <t>[Optional] If string-to-key usage octet was 253 (that is, the secret data is AEAD-encrypted), an initialization vector (IV) of size specified by the AEAD algorithm (see <xref target="version-two-seipd"/>), which is used as the nonce for the AEAD algorithm.</t>
  <t>[Optional] If string-to-key usage octet was 255, 254, or a cipher algorithm identifier (that is, the secret data is CFB-encrypted), an initialization vector (IV) of the same length as the cipher's block size.</t>
  <t>Plain or encrypted multiprecision integers comprising the secret key data.
This is algorithm-specific and described in <xref target="algorithm-specific-parts-of-keys"/>.
If the string-to-key usage octet is 253, then an AEAD authentication tag is part of that data.
If the string-to-key usage octet is 254, a 20-octet SHA-1 hash of the plaintext of the algorithm-specific portion is appended to plaintext and encrypted with it.
If the string-to-key usage octet is 255 or another nonzero value (that is, a symmetric-key encryption algorithm identifier), a two-octet checksum of the plaintext of the algorithm-specific portion (sum of all octets, mod 65536) is appended to plaintext and encrypted with it.
(This is deprecated and <bcp14>SHOULD NOT</bcp14> be used, see below.)</t>
  <t>If the string-to-key usage octet is zero, then a two-octet checksum of the algorithm-specific portion (sum of all octets, mod 65536).</t>
</list></t>

<t>The details about storing algorithm-specific secrets above are summarized in <xref target="secret-key-encryption"/>.</t>

<t>Note that the version 5 packet format adds two count values to help parsing packets with unknown S2K or public key algorithms.</t>

<t>Secret MPI values can be encrypted using a passphrase.
If a string-to-key specifier is given, that describes the algorithm for converting the passphrase to a key, else a simple MD5 hash of the passphrase is used.
Implementations <bcp14>MUST</bcp14> use a string-to-key specifier; the simple hash is for backward compatibility and is deprecated, though implementations <bcp14>MAY</bcp14> continue to use existing private keys in the old format.
The cipher for encrypting the MPIs is specified in the Secret-Key packet.</t>

<t>Encryption/decryption of the secret data is done using the key created from the passphrase and the initialization vector from the packet.
If the string-to-key usage octet is not 253, CFB mode is used.
A different mode is used with v3 keys (which are only RSA) than with other key formats.
With v3 keys, the MPI bit count prefix (that is, the first two octets) is not encrypted.
Only the MPI non-prefix data is encrypted.
Furthermore, the CFB state is resynchronized at the beginning of each new MPI value, so that the CFB block boundary is aligned with the start of the MPI data.</t>

<t>With v4 and v5 keys, a simpler method is used.
All secret MPI values are encrypted, including the MPI bitcount prefix.</t>

<t>If the string-to-key usage octet is 253, the key encryption key is derived using HKDF (see <xref target="RFC5869"/>) to provide key separation.
HKDF is used with SHA256 as hash algorithm, the key derived from S2K as Initial Keying Material (IKM), no salt, and the Packet Tag in OpenPGP format encoding (bits 7 and 6 set, bits 5-0 carry the packet tag), the packet version, and the cipher-algo and AEAD-mode used to encrypt the key material, are used as info parameter.
Then, the encrypted MPI values are encrypted as one combined plaintext using one of the AEAD algorithms specified for version 2 of the Symmetrically Encrypted Integrity Protected Data packet.
Note that no chunks are used and that there is only one authentication tag.
As additional data, the Packet Tag in OpenPGP format encoding (bits 7 and 6 set, bits 5-0 carry the packet tag), followed by the public key packet fields, starting with the packet version number, are passed to the AEAD algorithm.
For example, the additional data used with a Secret-Key Packet of version 4 consists of the octets 0xC5, 0x04, followed by four octets of creation time, one octet denoting the public-key algorithm, and the algorithm-specific public-key parameters.
For a Secret-Subkey Packet, the first octet would be 0xC7.
For a version 5 key packet, the second octet would be 0x05, and the four-octet octet count of the public key material would be included as well (see <xref target="public-key-packet-formats"/>).</t>

<t>The two-octet checksum that follows the algorithm-specific portion is the algebraic sum, mod 65536, of the plaintext of all the algorithm-specific octets (including MPI prefix and data).
With v3 keys, the checksum is stored in the clear.
With v4 keys, the checksum is encrypted like the algorithm-specific data.
This value is used to check that the passphrase was correct.
However, this checksum is deprecated; an implementation <bcp14>SHOULD NOT</bcp14> use it, but should rather use the SHA-1 hash denoted with a usage octet of 254.
The reason for this is that there are some attacks that involve undetectably modifying the secret key.
If the string-to-key usage octet is 253 no checksum or SHA-1 hash is used but the authentication tag of the AEAD algorithm follows.</t>

<t>When decrypting the secret key material using any of these schemes (that is, where the usage octet is non-zero), the resulting cleartext octet stream <bcp14>MUST</bcp14> be well-formed.
In particular, an implementation <bcp14>MUST NOT</bcp14> interpret octets beyond the unwrapped cleartext octet stream as part of any of the unwrapped MPI objects.
Furthermore, an implementation <bcp14>MUST</bcp14> reject as unusable any secret key material whose cleartext length does not align with the lengths of the unwrapped MPI objects.</t>

</section>
<section anchor="key-ids-fingerprints"><name>Key IDs and Fingerprints</name>

<t>For a v3 key, the eight-octet Key ID consists of the low 64 bits of the public modulus of the RSA key.</t>

<t>The fingerprint of a v3 key is formed by hashing the body (but not the two-octet length) of the MPIs that form the key material (public modulus n, followed by exponent e) with MD5.
Note that both v3 keys and MD5 are deprecated.</t>

<t>A v4 fingerprint is the 160-bit SHA-1 hash of the octet 0x99, followed by the two-octet packet length, followed by the entire Public-Key packet starting with the version field.
The Key ID is the low-order 64 bits of the fingerprint.
Here are the fields of the hash material, with the example of an EdDSA key:</t>

<t>a.1) 0x99 (1 octet)</t>

<t>a.2) two-octet, big-endian scalar octet count of (b)-(e)</t>

<t>b) version number = 4 (1 octet);</t>

<t>c) timestamp of key creation (4 octets);</t>

<t>d) algorithm (1 octet): 22 = EdDSA (example);</t>

<t>e) Algorithm-specific fields.</t>

<t>Algorithm-Specific Fields for EdDSA keys (example):</t>

<t>e.1) A one-octet size of the following field;</t>

<t>e.2) The octets representing a curve OID, defined in <xref target="ec-curves"/>;</t>

<t>e.3) An MPI of an EC point representing a public key Q in prefixed native form (see <xref target="ec-point-prefixed-native"/>).</t>

<t>A v5 fingerprint is the 256-bit SHA2-256 hash of the octet 0x9A, followed by the four-octet packet length, followed by the entire Public-Key packet starting with the version field.
The Key ID is the high-order 64 bits of the fingerprint.
Here are the fields of the hash material, with the example of an EdDSA key:</t>

<t>a.1) 0x9A (1 octet)</t>

<t>a.2) four-octet scalar octet count of (b)-(f)</t>

<t>b) version number = 5 (1 octet);</t>

<t>c) timestamp of key creation (4 octets);</t>

<t>d) algorithm (1 octet): 22 = EdDSA (example);</t>

<t>e) four-octet scalar octet count for the following key material;</t>

<t>f) algorithm-specific fields.</t>

<t>Algorithm-Specific Fields for EdDSA keys (example):</t>

<t>f.1) A one-octet size of the following field;</t>

<t>f.2) The octets representing a curve OID, defined in <xref target="ec-curves"/>;</t>

<t>f.3) An MPI of an EC point representing a public key Q in prefixed native form (see <xref target="ec-point-prefixed-native"/>).</t>

<t>Note that it is possible for there to be collisions of Key IDs --- two different keys with the same Key ID.
Note that there is a much smaller, but still non-zero, probability that two different keys have the same fingerprint.</t>

<t>Also note that if v3, v4, and v5 format keys share the same RSA key material, they will have different Key IDs as well as different fingerprints.</t>

<t>Finally, the Key ID and fingerprint of a subkey are calculated in the same way as for a primary key, including the 0x99 (v4 key) or 0x9A (v5 key) as the first octet (even though this is not a valid packet ID for a public subkey).</t>

</section>
<section anchor="algorithm-specific-parts-of-keys"><name>Algorithm-specific Parts of Keys</name>

<t>The public and secret key format specifies algorithm-specific parts of a key.
The following sections describe them in detail.</t>

<section anchor="key-rsa"><name>Algorithm-Specific Part for RSA Keys</name>

<t>The public key is this series of multiprecision integers:</t>

<t><list style="symbols">
  <t>MPI of RSA public modulus n;</t>
  <t>MPI of RSA public encryption exponent e.</t>
</list></t>

<t>The secret key is this series of multiprecision integers:</t>

<t><list style="symbols">
  <t>MPI of RSA secret exponent d;</t>
  <t>MPI of RSA secret prime value p;</t>
  <t>MPI of RSA secret prime value q (p &lt; q);</t>
  <t>MPI of u, the multiplicative inverse of p, mod q.</t>
</list></t>

</section>
<section anchor="key-dsa"><name>Algorithm-Specific Part for DSA Keys</name>

<t>The public key is this series of multiprecision integers:</t>

<t><list style="symbols">
  <t>MPI of DSA prime p;</t>
  <t>MPI of DSA group order q (q is a prime divisor of p-1);</t>
  <t>MPI of DSA group generator g;</t>
  <t>MPI of DSA public-key value y (= g**x mod p where x is secret).</t>
</list></t>

<t>The secret key is this single multiprecision integer:</t>

<t><list style="symbols">
  <t>MPI of DSA secret exponent x.</t>
</list></t>

</section>
<section anchor="key-elgamal"><name>Algorithm-Specific Part for Elgamal Keys</name>

<t>The public key is this series of multiprecision integers:</t>

<t><list style="symbols">
  <t>MPI of Elgamal prime p;</t>
  <t>MPI of Elgamal group generator g;</t>
  <t>MPI of Elgamal public key value y (= g**x mod p where x is secret).</t>
</list></t>

<t>The secret key is this single multiprecision integer:</t>

<t><list style="symbols">
  <t>MPI of Elgamal secret exponent x.</t>
</list></t>

</section>
<section anchor="key-ecdsa"><name>Algorithm-Specific Part for ECDSA Keys</name>

<t>The public key is this series of values:</t>

<t><list style="symbols">
  <t>A variable-length field containing a curve OID, which is formatted as follows:  <list style="symbols">
      <t>A one-octet size of the following field; values 0 and 0xFF are reserved for future extensions,</t>
      <t>The octets representing a curve OID (defined in <xref target="ec-curves"/>);</t>
    </list></t>
  <t>MPI of an EC point representing a public key.</t>
</list></t>

<t>The secret key is this single multiprecision integer:</t>

<t><list style="symbols">
  <t>MPI of an integer representing the secret key, which is a scalar of the public EC point.</t>
</list></t>

</section>
<section anchor="key-eddsa"><name>Algorithm-Specific Part for EdDSA Keys</name>

<t>The public key is this series of values:</t>

<t><list style="symbols">
  <t>A variable-length field containing a curve OID, formatted as follows:  <list style="symbols">
      <t>A one-octet size of the following field; values 0 and 0xFF are reserved for future extensions,</t>
      <t>The octets representing a curve OID, defined in <xref target="ec-curves"/>;</t>
    </list></t>
  <t>An MPI of an EC point representing a public key Q in prefixed native form (see <xref target="ec-point-prefixed-native"/>).</t>
</list></t>

<t>The secret key is this single multiprecision integer:</t>

<t><list style="symbols">
  <t>An MPI-encoded octet string representing the native form of the secret key, in the curve-specific format described in <xref target="curve-specific-formats"/>.</t>
</list></t>

<t>Note that the native form for an EdDSA secret key is a fixed-width sequence of unstructured random octets, with size corresponding to the specific curve.
That sequence of random octets is used with a cryptographic digest to produce both a curve-specific secret scalar and a prefix used when making a signature.
See <xref target="RFC8032"/> for more details about how to use the native octet strings (section 5.1.5 for Ed25519 and 5.2.5 for Ed448).
The value stored in an OpenPGP EdDSA secret key packet is the original sequence of random octets.</t>

<t>Note that a ECDH secret key over the equivalent curve instead stores the curve-specific secret scalar itself, rather than the sequence of random octets stored in an EdDSA secret key.</t>

</section>
<section anchor="key-ecdh"><name>Algorithm-Specific Part for ECDH Keys</name>

<t>The public key is this series of values:</t>

<t><list style="symbols">
  <t>A variable-length field containing a curve OID, which is formatted as follows:  <list style="symbols">
      <t>A one-octet size of the following field; values 0 and 0xFF are reserved for future extensions,</t>
      <t>Octets representing a curve OID, defined in <xref target="ec-curves"/>;</t>
    </list></t>
  <t>MPI of an EC point representing a public key, in the point format associated with the curve as specified in <xref target="curve-specific-formats"/></t>
  <t>A variable-length field containing KDF parameters, which is formatted as follows:  <list style="symbols">
      <t>A one-octet size of the following fields; values 0 and 0xFF are reserved for future extensions,</t>
      <t>A one-octet value 1, reserved for future extensions,</t>
      <t>A one-octet hash function ID used with a KDF,</t>
      <t>A one-octet algorithm ID for the symmetric algorithm used to wrap the symmetric key used for the message encryption; see <xref target="ecdh"/> for details.</t>
    </list></t>
</list></t>

<t>Observe that an ECDH public key is composed of the same sequence of fields that define an ECDSA key plus the KDF parameters field.</t>

<t>The secret key is this single multiprecision integer:</t>

<t><list style="symbols">
  <t>An MPI representing the secret key, in the curve-specific format described in <xref target="curve-specific-formats"/>.</t>
</list></t>

<section anchor="ecdh-secret-key-material"><name>ECDH Secret Key Material</name>

<t>When curve P-256, P-384, or P-521 are used in ECDH, their secret keys are represented as a simple integer in standard MPI form.
Other curves are presented on the wire differently (though still as a single MPI), as described below and in <xref target="curve-specific-formats"/>.</t>

<section anchor="curve25519-secrets"><name>Curve25519 ECDH Secret Key Material</name>

<t>A Curve25519 secret key is stored as a standard integer in big-endian MPI form.
Note that this form is in reverse octet order from the little-endian "native" form found in <xref target="RFC7748"/>.</t>

<t>Note also that the integer for a Curve25519 secret key for OpenPGP <bcp14>MUST</bcp14> have the appropriate form: that is, it <bcp14>MUST</bcp14> be divisible by 8, <bcp14>MUST</bcp14> be at least 2**254, and <bcp14>MUST</bcp14> be less than 2**255.
The length of this MPI in bits is by definition always 255, so the two leading octets of the MPI will always be <spanx style="verb">00 ff</spanx> and reversing the following 32 octets from the wire will produce the "native" form.</t>

<t>When generating a new Curve25519 secret key from 32 fully-random octets, the following pseudocode produces the MPI wire format (note the similarity to <spanx style="verb">decodeScalar25519</spanx> from <xref target="RFC7748"/>):</t>

<figure><artwork><![CDATA[
def curve25519_MPI_from_random(octet_list):
    octet_list[0] &= 248
    octet_list[31] &= 127
    octet_list[31] |= 64
    mpi_header = [ 0x00, 0xff ]
    return mpi_header || reversed(octet_list)
]]></artwork></figure>

</section>
<section anchor="x448-ecdh-secret-key-material"><name>X448 ECDH Secret Key Material</name>

<t>An X448 secret key is contained within its MPI as a prefixed octet string (see <xref target="ec-prefix"/>), which encapsulates the native secret key format found in <xref target="RFC7748"/>.
The full wire format (as an MPI) will thus be the three octets <spanx style="verb">01 c7 40</spanx> followed by the full 56 octet native secret key.</t>

<t>When generating a new X448 secret key from 56 fully-random octets, the following pseudocode produces the MPI wire format:</t>

<figure><artwork><![CDATA[
def X448_MPI_from_random(octet_list):
    prefixed_header = [ 0x01, 0xc7, 0x40 ]
    return prefixed_header || octet_list
]]></artwork></figure>

</section>
</section>
</section>
</section>
</section>
<section anchor="compressed-data"><name>Compressed Data Packet (Tag 8)</name>

<t>The Compressed Data packet contains compressed data.
Typically, this packet is found as the contents of an encrypted packet, or following a Signature or One-Pass Signature packet, and contains a literal data packet.</t>

<t>The body of this packet consists of:</t>

<t><list style="symbols">
  <t>One octet that gives the algorithm used to compress the packet.</t>
  <t>Compressed data, which makes up the remainder of the packet.</t>
</list></t>

<t>A Compressed Data Packet's body contains an block that compresses some set of packets.
See <xref target="packet-composition"/> for details on how messages are formed.</t>

<t>ZIP-compressed packets are compressed with raw <xref target="RFC1951"/> DEFLATE blocks.</t>

<t>ZLIB-compressed packets are compressed with <xref target="RFC1950"/> ZLIB-style blocks.</t>

<t>BZip2-compressed packets are compressed using the BZip2 <xref target="BZ2"/> algorithm.</t>

<t>An implementation that generates a Compressed Data packet <bcp14>MUST</bcp14> use the non-legacy format for packet framing (see <xref target="openpgp-packet-format"/>).
It <bcp14>MUST NOT</bcp14> generate a Compressed Data packet with Legacy format (<xref target="legacy-packet-format"/>)</t>

<t>An implementation that deals with either historic data or data generated by legacy implementations <bcp14>MAY</bcp14> interpret Compressed Data packets that use the Legacy format for packet framing.</t>

</section>
<section anchor="sed"><name>Symmetrically Encrypted Data Packet (Tag 9)</name>

<t>The Symmetrically Encrypted Data packet contains data encrypted with a symmetric-key algorithm.
When it has been decrypted, it contains other packets (usually a literal data packet or compressed data packet, but in theory other Symmetrically Encrypted Data packets or sequences of packets that form whole OpenPGP messages).</t>

<t>This packet is obsolete.
An implementation <bcp14>MUST NOT</bcp14> create this packet.
An implementation <bcp14>MAY</bcp14> process such a packet but it <bcp14>MUST</bcp14> return a clear diagnostic that a non-integrity protected packet has been processed.
The implementation <bcp14>SHOULD</bcp14> also return an error in this case and stop processing.</t>

<t>This packet format is impossible to handle safely in general because the ciphertext it provides is malleable.
See <xref target="ciphertext-malleability"/> about selecting a better OpenPGP encryption container that does not have this flaw.</t>

<t>The body of this packet consists of:</t>

<t><list style="symbols">
  <t>Encrypted data, the output of the selected symmetric-key cipher operating in OpenPGP's variant of Cipher Feedback (CFB) mode.</t>
</list></t>

<t>The symmetric cipher used may be specified in a Public-Key or Symmetric-Key Encrypted Session Key packet that precedes the Symmetrically Encrypted Data packet.
In that case, the cipher algorithm octet is prefixed to the session key before it is encrypted.
If no packets of these types precede the encrypted data, the IDEA algorithm is used with the session key calculated as the MD5 hash of the passphrase, though this use is deprecated.</t>

<t>The data is encrypted in CFB mode, with a CFB shift size equal to the cipher's block size.
The Initial Vector (IV) is specified as all zeros.
Instead of using an IV, OpenPGP prefixes a string of length equal to the block size of the cipher plus two to the data before it is encrypted.
The first block-size octets (for example, 8 octets for a 64-bit block length) are random, and the following two octets are copies of the last two octets of the IV.
For example, in an 8-octet block, octet 9 is a repeat of octet 7, and octet 10 is a repeat of octet 8.
In a cipher of length 16, octet 17 is a repeat of octet 15 and octet 18 is a repeat of octet 16.
As a pedantic clarification, in both these examples, we consider the first octet to be numbered 1.</t>

<t>After encrypting the first block-size-plus-two octets, the CFB state is resynchronized.
The last block-size octets of ciphertext are passed through the cipher and the block boundary is reset.</t>

<t>The repetition of 16 bits in the random data prefixed to the message allows the receiver to immediately check whether the session key is incorrect.
See <xref target="quick-check-oracle"/> for hints on the proper use of this "quick check".</t>

</section>
<section anchor="marker-packet"><name>Marker Packet (Tag 10)</name>

<t>The body of this packet consists of:</t>

<t><list style="symbols">
  <t>The three octets 0x50, 0x47, 0x50 (which spell "PGP" in UTF-8).</t>
</list></t>

<t>Such a packet <bcp14>MUST</bcp14> be ignored when received.</t>

</section>
<section anchor="literal-data-packet-tag-11"><name>Literal Data Packet (Tag 11)</name>

<t>A Literal Data packet contains the body of a message; data that is not to be further interpreted.</t>

<t>The body of this packet consists of:</t>

<t><list style="symbols">
  <t>A one-octet field that describes how the data is formatted.  <vspace blankLines='1'/>
If it is a <spanx style="verb">b</spanx> (0x62), then the Literal packet contains binary data.
If it is a <spanx style="verb">u</spanx> (0x75), then the Literal packet contains UTF-8-encoded text data, and thus may need line ends converted to local form, or other text mode changes.  <vspace blankLines='1'/>
Older versions of OpenPGP used <spanx style="verb">t</spanx> (0x74) to indicate textual data, but did not specify the character encoding.
Implementations <bcp14>SHOULD NOT</bcp14> emit this value.
An implementation that receives a literal data packet with this value in the format field <bcp14>SHOULD</bcp14> interpret the packet data as UTF-8 encoded text, unless reliable (not attacker-controlled) context indicates a specific alternate text encoding.
This mode is deprecated due to its ambiguity.  <vspace blankLines='1'/>
Early versions of PGP also defined a value of <spanx style="verb">l</spanx> as a 'local' mode for machine-local conversions.
<xref target="RFC1991"/> incorrectly stated this local mode flag as <spanx style="verb">1</spanx> (ASCII numeral one).
Both of these local modes are deprecated.</t>
  <t>File name as a string (one-octet length, followed by a file name).
This may be a zero-length string.
Commonly, if the source of the encrypted data is a file, this will be the name of the encrypted file.
An implementation <bcp14>MAY</bcp14> consider the file name in the Literal packet to be a more authoritative name than the actual file name.</t>
  <t>A four-octet number that indicates a date associated with the literal data.
Commonly, the date might be the modification date of a file, or the time the packet was created, or a zero that indicates no specific time.</t>
  <t>The remainder of the packet is literal data.  <vspace blankLines='1'/>
Text data <bcp14>MUST</bcp14> be encoded with UTF-8 (see <xref target="RFC3629"/>), and stored with &lt;CR&gt;&lt;LF&gt; text endings (that is, network-normal line endings).
These should be converted to native line endings by the receiving software.</t>
</list></t>

<t>Note that OpenPGP signatures do not include the formatting octet, the file name, and the date field of the literal packet in a signature hash and thus those fields are not protected against tampering in a signed document.
A receiving implementation <bcp14>MUST NOT</bcp14> treat those fields as though they were cryptographically secured by the surrounding signature either when representing them to the user or acting on them.</t>

<t>Due to their inherent malleability, an implementation that generates a literal data packet <bcp14>SHOULD</bcp14> avoid storing any significant data in these fields.
If the implementation is certain that the data is textual and is encoded with UTF-8 (for example, if it will follow this literal data packet with a signature packet of type 0x01 (see <xref target="signature-types"/>), it <bcp14>MAY</bcp14> set the format octet to <spanx style="verb">u</spanx>.
Otherwise, it <bcp14>SHOULD</bcp14> set the format octet to <spanx style="verb">b</spanx>.
It <bcp14>SHOULD</bcp14> set the filename to the empty string (encoded as a single zero octet), and the timestamp to zero (encoded as four zero octets).</t>

<t>An application that wishes to include such filesystem metadata within a signature is advised to sign an encapsulated archive (for example, <xref target="PAX"/>).</t>

<t>An implementation that generates a Literal Data packet <bcp14>MUST</bcp14> use the OpenPGP format for packet framing (see <xref target="openpgp-packet-format"/>).
It <bcp14>MUST NOT</bcp14> generate a Literal Data packet with Legacy format (<xref target="legacy-packet-format"/>)</t>

<t>An implementation that deals with either historic data or data generated by legacy implementations <bcp14>MAY</bcp14> interpret Literal Data packets that use the Legacy format for packet framing.</t>

<section anchor="special-filename-console-deprecated"><name>Special Filename _CONSOLE (Deprecated)</name>

<t>The Literal Data packet's filename field has a historical special case for the special name <spanx style="verb">_CONSOLE</spanx>.
When the filename field is <spanx style="verb">_CONSOLE</spanx>, the message is considered to be "for your eyes only".
This advises that the message data is unusually sensitive, and the receiving program should process it more carefully, perhaps avoiding storing the received data to disk, for example.</t>

<t>An OpenPGP deployment that generates literal data packets <bcp14>MUST NOT</bcp14> depend on this indicator being honored in any particular way.
It cannot be enforced, and the field itself is not covered by any cryptographic signature.</t>

<t>It is <bcp14>NOT RECOMMENDED</bcp14> to use this special filename in a newly-generated literal data packet.</t>

</section>
</section>
<section anchor="trust-packet-tag-12"><name>Trust Packet (Tag 12)</name>

<t>The Trust packet is used only within keyrings and is not normally exported.
Trust packets contain data that record the user's specifications of which key holders are trustworthy introducers, along with other information that implementing software uses for trust information.
The format of Trust packets is defined by a given implementation.</t>

<t>Trust packets <bcp14>SHOULD NOT</bcp14> be emitted to output streams that are transferred to other users, and they <bcp14>SHOULD</bcp14> be ignored on any input other than local keyring files.</t>

</section>
<section anchor="user-id-packet-tag-13"><name>User ID Packet (Tag 13)</name>

<t>A User ID packet consists of UTF-8 text that is intended to represent the name and email address of the key holder.
By convention, it includes an <xref target="RFC2822"/> mail name-addr, but there are no restrictions on its content.
The packet length in the header specifies the length of the User ID.</t>

</section>
<section anchor="user-attribute-packet"><name>User Attribute Packet (Tag 17)</name>

<t>The User Attribute packet is a variation of the User ID packet.
It is capable of storing more types of data than the User ID packet, which is limited to text.
Like the User ID packet, a User Attribute packet may be certified by the key owner ("self-signed") or any other key owner who cares to certify it.
Except as noted, a User Attribute packet may be used anywhere that a User ID packet may be used.</t>

<t>While User Attribute packets are not a required part of the OpenPGP standard, implementations <bcp14>SHOULD</bcp14> provide at least enough compatibility to properly handle a certification signature on the User Attribute packet.
A simple way to do this is by treating the User Attribute packet as a User ID packet with opaque contents, but an implementation may use any method desired.</t>

<t>The User Attribute packet is made up of one or more attribute subpackets.
Each subpacket consists of a subpacket header and a body.
The header consists of:</t>

<t><list style="symbols">
  <t>the subpacket length (1, 2, or 5 octets)</t>
  <t>the subpacket type (1 octet)</t>
</list></t>

<t>and is followed by the subpacket specific data.</t>

<t>The following table lists the currently known subpackets:</t>

<texttable title="User Attribute type registry">
      <ttcol align='right'>Type</ttcol>
      <ttcol align='left'>Attribute Subpacket</ttcol>
      <c>1</c>
      <c>Image Attribute Subpacket</c>
      <c>100-110</c>
      <c>Private/Experimental Use</c>
</texttable>

<t>An implementation <bcp14>SHOULD</bcp14> ignore any subpacket of a type that it does not recognize.</t>

<section anchor="uat-image"><name>The Image Attribute Subpacket</name>

<t>The Image Attribute subpacket is used to encode an image, presumably (but not required to be) that of the key owner.</t>

<t>The Image Attribute subpacket begins with an image header.
The first two octets of the image header contain the length of the image header.
Note that unlike other multi-octet numerical values in this document, due to a historical accident this value is encoded as a little-endian number.
The image header length is followed by a single octet for the image header version.
The only currently defined version of the image header is 1, which is a 16-octet image header.
The first three octets of a version 1 image header are thus 0x10, 0x00, 0x01.</t>

<t>The fourth octet of a version 1 image header designates the encoding format of the image.
The only currently defined encoding format is the value 1 to indicate JPEG.
Image format types 100 through 110 are reserved for private or experimental use.
The rest of the version 1 image header is made up of 12 reserved octets, all of which <bcp14>MUST</bcp14> be set to 0.</t>

<t>The rest of the image subpacket contains the image itself.
As the only currently defined image type is JPEG, the image is encoded in the JPEG File Interchange Format (JFIF), a standard file format for JPEG images <xref target="JFIF"/>.</t>

<t>An implementation <bcp14>MAY</bcp14> try to determine the type of an image by examination of the image data if it is unable to handle a particular version of the image header or if a specified encoding format value is not recognized.</t>

</section>
</section>
<section anchor="seipd"><name>Sym. Encrypted Integrity Protected Data Packet (Tag 18)</name>

<t>This packet contains integrity protected and encrypted data.
When it has been decrypted, it will contain other packets forming an OpenPGP Message (see <xref target="openpgp-messages"/>).</t>

<t>The first octet of this packet is always used to indicate the version number, but different versions contain differently-structured ciphertext.
Version 1 of this packet contains data encrypted with a symmetric-key algorithm and protected against modification by the SHA-1 hash algorithm.
This is a legacy OpenPGP mechanism that offers some protections against ciphertext malleability.</t>

<t>Version 2 of this packet contains data encrypted with an authenticated encryption and additional data (AEAD) construction.
This offers a more cryptographically rigorous defense against ciphertext malleability, but may not be as widely supported yet.
See <xref target="ciphertext-malleability"/> for more details on choosing between these formats.</t>

<section anchor="version-one-seipd"><name>Version 1 Sym. Encrypted Integrity Protected Data Packet Format</name>

<t>A version 1 Symmetrically Encrypted Integrity Protected Data packet consists of:</t>

<t><list style="symbols">
  <t>A one-octet version number with value 1.</t>
  <t>Encrypted data, the output of the selected symmetric-key cipher operating in Cipher Feedback mode with shift amount equal to the block size of the cipher (CFB-n where n is the block size).</t>
</list></t>

<t>The symmetric cipher used <bcp14>MUST</bcp14> be specified in a Public-Key or Symmetric-Key Encrypted Session Key packet that precedes the Symmetrically Encrypted Integrity Protected Data packet.
In either case, the cipher algorithm octet is prefixed to the session key before it is encrypted.</t>

<t>The data is encrypted in CFB mode, with a CFB shift size equal to the cipher's block size.
The Initial Vector (IV) is specified as all zeros.
Instead of using an IV, OpenPGP prefixes an octet string to the data before it is encrypted.
The length of the octet string equals the block size of the cipher in octets, plus two.
The first octets in the group, of length equal to the block size of the cipher, are random; the last two octets are each copies of their 2nd preceding octet.
For example, with a cipher whose block size is 128 bits or 16 octets, the prefix data will contain 16 random octets, then two more octets, which are copies of the 15th and 16th octets, respectively.
Unlike the Symmetrically Encrypted Data Packet, no special CFB resynchronization is done after encrypting this prefix data.
See <xref target="cfb-mode"/> for more details.</t>

<t>The repetition of 16 bits in the random data prefixed to the message allows the receiver to immediately check whether the session key is incorrect.</t>

<t>Two constant octets with the values 0xD3 and 0x14 are appended to the plaintext.
Then, the plaintext of the data to be encrypted is passed through the SHA-1 hash function.
The input to the hash function includes the prefix data described above; it includes all of the plaintext, including the trailing constant octets 0xD3, 0x14.
The 20 octets of the SHA-1 hash are then appended to the plaintext (after the constant octets 0xD3, 0x14) and encrypted along with the plaintext using the same CFB context.
This trailing checksum is known as the Modification Detection Code (MDC).</t>

<t>During decryption, the plaintext data should be hashed with SHA-1, including the prefix data as well as the trailing constant octets 0xD3, 0x14, but excluding the last 20 octets containing the SHA-1 hash.
The computed SHA-1 hash is then compared with the last 20 octets of plaintext.
A mismatch of the hash indicates that the message has been modified and <bcp14>MUST</bcp14> be treated as a security problem.
Any failure <bcp14>SHOULD</bcp14> be reported to the user.</t>

<t><list style='empty'>
  <t>NON-NORMATIVE EXPLANATION</t>

  <t>The Modification Detection Code (MDC) system, as the integrity
  protection mechanism of version 1 of the Symmetrically Encrypted
  Integrity Protected Data packet is called, was created to
  provide an integrity mechanism that is less strong than a
  signature, yet stronger than bare CFB encryption.</t>

  <t>It is a limitation of CFB encryption that damage to the ciphertext
  will corrupt the affected cipher blocks and the block following.
  Additionally, if data is removed from the end of a CFB-encrypted
  block, that removal is undetectable.  (Note also that CBC mode has
  a similar limitation, but data removed from the front of the block
  is undetectable.)</t>

  <t>The obvious way to protect or authenticate an encrypted block is
  to digitally sign it.  However, many people do not wish to
  habitually sign data, for a large number of reasons beyond the
  scope of this document.  Suffice it to say that many people
  consider properties such as deniability to be as valuable as
  integrity.</t>

  <t>OpenPGP addresses this desire to have more security than raw
  encryption and yet preserve deniability with the MDC system.  An
  MDC is intentionally not a MAC.  Its name was not selected by
  accident.  It is analogous to a checksum.</t>

  <t>Despite the fact that it is a relatively modest system, it has
  proved itself in the real world.  It is an effective defense to
  several attacks that have surfaced since it has been created.  It
  has met its modest goals admirably.</t>

  <t>Consequently, because it is a modest security system, it has
  modest requirements on the hash function(s) it employs.  It does
  not rely on a hash function being collision-free, it relies on a
  hash function being one-way.  If a forger, Frank, wishes to send
  Alice a (digitally) unsigned message that says, "I've always
  secretly loved you, signed Bob", it is far easier for him to
  construct a new message than it is to modify anything intercepted
  from Bob.  (Note also that if Bob wishes to communicate secretly
  with Alice, but without authentication or identification and with
  a threat model that includes forgers, he has a problem that
  transcends mere cryptography.)</t>

  <t>Note also that unlike nearly every other OpenPGP subsystem, there
  are no parameters in the MDC system.  It hard-defines SHA-1 as its
  hash function.  This is not an accident.  It is an intentional
  choice to avoid downgrade and cross-grade attacks while making a
  simple, fast system.  (A downgrade attack would be an attack that
  replaced SHA2-256 with SHA-1, for example.  A cross-grade attack
  would replace SHA-1 with another 160-bit hash, such as
  RIPEMD-160, for example.)</t>

  <t>However, no update will be needed because the MDC has been replaced
  by the AEAD encryption described in this document.</t>
</list></t>

</section>
<section anchor="version-two-seipd"><name>Version 2 Sym. Encrypted Integrity Protected Data Packet Format</name>

<t>A version 2 Symmetrically Encrypted Integrity Protected Data packet consists of:</t>

<t><list style="symbols">
  <t>A one-octet version number with value 2.</t>
  <t>A one-octet cipher algorithm.</t>
  <t>A one-octet AEAD algorithm.</t>
  <t>A one-octet chunk size.</t>
  <t>Thirty-two octets of salt.
The salt is used to derive the message key and must be unique.</t>
  <t>Encrypted data, the output of the selected symmetric-key cipher operating in the given AEAD mode.</t>
  <t>A final, summary authentication tag for the AEAD mode.</t>
</list></t>

<t>The decrypted session key and the salt are used to derive an M-bit message key and N-64 bits used as initialization vector, where M is the key size of the symmetric algorithm and N is the nonce size of the AEAD algorithm.
M + N - 64 bits are derived using HKDF (see <xref target="RFC5869"/>).
The left-most M bits are used as symmetric algorithm key, the remaining N - 64 bits are used as initialization vector.
HKDF is used with SHA256 as hash algorithm, the session key as Initial Keying Material (IKM), the salt as salt, and the Packet Tag in OpenPGP format encoding (bits 7 and 6 set, bits 5-0 carry the packet tag), version number, cipher algorithm octet, AEAD algorithm octet, and chunk size octet as info parameter.</t>

<t>The KDF mechanism provides key separation between cipher and AEAD algorithms.
Furthermore, an implementation can securely reply to a message even if a recipients certificate is unknown by reusing the encrypted session key packets and replying with a different salt yielding a new, unique message key.</t>

<t>A v2 SEIPD packet consists of one or more chunks of data.
The plaintext of each chunk is of a size specified using the chunk size octet using the method specified below.</t>

<t>The encrypted data consists of the encryption of each chunk of plaintext, followed immediately by the relevant authentication tag.
If the last chunk of plaintext is smaller than the chunk size, the ciphertext for that data may be shorter; it is nevertheless followed by a full authentication tag.</t>

<t>For each chunk, the AEAD construction is given the Packet Tag in OpenPGP format encoding (bits 7 and 6 set, bits 5-0 carry the packet tag), version number, cipher algorithm octet, AEAD algorithm octet, and chunk size octet as additional data.
For example, the additional data of the first chunk using EAX and AES-128 with a chunk size of 2**16 octets consists of the octets 0xD2, 0x02, 0x07, 0x01, and 0x10.</t>

<t>After the final chunk, the AEAD algorithm is used to produce a final authentication tag encrypting the empty string.
This AEAD instance is given the additional data specified above, plus an eight-octet, big-endian value specifying the total number of plaintext octets encrypted.
This allows detection of a truncated ciphertext.</t>

<t>The chunk size octet specifies the size of chunks using the following formula (in C), where c is the chunk size octet:</t>

<figure><artwork><![CDATA[
  chunk_size = ((uint64_t)1 << (c + 6))
]]></artwork></figure>

<t>An implementation <bcp14>MUST</bcp14> accept chunk size octets with values from 0 to 16.
An implementation <bcp14>MUST NOT</bcp14> create data with a chunk size octet value larger than 16 (4 MiB chunks).</t>

<t>The nonce for AEAD mode consists of two parts.
Let N be the size of the nonce.
The left-most N - 64 bits are the initialization vector derived using HKDF.
The right-most 64 bits are the chunk index as big-endian value.
The index of the first chunk is zero.</t>

</section>
<section anchor="eax-mode"><name>EAX Mode</name>

<t>The EAX AEAD Algorithm used in this document is defined in <xref target="EAX"/>.</t>

<t>The EAX algorithm can only use block ciphers with 16-octet blocks.
The nonce is 16 octets long.
EAX authentication tags are 16 octets long.</t>

</section>
<section anchor="ocb-mode"><name>OCB Mode</name>

<t>The OCB AEAD Algorithm used in this document is defined in <xref target="RFC7253"/>.</t>

<t>The OCB algorithm can only use block ciphers with 16-octet blocks.
The nonce is 15 octets long.
OCB authentication tags are 16 octets long.</t>

</section>
<section anchor="gcm-mode"><name>GCM Mode</name>

<t>The GCM AEAD Algorithm used in this document is defined in <xref target="SP800-38D"/>.</t>

<t>The GCM algorithm can only use block ciphers with 16-octet blocks.
The nonce is 12 octets long.
GCM authentication tags are 16 octets long.</t>

</section>
</section>
<section anchor="padding-packet"><name>Padding Packet (Tag 21)</name>

<t>The Padding packet contains random data, and can be used to defend against traffic analysis (see <xref target="traffic-analysis"/>) on version 2 SEIPD messages (see <xref target="version-two-seipd"/>) and Transferable Public Keys (see <xref target="transferable-public-keys"/>).</t>

<t>Such a packet <bcp14>MUST</bcp14> be ignored when received.</t>

<t>Its contents <bcp14>SHOULD</bcp14> be random octets to make the length obfuscation it provides more robust even when compressed.</t>

<t>An implementation adding padding to an OpenPGP stream <bcp14>SHOULD</bcp14> place such a packet:</t>

<t><list style="symbols">
  <t>At the end of a v5 Transferable Public Key that is transferred over an encrypted channel (see <xref target="transferable-public-keys"/>).</t>
  <t>As the last packet of an Optionally Padded Message within a version 2 Symmetrically Encrypted Integrity Protected Data Packet (see <xref target="unwrapping"/>).</t>
</list></t>

<t>An implementation <bcp14>MUST</bcp14> be able to process padding packets anywhere else in an OpenPGP stream, so that future revisions of this document may specify further locations for padding.</t>

<t>Policy about how large to make such a packet to defend against traffic analysis is beyond the scope of this document.</t>

</section>
</section>
<section anchor="radix-64-conversions"><name>Radix-64 Conversions</name>

<t>As stated in the introduction, OpenPGP's underlying native representation for objects is a stream of arbitrary octets, and some systems desire these objects to be immune to damage caused by character set translation, data conversions, etc.</t>

<t>In principle, any printable encoding scheme that met the requirements of the unsafe channel would suffice, since it would not change the underlying binary bit streams of the native OpenPGP data structures.
The OpenPGP standard specifies one such printable encoding scheme to ensure interoperability.</t>

<t>OpenPGP's Radix-64 encoding is composed of two parts: a base64 encoding of the binary data and an optional checksum.
The base64 encoding is identical to the MIME base64 content-transfer-encoding <xref target="RFC2045"/>.</t>

<section anchor="optional-crc24"><name>Optional checksum</name>

<t>The optional checksum is a 24-bit Cyclic Redundancy Check (CRC) converted to four characters of radix-64 encoding by the same MIME base64 transformation, preceded by an equal sign (=).
The CRC is computed by using the generator 0x864CFB and an initialization of 0xB704CE.
The accumulation is done on the data before it is converted to radix-64, rather than on the converted data.
A sample implementation of this algorithm is in <xref target="sample-crc24"/>.</t>

<t>If present, the checksum with its leading equal sign <bcp14>MUST</bcp14> appear on the next line after the base64 encoded data.</t>

<t>An implementation <bcp14>MUST NOT</bcp14> reject an OpenPGP object when the CRC24 footer is present, missing, malformed, or disagrees with the computed CRC24 sum.
When forming ASCII Armor, the CRC24 footer <bcp14>SHOULD NOT</bcp14> be generated, unless interoperability with implementations that require the CRC24 footer to be present is a concern.</t>

<t>The CRC24 footer <bcp14>MUST NOT</bcp14> be generated if it can be determined by context or by the OpenPGP object being encoded that the consuming implementation accepts Radix-64 encoded blocks without CRC24 footer.
Notably:</t>

<t><list style="symbols">
  <t>An ASCII-armored Encrypted Message packet sequence that ends in an v2 SEIPD packet <bcp14>MUST NOT</bcp14> contain a CRC24 footer.</t>
  <t>An ASCII-armored sequence of Signature packets that only includes v5 Signature packets <bcp14>MUST NOT</bcp14> contain a CRC24 footer.</t>
  <t>An ASCII-armored Transferable Public Key packet sequence of a v5 key <bcp14>MUST NOT</bcp14> contain a CRC24 footer.</t>
  <t>An ASCII-armored keyring consisting of only v5 keys <bcp14>MUST NOT</bcp14> contain a CRC24 footer.</t>
</list></t>

<t>Rationale:
Previous versions of this document state that the CRC24 footer is optional, but the text was ambiguous.
In practice, very few implementations require the CRC24 footer to be present.
Computing the CRC24 incurs a significant cost, while providing no meaningful integrity protection.
Therefore, generating it is now discouraged.</t>

<section anchor="sample-crc24"><name>An Implementation of the CRC-24 in "C"</name>

<figure><sourcecode type="text/x-csrc" name="sample-crc24.c"><![CDATA[
#define CRC24_INIT 0xB704CEL
#define CRC24_GENERATOR 0x864CFBL

typedef unsigned long crc24;
crc24 crc_octets(unsigned char *octets, size_t len)
{
    crc24 crc = CRC24_INIT;
    int i;
    while (len--) {
        crc ^= (*octets++) << 16;
        for (i = 0; i < 8; i++) {
            crc <<= 1;
            if (crc & 0x1000000) {
                crc &= 0xffffff; /* Clear bit 25 to avoid overflow */
                crc ^= CRC24_GENERATOR;
            }
        }
    }
    return crc & 0xFFFFFFL;
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="forming-ascii-armor"><name>Forming ASCII Armor</name>

<t>When OpenPGP encodes data into ASCII Armor, it puts specific headers around the Radix-64 encoded data, so OpenPGP can reconstruct the data later.
An OpenPGP implementation <bcp14>MAY</bcp14> use ASCII armor to protect raw binary data.
OpenPGP informs the user what kind of data is encoded in the ASCII armor through the use of the headers.</t>

<t>Concatenating the following data creates ASCII Armor:</t>

<t><list style="symbols">
  <t>An Armor Header Line, appropriate for the type of data</t>
  <t>Armor Headers</t>
  <t>A blank (zero-length, or containing only whitespace) line</t>
  <t>The ASCII-Armored data</t>
  <t>An optional Armor Checksum (discouraged, see <xref target="optional-crc24"/>)</t>
  <t>The Armor Tail, which depends on the Armor Header Line</t>
</list></t>

<t>An Armor Header Line consists of the appropriate header line text surrounded by five (5) dashes (<spanx style="verb">-</spanx>, 0x2D) on either side of the header line text.
The header line text is chosen based upon the type of data that is being encoded in Armor, and how it is being encoded.
Header line texts include the following strings:</t>

<dl newline="true">
  <dt>
BEGIN PGP MESSAGE  </dt>
  <dd>
    <t>Used for signed, encrypted, or compressed files.</t>
  </dd>
  <dt>
BEGIN PGP PUBLIC KEY BLOCK  </dt>
  <dd>
    <t>Used for armoring public keys.</t>
  </dd>
  <dt>
BEGIN PGP PRIVATE KEY BLOCK  </dt>
  <dd>
    <t>Used for armoring private keys.</t>
  </dd>
  <dt>
BEGIN PGP SIGNATURE  </dt>
  <dd>
    <t>Used for detached signatures, OpenPGP/MIME signatures, and cleartext signatures.</t>
  </dd>
</dl>

<t>Note that all these Armor Header Lines are to consist of a complete line.
That is to say, there is always a line ending preceding the starting five dashes, and following the ending five dashes.
The header lines, therefore, <bcp14>MUST</bcp14> start at the beginning of a line, and <bcp14>MUST NOT</bcp14> have text other than whitespace following them on the same line.
These line endings are considered a part of the Armor Header Line for the purposes of determining the content they delimit.
This is particularly important when computing a cleartext signature (see <xref target="cleartext-signature"/>).</t>

<t>The Armor Headers are pairs of strings that can give the user or the receiving OpenPGP implementation some information about how to decode or use the message.
The Armor Headers are a part of the armor, not a part of the message, and hence are not protected by any signatures applied to the message.</t>

<t>The format of an Armor Header is that of a key-value pair.
A colon (<spanx style="verb">:</spanx> 0x38) and a single space (0x20) separate the key and value.
An OpenPGP implementation may consider improperly formatted Armor Headers to be corruption of the ASCII Armor, but <bcp14>SHOULD</bcp14> make an effort to recover.
Unknown keys should be silently ignored, and an OpenPGP implementation <bcp14>SHOULD</bcp14> continue to process the message.</t>

<t>Note that some transport methods are sensitive to line length.
While there is a limit of 76 characters for the Radix-64 data (<xref target="encoding-binary-radix64"/>), there is no limit to the length of Armor Headers.
Care should be taken that the Armor Headers are short enough to survive transport.
One way to do this is to repeat an Armor Header Key multiple times with different values for each so that no one line is overly long.</t>

<t>Currently defined Armor Header Keys are as follows:</t>

<t><list style="symbols">
  <t>"Version", which states the OpenPGP implementation and version used to encode the message.
To minimize metadata, implementations <bcp14>SHOULD NOT</bcp14> emit this key and its corresponding value except for debugging purposes with explicit user consent.</t>
  <t>"Comment", a user-defined comment.
OpenPGP defines all text to be in UTF-8.
A comment may be any UTF-8 string.
However, the whole point of armoring is to provide seven-bit-clean data.
Consequently, if a comment has characters that are outside the US-ASCII range of UTF, they may very well not survive transport.</t>
  <t>"Hash", a comma-separated list of hash algorithms used in this message.
This is used only in cleartext signed messages.</t>
  <t>"SaltedHash", a salt and hash algorithm used in this message.
This is used only in cleartext signed messages that are followed by a v5 Signature.</t>
  <t>"Charset", a description of the character set that the plaintext is in.
Please note that OpenPGP defines text to be in UTF-8.
An implementation will get best results by translating into and out of UTF-8.
However, there are many instances where this is easier said than done.
Also, there are communities of users who have no need for UTF-8 because they are all happy with a character set like ISO Latin-5 or a Japanese character set.
In such instances, an implementation <bcp14>MAY</bcp14> override the UTF-8 default by using this header key.
An implementation <bcp14>MAY</bcp14> implement this key and any translations it cares to; an implementation <bcp14>MAY</bcp14> ignore it and assume all text is UTF-8.</t>
</list></t>

<t>The Armor Tail Line is composed in the same manner as the Armor Header Line, except the string "BEGIN" is replaced by the string "END".</t>

</section>
<section anchor="encoding-binary-radix64"><name>Encoding Binary in Radix-64</name>

<t>The encoding process represents 24-bit groups of input bits as output strings of 4 encoded characters.
Proceeding from left to right, a 24-bit input group is formed by concatenating three 8-bit input groups.
These 24 bits are then treated as four concatenated 6-bit groups, each of which is translated into a single digit in the Radix-64 alphabet.
When encoding a bit stream with the Radix-64 encoding, the bit stream must be presumed to be ordered with the most significant bit first.
That is, the first bit in the stream will be the high-order bit in the first 8-bit octet, and the eighth bit will be the low-order bit in the first 8-bit octet, and so on.</t>

<figure><artwork><![CDATA[
┌──first octet──┬─second octet──┬──third octet──┐
│7 6 5 4 3 2 1 0│7 6 5 4 3 2 1 0│7 6 5 4 3 2 1 0│
├───────────┬───┴───────┬───────┴───┬───────────┤
│5 4 3 2 1 0│5 4 3 2 1 0│5 4 3 2 1 0│5 4 3 2 1 0│
└──1.index──┴──2.index──┴──3.index──┴──4.index──┘
]]></artwork></figure>

<t>Each 6-bit group is used as an index into an array of 64 printable characters from the table below.
The character referenced by the index is placed in the output string.</t>

<texttable title="Encoding for Radix-64">
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='left'>&#160;</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='left'>&#160;</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='left'>&#160;</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <c>0</c>
      <c>A</c>
      <c>&#160;</c>
      <c>17</c>
      <c>R</c>
      <c>&#160;</c>
      <c>34</c>
      <c>i</c>
      <c>&#160;</c>
      <c>51</c>
      <c>z</c>
      <c>1</c>
      <c>B</c>
      <c>&#160;</c>
      <c>18</c>
      <c>S</c>
      <c>&#160;</c>
      <c>35</c>
      <c>j</c>
      <c>&#160;</c>
      <c>52</c>
      <c>0</c>
      <c>2</c>
      <c>C</c>
      <c>&#160;</c>
      <c>19</c>
      <c>T</c>
      <c>&#160;</c>
      <c>36</c>
      <c>k</c>
      <c>&#160;</c>
      <c>53</c>
      <c>1</c>
      <c>3</c>
      <c>D</c>
      <c>&#160;</c>
      <c>20</c>
      <c>U</c>
      <c>&#160;</c>
      <c>37</c>
      <c>l</c>
      <c>&#160;</c>
      <c>54</c>
      <c>2</c>
      <c>4</c>
      <c>E</c>
      <c>&#160;</c>
      <c>21</c>
      <c>V</c>
      <c>&#160;</c>
      <c>38</c>
      <c>m</c>
      <c>&#160;</c>
      <c>55</c>
      <c>3</c>
      <c>5</c>
      <c>F</c>
      <c>&#160;</c>
      <c>22</c>
      <c>W</c>
      <c>&#160;</c>
      <c>39</c>
      <c>n</c>
      <c>&#160;</c>
      <c>56</c>
      <c>4</c>
      <c>6</c>
      <c>G</c>
      <c>&#160;</c>
      <c>23</c>
      <c>X</c>
      <c>&#160;</c>
      <c>40</c>
      <c>o</c>
      <c>&#160;</c>
      <c>57</c>
      <c>5</c>
      <c>7</c>
      <c>H</c>
      <c>&#160;</c>
      <c>24</c>
      <c>Y</c>
      <c>&#160;</c>
      <c>41</c>
      <c>p</c>
      <c>&#160;</c>
      <c>58</c>
      <c>6</c>
      <c>8</c>
      <c>I</c>
      <c>&#160;</c>
      <c>25</c>
      <c>Z</c>
      <c>&#160;</c>
      <c>42</c>
      <c>q</c>
      <c>&#160;</c>
      <c>59</c>
      <c>7</c>
      <c>9</c>
      <c>J</c>
      <c>&#160;</c>
      <c>26</c>
      <c>a</c>
      <c>&#160;</c>
      <c>43</c>
      <c>r</c>
      <c>&#160;</c>
      <c>60</c>
      <c>8</c>
      <c>10</c>
      <c>K</c>
      <c>&#160;</c>
      <c>27</c>
      <c>b</c>
      <c>&#160;</c>
      <c>44</c>
      <c>s</c>
      <c>&#160;</c>
      <c>61</c>
      <c>9</c>
      <c>11</c>
      <c>L</c>
      <c>&#160;</c>
      <c>28</c>
      <c>c</c>
      <c>&#160;</c>
      <c>45</c>
      <c>t</c>
      <c>&#160;</c>
      <c>62</c>
      <c>+</c>
      <c>12</c>
      <c>M</c>
      <c>&#160;</c>
      <c>29</c>
      <c>d</c>
      <c>&#160;</c>
      <c>46</c>
      <c>u</c>
      <c>&#160;</c>
      <c>63</c>
      <c>/</c>
      <c>13</c>
      <c>N</c>
      <c>&#160;</c>
      <c>30</c>
      <c>e</c>
      <c>&#160;</c>
      <c>47</c>
      <c>v</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>14</c>
      <c>O</c>
      <c>&#160;</c>
      <c>31</c>
      <c>f</c>
      <c>&#160;</c>
      <c>48</c>
      <c>w</c>
      <c>&#160;</c>
      <c>(pad)</c>
      <c>=</c>
      <c>15</c>
      <c>P</c>
      <c>&#160;</c>
      <c>32</c>
      <c>g</c>
      <c>&#160;</c>
      <c>49</c>
      <c>x</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>16</c>
      <c>Q</c>
      <c>&#160;</c>
      <c>33</c>
      <c>h</c>
      <c>&#160;</c>
      <c>50</c>
      <c>y</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
</texttable>

<t>The encoded output stream must be represented in lines of no more than 76 characters each.</t>

<t>Special processing is performed if fewer than 24 bits are available at the end of the data being encoded.
There are three possibilities:</t>

<t><list style="numbers">
  <t>The last data group has 24 bits (3 octets).
No special processing is needed.</t>
  <t>The last data group has 16 bits (2 octets).
The first two 6-bit groups are processed as above.
The third (incomplete) data group has two zero-value bits added to it, and is processed as above.
A pad character (=) is added to the output.</t>
  <t>The last data group has 8 bits (1 octet).
The first 6-bit group is processed as above.
The second (incomplete) data group has four zero-value bits added to it, and is processed as above.
Two pad characters (=) are added to the output.</t>
</list></t>

</section>
<section anchor="decoding-radix-64"><name>Decoding Radix-64</name>

<t>In Radix-64 data, characters other than those in the table, line breaks, and other white space probably indicate a transmission error, about which a warning message or even a message rejection might be appropriate under some circumstances.
Decoding software must ignore all white space.</t>

<t>Because it is used only for padding at the end of the data, the occurrence of any "=" characters may be taken as evidence that the end of the data has been reached (without truncation in transit).
No such assurance is possible, however, when the number of octets transmitted was a multiple of three and no "=" characters are present.</t>

</section>
<section anchor="examples-of-radix-64"><name>Examples of Radix-64</name>

<figure><artwork><![CDATA[
Input data:  0x14FB9C03D97E
Hex:     1   4    F   B    9   C     | 0   3    D   9    7   E
8-bit:   00010100 11111011 10011100  | 00000011 11011001 01111110
6-bit:   000101 001111 101110 011100 | 000000 111101 100101 111110
Decimal: 5      15     46     28       0      61     37     62
Output:  F      P      u      c        A      9      l      +
Input data:  0x14FB9C03D9
Hex:     1   4    F   B    9   C     | 0   3    D   9
8-bit:   00010100 11111011 10011100  | 00000011 11011001
                                                pad with 00
6-bit:   000101 001111 101110 011100 | 000000 111101 100100
Decimal: 5      15     46     28       0      61     36
                                                   pad with =
Output:  F      P      u      c        A      9      k      =
Input data:  0x14FB9C03
Hex:     1   4    F   B    9   C     | 0   3
8-bit:   00010100 11111011 10011100  | 00000011
                                       pad with 0000
6-bit:   000101 001111 101110 011100 | 000000 110000
Decimal: 5      15     46     28       0      48
                                            pad with =      =
Output:  F      P      u      c        A      w      =      =
]]></artwork></figure>

</section>
<section anchor="example-of-an-ascii-armored-message"><name>Example of an ASCII Armored Message</name>

<figure><artwork><![CDATA[
-----BEGIN PGP MESSAGE-----

yDgBO22WxBHv7O8X7O/jygAEzol56iUKiXmV+XmpCtmpqQUKiQrFqclFqUDBovzS
vBSFjNSiVHsuAA==
-----END PGP MESSAGE-----
]]></artwork></figure>

<t>Note that this example has extra indenting; an actual armored message would have no leading whitespace.</t>

</section>
</section>
<section anchor="cleartext-signature"><name>Cleartext Signature Framework</name>

<t>It is desirable to be able to sign a textual octet stream without ASCII armoring the stream itself, so the signed text is still readable without special software.
In order to bind a signature to such a cleartext, this framework is used, which follows the same basic format and restrictions as the ASCII armoring described in <xref target="forming-ascii-armor"/>.
(Note that this framework is not intended to be reversible.
<xref target="RFC3156"/> defines another way to sign cleartext messages for environments that support MIME.)</t>

<t>The cleartext signed message consists of:</t>

<t><list style="symbols">
  <t>The cleartext header <spanx style="verb">-----BEGIN PGP SIGNED MESSAGE-----</spanx> on a single line,</t>
  <t>If the message is signed using v3 or v4 Signatures, one or more "Hash" Armor Headers,</t>
  <t>If the message is signed using v5 Signatures, one or more "SaltedHash" Armor Headers,</t>
  <t>Exactly one empty line not included into the message digest,</t>
  <t>The dash-escaped cleartext that is included into the message digest,</t>
  <t>The ASCII armored signature(s) including the <spanx style="verb">-----BEGIN PGP SIGNATURE-----</spanx> Armor Header and Armor Tail Lines.</t>
</list></t>

<t>If the "Hash" Armor Header is given, the specified message digest algorithm(s) are used for the signature.
If more than one message digest is used in the signatures, each digest algorithm has to be specified.
To that end, the "Hash" Armor Header contains a comma-delimited list of used message digests, and the "Hash" Armor Header can be given multiple times.</t>

<t>If the "SaltedHash" Armor Header is given, the specified message digest algorithm and salt are used for a signature.
The message digest name is followed by a colon (<spanx style="verb">:</spanx>) followed by 22 characters of Radix-64 encoded salt without padding.
Note: The "SaltedHash" Armor Header contains digest algorithm and salt for a single signature; a second signature requires a second "SaltedHash" Armor Header.</t>

<t>If neither a "Hash" nor a "SaltedHash" Armor Header is given, or the message digest algorithms (and salts) used in the signatures do not match the information in the headers, the signature <bcp14>MUST</bcp14> be considered invalid.</t>

<t>Current message digest names are described with the algorithm IDs in <xref target="hash-algos"/>.</t>

<t>An implementation <bcp14>SHOULD</bcp14> add a line break after the cleartext, but <bcp14>MAY</bcp14> omit it if the cleartext ends with a line break.
This is for visual clarity.</t>

<section anchor="dash-escaped-text"><name>Dash-Escaped Text</name>

<t>The cleartext content of the message must also be dash-escaped.</t>

<t>Dash-escaped cleartext is the ordinary cleartext where every line starting with a <u>-</u> is prefixed by the sequence <u>-</u> and <u> </u>.
This prevents the parser from recognizing armor headers of the cleartext itself.
An implementation <bcp14>MAY</bcp14> dash-escape any line, <bcp14>SHOULD</bcp14> dash-escape lines commencing "From" followed by a space, and <bcp14>MUST</bcp14> dash-escape any line commencing in a dash.
The message digest is computed using the cleartext itself, not the dash-escaped form.</t>

<t>As with binary signatures on text documents, a cleartext signature is calculated on the text using canonical &lt;CR&gt;&lt;LF&gt; line endings.
The line ending (that is, the &lt;CR&gt;&lt;LF&gt;) before the <spanx style="verb">-----BEGIN PGP SIGNATURE-----</spanx> line that terminates the signed text is not considered part of the signed text.</t>

<t>When reversing dash-escaping, an implementation <bcp14>MUST</bcp14> strip the string <spanx style="verb">- </spanx> if it occurs at the beginning of a line, and <bcp14>SHOULD</bcp14> warn on <spanx style="verb">-</spanx> and any character other than a space at the beginning of a line.</t>

<t>Also, any trailing whitespace --- spaces (0x20) and tabs (0x09) --- at the end of any line is removed when the cleartext signature is generated.</t>

</section>
</section>
<section anchor="regular-expressions"><name>Regular Expressions</name>

<t>A regular expression is zero or more branches, separated by <spanx style="verb">|</spanx>.
It matches anything that matches one of the branches.</t>

<t>A branch is zero or more pieces, concatenated.
It matches a match for the first, followed by a match for the second, etc.</t>

<t>A piece is an atom possibly followed by <spanx style="verb">*</spanx>, <spanx style="verb">+</spanx>, or <spanx style="verb">?</spanx>.
An atom followed by <spanx style="verb">*</spanx> matches a sequence of 0 or more matches of the atom.
An atom followed by <spanx style="verb">+</spanx> matches a sequence of 1 or more matches of the atom.
An atom followed by <spanx style="verb">?</spanx> matches a match of the atom, or the null string.</t>

<t>An atom is a regular expression in parentheses (matching a match for the regular expression), a range (see below), <spanx style="verb">.</spanx> (matching any single character), <spanx style="verb">^</spanx> (matching the null string at the beginning of the input string), <spanx style="verb">$</spanx> (matching the null string at the end of the input string), a <spanx style="verb">\</spanx> followed by a single character (matching that character), or a single character with no other significance (matching that character).</t>

<t>A range is a sequence of characters enclosed in <spanx style="verb">[]</spanx>.
It normally matches any single character from the sequence.
If the sequence begins with <spanx style="verb">^</spanx>, it matches any single character not from the rest of the sequence.
If two characters in the sequence are separated by <spanx style="verb">-</spanx>, this is shorthand for the full list of ASCII characters between them (for example, <spanx style="verb">[0-9]</spanx> matches any decimal digit).
To include a literal <spanx style="verb">]</spanx> in the sequence, make it the first character (following a possible <spanx style="verb">^</spanx>).
To include a literal <spanx style="verb">-</spanx>, make it the first or last character.</t>

</section>
<section anchor="constants"><name>Constants</name>

<t>This section describes the constants used in OpenPGP.</t>

<t>Note that these tables are not exhaustive lists; an implementation <bcp14>MAY</bcp14> implement an algorithm not on these lists, so long as the algorithm numbers are chosen from the private or experimental algorithm range.</t>

<t>See <xref target="notes-on-algorithms"/> for more discussion of the algorithms.</t>

<section anchor="pubkey-algos"><name>Public-Key Algorithms</name>

<texttable title="Public-key algorithm registry">
      <ttcol align='right'>ID</ttcol>
      <ttcol align='left'>Algorithm</ttcol>
      <ttcol align='left'>Public Key Format</ttcol>
      <ttcol align='left'>Secret Key Format</ttcol>
      <ttcol align='left'>Signature Format</ttcol>
      <ttcol align='left'>PKESK Format</ttcol>
      <c>1</c>
      <c>RSA (Encrypt or Sign) <xref target="HAC"/></c>
      <c>MPI(n), MPI(e) [<xref target="key-rsa"/>]</c>
      <c>MPI(d), MPI(p), MPI(q), MPI(u)</c>
      <c>MPI(m**d mod n) [<xref target="sig-rsa"/>]</c>
      <c>MPI(m**e mod n) [<xref target="pkesk-rsa"/>]</c>
      <c>2</c>
      <c>RSA Encrypt-Only <xref target="HAC"/></c>
      <c>MPI(n), MPI(e) [<xref target="key-rsa"/>]</c>
      <c>MPI(d), MPI(p), MPI(q), MPI(u)</c>
      <c>N/A</c>
      <c>MPI(m**e mod n) [<xref target="pkesk-rsa"/>]</c>
      <c>3</c>
      <c>RSA Sign-Only <xref target="HAC"/></c>
      <c>MPI(n), MPI(e) [<xref target="key-rsa"/>]</c>
      <c>MPI(d), MPI(p), MPI(q), MPI(u)</c>
      <c>MPI(m**d mod n) [<xref target="sig-rsa"/>]</c>
      <c>N/A</c>
      <c>16</c>
      <c>Elgamal (Encrypt-Only) <xref target="ELGAMAL"/> <xref target="HAC"/></c>
      <c>MPI(p), MPI(g), MPI(y) [<xref target="key-elgamal"/>]</c>
      <c>MPI(x)</c>
      <c>N/A</c>
      <c>MPI(g**k mod p), MPI (m * y**k mod p) [<xref target="pkesk-elgamal"/>]</c>
      <c>17</c>
      <c>DSA (Digital Signature Algorithm) <xref target="FIPS186"/> <xref target="HAC"/></c>
      <c>MPI(p), MPI(q), MPI(g), MPI(y) [<xref target="key-dsa"/>]</c>
      <c>MPI(x)</c>
      <c>MPI(r), MPI(s) [<xref target="sig-dsa"/>]</c>
      <c>N/A</c>
      <c>18</c>
      <c>ECDH public key algorithm</c>
      <c>OID, MPI(point in curve-specific point format), KDFParams [see <xref target="curve-specific-formats"/>, <xref target="key-ecdh"/>]</c>
      <c>MPI(value in curve-specific format) [<xref target="curve-specific-formats"/>]</c>
      <c>N/A</c>
      <c>MPI(point in curve-specific point format), size octet, encoded key [<xref target="curve-specific-formats"/>, <xref target="pkesk-ecdh"/>, <xref target="ecdh"/>]</c>
      <c>19</c>
      <c>ECDSA public key algorithm <xref target="FIPS186"/></c>
      <c>OID, MPI(point in SEC1 format) [<xref target="key-ecdsa"/>]</c>
      <c>MPI(value)</c>
      <c>MPI(r), MPI(s) [<xref target="sig-dsa"/>]</c>
      <c>N/A</c>
      <c>20</c>
      <c>Reserved (formerly Elgamal Encrypt or Sign)</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>21</c>
      <c>Reserved for Diffie-Hellman (X9.42, as defined for IETF-S/MIME)</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>22</c>
      <c>EdDSA  <xref target="RFC8032"/></c>
      <c>OID, MPI(point in prefixed native format) [see <xref target="ec-point-prefixed-native"/>, <xref target="key-eddsa"/>]</c>
      <c>MPI(value in curve-specific format) [see <xref target="curve-specific-formats"/>]</c>
      <c>MPI, MPI [see <xref target="curve-specific-formats"/>, <xref target="sig-eddsa"/>]</c>
      <c>N/A</c>
      <c>23</c>
      <c>Reserved (AEDH)</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>24</c>
      <c>Reserved (AEDSA)</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>100 to 110</c>
      <c>Private/Experimental algorithm</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
</texttable>

<t>Implementations <bcp14>MUST</bcp14> implement EdDSA (19) for signatures, and ECDH (18) for encryption.</t>

<t>RSA (1) keys are deprecated and <bcp14>SHOULD NOT</bcp14> be generated, but may be interpreted.
RSA Encrypt-Only (2) and RSA Sign-Only (3) are deprecated and <bcp14>MUST NOT</bcp14> be generated.
See <xref target="rsa-notes"/>.
Elgamal (16) keys are deprecated and <bcp14>MUST NOT</bcp14> be generated (see <xref target="elgamal-notes"/>).
DSA (17) keys are deprecated and <bcp14>MUST NOT</bcp14> be generated (see <xref target="dsa-notes"/>).
See <xref target="reserved-notes"/> for notes on Elgamal Encrypt or Sign (20), and X9.42 (21).
Implementations <bcp14>MAY</bcp14> implement any other algorithm.</t>

<t>Note that an implementation conforming to the previous version of this standard (<xref target="RFC4880"/>) have only DSA (17) and Elgamal (16) as its <bcp14>MUST</bcp14>-implement algorithms.</t>

<t>A compatible specification of ECDSA is given in <xref target="RFC6090"/> as "KT-I Signatures" and in <xref target="SEC1"/>; ECDH is defined in <xref target="ecdh"/> of this document.</t>

</section>
<section anchor="ec-curves"><name>ECC Curves for OpenPGP</name>

<t>The parameter curve OID is an array of octets that define a named curve.</t>

<t>The table below specifies the exact sequence of octets for each named curve referenced in this document.
It also specifies which public key algorithms the curve can be used with, as well as the size of expected elements in octets:</t>

<texttable title="ECC Curve OID and usage registry" anchor="ecc-oid-usage">
      <ttcol align='left'>ASN.1 Object Identifier</ttcol>
      <ttcol align='left'>OID len</ttcol>
      <ttcol align='left'>Curve OID octets in hexadecimal representation</ttcol>
      <ttcol align='left'>Curve name</ttcol>
      <ttcol align='left'>Usage</ttcol>
      <ttcol align='left'>Field Size (fsize)</ttcol>
      <c>1.2.840.10045.3.1.7</c>
      <c>8</c>
      <c>2A 86 48 CE 3D 03 01 07</c>
      <c>NIST P-256</c>
      <c>ECDSA, ECDH</c>
      <c>32</c>
      <c>1.3.132.0.34</c>
      <c>5</c>
      <c>2B 81 04 00 22</c>
      <c>NIST P-384</c>
      <c>ECDSA, ECDH</c>
      <c>48</c>
      <c>1.3.132.0.35</c>
      <c>5</c>
      <c>2B 81 04 00 23</c>
      <c>NIST P-521</c>
      <c>ECDSA, ECDH</c>
      <c>66</c>
      <c>1.3.6.1.4.1.11591.15.1</c>
      <c>9</c>
      <c>2B 06 01 04 01 DA 47 0F 01</c>
      <c>Ed25519</c>
      <c>EdDSA</c>
      <c>32</c>
      <c>1.3.101.113</c>
      <c>3</c>
      <c>2B 65 71</c>
      <c>Ed448</c>
      <c>EdDSA</c>
      <c>57</c>
      <c>1.3.6.1.4.1.3029.1.5.1</c>
      <c>10</c>
      <c>2B 06 01 04 01 97 55 01 05 01</c>
      <c>Curve25519</c>
      <c>ECDH</c>
      <c>32</c>
      <c>1.3.101.111</c>
      <c>3</c>
      <c>2B 65 6F</c>
      <c>X448</c>
      <c>ECDH</c>
      <c>56</c>
</texttable>

<t>The "Field Size (fsize)" column represents the field size of the group in number of octets, rounded up, such that x or y coordinates for a point on the curve, native point representations, or scalars with high enough entropy for the curve can be represented in that many octets.</t>

<t>The sequence of octets in the third column is the result of applying the Distinguished Encoding Rules (DER) to the ASN.1 Object Identifier with subsequent truncation.
The truncation removes the two fields of encoded Object Identifier.
The first omitted field is one octet representing the Object Identifier tag, and the second omitted field is the length of the Object Identifier body.
For example, the complete ASN.1 DER encoding for the NIST P-256 curve OID is "06 08 2A 86 48 CE 3D 03 01 07", from which the first entry in the table above is constructed by omitting the first two octets.
Only the truncated sequence of octets is the valid representation of a curve OID.</t>

<t>Implementations <bcp14>MUST</bcp14> implement Ed25519 for use with EdDSA, and Curve25519 for use with ECDH.
Implementations <bcp14>SHOULD</bcp14> implement Ed448 for use with EdDSA, and X448 for use with ECDH.</t>

<section anchor="curve-specific-formats"><name>Curve-Specific Wire Formats</name>

<t>Some Elliptic Curve Public Key Algorithms use different conventions for specific fields depending on the curve in use.
Each field is always formatted as an MPI, but with a curve-specific framing.
This table summarizes those distinctions.</t>

<texttable title="Curve-specific wire formats" anchor="ecc-wire-formats">
      <ttcol align='left'>Curve</ttcol>
      <ttcol align='left'>ECDH Point Format</ttcol>
      <ttcol align='left'>ECDH Secret Key MPI</ttcol>
      <ttcol align='left'>EdDSA Secret Key MPI</ttcol>
      <ttcol align='left'>EdDSA Signature first MPI</ttcol>
      <ttcol align='left'>EdDSA Signature second MPI</ttcol>
      <c>NIST P-256</c>
      <c>SEC1</c>
      <c>integer</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>NIST P-384</c>
      <c>SEC1</c>
      <c>integer</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>NIST P-521</c>
      <c>SEC1</c>
      <c>integer</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>Ed25519</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>32 octets of secret</c>
      <c>32 octets of R</c>
      <c>32 octets of S</c>
      <c>Ed448</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>prefixed 57 octets of secret</c>
      <c>prefixed 114 octets of signature</c>
      <c>0 [this is an unused placeholder]</c>
      <c>Curve25519</c>
      <c>prefixed native</c>
      <c>integer (see <xref target="curve25519-secrets"/>)</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>X448</c>
      <c>prefixed native</c>
      <c>prefixed 56 octets of secret</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>N/A</c>
</texttable>

<t>For the native octet-string forms of EdDSA values, see <xref target="RFC8032"/>.
For the native octet-string forms of ECDH secret scalars and points, see <xref target="RFC7748"/>.</t>

</section>
</section>
<section anchor="symmetric-algos"><name>Symmetric-Key Algorithms</name>

<texttable title="Symmetric-key algorithm registry">
      <ttcol align='right'>ID</ttcol>
      <ttcol align='left'>Algorithm</ttcol>
      <c>0</c>
      <c>Plaintext or unencrypted data</c>
      <c>1</c>
      <c>IDEA <xref target="IDEA"/></c>
      <c>2</c>
      <c>TripleDES (DES-EDE, <xref target="SCHNEIER"/>, <xref target="HAC"/> - 168 bit key derived from 192)</c>
      <c>3</c>
      <c>CAST5 (128 bit key, as per <xref target="RFC2144"/>)</c>
      <c>4</c>
      <c>Blowfish (128 bit key, 16 rounds) <xref target="BLOWFISH"/></c>
      <c>5</c>
      <c>Reserved</c>
      <c>6</c>
      <c>Reserved</c>
      <c>7</c>
      <c>AES with 128-bit key <xref target="AES"/></c>
      <c>8</c>
      <c>AES with 192-bit key</c>
      <c>9</c>
      <c>AES with 256-bit key</c>
      <c>10</c>
      <c>Twofish with 256-bit key <xref target="TWOFISH"/></c>
      <c>11</c>
      <c>Camellia with 128-bit key <xref target="RFC3713"/></c>
      <c>12</c>
      <c>Camellia with 192-bit key</c>
      <c>13</c>
      <c>Camellia with 256-bit key</c>
      <c>100 to 110</c>
      <c>Private/Experimental algorithm</c>
      <c>253, 254 and 255</c>
      <c>Reserved to avoid collision with Secret Key Encryption (see <xref target="secret-key-encryption"/> and <xref target="secret-key-packet-formats"/>)</c>
</texttable>

<t>Implementations <bcp14>MUST</bcp14> implement AES-128.
Implementations <bcp14>SHOULD</bcp14> implement AES-256.
Implementations <bcp14>MUST NOT</bcp14> encrypt data with IDEA, TripleDES, or CAST5.
Implementations <bcp14>MAY</bcp14> decrypt data that uses IDEA, TripleDES, or CAST5 for the sake of reading older messages or new messages from legacy clients.
An Implementation that decrypts data using IDEA, TripleDES, or CAST5 <bcp14>SHOULD</bcp14> generate a deprecation warning about the symmetric algorithm, indicating that message confidentiality is suspect.
Implementations <bcp14>MAY</bcp14> implement any other algorithm.</t>

</section>
<section anchor="compression-algos"><name>Compression Algorithms</name>

<texttable title="Compression algorithm registry">
      <ttcol align='right'>ID</ttcol>
      <ttcol align='left'>Algorithm</ttcol>
      <c>0</c>
      <c>Uncompressed</c>
      <c>1</c>
      <c>ZIP <xref target="RFC1951"/></c>
      <c>2</c>
      <c>ZLIB <xref target="RFC1950"/></c>
      <c>3</c>
      <c>BZip2 <xref target="BZ2"/></c>
      <c>100 to 110</c>
      <c>Private/Experimental algorithm</c>
</texttable>

<t>Implementations <bcp14>MUST</bcp14> implement uncompressed data.
Implementations <bcp14>SHOULD</bcp14> implement ZLIB.
For interoperability reasons implementations <bcp14>SHOULD</bcp14> be able to decompress using ZIP.
Implementations <bcp14>MAY</bcp14> implement any other algorithm.</t>

</section>
<section anchor="hash-algos"><name>Hash Algorithms</name>

<texttable title="Hash algorithm registry">
      <ttcol align='right'>ID</ttcol>
      <ttcol align='left'>Algorithm</ttcol>
      <ttcol align='left'>Text Name</ttcol>
      <c>1</c>
      <c>MD5 <xref target="HAC"/></c>
      <c>"MD5"</c>
      <c>2</c>
      <c>SHA-1 <xref target="FIPS180"/>, <xref target="sha1cd"/></c>
      <c>"SHA1"</c>
      <c>3</c>
      <c>RIPEMD-160 <xref target="HAC"/></c>
      <c>"RIPEMD160"</c>
      <c>4</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>5</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>6</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>7</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>8</c>
      <c>SHA2-256 <xref target="FIPS180"/></c>
      <c>"SHA256"</c>
      <c>9</c>
      <c>SHA2-384 <xref target="FIPS180"/></c>
      <c>"SHA384"</c>
      <c>10</c>
      <c>SHA2-512 <xref target="FIPS180"/></c>
      <c>"SHA512"</c>
      <c>11</c>
      <c>SHA2-224 <xref target="FIPS180"/></c>
      <c>"SHA224"</c>
      <c>12</c>
      <c>SHA3-256 <xref target="FIPS202"/></c>
      <c>"SHA3-256"</c>
      <c>13</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>14</c>
      <c>SHA3-512 <xref target="FIPS202"/></c>
      <c>"SHA3-512"</c>
      <c>100 to 110</c>
      <c>Private/Experimental algorithm</c>
      <c>&#160;</c>
</texttable>

<t>Implementations <bcp14>MUST</bcp14> implement SHA2-256.
Implementations <bcp14>SHOULD</bcp14> implement SHA2-384 and SHA2-512.
Implementations <bcp14>MAY</bcp14> implement other algorithms.
Implementations <bcp14>SHOULD NOT</bcp14> create messages which require the use of SHA-1 with the exception of computing version 4 key fingerprints and for purposes of the Modification Detection Code (MDC) in version 1 Symmetrically Encrypted Integrity Protected Data packets.
Implementations <bcp14>MUST NOT</bcp14> generate signatures with MD5, SHA-1, or RIPEMD-160.
Implementations <bcp14>MUST NOT</bcp14> use MD5, SHA-1, or RIPEMD-160 as a hash function in an ECDH KDF.
Implementations <bcp14>MUST NOT</bcp14> validate any recent signature that depends on MD5, SHA-1, or RIPEMD-160.
Implementations <bcp14>SHOULD NOT</bcp14> validate any old signature that depends on MD5, SHA-1, or RIPEMD-160 unless the signature's creation date predates known weakness of the algorithm used, and the implementation is confident that the message has been in the secure custody of the user the whole time.</t>

</section>
<section anchor="aead-algorithms"><name>AEAD Algorithms</name>

<texttable title="AEAD algorithm registry">
      <ttcol align='right'>ID</ttcol>
      <ttcol align='left'>Algorithm</ttcol>
      <ttcol align='left'>IV length (octets)</ttcol>
      <ttcol align='left'>authentication tag length (octets)</ttcol>
      <c>1</c>
      <c>EAX <xref target="EAX"/></c>
      <c>16</c>
      <c>16</c>
      <c>2</c>
      <c>OCB <xref target="RFC7253"/></c>
      <c>15</c>
      <c>16</c>
      <c>3</c>
      <c>GCM <xref target="SP800-38D"/></c>
      <c>12</c>
      <c>16</c>
      <c>100 to 110</c>
      <c>Private/Experimental algorithm</c>
      <c>&#160;</c>
      <c>&#160;</c>
</texttable>

<t>Implementations <bcp14>MUST</bcp14> implement OCB.
Implementations <bcp14>MAY</bcp14> implement EAX, GCM and other algorithms.</t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>Because this document obsoletes <xref target="RFC4880"/>, IANA is requested to update all registration information that references <xref target="RFC4880"/> to instead reference this RFC.</t>

<t>OpenPGP is highly parameterized, and consequently there are a number of considerations for allocating parameters for extensions.
This section describes how IANA should look at extensions to the protocol as described in this document.</t>

<section anchor="new-string-to-key-specifier-types"><name>New String-to-Key Specifier Types</name>

<t>OpenPGP S2K specifiers contain a mechanism for new algorithms to turn a string into a key.
This specification creates a registry of S2K specifier types.
The registry includes the S2K type, the name of the S2K, and a reference to the defining specification.
The initial values for this registry can be found in <xref target="s2k-types"/>.
Adding a new S2K specifier <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

<t>IANA should add a column "Generate?" to the S2K type registry, with initial values taken from <xref target="s2k-types"/>.</t>

</section>
<section anchor="new-packets"><name>New Packets</name>

<t>Major new features of OpenPGP are defined through new packet types.
This specification creates a registry of packet types.
The registry includes the packet type, the name of the packet, and a reference to the defining specification.
The initial values for this registry can be found in <xref target="packet-tags"/>.
Adding a new packet type <bcp14>MUST</bcp14> be done through the RFC <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

<section anchor="user-attribute-types"><name>User Attribute Types</name>

<t>The User Attribute packet permits an extensible mechanism for other types of certificate identification.
This specification creates a registry of User Attribute types.
The registry includes the User Attribute type, the name of the User Attribute, and a reference to the defining specification.
The initial values for this registry can be found in <xref target="user-attribute-packet"/>.
Adding a new User Attribute type <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

<section anchor="image-format-subpacket-types"><name>Image Format Subpacket Types</name>

<t>Within User Attribute packets, there is an extensible mechanism for other types of image-based User Attributes.
This specification creates a registry of Image Attribute subpacket types.
The registry includes the Image Attribute subpacket type, the name of the Image Attribute subpacket, and a reference to the defining specification.
The initial values for this registry can be found in <xref target="uat-image"/>.
Adding a new Image Attribute subpacket type <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

</section>
</section>
<section anchor="new-signature-subpackets"><name>New Signature Subpackets</name>

<t>OpenPGP signatures contain a mechanism for signed (or unsigned) data to be added to them for a variety of purposes in the Signature subpackets as discussed in <xref target="signature-subpacket"/>.
This specification creates a registry of Signature subpacket types.
The registry includes the Signature subpacket type, the name of the subpacket, and a reference to the defining specification.
The initial values for this registry can be found in <xref target="signature-subpacket"/>.
Adding a new Signature subpacket <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

<section anchor="signature-notation-data-subpackets"><name>Signature Notation Data Subpackets</name>

<t>OpenPGP signatures further contain a mechanism for extensions in signatures.
These are the Notation Data subpackets, which contain a key/value pair.
Notations contain a user space that is completely unmanaged and an IETF space.</t>

<t>This specification creates a registry of Signature Notation Data types.
The registry includes the name of the Signature Notation Data, the Signature Notation Data type, its allowed values, and a reference to the defining specification.
The initial values for this registry can be found in <xref target="notation-data"/>.
Adding a new Signature Notation Data subpacket <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

</section>
<section anchor="signature-notation-data-subpacket-notation-flags"><name>Signature Notation Data Subpacket Notation Flags</name>

<t>This specification creates a new registry of Signature Notation Data Subpacket Notation Flags.
The registry includes the columns "Flag", "Shorthand", "Description", "Security Recommended", "Interoperability Recommended", and "Reference".
The initial values for this registry can be found in <xref target="notation-data"/>.
Adding a new item <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

</section>
<section anchor="key-server-preference-extensions"><name>Key Server Preference Extensions</name>

<t>OpenPGP signatures contain a mechanism for preferences to be specified about key servers.
This specification creates a registry of key server preferences.
The registry includes the key server preference, the name of the preference, and a reference to the defining specification.
The initial values for this registry can be found in <xref target="key-server-preferences"/>.
Adding a new key server preference <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

</section>
<section anchor="key-flags-extensions"><name>Key Flags Extensions</name>

<t>OpenPGP signatures contain a mechanism for flags to be specified about key usage.
This specification creates a registry of key usage flags.
The registry includes the key flags value, the name of the flag, and a reference to the defining specification.
The initial values for this registry can be found in <xref target="key-flags"/>.
Adding a new key usage flag <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

</section>
<section anchor="reason-for-revocation-extensions"><name>Reason for Revocation Extensions</name>

<t>OpenPGP signatures contain a mechanism for flags to be specified about why a key was revoked.
This specification creates a registry of "Reason for Revocation" flags.
The registry includes the "Reason for Revocation" flags value, the name of the flag, and a reference to the defining specification.
The initial values for this registry can be found in <xref target="reason-for-revocation"/>.
Adding a new feature flag <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

</section>
<section anchor="implementation-features"><name>Implementation Features</name>

<t>OpenPGP signatures contain a mechanism for flags to be specified stating which optional features an implementation supports.
This specification creates a registry of feature-implementation flags.
The registry includes the feature-implementation flags value, the name of the flag, and a reference to the defining specification.
The initial values for this registry can be found in <xref target="features-subpacket"/>.
Adding a new feature-implementation flag <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

<t>Also see <xref target="meta-considerations-for-expansion"/> for more information about when feature flags are needed.</t>

</section>
</section>
<section anchor="new-packet-versions"><name>New Packet Versions</name>

<t>The core OpenPGP packets all have version numbers, and can be revised by introducing a new version of an existing packet.
This specification creates a registry of packet types.
The registry includes the packet type, the number of the version, and a reference to the defining specification.
The initial values for this registry can be found in <xref target="packet-types"/>.
Adding a new packet version <bcp14>MUST</bcp14> be done through the RFC <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

</section>
</section>
<section anchor="new-algorithms"><name>New Algorithms</name>

<t><xref target="constants"/> lists the core algorithms that OpenPGP uses.
Adding in a new algorithm is usually simple.
For example, adding in a new symmetric cipher usually would not need anything more than allocating a constant for that cipher.
If that cipher had other than a 64-bit or 128-bit block size, there might need to be additional documentation describing how OpenPGP-CFB mode would be adjusted.
Similarly, when DSA was expanded from a maximum of 1024-bit public keys to 3072-bit public keys, the revision of FIPS 186 contained enough information itself to allow implementation.
Changes to this document were made mainly for emphasis.</t>

<section anchor="public-key-algorithms"><name>Public-Key Algorithms</name>

<t>OpenPGP specifies a number of public-key algorithms.
This specification creates a registry of public-key algorithm identifiers.
The registry includes the algorithm name, its key sizes and parameters, and a reference to the defining specification.
The initial values for this registry can be found in <xref target="pubkey-algos"/>.
Adding a new public-key algorithm <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

<t>This document requests IANA register the following new public-key algorithm:</t>

<texttable title="New public-Key algorithms registered">
      <ttcol align='right'>ID</ttcol>
      <ttcol align='left'>Algorithm</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>22</c>
      <c>EdDSA public key algorithm</c>
      <c>This doc, <xref target="eddsa"/></c>
</texttable>

<t>[ Note to RFC-Editor: Please remove the table above on publication.
]</t>

<section anchor="elliptic-curve-algorithms"><name>Elliptic Curve Algorithms</name>

<t>Some public key algorithms use Elliptic Curves.
In particular, ECDH/EdDSA/ECDSA public key algorithms all allow specific curves to be used, as indicated by OID.
To register a new elliptic curve for use with OpenPGP, its OID needs to be registered in <xref target="ecc-oid-usage"/>, its wire format needs to be documented in <xref target="ecc-wire-formats"/>, and if used for ECDH, its KDF and KEK parameters must be populated in <xref target="ecdh-kdf-kek-parameters"/>.</t>

</section>
</section>
<section anchor="symmetric-key-algorithms"><name>Symmetric-Key Algorithms</name>

<t>OpenPGP specifies a number of symmetric-key algorithms.
This specification creates a registry of symmetric-key algorithm identifiers.
The registry includes the algorithm name, its key sizes and block size, and a reference to the defining specification.
The initial values for this registry can be found in <xref target="symmetric-algos"/>.
Adding a new symmetric-key algorithm <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

</section>
<section anchor="hash-algorithms"><name>Hash Algorithms</name>

<t>OpenPGP specifies a number of hash algorithms.
This specification creates a registry of hash algorithm identifiers.
The registry includes the algorithm name, a text representation of that name, its block size, an OID hash prefix, and a reference to the defining specification.
The initial values for this registry can be found in <xref target="hash-algos"/> for the algorithm identifiers and text names, and <xref target="version-three-sig"/> for the OIDs and expanded signature prefixes.
Adding a new hash algorithm <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

<t>This document requests IANA register the following hash algorithms:</t>

<texttable title="New hash algorithms registered">
      <ttcol align='right'>ID</ttcol>
      <ttcol align='left'>Algorithm</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>12</c>
      <c>SHA3-256</c>
      <c>This doc</c>
      <c>13</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>14</c>
      <c>SHA3-512</c>
      <c>This doc</c>
</texttable>

<t>[Notes to RFC-Editor: Please remove the table above on publication.
    It is desirable not to reuse old or reserved algorithms because some existing tools might print a wrong description.
    The ID 13 has been reserved so that the SHA3 algorithm IDs align nicely with their SHA2 counterparts.]</t>

</section>
<section anchor="compression-algorithms"><name>Compression Algorithms</name>

<t>OpenPGP specifies a number of compression algorithms.
This specification creates a registry of compression algorithm identifiers.
The registry includes the algorithm name and a reference to the defining specification.
The initial values for this registry can be found in <xref target="compression-algos"/>.
Adding a new compression key algorithm <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

</section>
<section anchor="elliptic-curve-algorithms-1"><name>Elliptic Curve Algorithms</name>

<t>This document requests IANA add a registry of elliptic curves for use in OpenPGP.</t>

<t>Each curve is identified on the wire by OID, and is acceptable for use in certain OpenPGP public key algorithms.
The table's initial headings and values can be found in <xref target="ec-curves"/>.
Adding a new elliptic curve algorithm to OpenPGP <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.
If the new curve can be used for ECDH or EdDSA, it must also be added to the "Curve-specific wire formats" table described in <xref target="curve-specific-formats"/>.</t>

</section>
</section>
<section anchor="elliptic-curve-point-and-scalar-wire-formats"><name>Elliptic Curve Point and Scalar Wire Formats</name>

<t>This document requests IANA add a registry of wire formats that represent elliptic curve points.
The table's initial headings and values can be found in <xref target="ec-point-wire-formats"/>.
Adding a new EC point wire format <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

<t>This document also requests IANA add a registry of wire formats that represent scalars for use with elliptic curve cryptography.
The table's initial headings and values can be found in <xref target="ec-scalar-wire-formats"/>.
Adding a new EC scalar wire format <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>.</t>

<t>This document also requests that IANA add a registry mapping curve-specific MPI octet-string encoding conventions for ECDH and EdDSA.
The table's initial headings and values can be found in <xref target="curve-specific-formats"/>.
Adding a new elliptic curve algorithm to OpenPGP <bcp14>MUST</bcp14> be done through the SPECIFICATION <bcp14>REQUIRED</bcp14> method, as described in <xref target="RFC8126"/>, and requires adding an entry to this table if the curve is to be used with either EdDSA or ECDH.</t>

</section>
<section anchor="changes-to-existing-registries"><name>Changes to existing registries</name>

<t>This document requests IANA add the following wire format columns to the OpenPGP public-key algorithm registry:</t>

<t><list style="symbols">
  <t>Public Key Format</t>
  <t>Secret Key Format</t>
  <t>Signature Format</t>
  <t>PKESK Format</t>
</list></t>

<t>And populate them with the values found in <xref target="pubkey-algos"/>.</t>

</section>
</section>
<section anchor="packet-composition"><name>Packet Composition</name>

<t>OpenPGP packets are assembled into sequences in order to create messages and to transfer keys.
Not all possible packet sequences are meaningful and correct.
This section describes the rules for how packets should be placed into sequences.</t>

<t>There are three distinct sequences of packets:</t>

<t><list style="symbols">
  <t>Transferable Public Keys (<xref target="transferable-public-keys"/>) and its close counterpart, Transferable Secret Keys (<xref target="transferable-secret-keys"/>)</t>
  <t>OpenPGP Messages (<xref target="openpgp-messages"/>)</t>
  <t>Detached Signatures (<xref target="detached-signatures"/>)</t>
</list></t>

<t>Each sequence has an explicit grammar of what packet types (<xref target="packet-type-registry"/>) can appear in what place.
The presence of an unknown critical packet, or a known but unexpected packet is a critical error, invalidating the entire sequence (see <xref target="packet-criticality"/>).
On the other hand, unknown non-critical packets can appear anywhere within any sequence.
This provides a structured way to introduce new packets into the protocol, while making sure that certain packets will be handled strict.</t>

<t>An implementation may "recognize" a packet, but not implement it.
The purpose of Packet Criticality is to allow the producer to tell the consumer whether it would prefer a new, unknown packet to generate an error or be ignored.</t>

<t>Note that previous versions of this document did not have a concept of Packet Criticality, and did not give clear guidance on what to do when unknown packets are encountered.
Therefore, a legacy implementation may reject unknown non-critical packets, or accept unknown critical packets.</t>

<t>When generating a sequence of OpenPGP packets according to one of the three grammars, an implementation <bcp14>MUST NOT</bcp14> inject a critical packet of a type that does not adhere to the grammar.</t>

<t>When consuming a sequence of OpenPGP packets according to one of the three grammars, an implementation <bcp14>MUST</bcp14> reject the sequence with an error if it encounters a critical packet of inappropriate type according to the grammar.</t>

<section anchor="transferable-public-keys"><name>Transferable Public Keys</name>

<t>OpenPGP users may transfer public keys.
This section describes the structure of public keys in transit to ensure interoperability.</t>

<section anchor="openpgp-v5-key-structure"><name>OpenPGP v5 Key Structure</name>

<t>The format of an OpenPGP v5 key is as follows.
Entries in square brackets are optional and ellipses indicate repetition.</t>

<figure><artwork><![CDATA[
Primary Key
   [Revocation Signature...]
    Direct-Key Signature...
   [User ID or User Attribute
           [Certification Revocation Signature...]
           [Certification Signature...]]...
   [Subkey [Subkey Revocation Signature...]
           Subkey Binding Signature...]...
   [Padding]
]]></artwork></figure>

<t>In addition to these rules, a marker packet (<xref target="marker-packet"/>) can appear anywhere in the sequence.</t>

<t>Note, that a v5 key uses a Direct-Key Signature to store algorithm preferences.</t>

<t>Every subkey for a v5 primary key <bcp14>MUST</bcp14> be a v5 subkey.</t>

<t>When a primary v5 Public Key is revoked, it is sometimes distributed with only the revocation signature:</t>

<figure><artwork><![CDATA[
Primary Key
    Revocation Signature
]]></artwork></figure>

<t>In this case, the direct-key signature is no longer necessary, since the primary key itself has been marked as unusable.</t>

</section>
<section anchor="openpgp-v4-key-structure"><name>OpenPGP v4 Key Structure</name>

<t>The format of an OpenPGP v4 key is as follows.</t>

<figure><artwork><![CDATA[
Primary Key
   [Revocation Signature]
   [Direct-Key Signature...]
   [User ID or User Attribute [Signature...]]...
   [Subkey [Subkey Revocation Signature...]
           Subkey Binding Signature...]...
]]></artwork></figure>

<t>In addition to these rules, a marker packet (<xref target="marker-packet"/>) can appear anywhere in the sequence.</t>

<t>A subkey always has at least one subkey binding signature after it that is issued using the primary key to tie the two keys together.
These binding signatures may be in either v3 or v4 format, but <bcp14>SHOULD</bcp14> be v4.
Subkeys that can issue signatures <bcp14>MUST</bcp14> have a v4 binding signature due to the <bcp14>REQUIRED</bcp14> embedded primary key binding signature.</t>

<t>Every subkey for a v4 primary key <bcp14>MUST</bcp14> be a v4 subkey.</t>

<t>When a primary v4 Public Key is revoked, the revocation signature is sometimes distributed by itself, without the primary key packet it applies to. This is referred to as a "revocation certificate".
Instead, a v5 revocation certificate <bcp14>MUST</bcp14> include the primary key packet, as described above.</t>

</section>
<section anchor="openpgp-v3-key-structure"><name>OpenPGP v3 Key Structure</name>

<t>The format of an OpenPGP v3 key is as follows.</t>

<figure><artwork><![CDATA[
RSA Public Key
   [Revocation Signature]
    User ID [Signature...]
   [User ID [Signature...]]...
]]></artwork></figure>

<t>In addition to these rules, a marker packet (<xref target="marker-packet"/>) can appear anywhere in the sequence.</t>

<t>Each signature certifies the RSA public key and the preceding User ID.
The RSA public key can have many User IDs and each User ID can have many signatures.
V3 keys are deprecated.
Implementations <bcp14>MUST NOT</bcp14> generate new v3 keys, but <bcp14>MAY</bcp14> continue to use existing ones.</t>

<t>V3 keys <bcp14>MUST NOT</bcp14> have subkeys.</t>

</section>
<section anchor="common-requirements"><name>Common requirements</name>

<t>The Public-Key packet occurs first.</t>

<t>In order to create self-signatures (see <xref target="self-sigs"/>), the primary key <bcp14>MUST</bcp14> be an algorithm capable of making signatures (that is, not an encryption-only algorithm).
The subkeys may be keys of any type.
For example, there may be a single-key RSA key, an EdDSA primary key with an RSA encryption key, or an EdDSA primary key with an ECDH subkey, etc.</t>

<t>Each of the following User ID packets provides the identity of the owner of this public key.
If there are multiple User ID packets, this corresponds to multiple means of identifying the same unique individual user; for example, a user may have more than one email address, and construct a User ID for each one.
A transferable public key <bcp14>SHOULD</bcp14> include at least one User ID packet unless storage requirements prohibit this.</t>

<t>Immediately following each User ID packet, there are zero or more Signature packets.
Each Signature packet is calculated on the immediately preceding User ID packet and the initial Public-Key packet.
The signature serves to certify the corresponding public key and User ID.
In effect, the signer is testifying to his or her belief that this public key belongs to the user identified by this User ID.</t>

<t>Within the same section as the User ID packets, there are zero or more User Attribute packets.
Like the User ID packets, a User Attribute packet is followed by zero or more Signature packets calculated on the immediately preceding User Attribute packet and the initial Public-Key packet.</t>

<t>User Attribute packets and User ID packets may be freely intermixed in this section, so long as the signatures that follow them are maintained on the proper User Attribute or User ID packet.</t>

<t>After the User ID packet or Attribute packet, there may be zero or more Subkey packets.
In general, subkeys are provided in cases where the top-level public key is a certification-only key.
However, any v4 or v5 key may have subkeys, and the subkeys may be encryption keys, signing keys, authentication keys, etc.
It is good practice to use separate subkeys for every operation (i.e. signature-only, encryption-only, authentication-only keys, etc.).</t>

<t>Each Subkey packet <bcp14>MUST</bcp14> be followed by one Signature packet, which should be a subkey binding signature issued by the top-level key.
For subkeys that can issue signatures, the subkey binding signature <bcp14>MUST</bcp14> contain an Embedded Signature subpacket with a primary key binding signature (0x19) issued by the subkey on the top-level key.</t>

<t>Subkey and Key packets may each be followed by a revocation Signature packet to indicate that the key is revoked.
Revocation signatures are only accepted if they are issued by the key itself, or by a key that is authorized to issue revocations via a Revocation Key subpacket in a self-signature by the top-level key.</t>

<t>The optional trailing Padding packet is a mechanism to defend against traffic analysis (see <xref target="traffic-analysis"/>).
For maximum interoperability, if the Public-Key packet is a v4 key, the optional Padding packet <bcp14>SHOULD NOT</bcp14> be present unless the recipient has indicated that they are capable of ignoring it successfully.
An implementation that is capable of receiving a transferable public key with a v5 Public-Key primary key <bcp14>MUST</bcp14> be able to accept (and ignore) the trailing optional Padding packet.</t>

<t>Transferable public-key packet sequences may be concatenated to allow transferring multiple public keys in one operation (see <xref target="keyrings"/>).</t>

</section>
</section>
<section anchor="transferable-secret-keys"><name>Transferable Secret Keys</name>

<t>OpenPGP users may transfer secret keys.
The format of a transferable secret key is the same as a transferable public key except that secret-key and secret-subkey packets can be used in addition to the public key and public-subkey packets.
If a single secret-key or secret-subkey packet is included in a packet sequence, it is a transferable secret key and should be handled and marked as such (see <xref target="forming-ascii-armor"/>).
Implementations <bcp14>SHOULD</bcp14> include self-signatures on any User IDs and subkeys, as this allows for a complete public key to be automatically extracted from the transferable secret key.
Implementations <bcp14>MAY</bcp14> choose to omit the self-signatures, especially if a transferable public key accompanies the transferable secret key.</t>

</section>
<section anchor="openpgp-messages"><name>OpenPGP Messages</name>

<t>An OpenPGP message is a packet or sequence of packets that corresponds to the following grammatical rules (comma represents sequential composition, and vertical bar separates alternatives):</t>

<dl>
  <dt>
OpenPGP Message :-  </dt>
  <dd>
    <t>Encrypted Message | Signed Message | Compressed Message | Literal Message.</t>
  </dd>
  <dt>
Compressed Message :-  </dt>
  <dd>
    <t>Compressed Data Packet.</t>
  </dd>
  <dt>
Literal Message :-  </dt>
  <dd>
    <t>Literal Data Packet.</t>
  </dd>
  <dt>
ESK :-  </dt>
  <dd>
    <t>Public-Key Encrypted Session Key Packet | Symmetric-Key Encrypted Session Key Packet.</t>
  </dd>
  <dt>
ESK Sequence :-  </dt>
  <dd>
    <t>ESK | ESK Sequence, ESK.</t>
  </dd>
  <dt>
Encrypted Data :-  </dt>
  <dd>
    <t>Symmetrically Encrypted Data Packet | Symmetrically Encrypted Integrity Protected Data Packet</t>
  </dd>
  <dt>
Encrypted Message :-  </dt>
  <dd>
    <t>Encrypted Data | ESK Sequence, Encrypted Data.</t>
  </dd>
  <dt>
One-Pass Signed Message :-  </dt>
  <dd>
    <t>One-Pass Signature Packet, OpenPGP Message, Corresponding Signature Packet.</t>
  </dd>
  <dt>
Signed Message :-  </dt>
  <dd>
    <t>Signature Packet, OpenPGP Message | One-Pass Signed Message.</t>
  </dd>
  <dt>
Optionally Padded Message :-  </dt>
  <dd>
    <t>OpenPGP Message | OpenPGP Message, Padding Packet.</t>
  </dd>
</dl>

<t>In addition to these rules, a marker packet (<xref target="marker-packet"/>) can appear anywhere in the sequence.</t>

<section anchor="unwrapping"><name>Unwrapping Encrypted and Compressed Messages</name>

<t>In addition to the above grammar, certain messages can be "unwrapped" to yield new messages.
In particular:</t>

<t><list style="symbols">
  <t>Decrypting a version 2 Symmetrically Encrypted and Integrity Protected Data packet must yield a valid Optionally Padded Message.</t>
  <t>Decrypting a version 1 Symmetrically Encrypted and Integrity Protected Data packet or --- for historic data --- a Symmetrically Encrypted Data packet must yield a valid OpenPGP Message.</t>
  <t>Decompressing a Compressed Data packet must also yield a valid OpenPGP Message.</t>
</list></t>

<t>When any unwrapping is performed, the resulting stream of octets is parsed into a series OpenPGP packets like any other stream of octets.
The packet boundaries found in the series of octets are expected to align with the length of the unwrapped octet stream.
An implementation <bcp14>MUST NOT</bcp14> interpret octets beyond the boundaries of the unwrapped octet stream as part of any OpenPGP packet.
If an implementation encounters a packet whose header length indicates that it would extend beyond the boundaries of the unwrapped octet stream, the implementation <bcp14>MUST</bcp14> reject that packet as malformed and unusable.</t>

</section>
<section anchor="additional-constraints-on-packet-sequences"><name>Additional Constraints on Packet Sequences</name>

<t>Note that some subtle combinations that are formally acceptable by this grammar are nonetheless unacceptable.</t>

<section anchor="encrypted-message-versions"><name>Packet Versions in Encrypted Messages</name>

<t>As noted above, an Encrypted Message is a sequence of zero or more PKESKs (<xref target="pkesk"/>) and SKESKs (<xref target="skesk"/>), followed by an SEIPD (<xref target="seipd"/>) payload.
In some historic data, the payload may be a deprecated SED (<xref target="sed"/>) packet instead of SEIPD, though implementations <bcp14>MUST NOT</bcp14> generate SED packets (see <xref target="ciphertext-malleability"/>).
The versions of the preceding ESK packets within an Encrypted Message <bcp14>MUST</bcp14> align with the version of the payload SEIPD packet, as described in this section.</t>

<t>v3 PKESK and v4 SKESK packets both contain in their cleartext the symmetric cipher algorithm identifier in addition to the session key for the subsequent SEIPD packet.
Since a v1 SEIPD does not contain a symmetric algorithm identifier, so all ESK packets preceding a v1 SEIPD payload <bcp14>MUST</bcp14> be either v3 PKESK or v4 SKESK.</t>

<t>On the other hand, the cleartext of the v5 ESK packets (either PKESK or SKESK) do not contain a symmetric cipher algorithm identifier, so they cannot be used in combination with a v1 SEIPD payload.
The payload following any v5 PKESK or v5 SKESK packet <bcp14>MUST</bcp14> be a v2 SEIPD.</t>

<t>Additionally, to avoid potentially conflicting cipher algorithm identifiers, and for simplicity, implementations <bcp14>MUST NOT</bcp14> precede a v2 SEIPD payload with either v3 PKESK or v4 SKESK packets.</t>

<t>The acceptable versions of packets in an Encrypted Message are summarized in the following table:</t>

<texttable title="Encrypted Message Packet Version Alignment">
      <ttcol align='left'>Version of Encrypted Data payload</ttcol>
      <ttcol align='left'>Version of preceding Symmetric-Key ESK (if any)</ttcol>
      <ttcol align='left'>Version of preceding Public-Key ESK (if any)</ttcol>
      <c>v1 SEIPD</c>
      <c>v4 SKESK</c>
      <c>v3 PKESK</c>
      <c>v2 SEIPD</c>
      <c>v5 SKESK</c>
      <c>v5 PKESK</c>
</texttable>

<t>An implementation processing an Encrypted Message <bcp14>MUST</bcp14> discard any preceding ESK packet with a version that does not align with the version of the payload.</t>

</section>
</section>
</section>
<section anchor="detached-signatures"><name>Detached Signatures</name>

<t>Some OpenPGP applications use so-called "detached signatures".
For example, a program bundle may contain a file, and with it a second file that is a detached signature of the first file.
These detached signatures are simply one or more Signature packets stored separately from the data for which they are a signature.</t>

<t>In addition, a marker packet (<xref target="marker-packet"/> and a padding packet (<xref target="padding-packet"/>) can appear anywhere in the sequence.</t>

</section>
</section>
<section anchor="elliptic-curve-cryptography"><name>Elliptic Curve Cryptography</name>

<t>This section describes algorithms and parameters used with Elliptic Curve Cryptography (ECC) keys.
A thorough introduction to ECC can be found in <xref target="KOBLITZ"/>.</t>

<t>None of the ECC methods described in this document are allowed with deprecated v3 keys.
Refer to <xref target="FIPS186"/>, B.4.1, for the method to generate a uniformly distributed ECC private key.</t>

<section anchor="supported-ecc-curves"><name>Supported ECC Curves</name>

<t>This document references three named prime field curves defined in <xref target="FIPS186"/> as "Curve P-256", "Curve P-384", and "Curve P-521".
These three <xref target="FIPS186"/> curves can be used with ECDSA and ECDH public key algorithms.
Additionally, curve "Curve25519" and "Curve448" are referenced for use with Ed25519 and Ed448 (EdDSA signing, see <xref target="RFC8032"/>); and X25519 and X448 (ECDH encryption, see <xref target="RFC7748"/>).</t>

<t>The named curves are referenced as a sequence of octets in this document, called throughout, curve OID.
<xref target="ec-curves"/> describes in detail how this sequence of octets is formed.</t>

</section>
<section anchor="ec-point-wire-formats"><name>EC Point Wire Formats</name>

<t>A point on an elliptic curve will always be represented on the wire as an MPI.
Each curve uses a specific point format for the data within the MPI itself.
Each format uses a designated prefix octet to ensure that the high octet has at least one bit set to make the MPI a constant size.</t>

<texttable title="Elliptic Curve Point Wire Formats">
      <ttcol align='right'>Name</ttcol>
      <ttcol align='left'>Wire Format</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>SEC1</c>
      <c>0x04 || x || y</c>
      <c><xref target="ec-point-sec1"/></c>
      <c>Prefixed native</c>
      <c>0x40 || native</c>
      <c><xref target="ec-point-prefixed-native"/></c>
</texttable>

<section anchor="ec-point-sec1"><name>SEC1 EC Point Wire Format</name>

<t>For a SEC1-encoded (uncompressed) point the content of the MPI is:</t>

<figure><artwork><![CDATA[
B = 04 || x || y
]]></artwork></figure>

<t>where x and y are coordinates of the point P = (x, y), and each is encoded in the big-endian format and zero-padded to the adjusted underlying field size.
The adjusted underlying field size is the underlying field size rounded up to the nearest 8-bit boundary, as noted in the "fsize" column in <xref target="ec-curves"/>.
This encoding is compatible with the definition given in <xref target="SEC1"/>.</t>

</section>
<section anchor="ec-point-prefixed-native"><name>Prefixed Native EC Point Wire Format</name>

<t>For a custom compressed point the content of the MPI is:</t>

<figure><artwork><![CDATA[
B = 40 || p
]]></artwork></figure>

<t>where p is the public key of the point encoded using the rules defined for the specified curve.
This format is used for ECDH keys based on curves expressed in Montgomery form, and for points when using EdDSA.</t>

</section>
<section anchor="notes-on-ec-point-wire-formats"><name>Notes on EC Point Wire Formats</name>

<t>Given the above definitions, the exact size of the MPI payload for an encoded point is 515 bits for "Curve P-256", 771 for "Curve P-384", 1059 for "Curve P-521", 263 for both "Curve25519" and "Ed25519", 463 for "Ed448", and 455 for "X448".
For example, the length of a EdDSA public key for the curve Ed25519 is 263 bits: 7 bits to represent the 0x40 prefix octet and 32 octets for the native value of the public key.</t>

<t>Even though the zero point, also called the point at infinity, may occur as a result of arithmetic operations on points of an elliptic curve, it <bcp14>SHALL NOT</bcp14> appear in data structures defined in this document.</t>

<t>Each particular curve uses a designated wire format for the point found in its public key or ECDH data structure.
An implementation <bcp14>MUST NOT</bcp14> use a different wire format for a point than the wire format associated with the curve.</t>

</section>
</section>
<section anchor="ec-scalar-wire-formats"><name>EC Scalar Wire Formats</name>

<t>Some non-curve values in elliptic curve cryptography (for example, secret keys and signature components) are not points on a curve, but are also encoded on the wire in OpenPGP as an MPI.</t>

<t>Because of different patterns of deployment, some curves treat these values as opaque bit strings with the high bit set, while others are treated as actual integers, encoded in the standard OpenPGP big-endian form.
The choice of encoding is specific to the public key algorithm in use.</t>

<texttable title="Elliptic Curve Scalar Encodings">
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>integer</c>
      <c>An integer, big-endian encoded as a standard OpenPGP MPI</c>
      <c><xref target="mpi"/></c>
      <c>octet string</c>
      <c>An octet string of fixed length, that may be shorter on the wire due to leading zeros being stripped by the MPI encoding, and may need to be zero-padded before usage</c>
      <c><xref target="ec-octet-string"/></c>
      <c>prefixed N octets</c>
      <c>An octet string of fixed length N, prefixed with octet 0x40 to ensure no leading zero octet</c>
      <c><xref target="ec-prefix"/></c>
</texttable>

<section anchor="ec-octet-string"><name>EC Octet String Wire Format</name>

<t>Some opaque strings of octets are represented on the wire as an MPI by simply stripping the leading zeros and counting the remaining bits.
These strings are of known, fixed length.
They are represented in this document as <spanx style="verb">MPI(N octets of X)</spanx> where <spanx style="verb">N</spanx> is the expected length in octets of the octet string.</t>

<t>For example, a five-octet opaque string (<spanx style="verb">MPI(5 octets of X)</spanx>) where <spanx style="verb">X</spanx> has the value <spanx style="verb">00 02 ee 19 00</spanx> would be represented on the wire as an MPI like so: <spanx style="verb">00 1a 02 ee 19 00</spanx>.</t>

<t>To encode <spanx style="verb">X</spanx> to the wire format, we set the MPI's two-octet bit counter to the value of the highest set bit (bit 26, or 0x001a), and do not transfer the leading all-zero octet to the wire.</t>

<t>To reverse the process, an implementation that knows this value has an expected length of 5 octets can take the following steps:</t>

<t><list style="symbols">
  <t>ensure that the MPI's two-octet bitcount is less than or equal to 40 (5 octets of 8 bits)</t>
  <t>allocate 5 octets, setting all to zero initially</t>
  <t>copy the MPI data octets (without the two count octets) into the lower octets of the allocated space</t>
</list></t>

</section>
<section anchor="ec-prefix"><name>Elliptic Curve Prefixed Octet String Wire Format</name>

<t>Another way to ensure that a fixed-length bytestring is encoded simply to the wire while remaining in MPI format is to prefix the bytestring with a dedicated non-zero octet.
This specification uses 0x40 as the prefix octet.
This is represented in this standard as <spanx style="verb">MPI(prefixed N octets of X)</spanx>, where <spanx style="verb">N</spanx> is the known bytestring length.</t>

<t>For example, a five-octet opaque string using <spanx style="verb">MPI(prefixed 5 octets of X)</spanx> where <spanx style="verb">X</spanx> has the value <spanx style="verb">00 02 ee 19 00</spanx> would be written to the wire form as: <spanx style="verb">00 2f 40 00 02 ee 19 00</spanx>.</t>

<t>To encode the string, we prefix it with the octet 0x40 (whose 7th bit is set), then set the MPI's two-octet bit counter to 47 (0x002f, 7 bits for the prefix octet and 40 bits for the string).</t>

<t>To decode the string from the wire, an implementation that knows that the variable is formed in this way can:</t>

<t><list style="symbols">
  <t>ensure that the first three octets of the MPI (the two bit-count octets plus the prefix octet)  are <spanx style="verb">00 2f 40</spanx>, and</t>
  <t>use the remainder of the MPI directly off the wire.</t>
</list></t>

<t>Note that this is a similar approach to that used in the EC point encodings found in <xref target="ec-point-prefixed-native"/>.</t>

</section>
</section>
<section anchor="key-derivation-function"><name>Key Derivation Function</name>

<t>A key derivation function (KDF) is necessary to implement EC encryption.
The Concatenation Key Derivation Function (Approved Alternative 1) <xref target="SP800-56A"/> with the KDF hash function that is SHA2-256 <xref target="FIPS180"/> or stronger is <bcp14>REQUIRED</bcp14>.</t>

<t>For convenience, the synopsis of the encoding method is given below with significant simplifications attributable to the restricted choice of hash functions in this document.
However, <xref target="SP800-56A"/> is the normative source of the definition.</t>

<figure><artwork><![CDATA[
//   Implements KDF( X, oBits, Param );
//   Input: point X = (x,y)
//   oBits - the desired size of output
//   hBits - the size of output of hash function Hash
//   Param - octets representing the parameters
//   Assumes that oBits <= hBits
// Convert the point X to the octet string:
//   ZB' = 04 || x || y
// and extract the x portion from ZB'
ZB = x;
MB = Hash ( 00 || 00 || 00 || 01 || ZB || Param );
return oBits leftmost bits of MB.
]]></artwork></figure>

<t>Note that ZB in the KDF description above is the compact representation of X as defined in Section 4.2 of <xref target="RFC6090"/>.</t>

</section>
<section anchor="ecdh"><name>EC DH Algorithm (ECDH)</name>

<t>The method is a combination of an ECC Diffie-Hellman method to establish a shared secret, a key derivation method to process the shared secret into a derived key, and a key wrapping method that uses the derived key to protect a session key used to encrypt a message.</t>

<t>The One-Pass Diffie-Hellman method C(1, 1, ECC CDH) <xref target="SP800-56A"/> <bcp14>MUST</bcp14> be implemented with the following restrictions: the ECC CDH primitive employed by this method is modified to always assume the cofactor is 1, the KDF specified in <xref target="key-derivation-function"/> is used, and the KDF parameters specified below are used.</t>

<t>The KDF parameters are encoded as a concatenation of the following 5 variable-length and fixed-length fields, which are compatible with the definition of the OtherInfo bitstring <xref target="SP800-56A"/>:</t>

<t><list style="symbols">
  <t>A variable-length field containing a curve OID, which is formatted as follows:  <list style="symbols">
      <t>A one-octet size of the following field,</t>
      <t>The octets representing a curve OID defined in <xref target="ec-curves"/>;</t>
    </list></t>
  <t>A one-octet public key algorithm ID defined in <xref target="pubkey-algos"/>;</t>
  <t>A variable-length field containing KDF parameters, which are identical to the corresponding field in the ECDH public key, and are formatted as follows:  <list style="symbols">
      <t>A one-octet size of the following fields; values 0 and 0xFF are reserved for future extensions,</t>
      <t>A one-octet value 0x01, reserved for future extensions,</t>
      <t>A one-octet hash function ID used with the KDF,</t>
      <t>A one-octet algorithm ID for the symmetric algorithm used to wrap the symmetric key for message encryption; see <xref target="ecdh"/> for details;</t>
    </list></t>
  <t>20 octets representing the UTF-8 encoding of the string <spanx style="verb">Anonymous Sender    </spanx>, which is the octet sequence 41 6E 6F 6E 79 6D 6F 75 73 20 53 65 6E 64 65 72 20 20 20 20;</t>
  <t>A variable-length field containing the fingerprint of the recipient encryption subkey or a primary key fingerprint identifying the key material that is needed for decryption.
For version 4 keys, this field is 20 octets.
For version 5 keys, this field is 32 octets.</t>
</list></t>

<t>The size in octets of the KDF parameters sequence, defined above, for encrypting to a v4 key is either 54 for curve P-256, 51 for curves P-384 and P-521, 56 for Curve25519, or 49 for X448.
For encrypting to a v5 key, the size of the sequence is either 66 for curve P-256, 63 for curves P-384 and P-521, 68 for Curve25519, or 61 for X448.</t>

<t>The key wrapping method is described in <xref target="RFC3394"/>.
The KDF produces a symmetric key that is used as a key-encryption key (KEK) as specified in <xref target="RFC3394"/>.
Refer to <xref target="ecdh-parameters"/> for the details regarding the choice of the KEK algorithm, which <bcp14>SHOULD</bcp14> be one of three AES algorithms.
Key wrapping and unwrapping is performed with the default initial value of <xref target="RFC3394"/>.</t>

<t>The input to the key wrapping method is the plaintext described in <xref target="pkesk"/>, "Public-Key Encrypted Session Key Packets (Tag 1)", padded using the method described in <xref target="PKCS5"/> to an 8-octet granularity.</t>

<t>For example, in a v4 Public-Key Encrypted Session Key packet, the following AES-256 session key, in which 32 octets are denoted from k0 to k31, is composed to form the following 40 octet sequence:</t>

<figure><artwork><![CDATA[
09 k0 k1 ... k31 s0 s1 05 05 05 05 05
]]></artwork></figure>

<t>The octets s0 and s1 above denote the checksum of the session key octets.
This encoding allows the sender to obfuscate the size of the symmetric encryption key used to encrypt the data.
For example, assuming that an AES algorithm is used for the session key, the sender <bcp14>MAY</bcp14> use 21, 13, and 5 octets of padding for AES-128, AES-192, and AES-256, respectively, to provide the same number of octets, 40 total, as an input to the key wrapping method.</t>

<t>In a v5 Public-Key Encrypted Session Key packet, the symmetric algorithm is not included, as described in <xref target="pkesk"/>.
For example, an AES-256 session key would be composed as follows:</t>

<figure><artwork><![CDATA[
k0 k1 ... k31 s0 s1 06 06 06 06 06 06
]]></artwork></figure>

<t>The octets k0 to k31 above again denote the session key, and the octets s0 and s1 denote the checksum.
In this case, assuming that an AES algorithm is used for the session key, the sender <bcp14>MAY</bcp14> use 22, 14, and 6 octets of padding for AES-128, AES-192, and AES-256, respectively, to provide the same number of octets, 40 total, as an input to the key wrapping method.</t>

<t>The output of the method consists of two fields.
The first field is the MPI containing the ephemeral key used to establish the shared secret.
The second field is composed of the following two subfields:</t>

<t><list style="symbols">
  <t>One octet encoding the size in octets of the result of the key wrapping method; the value 255 is reserved for future extensions;</t>
  <t>Up to 254 octets representing the result of the key wrapping method, applied to the 8-octet padded session key, as described above.</t>
</list></t>

<t>Note that for session key sizes 128, 192, and 256 bits, the size of the result of the key wrapping method is, respectively, 32, 40, and 48 octets, unless size obfuscation is used.</t>

<t>For convenience, the synopsis of the encoding method is given below; however, this section, <xref target="SP800-56A"/>, and <xref target="RFC3394"/> are the normative sources of the definition.</t>

<t><list style="symbols">
  <t>Obtain the authenticated recipient public key R</t>
  <t>Generate an ephemeral key pair {v, V=vG}</t>
  <t>Compute the shared point S = vR;</t>
  <t>m = symm_alg_ID || session key || checksum || pkcs5_padding;</t>
  <t>curve_OID_len = (octet)len(curve_OID);</t>
  <t>Param = curve_OID_len || curve_OID || public_key_alg_ID || 03 || 01 || KDF_hash_ID || KEK_alg_ID for AESKeyWrap || <spanx style="verb">Anonymous Sender    </spanx> || recipient_fingerprint;</t>
  <t>Z_len = the key size for the KEK_alg_ID used with AESKeyWrap</t>
  <t>Compute Z = KDF( S, Z_len, Param );</t>
  <t>Compute C = AESKeyWrap( Z, m ) as per <xref target="RFC3394"/></t>
  <t>VB = convert point V to the octet string</t>
  <t>Output (MPI(VB) || len(C) || C).</t>
</list></t>

<t>The decryption is the inverse of the method given.
Note that the recipient obtains the shared secret by calculating</t>

<figure><artwork><![CDATA[
S = rV = rvG, where (r,R) is the recipient's key pair.
]]></artwork></figure>

<t>Consistent with <xref target="seipd"/>, AEAD encryption or a Modification Detection Code (MDC) <bcp14>MUST</bcp14> be used anytime the symmetric key is protected by ECDH.</t>

<section anchor="ecdh-parameters"><name>ECDH Parameters</name>

<t>ECDH keys have a hash algorithm parameter for key derivation and a symmetric algorithm for key encapsulation.</t>

<t>For v5 keys, the following algorithms <bcp14>MUST</bcp14> be used depending on the curve.
An implementation <bcp14>MUST NOT</bcp14> generate a v5 ECDH key over any listed curve that uses different KDF or KEK parameters.
An implementation <bcp14>MUST NOT</bcp14> encrypt any message to a v5 ECDH key over a listed curve that announces a different KDF or KEK parameter.</t>

<t>For v4 keys, the following algorithms <bcp14>SHOULD</bcp14> be used depending on the curve.
An implementation <bcp14>SHOULD</bcp14> only use an AES algorithm as a KEK algorithm.</t>

<texttable title="ECDH KDF and KEK parameters" anchor="ecdh-kdf-kek-parameters">
      <ttcol align='left'>Curve</ttcol>
      <ttcol align='left'>Hash algorithm</ttcol>
      <ttcol align='left'>Symmetric algorithm</ttcol>
      <c>NIST P-256</c>
      <c>SHA2-256</c>
      <c>AES-128</c>
      <c>NIST P-384</c>
      <c>SHA2-384</c>
      <c>AES-192</c>
      <c>NIST P-521</c>
      <c>SHA2-512</c>
      <c>AES-256</c>
      <c>Curve25519</c>
      <c>SHA2-256</c>
      <c>AES-128</c>
      <c>X448</c>
      <c>SHA2-512</c>
      <c>AES-256</c>
</texttable>

</section>
</section>
</section>
<section anchor="notes-on-algorithms"><name>Notes on Algorithms</name>

<section anchor="pkcs-encoding"><name>PKCS#1 Encoding in OpenPGP</name>

<t>This standard makes use of the PKCS#1 functions EME-PKCS1-v1_5 and EMSA-PKCS1-v1_5.
However, the calling conventions of these functions has changed in the past.
To avoid potential confusion and interoperability problems, we are including local copies in this document, adapted from those in PKCS#1 v2.1 <xref target="RFC8017"/>.
<xref target="RFC8017"/> should be treated as the ultimate authority on PKCS#1 for OpenPGP.
Nonetheless, we believe that there is value in having a self-contained document that avoids problems in the future with needed changes in the conventions.</t>

<section anchor="eme-pkcs1-v15-encode"><name>EME-PKCS1-v1_5-ENCODE</name>

<t>Input:</t>

<dl>
  <dt>
k =  </dt>
  <dd>
    <t>the length in octets of the key modulus.</t>
  </dd>
  <dt>
M =  </dt>
  <dd>
    <t>message to be encoded, an octet string of length mLen, where mLen &lt;= k - 11.</t>
  </dd>
</dl>

<t>Output:</t>

<dl>
  <dt>
EM =  </dt>
  <dd>
    <t>encoded message, an octet string of length k.</t>
  </dd>
</dl>

<t>Error: "message too long".</t>

<t><list style="numbers">
  <t>Length checking: If mLen &gt; k - 11, output "message too long" and stop.</t>
  <t>Generate an octet string PS of length k - mLen - 3 consisting of pseudo-randomly generated nonzero octets.
The length of PS will be at least eight octets.</t>
  <t>Concatenate PS, the message M, and other padding to form an encoded message EM of length k octets as  <vspace blankLines='1'/>
    <figure><artwork><![CDATA[
EM = 0x00 || 0x02 || PS || 0x00 || M.
]]></artwork></figure>
  </t>
  <t>Output EM.</t>
</list></t>

</section>
<section anchor="eme-pkcs1-v15-decode"><name>EME-PKCS1-v1_5-DECODE</name>

<t>Input:</t>

<dl>
  <dt>
EM =  </dt>
  <dd>
    <t>encoded message, an octet string</t>
  </dd>
</dl>

<t>Output:</t>

<dl>
  <dt>
M =  </dt>
  <dd>
    <t>message, an octet string.</t>
  </dd>
</dl>

<t>Error: "decryption error".</t>

<t>To decode an EME-PKCS1_v1_5 message, separate the encoded message EM into an octet string PS consisting of nonzero octets and a message M as follows</t>

<figure><artwork><![CDATA[
  EM = 0x00 || 0x02 || PS || 0x00 || M.
]]></artwork></figure>

<t>If the first octet of EM does not have hexadecimal value 0x00, if the second octet of EM does not have hexadecimal value 0x02, if there is no octet with hexadecimal value 0x00 to separate PS from M, or if the length of PS is less than 8 octets, output "decryption error" and stop.
See also <xref target="pkcs1-errors"/> regarding differences in reporting between a decryption error and a padding error.</t>

</section>
<section anchor="emsa-pkcs1-v15"><name>EMSA-PKCS1-v1_5</name>

<t>This encoding method is deterministic and only has an encoding operation.</t>

<t>Option:</t>

<dl>
  <dt>
Hash -  </dt>
  <dd>
    <t>a hash function in which hLen denotes the length in octets of the hash function output.</t>
  </dd>
</dl>

<t>Input:</t>

<dl>
  <dt>
M =  </dt>
  <dd>
    <t>message to be encoded.</t>
  </dd>
  <dt>
emLen =  </dt>
  <dd>
    <t>intended length in octets of the encoded message, at least tLen + 11, where tLen is the octet length of the DER encoding T of a certain value computed during the encoding operation.</t>
  </dd>
</dl>

<t>Output:</t>

<dl>
  <dt>
EM =  </dt>
  <dd>
    <t>encoded message, an octet string of length emLen.</t>
  </dd>
</dl>

<t>Errors: "message too long"; "intended encoded message length too short".</t>

<t>Steps:</t>

<t><list style="numbers">
  <t>Apply the hash function to the message M to produce a hash value H:  <vspace blankLines='1'/>
H = Hash(M).  <vspace blankLines='1'/>
If the hash function outputs "message too long," output "message too long" and stop.</t>
  <t>Using the list in <xref target="version-three-sig"/>, produce an ASN.1 DER value for the hash function used.
Let T be the full hash prefix from the list, and let tLen be the length in octets of T.</t>
  <t>If emLen &lt; tLen + 11, output "intended encoded message length too short" and stop.</t>
  <t>Generate an octet string PS consisting of emLen - tLen - 3 octets with hexadecimal value 0xFF.
The length of PS will be at least 8 octets.</t>
  <t>Concatenate PS, the hash prefix T, and other padding to form the encoded message EM as  <vspace blankLines='1'/>
    <figure><artwork><![CDATA[
EM = 0x00 || 0x01 || PS || 0x00 || T.
]]></artwork></figure>
  </t>
  <t>Output EM.</t>
</list></t>

</section>
</section>
<section anchor="symmetric-algorithm-preferences"><name>Symmetric Algorithm Preferences</name>

<t>The symmetric algorithm preference is an ordered list of algorithms that the keyholder accepts.
Since it is found on a self-signature, it is possible that a keyholder may have multiple, different preferences.
For example, Alice may have AES-128 only specified for "alice@work.com" but Camellia-256, Twofish, and AES-128 specified for "alice@home.org".
Note that it is also possible for preferences to be in a subkey's binding signature.</t>

<t>Since AES-128 is the <bcp14>MUST</bcp14>-implement algorithm, if it is not explicitly in the list, it is tacitly at the end.
However, it is good form to place it there explicitly.
Note also that if an implementation does not implement the preference, then it is implicitly an AES-128-only implementation.
Note further that implementations conforming to previous versions of this standard <xref target="RFC4880"/> have TripleDES as its only <bcp14>MUST</bcp14>-implement algorithm.</t>

<t>An implementation <bcp14>MUST NOT</bcp14> use a symmetric algorithm that is not in the recipient's preference list.
When encrypting to more than one recipient, the implementation finds a suitable algorithm by taking the intersection of the preferences of the recipients.
Note that the <bcp14>MUST</bcp14>-implement algorithm, AES-128, ensures that the intersection is not null.
The implementation may use any mechanism to pick an algorithm in the intersection.</t>

<t>If an implementation can decrypt a message that a keyholder doesn't have in their preferences, the implementation <bcp14>SHOULD</bcp14> decrypt the message anyway, but <bcp14>MUST</bcp14> warn the keyholder that the protocol has been violated.
For example, suppose that Alice, above, has software that implements all algorithms in this specification.
Nonetheless, she prefers subsets for work or home.
If she is sent a message encrypted with IDEA, which is not in her preferences, the software warns her that someone sent her an IDEA-encrypted message, but it would ideally decrypt it anyway.</t>

<section anchor="plaintext"><name>Plaintext</name>

<t>Algorithm 0, "plaintext", may only be used to denote secret keys that are stored in the clear.
Implementations <bcp14>MUST NOT</bcp14> use plaintext in encrypted data packets; they must use Literal Data packets to encode unencrypted literal data.</t>

</section>
</section>
<section anchor="other-algorithm-preferences"><name>Other Algorithm Preferences</name>

<t>Other algorithm preferences work similarly to the symmetric algorithm preference, in that they specify which algorithms the keyholder accepts.
There are two interesting cases that other comments need to be made about, though, the compression preferences and the hash preferences.</t>

<section anchor="compression-preferences"><name>Compression Preferences</name>

<t>Like the algorithm preferences, an implementation <bcp14>MUST NOT</bcp14> use an algorithm that is not in the preference vector.
If Uncompressed (0) is not explicitly in the list, it is tacitly at the end.
That is, uncompressed messages may always be sent.</t>

<t>Note that earlier implementations may assume that the absence of compression preferences means that [ZIP(1), Uncompressed(0)] are preferred, and default to ZIP compression.
Therefore, an implementation that prefers uncompressed data <bcp14>SHOULD</bcp14> explicitly state this in the preferred compression algorithms.</t>

<section anchor="uncompressed"><name>Uncompressed</name>

<t>Algorithm 0, "uncompressed", may only be used to denote a preference for uncompressed data.
Implementations <bcp14>MUST NOT</bcp14> use uncompressed in Compressed Data packets; they must use Literal Data packets to encode uncompressed literal data.</t>

</section>
</section>
<section anchor="hash-algorithm-preferences"><name>Hash Algorithm Preferences</name>

<t>Typically, the choice of a hash algorithm is something the signer does, rather than the verifier, because a signer rarely knows who is going to be verifying the signature.
This preference, though, allows a protocol based upon digital signatures ease in negotiation.</t>

<t>Thus, if Alice is authenticating herself to Bob with a signature, it makes sense for her to use a hash algorithm that Bob's software uses.
This preference allows Bob to state in his key which algorithms Alice may use.</t>

<t>Since SHA2-256 is the <bcp14>MUST</bcp14>-implement hash algorithm, if it is not explicitly in the list, it is tacitly at the end.
However, it is good form to place it there explicitly.</t>

</section>
</section>
<section anchor="rsa-notes"><name>RSA</name>

<t>The PKCS1-v1_5 padding scheme, used by the RSA algorithms defined in this document, is no longer recommended, and its use is deprecated by <xref target="SP800-131A"/>.
Therefore, an implementation <bcp14>SHOULD NOT</bcp14> generate RSA keys.</t>

<t>There are algorithm types for RSA Sign-Only, and RSA Encrypt-Only keys.
These types are deprecated.
The "key flags" subpacket in a signature is a much better way to express the same idea, and generalizes it to all algorithms.
An implementation <bcp14>MUST NOT</bcp14> create such a key, but <bcp14>MAY</bcp14> interpret it.</t>

<t>An implementation <bcp14>MUST NOT</bcp14> generate RSA keys of size less than 3072 bits.
An implementation <bcp14>SHOULD NOT</bcp14> encrypt, sign or verify using RSA keys of size less than 3072 bits.
An implementation <bcp14>MUST NOT</bcp14> encrypt, sign or verify using RSA keys of size less than 2048 bits.
An implementation that decrypts a message using an RSA secret key of size less than 3072 bits <bcp14>SHOULD</bcp14> generate a deprecation warning that the key is too weak for modern use.</t>

</section>
<section anchor="dsa-notes"><name>DSA</name>

<t>DSA is expected to be deprecated in <xref target="FIPS186-5"/>.
Therefore, an implementation <bcp14>MUST NOT</bcp14> generate DSA keys.</t>

<t>An implementation <bcp14>MUST NOT</bcp14> sign or verify using DSA keys.</t>

</section>
<section anchor="elgamal-notes"><name>Elgamal</name>

<t>The PKCS1-v1_5 padding scheme, used by the Elgamal algorithm defined in this document, is no longer recommended, and its use is deprecated by <xref target="SP800-131A"/>.
Therefore, an implementation <bcp14>MUST NOT</bcp14> generate Elgamal keys.</t>

<t>An implementation <bcp14>MUST NOT</bcp14> encrypt using Elgamal keys.
An implementation that decrypts a message using an Elgamal secret key <bcp14>SHOULD</bcp14> generate a deprecation warning that the key is too weak for modern use.</t>

</section>
<section anchor="eddsa"><name>EdDSA</name>

<t>Although the EdDSA algorithm allows arbitrary data as input, its use with OpenPGP requires that a digest of the message is used as input (pre-hashed).
See <xref target="computing-signatures"/> for details.
Truncation of the resulting digest is never applied; the resulting digest value is used verbatim as input to the EdDSA algorithm.</t>

<t>For clarity: while <xref target="RFC8032"/> describes different variants of EdDSA, OpenPGP uses the "pure" variant (PureEdDSA).
The hashing that happens with OpenPGP is done as part of the standard OpenPGP signature process, and that hash itself is fed as the input message to the PureEdDSA algorithm.</t>

<t>As specified in <xref target="RFC8032"/>, Ed448 also expects a "context string".
In OpenPGP, Ed448 is used with the empty string as a context string.</t>

</section>
<section anchor="reserved-notes"><name>Reserved Algorithm Numbers</name>

<t>A number of algorithm IDs have been reserved for algorithms that would be useful to use in an OpenPGP implementation, yet there are issues that prevent an implementer from actually implementing the algorithm.
These are marked in <xref target="pubkey-algos"/> as "reserved for".</t>

<t>The reserved public-key algorithm X9.42 (21) does not have the necessary parameters, parameter order, or semantics defined.
The same is currently true for reserved public-key algorithms AEDH (23) and AEDSA (24).</t>

<t>Previous versions of OpenPGP permitted Elgamal <xref target="ELGAMAL"/> signatures with a public-key identifier of 20.
These are no longer permitted.
An implementation <bcp14>MUST NOT</bcp14> generate such keys.
An implementation <bcp14>MUST NOT</bcp14> generate Elgamal signatures.
See <xref target="BLEICHENBACHER"/>.</t>

</section>
<section anchor="cfb-mode"><name>OpenPGP CFB Mode</name>

<t>When using a version 1 Symmetrically Encrypted Integrity Protected Data packet (<xref target="version-one-seipd"/>) or --- for historic data --- a Symmetrically Encrypted Data packet (<xref target="sed"/>), OpenPGP does symmetric encryption using a variant of Cipher Feedback mode (CFB mode).
This section describes the procedure it uses in detail.
This mode is what is used for Symmetrically Encrypted Integrity Protected Data Packets (and the dangerously malleable --- and deprecated --- Symmetrically Encrypted Data Packets).
Some mechanisms for encrypting secret-key material also use CFB mode, as described in <xref target="secret-key-encryption"/>.</t>

<t>In the description below, the value BS is the block size in octets of the cipher.
Most ciphers have a block size of 8 octets.
The AES and Twofish have a block size of 16 octets.
Also note that the description below assumes that the IV and CFB arrays start with an index of 1 (unlike the C language, which assumes arrays start with a zero index).</t>

<t>OpenPGP CFB mode uses an initialization vector (IV) of all zeros, and prefixes the plaintext with BS+2 octets of random data, such that octets BS+1 and BS+2 match octets BS-1 and BS.
It does a CFB resynchronization after encrypting those BS+2 octets.</t>

<t>Thus, for an algorithm that has a block size of 8 octets (64 bits), the IV is 10 octets long and octets 7 and 8 of the IV are the same as octets 9 and 10.
For an algorithm with a block size of 16 octets (128 bits), the IV is 18 octets long, and octets 17 and 18 replicate octets 15 and 16.
Those extra two octets are an easy check for a correct key.</t>

<t>Step by step, here is the procedure:</t>

<t><list style="numbers">
  <t>The feedback register (FR) is set to the IV, which is all zeros.</t>
  <t>FR is encrypted to produce FRE (FR Encrypted).
This is the encryption of an all-zero value.</t>
  <t>FRE is xored with the first BS octets of random data prefixed to the plaintext to produce C[1] through C[BS], the first BS octets of ciphertext.</t>
  <t>FR is loaded with C[1] through C[BS].</t>
  <t>FR is encrypted to produce FRE, the encryption of the first BS octets of ciphertext.</t>
  <t>The left two octets of FRE get xored with the next two octets of data that were prefixed to the plaintext.
This produces C[BS+1] and C[BS+2], the next two octets of ciphertext.</t>
  <t>(The resynchronization step) FR is loaded with C[3] through C[BS+2].</t>
  <t>FR is encrypted to produce FRE.</t>
  <t>FRE is xored with the first BS octets of the given plaintext, now that we have finished encrypting the BS+2 octets of prefixed data.
This produces C[BS+3] through C[BS+(BS+2)], the next BS octets of ciphertext.</t>
  <t>FR is loaded with C[BS+3] to C[BS + (BS+2)] (which is C11-C18 for an 8-octet block).</t>
  <t>FR is encrypted to produce FRE.</t>
  <t>FRE is xored with the next BS octets of plaintext, to produce the next BS octets of ciphertext.
These are loaded into FR, and the process is repeated until the plaintext is used up.</t>
</list></t>

</section>
<section anchor="private-or-experimental-parameters"><name>Private or Experimental Parameters</name>

<t>S2K specifiers, Signature subpacket types, User Attribute types, image format types, and algorithms described in <xref target="constants"/> all reserve the range 100 to 110 for private and experimental use.
Packet types reserve the range 60 to 63 for private and experimental use.
These are intentionally managed with the PRIVATE USE method, as described in <xref target="RFC8126"/>.</t>

<t>However, implementations need to be careful with these and promote them to full IANA-managed parameters when they grow beyond the original, limited system.</t>

</section>
<section anchor="meta-considerations-for-expansion"><name>Meta-Considerations for Expansion</name>

<t>If OpenPGP is extended in a way that is not backwards-compatible, meaning that old implementations will not gracefully handle their absence of a new feature, the extension proposal can be declared in the key holder's self-signature as part of the Features signature subpacket.</t>

<t>We cannot state definitively what extensions will not be upwards-compatible, but typically new algorithms are upwards-compatible, whereas new packets are not.</t>

<t>If an extension proposal does not update the Features system, it <bcp14>SHOULD</bcp14> include an explanation of why this is unnecessary.
If the proposal contains neither an extension to the Features system nor an explanation of why such an extension is unnecessary, the proposal <bcp14>SHOULD</bcp14> be rejected.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t><list style="symbols">
  <t>As with any technology involving cryptography, you should check the current literature to determine if any algorithms used here have been found to be vulnerable to attack.</t>
  <t>This specification uses Public-Key Cryptography technologies.
It is assumed that the private key portion of a public-private key pair is controlled and secured by the proper party or parties.</t>
  <t>The MD5 hash algorithm has been found to have weaknesses, with collisions found in a number of cases.
MD5 is deprecated for use in OpenPGP.
Implementations <bcp14>MUST NOT</bcp14> generate new signatures using MD5 as a hash function.
They <bcp14>MAY</bcp14> continue to consider old signatures that used MD5 as valid.</t>
  <t>SHA2-224 and SHA2-384 require the same work as SHA2-256 and SHA2-512, respectively.
In general, there are few reasons to use them outside of DSS compatibility.
You need a situation where one needs more security than smaller hashes, but does not want to have the full 256-bit or 512-bit data length.</t>
  <t>Many security protocol designers think that it is a bad idea to use a single key for both privacy (encryption) and integrity (signatures).
In fact, this was one of the motivating forces behind the v4 key format with separate signature and encryption keys.
If you as an implementer promote dual-use keys, you should at least be aware of this controversy.</t>
  <t>The DSA algorithm will work with any hash, but is sensitive to the quality of the hash algorithm.
Verifiers should be aware that even if the signer used a strong hash, an attacker could have modified the signature to use a weak one.
Only signatures using acceptably strong hash algorithms should be accepted as valid.</t>
  <t>As OpenPGP combines many different asymmetric, symmetric, and hash algorithms, each with different measures of strength, care should be taken that the weakest element of an OpenPGP message is still sufficiently strong for the purpose at hand.
While consensus about the strength of a given algorithm may evolve, NIST Special Publication 800-57 <xref target="SP800-57"/> recommends the following list of equivalent strengths:</t>
</list></t>

<texttable title="Key length equivalences">
      <ttcol align='right'>Asymmetric key size</ttcol>
      <ttcol align='left'>Hash size</ttcol>
      <ttcol align='left'>Symmetric key size</ttcol>
      <c>1024</c>
      <c>160</c>
      <c>80</c>
      <c>2048</c>
      <c>224</c>
      <c>112</c>
      <c>3072</c>
      <c>256</c>
      <c>128</c>
      <c>7680</c>
      <c>384</c>
      <c>192</c>
      <c>15360</c>
      <c>512</c>
      <c>256</c>
</texttable>

<t><list style="symbols">
  <t>There is a somewhat-related potential security problem in signatures.
If an attacker can find a message that hashes to the same hash with a different algorithm, a bogus signature structure can be constructed that evaluates correctly.  <vspace blankLines='1'/>
For example, suppose Alice DSA signs message M using hash algorithm H.
Suppose that Mallet finds a message M' that has the same hash value as M with H'.
Mallet can then construct a signature block that verifies as Alice's signature of M' with H'.
However, this would also constitute a weakness in either H or H' or both.
Should this ever occur, a revision will have to be made to this document to revise the allowed hash algorithms.</t>
  <t>If you are building an authentication system, the recipient may specify a preferred signing algorithm.
However, the signer would be foolish to use a weak algorithm simply because the recipient requests it.</t>
  <t>Some of the encryption algorithms mentioned in this document have been analyzed less than others.
For example, although CAST5 is presently considered strong, it has been analyzed less than TripleDES.
Other algorithms may have other controversies surrounding them.</t>
  <t>In late summer 2002, Jallad, Katz, and Schneier published an interesting attack on older versions of the OpenPGP protocol and some of its implementations <xref target="JKS02"/>.
In this attack, the attacker modifies a message and sends it to a user who then returns the erroneously decrypted message to the attacker.
The attacker is thus using the user as a decryption oracle, and can often decrypt the message.
This attack is a particular form of ciphertext malleability.
See <xref target="ciphertext-malleability"/> for information on how to defend against such an attack using more recent versions of OpenPGP.</t>
  <t>Some technologies mentioned here may be subject to government control in some countries.</t>
</list></t>

<section anchor="sha1cd"><name>SHA-1 Collision Detection</name>

<t>As described in <xref target="SHAMBLES"/>, the SHA-1 digest algorithm is not collision-resistant.
However, an OpenPGP implementation cannot completely discard the SHA-1 algorithm, because it is required for implementing and reasoning about v4 public keys.
In particular, the v4 fingerprint derivation uses SHA-1.
So as long as an OpenPGP implementation supports v4 public keys, it will need to implement SHA-1 in at least some scenarios.</t>

<t>To avoid the risk of uncertain breakage from a maliciously introduced SHA-1 collision, an OpenPGP implementation <bcp14>MAY</bcp14> attempt to detect when a hash input is likely from a known collision attack, and then either deliberately reject the hash input or modify the hash output.
This should convert an uncertain breakage (where it is unclear what the effect of a collision will be) to an explicit breakage, which is more desirable for a robust implementation.</t>

<t><xref target="STEVENS2013"/> describes a method for detecting indicators of well-known SHA-1 collision attacks.
Some example C code implementing this technique can be found at <xref target="SHA1CD"/>.</t>

</section>
<section anchor="signature-salt-rationale"><name>Advantages of Salted Signatures</name>

<t>V5 signatures include a 128 bit salt that is hashed first.
This makes v5 OpenPGP signatures non-deterministic and protects against a broad class of attacks that depend on creating a signature over a predictable message.
By selecting a new random salt for each signature made, signatures are not predictable.</t>

<t>When the material to be signed may be attacker-controlled, hashing the salt first means that there is no attacker controlled hashed prefix.
An example of this kind of attack is described in the paper SHA-1 Is A Shambles (see <xref target="SHAMBLES"/>), which leverages a chosen prefix collision attack against SHA-1.</t>

<t>In some cases, an attacker may be able to induce a signature to be made, even if they do not control the content of the message.
In some scenarios, a repeated signature over the exact same message may risk leakage of part or all of the signing key, for example see discussion of hardware faults over EdDSA and deterministic ECDSA in <xref target="PSSLR17"/>.
Choosing a new random salt for each signature ensures that no repeated signatures are produced, and mitigates this risk.</t>

</section>
<section anchor="ecc-side-channels"><name>Elliptic Curve Side Channels</name>

<t>Side channel attacks are a concern when a compliant application's use of the OpenPGP format can be modeled by a decryption or signing oracle, for example, when an application is a network service performing decryption to unauthenticated remote users.
ECC scalar multiplication operations used in ECDSA and ECDH are vulnerable to side channel attacks.
Countermeasures can often be taken at the higher protocol level, such as limiting the number of allowed failures or time-blinding of the operations associated with each network interface.
Mitigations at the scalar multiplication level seek to eliminate any measurable distinction between the ECC point addition and doubling operations.</t>

</section>
<section anchor="quick-check-oracle"><name>Risks of a Quick Check Oracle</name>

<t>In winter 2005, Serge Mister and Robert Zuccherato from Entrust released a paper describing a way that the "quick check" in OpenPGP CFB mode (used by v1 SEIPD and SED packets) can be as an oracle to decrypt two octets of every cipher block <xref target="MZ05"/>.
This check was intended for early detection of session key decryption errors, particularly to detect a wrong passphrase, since v4 SKESK packets do not include an integrity check.</t>

<t>There is a danger to using the quick check if timing or error information about the check can be exposed to an attacker, particularly via an automated service that allows rapidly repeated queries.</t>

<t>Disabling the quick check prevents the attack.</t>

<t>For very large legacy encrypted data whose session key is protected by a passphrase (v4 SKESK), while the quick check may be convenient to the user to be informed early on that they typed the wrong passphrase, the implementation should use the quick check with care.
The recommended approach for secure and early detection of decryption failure is to encrypt data using v2 SEIPD.
If the session key is public-key encrypted, the quick check is not useful as the public-key encryption of the session key should guarantee that it is the right session key.</t>

<t>The quick check oracle attack is a particular type of attack that exploits ciphertext malleability.
For information about other similar attacks, see <xref target="ciphertext-malleability"/>.</t>

</section>
<section anchor="pkcs1-errors"><name>Avoiding Leaks From PKCS#1 Errors</name>

<t>The PKCS#1 padding (used in RSA-encrypted and ElGamal-encrypted PKESK) has been found to be vulnerable to attacks in which a system that allows distinguishing padding errors from other decryption errors can act as a decryption and/or signing oracle that can leak the session key or allow signing arbitrary data, respectively <xref target="BLEICHENBACHER-PKCS1"/>.
The number of queries required to carry out an attack can range from thousands to millions, depending on how strict and careful an implementation is in processing the padding.</t>

<t>To make the attack more difficult, an implementation <bcp14>SHOULD</bcp14> implement strict, robust, constant time padding checks.</t>

<t>To prevent the attack, in settings where the attacker does not have access to timing information concerning message decryption, the simplest solution is to report a single error code for all variants of PKESK processing errors as well as SEIPD integrity errors (this includes also session key parsing errors, such as on invalid cipher algorithm for v3 PKESK, or session key size mismatch for v5 PKESK).
If the attacker may have access to timing information, then a constant time solution is also needed.
This requires careful design, especially for v3 PKESK, where session key size and cipher information is typically not known in advance, as it is part of the PKESK encrypted payload.</t>

</section>
<section anchor="fingerprint-usability"><name>Fingerprint Usability</name>

<t>This specification uses fingerprints in several places on the wire (e.g., <xref target="revocation-key"/>, <xref target="issuer-fingerprint-subpacket"/>, and <xref target="intended-recipient-fingerprint"/>), and in processing (e.g., in ECDH KDF <xref target="ecdh"/>).
An implementation may also use the fingerprint internally, for example as an index to a keystore.</t>

<t>Additionally, some OpenPGP users have historically used manual fingerprint comparison to verify the public key of a peer.
For a version 4 fingerprint, this has typically been done with the fingerprint represented as 40 hexadecimal digits, often broken into groups of four digits with whitespace between each group.</t>

<t>When a human is actively involved, the result of such a verification is dubious.
We have little evidence that most humans are good at precise comparison of high-entropy data, particularly when that data is represented in compact textual form like a hexadecimal fingerprint.</t>

<t>The version 5 fingerprint makes the challenge for a human verifier even worse.
At 256 bits (compared to v4's 160 bit fingerprint), a v5 fingerprint is even harder for a human to successfully compare.</t>

<t>An OpenPGP implementation should prioritize mechanical fingerprint transfer and comparison where possible, and <bcp14>SHOULD NOT</bcp14> promote manual transfer or comparison of full fingerprints by a human unless there is no other way to achieve the desired result.</t>

<t>While this subsection acknowledges existing practice for human-representable v4 fingerprints, this document does not attempt to standardize any specific human-readable form of v5 fingerprint for this discouraged use case.</t>

<t>NOTE: the topic of interoperable human-in-the-loop key verification needs more work, probably in a separate document.</t>

</section>
<section anchor="ciphertext-malleability"><name>Avoiding Ciphertext Malleability</name>

<t>If ciphertext can be modified by an attacker but still subsequently decrypted to some new plaintext, it is considered "malleable".
A number of attacks can arise in any cryptosystem that uses malleable encryption, so modern OpenPGP offers mechanisms to defend against it.
However, legacy OpenPGP data may have been created before these mechanisms were available.
Because OpenPGP implementations deal with historic stored data, they may encounter malleable ciphertexts.</t>

<t>When an OpenPGP implementation discovers that it is decrypting data that appears to be malleable, it <bcp14>MUST</bcp14> indicate a clear error message that the integrity of the message is suspect, <bcp14>SHOULD NOT</bcp14> attempt to parse nor release decrypted data to the user, and <bcp14>SHOULD</bcp14> halt with an error.
Parsing or releasing decrypted data before having confirmed its integrity can leak the decrypted data <xref target="EFAIL"/>, <xref target="MRLG15"/>.</t>

<t>An implementation that encounters malleable ciphertext <bcp14>MAY</bcp14> choose to release cleartext to the user if it is known to be dealing with historic archived legacy data, and the user is aware of the risks.</t>

<t>Any of the following OpenPGP data elements indicate that malleable ciphertext is present:</t>

<t><list style="symbols">
  <t>all Symmetrically Encrypted Data packets (<xref target="sed"/>).</t>
  <t>within any encrypted container, any Compressed Data packet (<xref target="compressed-data"/>) where there is a decompression failure.</t>
  <t>any version 1 Symmetrically Encrypted Integrity Protected Data packet (<xref target="version-one-seipd"/>) where the internal Modification Detection Code does not validate.</t>
  <t>any version 2 Symmetrically Encrypted Integrity Protected Data packet (<xref target="version-two-seipd"/>) where the authentication tag of any chunk fails, or where there is no final zero-octet chunk.</t>
  <t>any Secret Key packet with encrypted secret key material (<xref target="secret-key-encryption"/>) where there is an integrity failure, based on the value of the secret key protection octet:  <list style="symbols">
      <t>value 255 or raw cipher algorithm: where the trailing 2-octet checksum does not match.</t>
      <t>value 254: where the SHA1 checksum is mismatched.</t>
      <t>value 253: where the AEAD authentication tag is invalid.</t>
    </list></t>
</list></t>

<t>To avoid these circumstances, an implementation that generates OpenPGP encrypted data <bcp14>SHOULD</bcp14> select the encrypted container format with the most robust protections that can be handled by the intended recipients.
In particular:</t>

<t><list style="symbols">
  <t>The SED packet is deprecated, and <bcp14>MUST NOT</bcp14> be generated.</t>
  <t>When encrypting to one or more public keys:  <list style="symbols">
      <t>all recipient keys indicate support for version 2 of the Symmetrically Encrypted Integrity Protected Data packet in their Features subpacket (<xref target="features-subpacket"/>), or are v5 keys without a Features subpacket, or the implementation can otherwise infer that all recipients support v2 SEIPD packets, the implementation <bcp14>MUST</bcp14> encrypt using a v2 SEIPD packet.</t>
      <t>If one of the recipients does not support v2 SEIPD packets, then the message generator <bcp14>MAY</bcp14> use a v1 SEIPD packet instead.</t>
    </list></t>
  <t>Password-protected secret key material in a v5 Secret Key or v5 Secret Subkey packet <bcp14>SHOULD</bcp14> be protected with AEAD encryption (S2K usage octet 253) unless it will be transferred to an implementation that is known to not support AEAD.
Implementations should be aware that, in scenarios where an attacker has access to encrypted private keys, CFB-encrypted keys (S2K usage octet 254 or 255) are vulnerable to corruption attacks that can cause leakage of secret data when the secret key is used <xref target="KOPENPGP"/>, <xref target="KR02"/>.</t>
</list></t>

<t>Implementers should implement AEAD (v2 SEIPD and S2K usage octet 253) promptly and encourage its spread.</t>

<t>Users should migrate to AEAD with all due speed.</t>

</section>
<section anchor="escrowed-revocations"><name>Escrowed Revocation Signatures</name>

<t>A keyholder Alice may wish to designate a third party to be able to revoke Alice's own key.</t>

<t>The preferred way for her to do this is produce a specific Revocation Signature (signature types 0x20, 0x28, or 0x30) and distribute it securely to her preferred revoker who can hold it in escrow.
The preferred revoker can then publish the escrowed Revocation Signature at whatever time is deemed appropriate, rather than generating a revocation signature themselves.</t>

<t>There are multiple advantages of using an escrowed Revocation Signature over the deprecated Revocation Key subpacket (<xref target="revocation-key"/>):</t>

<t><list style="symbols">
  <t>The keyholder can constrain what types of revocation the preferred revoker can issue, by only escrowing those specific signatures.</t>
  <t>There is no public/visible linkage between the keyholder and the preferred revoker.</t>
  <t>Third parties can verify the revocation without needing to find the key of the preferred revoker.</t>
  <t>The preferred revoker doesn't even need to have a public OpenPGP key if some other secure transport is possible between them and the keyholder.</t>
  <t>Implementation support for enforcing a revocation from an authorized Revocation Key subpacket is uneven and unreliable.</t>
  <t>If the fingerprint mechanism suffers a cryptanalytic flaw, the escrowed Revocation Signature is not affected.</t>
</list></t>

<t>A Revocation Signature may also be split up into shares and distributed among multiple parties, requiring some subset of those parties to collaborate before the escrowed Revocation Signature is recreated.</t>

</section>
<section anchor="random-number-generation-and-seeding"><name>Random Number Generation and Seeding</name>

<t>OpenPGP requires a cryptographically secure pseudorandom number generator (CSPRNG).
In most cases, the operating system provides an appropriate facility such as a <spanx style="verb">getrandom()</spanx> syscall, which should be used absent other (for example, performance) concerns.
It is <bcp14>RECOMMENDED</bcp14> to use an existing CSPRNG implementation in preference to crafting a new one.
Many adequate cryptographic libraries are already available under favorable license terms.
Should those prove unsatisfactory, <xref target="RFC4086"/> provides guidance on the generation of random values.</t>

<t>OpenPGP uses random data with three different levels of visibility:</t>

<t><list style="symbols">
  <t>in publicly-visible fields such as nonces, IVs, public padding material, or salts,</t>
  <t>in shared-secret values, such as session keys for encrypted data or padding material within an encrypted packet, and</t>
  <t>in entirely private data, such as asymmetric key generation.</t>
</list></t>

<t>With a properly functioning CSPRNG, this does not present a security problem, as it is not feasible to determine the CSPRNG state from its output.
However, with a broken CSPRNG, it may be possible for an attacker to use visible output to determine the CSPRNG internal state and thereby predict less-visible data like keying material, as documented in <xref target="CHECKOWAY"/>.</t>

<t>An implementation can provide extra security against this form of attack by using separate CSPRNGs to generate random data with different levels of visibility.</t>

</section>
<section anchor="traffic-analysis"><name>Traffic Analysis</name>

<t>When sending OpenPGP data through the network, the size of the data may leak information to an attacker.
There are circumstances where such a leak could be unacceptable from a security perspective.</t>

<t>For example, if possible cleartext messages for a given protocol are known to be either <spanx style="verb">yes</spanx> (three octets) and <spanx style="verb">no</spanx> (two octets) and the messages are sent within a Symmetrically-Encrypted Integrity Protected Data packet, the length of the encrypted message will reveal the contents of the cleartext.</t>

<t>In another example, sending an OpenPGP Transferable Public Key over an encrypted network connection might reveal the length of the certificate.
Since the length of an OpenPGP certificate varies based on the content, an external observer interested in metadata (who is trying to contact who) may be able to guess the identity of the certificate sent, if its length is unique.</t>

<t>In both cases, an implementation can adjust the size of the compound structure by including a Padding packet (see <xref target="padding-packet"/>).</t>

</section>
<section anchor="surreptitious-forwarding"><name>Surreptitious Forwarding</name>

<t>When an attacker obtains a signature for some text, e.g. by receiving a signed message, they may be able to use that signature maliciously by sending a message purporting to come from the original sender, with the same body and signature, to a different recipient.
To prevent this, implementations <bcp14>SHOULD</bcp14> implement the Intended Recipient Fingerprint signature subpacket (<xref target="intended-recipient-fingerprint"/>).</t>

</section>
</section>
<section anchor="implementation-nits"><name>Implementation Nits</name>

<t>This section is a collection of comments to help an implementer, particularly with an eye to backward compatibility.
Often the differences are small, but small differences are frequently more vexing than large differences.
Thus, this is a non-comprehensive list of potential problems and gotchas for a developer who is trying to be backward-compatible.</t>

<t><list style="symbols">
  <t>There are many ways possible for two keys to have the same key material, but different fingerprints (and thus Key IDs).
For example, since a v4 fingerprint is constructed by hashing the key creation time along with other things, two v4 keys created at different times, yet with the same key material will have different fingerprints.</t>
  <t>OpenPGP does not put limits on the size of public keys.
However, larger keys are not necessarily better keys.
Larger keys take more computation time to use, and this can quickly become impractical.
Different OpenPGP implementations may also use different upper bounds for public key sizes, and so care should be taken when choosing sizes to maintain interoperability.</t>
  <t>ASCII armor is an optional feature of OpenPGP.
The OpenPGP working group strives for a minimal set of mandatory-to-implement features, and since there could be useful implementations that only use binary object formats, this is not a "<bcp14>MUST</bcp14>" feature for an implementation.
For example, an implementation that is using OpenPGP as a mechanism for file signatures may find ASCII armor unnecessary.
OpenPGP permits an implementation to declare what features it does and does not support, but ASCII armor is not one of these.
Since most implementations allow binary and armored objects to be used indiscriminately, an implementation that does not implement ASCII armor may find itself with compatibility issues with general-purpose implementations.
Moreover, implementations of OpenPGP-MIME <xref target="RFC3156"/> already have a requirement for ASCII armor so those implementations will necessarily have support.</t>
  <t>What this document calls Legacy packet format <xref target="legacy-packet-format"/> is what older documents called the "old packet format".
It is the packet format of the legacy PGP 2 implementation.
Older RFCs called the current OpenPGP packet format <xref target="openpgp-packet-format"/> the "new packet format".</t>
</list></t>

<section anchor="constrained-legacy-fingerprint-storage-for-v5-keys"><name>Constrained Legacy Fingerprint Storage for v5 Keys</name>

<t>Some OpenPGP implementations have fixed length constraints for key fingerprint storage that will not fit all 32 octets of a v5 fingerprint.
For example, <xref target="OPENPGPCARD"/> reserves 20 octets for each stored fingerprint.</t>

<t>An OpenPGP implementation <bcp14>MUST NOT</bcp14> attempt to map any part of a v5 fingerprint to such a constrained field unless the relevant spec for the constrained environment has explicit guidance for storing a v5 fingerprint that distinguishes it from a v4 fingerprint.
An implementation interacting with such a constrained field <bcp14>SHOULD</bcp14> directly calculate the v5 fingerprint from public key material and associated metadata instead of relying on the constrained field.</t>

</section>
</section>


  </middle>

  <back>

    <references title='Normative References'>

<reference anchor="BLOWFISH" target="http://www.counterpane.com/bfsverlag.html">
  <front>
    <title>Description of a New Variable-Length Key, 64-Bit Block Cipher (Blowfish)</title>
    <author initials="B." surname="Schneier">
      <organization></organization>
    </author>
    <date year="1993" month="December"/>
  </front>
  <seriesInfo name="Fast Software Encryption, Cambridge Security Workshop Proceedings" value="Springer-Verlag, 1994, pp191-204"/>
</reference>
<reference anchor="BZ2" target="http://www.bzip.org/">
  <front>
    <title>The Bzip2 and libbzip2 home page</title>
    <author initials="J." surname="Seward" fullname="Julian Seward, jseward@acm.org">
      <organization></organization>
    </author>
    <date year="2010"/>
  </front>
</reference>
<reference anchor="EAX" >
  <front>
    <title>A Conventional Authenticated-Encryption Mode</title>
    <author initials="M." surname="Bellare">
      <organization></organization>
    </author>
    <author initials="P." surname="Rogaway">
      <organization></organization>
    </author>
    <author initials="D." surname="Wagner">
      <organization></organization>
    </author>
    <date year="2003" month="April"/>
  </front>
</reference>
<reference anchor="ELGAMAL" >
  <front>
    <title>A Public-Key Cryptosystem and a Signature Scheme Based on Discrete Logarithms</title>
    <author initials="T." surname="Elgamal">
      <organization></organization>
    </author>
    <date year="1985"/>
  </front>
  <seriesInfo name="IEEE Transactions on Information Theory" value="v. IT-31, n. 4, 1985, pp. 469-472"/>
</reference>
<reference anchor="HAC" >
  <front>
    <title>Handbook of Applied Cryptography</title>
    <author initials="A.J." surname="Menezes" fullname="Alfred J. Menezes">
      <organization></organization>
    </author>
    <author initials="P.v." surname="Oorschot" fullname="Paul van Oorschot">
      <organization></organization>
    </author>
    <author initials="S." surname="Vanstone" fullname="Scott Vanstone">
      <organization></organization>
    </author>
    <date year="1996"/>
  </front>
</reference>
<reference anchor="IDEA" >
  <front>
    <title>On the design and security of block ciphers</title>
    <author initials="X." surname="Lai">
      <organization></organization>
    </author>
    <date year="1992"/>
  </front>
  <seriesInfo name="ETH Series in Information Processing, J.L. Massey (editor)" value="Vol. 1, Hartung-Gorre Verlag Konstanz, Technische Hochschule (Zurich)"/>
</reference>
<reference anchor="ISO10646" >
  <front>
    <title>Information Technology - Universal Multiple-octet coded Character Set (UCS) - Part 1: Architecture and Basic Multilingual Plane</title>
    <author >
      <organization>International Organization for Standardization</organization>
    </author>
    <date year="1993" month="May"/>
  </front>
  <seriesInfo name="ISO" value="Standard 10646-1"/>
</reference>
<reference anchor="JFIF" >
  <front>
    <title>JPEG File Interchange Format (Version 1.02).</title>
    <author initials="E.H.M." surname="CA" fullname="Eric Hamilton, Milpitas, CA">
      <organization>C-Cube Microsystems</organization>
    </author>
    <date year="1996" month="September"/>
  </front>
</reference>
<reference anchor="PKCS5" >
  <front>
    <title>PKCS #5 v2.0: Password-Based Cryptography Standard</title>
    <author >
      <organization>RSA Laboratories</organization>
    </author>
    <date year="1999" month="March" day="25"/>
  </front>
</reference>




<reference anchor='RFC1950' target='https://www.rfc-editor.org/info/rfc1950'>
<front>
<title>ZLIB Compressed Data Format Specification version 3.3</title>
<author fullname='P. Deutsch' initials='P.' surname='Deutsch'><organization/></author>
<author fullname='J-L. Gailly' initials='J-L.' surname='Gailly'><organization/></author>
<date month='May' year='1996'/>
<abstract><t>This specification defines a lossless compressed data format.  This memo provides information for the Internet community.  This memo does not specify an Internet standard of any kind.</t></abstract>
</front>
<seriesInfo name='RFC' value='1950'/>
<seriesInfo name='DOI' value='10.17487/RFC1950'/>
</reference>



<reference anchor='RFC1951' target='https://www.rfc-editor.org/info/rfc1951'>
<front>
<title>DEFLATE Compressed Data Format Specification version 1.3</title>
<author fullname='P. Deutsch' initials='P.' surname='Deutsch'><organization/></author>
<date month='May' year='1996'/>
<abstract><t>This specification defines a lossless compressed data format that compresses data using a combination of the LZ77 algorithm and Huffman coding, with efficiency comparable to the best currently available general-purpose compression methods.  This memo provides information for the Internet community.  This memo does not specify an Internet standard of any kind.</t></abstract>
</front>
<seriesInfo name='RFC' value='1951'/>
<seriesInfo name='DOI' value='10.17487/RFC1951'/>
</reference>



<reference anchor='RFC2045' target='https://www.rfc-editor.org/info/rfc2045'>
<front>
<title>Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</title>
<author fullname='N. Freed' initials='N.' surname='Freed'><organization/></author>
<author fullname='N. Borenstein' initials='N.' surname='Borenstein'><organization/></author>
<date month='November' year='1996'/>
<abstract><t>This initial document specifies the various headers used to describe the structure of MIME messages.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='2045'/>
<seriesInfo name='DOI' value='10.17487/RFC2045'/>
</reference>



<reference anchor='RFC2144' target='https://www.rfc-editor.org/info/rfc2144'>
<front>
<title>The CAST-128 Encryption Algorithm</title>
<author fullname='C. Adams' initials='C.' surname='Adams'><organization/></author>
<date month='May' year='1997'/>
<abstract><t>There is a need in the Internet community for an unencumbered encryption algorithm with a range of key sizes that can provide security for a variety of cryptographic applications and protocols.  This document describes an existing algorithm that can be used to satisfy this requirement.  This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind.</t></abstract>
</front>
<seriesInfo name='RFC' value='2144'/>
<seriesInfo name='DOI' value='10.17487/RFC2144'/>
</reference>



<reference anchor='RFC2822' target='https://www.rfc-editor.org/info/rfc2822'>
<front>
<title>Internet Message Format</title>
<author fullname='P. Resnick' initials='P.' role='editor' surname='Resnick'><organization/></author>
<date month='April' year='2001'/>
<abstract><t>This document specifies a syntax for text messages that are sent between computer users, within the framework of &quot;electronic mail&quot; messages. [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='2822'/>
<seriesInfo name='DOI' value='10.17487/RFC2822'/>
</reference>



<reference anchor='RFC3156' target='https://www.rfc-editor.org/info/rfc3156'>
<front>
<title>MIME Security with OpenPGP</title>
<author fullname='M. Elkins' initials='M.' surname='Elkins'><organization/></author>
<author fullname='D. Del Torto' initials='D.' surname='Del Torto'><organization/></author>
<author fullname='R. Levien' initials='R.' surname='Levien'><organization/></author>
<author fullname='T. Roessler' initials='T.' surname='Roessler'><organization/></author>
<date month='August' year='2001'/>
<abstract><t>This document describes how the OpenPGP Message Format can be used to provide privacy and authentication using the Multipurpose Internet Mail Extensions (MIME) security content types described in RFC 1847. [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='3156'/>
<seriesInfo name='DOI' value='10.17487/RFC3156'/>
</reference>



<reference anchor='RFC3394' target='https://www.rfc-editor.org/info/rfc3394'>
<front>
<title>Advanced Encryption Standard (AES) Key Wrap Algorithm</title>
<author fullname='J. Schaad' initials='J.' surname='Schaad'><organization/></author>
<author fullname='R. Housley' initials='R.' surname='Housley'><organization/></author>
<date month='September' year='2002'/>
</front>
<seriesInfo name='RFC' value='3394'/>
<seriesInfo name='DOI' value='10.17487/RFC3394'/>
</reference>



<reference anchor='RFC3629' target='https://www.rfc-editor.org/info/rfc3629'>
<front>
<title>UTF-8, a transformation format of ISO 10646</title>
<author fullname='F. Yergeau' initials='F.' surname='Yergeau'><organization/></author>
<date month='November' year='2003'/>
<abstract><t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems.  The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo.  UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values.  This memo obsoletes and replaces RFC 2279.</t></abstract>
</front>
<seriesInfo name='STD' value='63'/>
<seriesInfo name='RFC' value='3629'/>
<seriesInfo name='DOI' value='10.17487/RFC3629'/>
</reference>



<reference anchor='RFC3713' target='https://www.rfc-editor.org/info/rfc3713'>
<front>
<title>A Description of the Camellia Encryption Algorithm</title>
<author fullname='M. Matsui' initials='M.' surname='Matsui'><organization/></author>
<author fullname='J. Nakajima' initials='J.' surname='Nakajima'><organization/></author>
<author fullname='S. Moriai' initials='S.' surname='Moriai'><organization/></author>
<date month='April' year='2004'/>
<abstract><t>This document describes the Camellia encryption algorithm.  Camellia is a block cipher with 128-bit block size and 128-, 192-, and 256-bit keys.  The algorithm description is presented together with key scheduling part and data randomizing part.  This memo provides information for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='3713'/>
<seriesInfo name='DOI' value='10.17487/RFC3713'/>
</reference>



<reference anchor='RFC4086' target='https://www.rfc-editor.org/info/rfc4086'>
<front>
<title>Randomness Requirements for Security</title>
<author fullname='D. Eastlake 3rd' initials='D.' surname='Eastlake 3rd'><organization/></author>
<author fullname='J. Schiller' initials='J.' surname='Schiller'><organization/></author>
<author fullname='S. Crocker' initials='S.' surname='Crocker'><organization/></author>
<date month='June' year='2005'/>
<abstract><t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts.  However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities.  The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t><t>Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult.  This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities.  It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='106'/>
<seriesInfo name='RFC' value='4086'/>
<seriesInfo name='DOI' value='10.17487/RFC4086'/>
</reference>



<reference anchor='RFC7253' target='https://www.rfc-editor.org/info/rfc7253'>
<front>
<title>The OCB Authenticated-Encryption Algorithm</title>
<author fullname='T. Krovetz' initials='T.' surname='Krovetz'><organization/></author>
<author fullname='P. Rogaway' initials='P.' surname='Rogaway'><organization/></author>
<date month='May' year='2014'/>
<abstract><t>This document specifies OCB, a shared-key blockcipher-based encryption scheme that provides confidentiality and authenticity for plaintexts and authenticity for associated data.  This document is a product of the Crypto Forum Research Group (CFRG).</t></abstract>
</front>
<seriesInfo name='RFC' value='7253'/>
<seriesInfo name='DOI' value='10.17487/RFC7253'/>
</reference>



<reference anchor='RFC7748' target='https://www.rfc-editor.org/info/rfc7748'>
<front>
<title>Elliptic Curves for Security</title>
<author fullname='A. Langley' initials='A.' surname='Langley'><organization/></author>
<author fullname='M. Hamburg' initials='M.' surname='Hamburg'><organization/></author>
<author fullname='S. Turner' initials='S.' surname='Turner'><organization/></author>
<date month='January' year='2016'/>
<abstract><t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS).  These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t></abstract>
</front>
<seriesInfo name='RFC' value='7748'/>
<seriesInfo name='DOI' value='10.17487/RFC7748'/>
</reference>



<reference anchor='RFC8017' target='https://www.rfc-editor.org/info/rfc8017'>
<front>
<title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
<author fullname='K. Moriarty' initials='K.' role='editor' surname='Moriarty'><organization/></author>
<author fullname='B. Kaliski' initials='B.' surname='Kaliski'><organization/></author>
<author fullname='J. Jonsson' initials='J.' surname='Jonsson'><organization/></author>
<author fullname='A. Rusch' initials='A.' surname='Rusch'><organization/></author>
<date month='November' year='2016'/>
<abstract><t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t><t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series.  By publishing this RFC, change control is transferred to the IETF.</t><t>This document also obsoletes RFC 3447.</t></abstract>
</front>
<seriesInfo name='RFC' value='8017'/>
<seriesInfo name='DOI' value='10.17487/RFC8017'/>
</reference>



<reference anchor='RFC8032' target='https://www.rfc-editor.org/info/rfc8032'>
<front>
<title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
<author fullname='S. Josefsson' initials='S.' surname='Josefsson'><organization/></author>
<author fullname='I. Liusvaara' initials='I.' surname='Liusvaara'><organization/></author>
<date month='January' year='2017'/>
<abstract><t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA).  The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves.  An example implementation and test vectors are provided.</t></abstract>
</front>
<seriesInfo name='RFC' value='8032'/>
<seriesInfo name='DOI' value='10.17487/RFC8032'/>
</reference>



<reference anchor='RFC8126' target='https://www.rfc-editor.org/info/rfc8126'>
<front>
<title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
<author fullname='M. Cotton' initials='M.' surname='Cotton'><organization/></author>
<author fullname='B. Leiba' initials='B.' surname='Leiba'><organization/></author>
<author fullname='T. Narten' initials='T.' surname='Narten'><organization/></author>
<date month='June' year='2017'/>
<abstract><t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t><t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t><t>This is the third edition of this document; it obsoletes RFC 5226.</t></abstract>
</front>
<seriesInfo name='BCP' value='26'/>
<seriesInfo name='RFC' value='8126'/>
<seriesInfo name='DOI' value='10.17487/RFC8126'/>
</reference>



<reference anchor='RFC9106' target='https://www.rfc-editor.org/info/rfc9106'>
<front>
<title>Argon2 Memory-Hard Function for Password Hashing and Proof-of-Work Applications</title>
<author fullname='A. Biryukov' initials='A.' surname='Biryukov'><organization/></author>
<author fullname='D. Dinu' initials='D.' surname='Dinu'><organization/></author>
<author fullname='D. Khovratovich' initials='D.' surname='Khovratovich'><organization/></author>
<author fullname='S. Josefsson' initials='S.' surname='Josefsson'><organization/></author>
<date month='September' year='2021'/>
<abstract><t>This document describes the Argon2 memory-hard function for password hashing and proof-of-work applications.  We provide an implementer-oriented description with test vectors.  The purpose is to simplify adoption of Argon2 for Internet protocols.  This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t></abstract>
</front>
<seriesInfo name='RFC' value='9106'/>
<seriesInfo name='DOI' value='10.17487/RFC9106'/>
</reference>


<reference anchor="SCHNEIER" >
  <front>
    <title>Applied Cryptography Second Edition: protocols, algorithms, and source code in C</title>
    <author initials="B." surname="Schneier" fullname="Bruce Schneier">
      <organization></organization>
    </author>
    <date year="1996"/>
  </front>
</reference>
<reference anchor="SP800-38D" >
  <front>
    <title>Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC</title>
    <author initials="M." surname="Dworkin">
      <organization></organization>
    </author>
    <date year="2007" month="November"/>
  </front>
  <seriesInfo name="NIST Special Publication" value="800-38D"/>
</reference>
<reference anchor="SP800-56A" >
  <front>
    <title>Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryptography</title>
    <author initials="E." surname="Barker">
      <organization></organization>
    </author>
    <author initials="D." surname="Johnson">
      <organization></organization>
    </author>
    <author initials="M." surname="Smid">
      <organization></organization>
    </author>
    <date year="2007" month="March"/>
  </front>
  <seriesInfo name="NIST Special Publication" value="800-56A Revision 1"/>
</reference>
<reference anchor="TWOFISH" >
  <front>
    <title>The Twofish Encryption Algorithm</title>
    <author initials="B." surname="Schneier">
      <organization></organization>
    </author>
    <author initials="J." surname="Kelsey">
      <organization></organization>
    </author>
    <author initials="D." surname="Whiting">
      <organization></organization>
    </author>
    <author initials="D." surname="Wagner">
      <organization></organization>
    </author>
    <author initials="C." surname="Hall">
      <organization></organization>
    </author>
    <author initials="N." surname="Ferguson">
      <organization></organization>
    </author>
    <date year="1999"/>
  </front>
</reference>




<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author fullname='S. Bradner' initials='S.' surname='Bradner'><organization/></author>
<date month='March' year='1997'/>
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference anchor='RFC8174' target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author fullname='B. Leiba' initials='B.' surname='Leiba'><organization/></author>
<date month='May' year='2017'/>
<abstract><t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='8174'/>
<seriesInfo name='DOI' value='10.17487/RFC8174'/>
</reference>

<reference anchor='FIPS186'>
  <front>
    <title>Digital Signature Standard (DSS)</title>
    <author>
      <organization/>
    </author>
    <date month='July' year='2013'/>
  </front>
  <seriesInfo name='National Institute of Standards and Technology' value='report'/>
  <seriesInfo name='DOI' value='10.6028/nist.fips.186-4'/>
</reference>

<reference anchor='AES'>
  <front>
    <title>Advanced encryption standard (AES)</title>
    <author>
      <organization/>
    </author>
    <date month='November' year='2001'/>
  </front>
  <seriesInfo name='National Institute of Standards and Technology' value='report'/>
  <seriesInfo name='DOI' value='10.6028/nist.fips.197'/>
</reference>

<reference anchor='FIPS180'>
  <front>
    <title>Secure Hash Standard</title>
    <author fullname='Quynh H. Dang' initials='Q.' surname='Dang'>
      <organization/>
    </author>
    <date month='July' year='2015'/>
  </front>
  <seriesInfo name='National Institute of Standards and Technology' value='report'/>
  <seriesInfo name='DOI' value='10.6028/nist.fips.180-4'/>
</reference>

<reference anchor='FIPS202'>
  <front>
    <title>SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions</title>
    <author fullname='Morris J. Dworkin' initials='M.' surname='Dworkin'>
      <organization/>
    </author>
    <date month='July' year='2015'/>
  </front>
  <seriesInfo name='National Institute of Standards and Technology' value='report'/>
  <seriesInfo name='DOI' value='10.6028/nist.fips.202'/>
</reference>




    </references>

    <references title='Informative References'>

<reference anchor="BLEICHENBACHER" >
  <front>
    <title>Generating ElGamal Signatures Without Knowing the Secret Key</title>
    <author initials="D." surname="Bleichenbacher">
      <organization></organization>
    </author>
    <date year="1996"/>
  </front>
  <seriesInfo name="Lecture Notes in Computer Science" value="Volume 1070, pp. 10-18"/>
</reference>
<reference anchor="BLEICHENBACHER-PKCS1" target="http://archiv.infsec.ethz.ch/education/fs08/secsem/Bleichenbacher98.pdf">
  <front>
    <title>Chosen Ciphertext Attacks Against Protocols Based on the RSA Encryption Standard PKCS \#1</title>
    <author initials="D." surname="Bleichenbacher">
      <organization></organization>
    </author>
    <date year="1998"/>
  </front>
</reference>
<reference anchor="EFAIL" target="https://www.usenix.org/system/files/conference/usenixsecurity18/sec18-poddebniak.pdf">
  <front>
    <title>Efail: Breaking S/MIME and OpenPGP Email Encryption using Exfiltration Channels</title>
    <author initials="D." surname="Poddebniak" fullname="Damian Poddebniak">
      <organization></organization>
    </author>
    <author initials="C." surname="Dresen" fullname="Christian Dresen">
      <organization></organization>
    </author>
    <author initials="J." surname="Müller" fullname="Jens Müller">
      <organization></organization>
    </author>
    <author initials="F." surname="Ising" fullname="Fabian Ising">
      <organization></organization>
    </author>
    <author initials="S." surname="Schinzel" fullname="Sebastian Schinzel">
      <organization></organization>
    </author>
    <author initials="S." surname="Friedberger" fullname="Simon Friedberger">
      <organization></organization>
    </author>
    <author initials="J." surname="Somorovsky" fullname="Juraj Somorovsky">
      <organization></organization>
    </author>
    <author initials="J." surname="Schwenk" fullname="Jörg Schwenk">
      <organization></organization>
    </author>
    <date year="2018"/>
  </front>
  <seriesInfo name="Proceedings of the 27th USENIX Conference on Security Symposium, August 2018, Pages 549–566" value=""/>
</reference>
<reference anchor="JKS02" target="http://www.counterpane.com/pgp-attack.html">
  <front>
    <title>Implementation of Chosen-Ciphertext Attacks against PGP and GnuPG</title>
    <author initials="K." surname="Jallad" fullname="Kahil Jallad">
      <organization></organization>
    </author>
    <author initials="J." surname="Katz" fullname="Jonathan Katz">
      <organization></organization>
    </author>
    <author initials="B." surname="Schneier" fullname="Bruce Schneier">
      <organization></organization>
    </author>
    <date year="2002"/>
  </front>
</reference>
<reference anchor="KOBLITZ" >
  <front>
    <title>A course in number theory and cryptography, Chapter VI. Elliptic Curves</title>
    <author initials="N." surname="Koblitz">
      <organization></organization>
    </author>
    <date year="1997"/>
  </front>
  <seriesInfo name="ISBN" value="0-387-96576-9"/>
</reference>
<reference anchor="KOPENPGP" target="https://www.kopenpgp.com/">
  <front>
    <title>Victory by KO: Attacking OpenPGP Using Key Overwriting</title>
    <author initials="L." surname="Bruseghini" fullname="Lara Bruseghini">
      <organization></organization>
    </author>
    <author initials="K.G." surname="Paterson" fullname="Kenneth G. Paterson">
      <organization></organization>
    </author>
    <author initials="D." surname="Huigens" fullname="Daniel Huigens">
      <organization></organization>
    </author>
    <date year="2022"/>
  </front>
  <seriesInfo name="Proceedings of the 29th ACM Conference on Computer and Communications Security, November 2022 (to appear)" value=""/>
</reference>
<reference anchor="KR02" target="https://eprint.iacr.org/2002/076">
  <front>
    <title>Attack on Private Signature Keys of the OpenPGP Format, PGP(TM) Programs and Other Applications Compatible with OpenPGP</title>
    <author initials="V." surname="Klíma" fullname="Vlastimil Klíma">
      <organization></organization>
    </author>
    <author initials="T." surname="Rosa" fullname="Tomáš Rosa">
      <organization></organization>
    </author>
    <date year="2002"/>
  </front>
  <seriesInfo name="Cryptology ePrint Archive, Report 2002/076" value=""/>
</reference>
<reference anchor="MRLG15" >
  <front>
    <title>Format Oracles on OpenPGP</title>
    <author initials="F." surname="Maury" fullname="Florian Maury">
      <organization></organization>
    </author>
    <author initials="J." surname="Reinhard" fullname="Jean-René Reinhard">
      <organization></organization>
    </author>
    <author initials="O." surname="Levillain" fullname="Olivier Levillain">
      <organization></organization>
    </author>
    <author initials="H." surname="Gilbert" fullname="Henri Gilbert">
      <organization></organization>
    </author>
    <date year="2015"/>
  </front>
  <seriesInfo name="CT-RSA 2015" value="Topics in Cryptology –- CT-RSA 2015 pp 220–236"/>
  <seriesInfo name="DOI" value="10.1007/978-3-319-16715-2_12"/>
</reference>
<reference anchor="MZ05" target="http://eprint.iacr.org/2005/033">
  <front>
    <title>An Attack on CFB Mode Encryption As Used By OpenPGP</title>
    <author initials="S." surname="Mister" fullname="Serge Mister">
      <organization></organization>
    </author>
    <author initials="R." surname="Zuccherato" fullname="Robert Zuccherato">
      <organization></organization>
    </author>
    <date year="2005" month="February" day="08"/>
  </front>
  <seriesInfo name="IACR ePrint Archive" value="Report 2005/033"/>
</reference>
<reference anchor="OPENPGPCARD" target="https://gnupg.org/ftp/specs/OpenPGP-smart-card-application-3.4.1.pdf">
  <front>
    <title>Functional Specification of the OpenPGP application on ISO Smart Card Operating Systems (version 3.4.1)</title>
    <author initials="A." surname="Pietig" fullname="Achim Pietig">
      <organization></organization>
    </author>
    <date year="2020"/>
  </front>
</reference>
<reference anchor="PAX" target="https://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html">
  <front>
    <title>IEEE Standard for Information Technology--Portable Operating System Interface (POSIX(R)) Base Specifications, Issue 7: pax - portable archive interchange</title>
    <author >
      <organization>The Open Group</organization>
    </author>
    <date year="2018"/>
  </front>
  <seriesInfo name="IEEE Standard" value="1003.1-2017"/>
  <seriesInfo name="DOI" value="10.1109/IEEESTD.2018.8277153"/>
</reference>
<reference anchor="PSSLR17" target="https://eprint.iacr.org/2017/1014">
  <front>
    <title>Attacking Deterministic Signature Schemes using Fault Attacks</title>
    <author initials="D." surname="Poddebniak">
      <organization></organization>
    </author>
    <author initials="J." surname="Somorovsky">
      <organization></organization>
    </author>
    <author initials="S." surname="Schinzel">
      <organization></organization>
    </author>
    <author initials="M." surname="Lochter">
      <organization></organization>
    </author>
    <author initials="P." surname="Rösler">
      <organization></organization>
    </author>
    <date year="2017" month="October"/>
  </front>
</reference>
<reference anchor="REGEX" >
  <front>
    <title>Mastering Regular Expressions</title>
    <author initials="J." surname="Friedl" fullname="Jeffrey Friedl">
      <organization>O'Reilly</organization>
    </author>
    <date year="2002" month="August"/>
  </front>
  <seriesInfo name="ISBN" value="0-596-00289-0"/>
</reference>




<reference anchor='RFC1991' target='https://www.rfc-editor.org/info/rfc1991'>
<front>
<title>PGP Message Exchange Formats</title>
<author fullname='D. Atkins' initials='D.' surname='Atkins'><organization/></author>
<author fullname='W. Stallings' initials='W.' surname='Stallings'><organization/></author>
<author fullname='P. Zimmermann' initials='P.' surname='Zimmermann'><organization/></author>
<date month='August' year='1996'/>
<abstract><t>This document describes the format of &quot;PGP files&quot;, i.e., messages that have been encrypted and/or signed with PGP.  This memo provides information for the Internet community.  This memo does not specify an Internet standard of any kind.</t></abstract>
</front>
<seriesInfo name='RFC' value='1991'/>
<seriesInfo name='DOI' value='10.17487/RFC1991'/>
</reference>



<reference anchor='RFC2440' target='https://www.rfc-editor.org/info/rfc2440'>
<front>
<title>OpenPGP Message Format</title>
<author fullname='J. Callas' initials='J.' surname='Callas'><organization/></author>
<author fullname='L. Donnerhacke' initials='L.' surname='Donnerhacke'><organization/></author>
<author fullname='H. Finney' initials='H.' surname='Finney'><organization/></author>
<author fullname='R. Thayer' initials='R.' surname='Thayer'><organization/></author>
<date month='November' year='1998'/>
<abstract><t>This document is maintained in order to publish all necessary information needed to develop interoperable applications based on the OpenPGP format.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='2440'/>
<seriesInfo name='DOI' value='10.17487/RFC2440'/>
</reference>



<reference anchor='RFC4880' target='https://www.rfc-editor.org/info/rfc4880'>
<front>
<title>OpenPGP Message Format</title>
<author fullname='J. Callas' initials='J.' surname='Callas'><organization/></author>
<author fullname='L. Donnerhacke' initials='L.' surname='Donnerhacke'><organization/></author>
<author fullname='H. Finney' initials='H.' surname='Finney'><organization/></author>
<author fullname='D. Shaw' initials='D.' surname='Shaw'><organization/></author>
<author fullname='R. Thayer' initials='R.' surname='Thayer'><organization/></author>
<date month='November' year='2007'/>
<abstract><t>This document is maintained in order to publish all necessary information needed to develop interoperable applications based on the OpenPGP format.  It is not a step-by-step cookbook for writing an application.  It describes only the format and methods needed to read, check, generate, and write conforming packets crossing any network.  It does not deal with storage and implementation questions. It does, however, discuss implementation issues necessary to avoid security flaws.</t><t>OpenPGP software uses a combination of strong public-key and symmetric cryptography to provide security services for electronic communications and data storage.  These services include confidentiality, key management, authentication, and digital signatures.  This document specifies the message formats used in OpenPGP.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='4880'/>
<seriesInfo name='DOI' value='10.17487/RFC4880'/>
</reference>



<reference anchor='RFC5869' target='https://www.rfc-editor.org/info/rfc5869'>
<front>
<title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
<author fullname='H. Krawczyk' initials='H.' surname='Krawczyk'><organization/></author>
<author fullname='P. Eronen' initials='P.' surname='Eronen'><organization/></author>
<date month='May' year='2010'/>
<abstract><t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications.  The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions.  This document is not an Internet  Standards Track specification; it is published for informational  purposes.</t></abstract>
</front>
<seriesInfo name='RFC' value='5869'/>
<seriesInfo name='DOI' value='10.17487/RFC5869'/>
</reference>



<reference anchor='RFC6090' target='https://www.rfc-editor.org/info/rfc6090'>
<front>
<title>Fundamental Elliptic Curve Cryptography Algorithms</title>
<author fullname='D. McGrew' initials='D.' surname='McGrew'><organization/></author>
<author fullname='K. Igoe' initials='K.' surname='Igoe'><organization/></author>
<author fullname='M. Salter' initials='M.' surname='Salter'><organization/></author>
<date month='February' year='2011'/>
<abstract><t>This note describes the fundamental algorithms of Elliptic Curve Cryptography (ECC) as they were defined in some seminal references from 1994 and earlier.  These descriptions may be useful for implementing the fundamental algorithms without using any of the specialized methods that were developed in following years.  Only elliptic curves defined over fields of characteristic greater than three are in scope; these curves are those used in Suite B. This document is not an Internet Standards Track specification; it is published for informational purposes.</t></abstract>
</front>
<seriesInfo name='RFC' value='6090'/>
<seriesInfo name='DOI' value='10.17487/RFC6090'/>
</reference>


<reference anchor="SEC1" >
  <front>
    <title>SEC 1: Elliptic Curve Cryptography</title>
    <author >
      <organization>Standards for Efficient Cryptography Group</organization>
    </author>
    <date year="2000" month="September"/>
  </front>
</reference>
<reference anchor="SHA1CD" target="https://github.com/cr-marcstevens/sha1collisiondetection">
  <front>
    <title>sha1collisiondetection</title>
    <author initials="M." surname="Stevens" fullname="Marc Stevens">
      <organization></organization>
    </author>
    <author initials="D." surname="Shumow" fullname="Dan Shumow">
      <organization></organization>
    </author>
    <date year="2017"/>
  </front>
</reference>
<reference anchor="SHAMBLES" target="https://sha-mbles.github.io/">
  <front>
    <title>Sha-1 is a shambles: First chosen-prefix collision on sha-1 and application to the PGP web of trust</title>
    <author initials="G." surname="Leurent" fullname="Gaëtan Leurent">
      <organization></organization>
    </author>
    <author initials="T." surname="Peyrin" fullname="Thomas Peyrin">
      <organization></organization>
    </author>
    <date year="2020"/>
  </front>
</reference>
<reference anchor="SP800-57" target="http://csrc.nist.gov/publications/nistpubs/800-57/SP800-57-Part{1,2}.pdf">
  <front>
    <title>Recommendation on Key Management</title>
    <author >
      <organization>NIST</organization>
    </author>
    <date year="2007" month="March"/>
  </front>
  <seriesInfo name="NIST Special Publication" value="800-57"/>
</reference>
<reference anchor="SP800-131A" target="https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-131Ar2.pdf">
  <front>
    <title>Transitioning the Use of Cryptographic Algorithms and Key Lengths</title>
    <author initials="E." surname="Barker">
      <organization></organization>
    </author>
    <author initials="A." surname="Roginsky">
      <organization></organization>
    </author>
    <date year="2019" month="March"/>
  </front>
  <seriesInfo name="NIST Special Publication" value="800-131A Revision 2"/>
</reference>
<reference anchor="STEVENS2013" target="https://eprint.iacr.org/2013/358">
  <front>
    <title>Counter-cryptanalysis</title>
    <author initials="M." surname="Stevens" fullname="Marc Stevens">
      <organization></organization>
    </author>
    <date year="2013" month="June"/>
  </front>
</reference>


<reference anchor='FIPS186-5'>
  <front>
    <title>Digital Signature Standard (DSS): Elliptic Curve Domain Parameters</title>
    <author fullname='Andrew Regenscheid' initials='A.' surname='Regenscheid'>
      <organization/>
    </author>
    <date month='October' year='2019'/>
  </front>
  <seriesInfo name='National Institute of Standards and Technology (NIST)' value='posted-content'/>
  <seriesInfo name='DOI' value='10.6028/nist.fips.186-5-draft'/>
</reference>

<reference anchor='CHECKOWAY'>
  <front>
    <title>A Systematic Analysis of the Juniper Dual EC Incident</title>
    <author fullname='Stephen Checkoway' initials='S.' surname='Checkoway'>
      <organization/>
    </author>
    <author fullname='Jacob Maskiewicz' initials='J.' surname='Maskiewicz'>
      <organization/>
    </author>
    <author fullname='Christina Garman' initials='C.' surname='Garman'>
      <organization/>
    </author>
    <author fullname='Joshua Fried' initials='J.' surname='Fried'>
      <organization/>
    </author>
    <author fullname='Shaanan Cohney' initials='S.' surname='Cohney'>
      <organization/>
    </author>
    <author fullname='Matthew Green' initials='M.' surname='Green'>
      <organization/>
    </author>
    <author fullname='Nadia Heninger' initials='N.' surname='Heninger'>
      <organization/>
    </author>
    <author fullname='Ralf-Philipp Weinmann' initials='R.' surname='Weinmann'>
      <organization/>
    </author>
    <author fullname='Eric Rescorla' initials='E.' surname='Rescorla'>
      <organization/>
    </author>
    <author fullname='Hovav Shacham' initials='H.' surname='Shacham'>
      <organization/>
    </author>
    <date month='October' year='2016'/>
  </front>
  <seriesInfo name='Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications' value='Security'/>
  <seriesInfo name='DOI' value='10.1145/2976749.2978395'/>
</reference>




    </references>


<section anchor="test-vectors"><name>Test vectors</name>

<t>To help implementing this specification a non-normative example for the EdDSA algorithm is given.</t>

<section anchor="sample-v4-ed25519-key"><name>Sample v4 Ed25519 key</name>

<t>The secret key used for this example is:</t>

<t>D: 1a8b1ff05ded48e18bf50166c664ab023ea70003d78d9e41f5758a91d850f8d2</t>

<t>Note that this is the raw secret key used as input to the EdDSA signing operation.
The key was created on 2014-08-19 14:28:27 and thus the fingerprint of the OpenPGP key is:</t>

<figure><artwork><![CDATA[
   C959 BDBA FA32 A2F8 9A15  3B67 8CFD E121 9796 5A9A
]]></artwork></figure>

<t>The algorithm-specific input parameters without the MPI length headers are:</t>

<t>oid: 2b06010401da470f01</t>

<t>q: 403f098994bdd916ed4053197934e4a87c80733a1280d62f8010992e43ee3b2406</t>

<t>The entire public key packet is thus:</t>

<figure><artwork><![CDATA[
   98 33 04 53 f3 5f 0b 16  09 2b 06 01 04 01 da 47
   0f 01 01 07 40 3f 09 89  94 bd d9 16 ed 40 53 19
   79 34 e4 a8 7c 80 73 3a  12 80 d6 2f 80 10 99 2e
   43 ee 3b 24 06
]]></artwork></figure>

<t>The same packet, represented in ASCII-armored form is:</t>

<figure><sourcecode type="application/pgp-keys" name="v4-ed25519-pubkey-packet.key"><![CDATA[
-----BEGIN PGP PUBLIC KEY BLOCK-----

xjMEU/NfCxYJKwYBBAHaRw8BAQdAPwmJlL3ZFu1AUxl5NOSofIBzOhKA1i+AEJku
Q+47JAY=
-----END PGP PUBLIC KEY BLOCK-----
]]></sourcecode></figure>

</section>
<section anchor="sample-v4-ed25519-signature"><name>Sample v4 Ed25519 signature</name>

<t>The signature is created using the sample key over the input data "OpenPGP" on 2015-09-16 12:24:53 UTC and thus the input to the hash function is:</t>

<t>m: 4f70656e504750040016080006050255f95f9504ff0000000c</t>

<t>Using the SHA2-256 hash algorithm yields the digest:</t>

<t>d: f6220a3f757814f4c2176ffbb68b00249cd4ccdc059c4b34ad871f30b1740280</t>

<t>Which is fed into the EdDSA signature function and yields this signature:</t>

<t>r: 56f90cca98e2102637bd983fdb16c131dfd27ed82bf4dde5606e0d756aed3366</t>

<t>s: d09c4fa11527f038e0f57f2201d82f2ea2c9033265fa6ceb489e854bae61b404</t>

<t>The entire signature packet is thus:</t>

<figure><artwork><![CDATA[
   88 5e 04 00 16 08 00 06  05 02 55 f9 5f 95 00 0a
   09 10 8c fd e1 21 97 96  5a 9a f6 22 00 ff 56 f9
   0c ca 98 e2 10 26 37 bd  98 3f db 16 c1 31 df d2
   7e d8 2b f4 dd e5 60 6e  0d 75 6a ed 33 66 01 00
   d0 9c 4f a1 15 27 f0 38  e0 f5 7f 22 01 d8 2f 2e
   a2 c9 03 32 65 fa 6c eb  48 9e 85 4b ae 61 b4 04
]]></artwork></figure>

<t>The same packet represented in ASCII-armored form is:</t>

<figure><sourcecode type="application/pgp-signature" name="v4-ed25519-signature-over-OpenPGP.sig"><![CDATA[
-----BEGIN PGP SIGNATURE-----

iF4EABYIAAYFAlX5X5UACgkQjP3hIZeWWpr2IgD/VvkMypjiECY3vZg/2xbBMd/S
ftgr9N3lYG4NdWrtM2YBANCcT6EVJ/A44PV/IgHYLy6iyQMyZfps60iehUuuYbQE
-----END PGP SIGNATURE-----
]]></sourcecode></figure>

</section>
<section anchor="v5-cert"><name>Sample v5 Certificate (Transferable Public Key)</name>

<t>Here is a Transferable Public Key consisting of:</t>

<t><list style="symbols">
  <t>a v5 Ed25519 Public-Key packet</t>
  <t>a v5 direct key self-signature</t>
  <t>a v5 Curve25519 Public-Subkey packet</t>
  <t>a v5 subkey binding signature</t>
</list></t>

<figure><sourcecode type="application/pgp-keys" name="v5-minimal-cert.key"><![CDATA[
-----BEGIN PGP PUBLIC KEY BLOCK-----

xjcFYiDQVxYAAAAtCSsGAQQB2kcPAQEHQLVQ/UIL3goq8tqYyAhqx19AG5YH
uMyAHjCOTyUpVKtRwqgFHxYKAAAAIwUCYiDQVwMVCAoEFgACAQIbAwIeCQ0n
CQMHAwkBBwEJAgcCAAAAIyIhBRtEKdW2+mmb5MgIz7teOE83FiJh8l1/FwE4
zi0wDN9LAe6QPJVjW4F4PVc/MnGWVpABAQDII7BN+BLRKYzNOhbcPvfYF4z1
eV8v9ZpnrKBtyU2VegEA4IBoRJBIBupzrKXL497Z1/H4t/zWsNOwx9Gk/NQN
7QbOPAViINBXEgAAADIKKwYBBAGXVQEFAQEHQOwq6DFNBJ25z8Z/WKRA92BG
lwBQnfJnGYBF7hPBMl1/AwEIB8KOBRgWCAAAAAkFAmIg0FcCGwwAAAAjIiEF
G0Qp1bb6aZvkyAjPu144TzcWImHyXX8XATjOLTAM30t2vVIiqtITHHtzmroU
10kwplUBANrkpE2T3XCNqLYnFEfpj0+eyNjUDX4LZye4k5SICcIkAPwNFfvq
wyg7rLV+WXlG27Z7S2gNpt1VbZSBs6IxjzXABg==
-----END PGP PUBLIC KEY BLOCK-----
]]></sourcecode></figure>

<t>The corresponding Transferable Secret Key can be found in <xref target="v5-key"/>.</t>

</section>
<section anchor="v5-key"><name>Sample v5 Secret Key (Transferable Secret Key)</name>

<t>Here is a Transferable Secret Key consisting of:</t>

<t><list style="symbols">
  <t>a v5 Ed25519 Secret-Key packet</t>
  <t>a v5 direct key self-signature</t>
  <t>a v5 Curve25519 Secret-Subkey packet</t>
  <t>a v5 subkey binding signature</t>
</list></t>

<figure><sourcecode type="application/pgp-keys" name="v5-minimal-secret.key"><![CDATA[
-----BEGIN PGP PRIVATE KEY BLOCK-----

xV0FYiDQVxYAAAAtCSsGAQQB2kcPAQEHQLVQ/UIL3goq8tqYyAhqx19AG5YH
uMyAHjCOTyUpVKtRAAABAKmpvxTlZ9KQ6j+aOEk8fYe/h0L8K5pJsuAYhvSV
mL28EbTCqAUfFgoAAAAjBQJiINBXAxUICgQWAAIBAhsDAh4JDScJAwcDCQEH
AQkCBwIAAAAjIiEFG0Qp1bb6aZvkyAjPu144TzcWImHyXX8XATjOLTAM30sB
7pA8lWNbgXg9Vz8ycZZWkAEBAMgjsE34EtEpjM06Ftw+99gXjPV5Xy/1mmes
oG3JTZV6AQDggGhEkEgG6nOspcvj3tnX8fi3/Naw07DH0aT81A3tBsdiBWIg
0FcSAAAAMgorBgEEAZdVAQUBAQdA7CroMU0EnbnPxn9YpED3YEaXAFCd8mcZ
gEXuE8EyXX8DAQgHAAAA/1b9bxwV0acRUcifrLiKHd0VVifoISz2PSVd4q5I
c1+gD+HCjgUYFggAAAAJBQJiINBXAhsMAAAAIyIhBRtEKdW2+mmb5MgIz7te
OE83FiJh8l1/FwE4zi0wDN9Ldr1SIqrSExx7c5q6FNdJMKZVAQDa5KRNk91w
jai2JxRH6Y9PnsjY1A1+C2cnuJOUiAnCJAD8DRX76sMoO6y1fll5Rtu2e0to
DabdVW2UgbOiMY81wAY=
-----END PGP PRIVATE KEY BLOCK-----
]]></sourcecode></figure>

<t>The corresponding Transferable Public Key can be found in <xref target="v5-cert"/>.</t>

</section>
<section anchor="sample-aead-eax-encryption-and-decryption"><name>Sample AEAD-EAX encryption and decryption</name>

<t>This example encrypts the cleartext string <spanx style="verb">Hello, world!</spanx> with the password <spanx style="verb">password</spanx>, using AES-128 with AEAD-EAX encryption.</t>

<section anchor="sample-parameters"><name>Sample Parameters</name>

<t>S2K:</t>

<figure><artwork><![CDATA[
  Iterated and Salted S2K
]]></artwork></figure>

<t>Iterations:</t>

<figure><artwork><![CDATA[
  65011712 (255), SHA2-256
]]></artwork></figure>

<t>Salt:</t>

<figure><artwork><![CDATA[
  a5 ae 57 9d 1f c5 d8 2b
]]></artwork></figure>

</section>
<section anchor="sample-symmetric-key-encrypted-session-key-packet-v5"><name>Sample symmetric-key encrypted session key packet (v5)</name>

<t>Packet header:</t>

<figure><artwork><![CDATA[
  c3 40
]]></artwork></figure>

<t>Version, algorithms, S2K fields:</t>

<figure><artwork><![CDATA[
  05 1e 07 01 0b 03 08 a5 ae 57 9d 1f c5 d8 2b ff
  69 22
]]></artwork></figure>

<t>Nonce:</t>

<figure><artwork><![CDATA[
  69 22 4f 91 99 93 b3 50 6f a3 b5 9a 6a 73 cf f8
]]></artwork></figure>

<t>Encrypted session key and AEAD tag:</t>

<figure><artwork><![CDATA[
  da 74 6b 88 e3 57 e8 ae 54 eb 87 e1 d7 05 75 d7
  2f 60 23 29 90 52 3e 9a 59 09 49 22 40 6b e1 c3
]]></artwork></figure>

</section>
<section anchor="starting-aead-eax-decryption-of-the-session-key"><name>Starting AEAD-EAX decryption of the session key</name>

<t>The derived key is:</t>

<figure><artwork><![CDATA[
  15 49 67 e5 90 aa 1f 92 3e 1c 0a c6 4c 88 f2 3d
]]></artwork></figure>

<t>HKDF info:</t>

<figure><artwork><![CDATA[
  c3 05 07 01
]]></artwork></figure>

<t>HKDF output:</t>

<figure><artwork><![CDATA[
  74 f0 46 03 63 a7 00 76 db 08 c4 92 ab f2 95 52
]]></artwork></figure>

<t>Authenticated Data:</t>

<figure><artwork><![CDATA[
  c3 05 07 01
]]></artwork></figure>

<t>Nonce:</t>

<figure><artwork><![CDATA[
  69 22 4f 91 99 93 b3 50 6f a3 b5 9a 6a 73 cf f8
]]></artwork></figure>

<t>Decrypted session key:</t>

<figure><artwork><![CDATA[
  38 81 ba fe 98 54 12 45 9b 86 c3 6f 98 cb 9a 5e
]]></artwork></figure>

</section>
<section anchor="sample-v2-seipd-packet"><name>Sample v2 SEIPD packet</name>

<t>Packet header:</t>

<figure><artwork><![CDATA[
  d2 69
]]></artwork></figure>

<t>Version, AES-128, EAX, Chunk size octet:</t>

<figure><artwork><![CDATA[
  02 07 01 06
]]></artwork></figure>

<t>Salt:</t>

<figure><artwork><![CDATA[
  9f f9 0e 3b 32 19 64 f3 a4 29 13 c8 dc c6 61 93
  25 01 52 27 ef b7 ea ea a4 9f 04 c2 e6 74 17 5d
]]></artwork></figure>

<t>Chunk #0 encrypted data:</t>

<figure><artwork><![CDATA[
  4a 3d 22 6e d6 af cb 9c a9 ac 12 2c 14 70 e1 1c
  63 d4 c0 ab 24 1c 6a 93 8a d4 8b f9 9a 5a 99 b9
  0b ba 83 25 de
]]></artwork></figure>

<t>Chunk #0 authentication tag:</t>

<figure><artwork><![CDATA[
  61 04 75 40 25 8a b7 95 9a 95 ad 05 1d da 96 eb
]]></artwork></figure>

<t>Final (zero-sized chunk #1) authentication tag:</t>

<figure><artwork><![CDATA[
  15 43 1d fe f5 f5 e2 25 5c a7 82 61 54 6e 33 9a
]]></artwork></figure>

</section>
<section anchor="decryption-of-data"><name>Decryption of data</name>

<t>Starting AEAD-EAX decryption of data, using the session key.</t>

<t>HKDF info:</t>

<figure><artwork><![CDATA[
  d2 02 07 01 06
]]></artwork></figure>

<t>HKDF output:</t>

<figure><artwork><![CDATA[
  b5 04 22 ac 1c 26 be 9d dd 83 1d 5b bb 36 b6 4f
  78 b8 33 f2 e9 4a 60 c0
]]></artwork></figure>

<t>Message key:</t>

<figure><artwork><![CDATA[
  b5 04 22 ac 1c 26 be 9d dd 83 1d 5b bb 36 b6 4f
]]></artwork></figure>

<t>Initialization vector:</t>

<figure><artwork><![CDATA[
  78 b8 33 f2 e9 4a 60 c0
]]></artwork></figure>

<t>Chunk #0:</t>

<t>Nonce:</t>

<figure><artwork><![CDATA[
  78 b8 33 f2 e9 4a 60 c0 00 00 00 00 00 00 00 00
]]></artwork></figure>

<t>Additional authenticated data:</t>

<figure><artwork><![CDATA[
  d2 02 07 01 06
]]></artwork></figure>

<t>Decrypted chunk #0.</t>

<t>Literal data packet with the string contents <spanx style="verb">Hello, world!</spanx>:</t>

<figure><artwork><![CDATA[
  cb 13 62 00 00 00 00 00 48 65 6c 6c 6f 2c 20 77
  6f 72 6c 64 21
]]></artwork></figure>

<t>Padding packet:</t>

<figure><artwork><![CDATA[
  d5 0e ae 5b f0 cd 67 05 50 03 55 81 6c b0 c8 ff
]]></artwork></figure>

<t>Authenticating final tag:</t>

<t>Final nonce:</t>

<figure><artwork><![CDATA[
  78 b8 33 f2 e9 4a 60 c0 00 00 00 00 00 00 00 01
]]></artwork></figure>

<t>Final additional authenticated data:</t>

<figure><artwork><![CDATA[
  d2 02 07 01 06 00 00 00 00 00 00 00 25
]]></artwork></figure>

</section>
<section anchor="complete-aead-eax-encrypted-packet-sequence"><name>Complete AEAD-EAX encrypted packet sequence</name>

<figure><sourcecode type="application/pgp-encrypted" name="v5skesk-aes128-eax.pgp"><![CDATA[
-----BEGIN PGP MESSAGE-----

w0AFHgcBCwMIpa5XnR/F2Cv/aSJPkZmTs1Bvo7WaanPP+Np0a4jjV+iuVOuH4dcF
ddcvYCMpkFI+mlkJSSJAa+HD0mkCBwEGn/kOOzIZZPOkKRPI3MZhkyUBUifvt+rq
pJ8EwuZ0F11KPSJu1q/LnKmsEiwUcOEcY9TAqyQcapOK1Iv5mlqZuQu6gyXeYQR1
QCWKt5Wala0FHdqW6xVDHf719eIlXKeCYVRuM5o=
-----END PGP MESSAGE-----
]]></sourcecode></figure>

</section>
</section>
<section anchor="sample-aead-ocb-encryption-and-decryption"><name>Sample AEAD-OCB encryption and decryption</name>

<t>This example encrypts the cleartext string <spanx style="verb">Hello, world!</spanx> with the password <spanx style="verb">password</spanx>, using AES-128 with AEAD-OCB encryption.</t>

<section anchor="sample-parameters-1"><name>Sample Parameters</name>

<t>S2K:</t>

<figure><artwork><![CDATA[
  Iterated and Salted S2K
]]></artwork></figure>

<t>Iterations:</t>

<figure><artwork><![CDATA[
  65011712 (255), SHA2-256
]]></artwork></figure>

<t>Salt:</t>

<figure><artwork><![CDATA[
  56 a2 98 d2 f5 e3 64 53
]]></artwork></figure>

</section>
<section anchor="sample-symmetric-key-encrypted-session-key-packet-v5-1"><name>Sample symmetric-key encrypted session key packet (v5)</name>

<t>Packet header:</t>

<figure><artwork><![CDATA[
  c3 3f
]]></artwork></figure>

<t>Version, algorithms, S2K fields:</t>

<figure><artwork><![CDATA[
  05 1d 07 02 0b 03 08 56 a2 98 d2 f5 e3 64 53 ff
  cf cc
]]></artwork></figure>

<t>Nonce:</t>

<figure><artwork><![CDATA[
  cf cc 5c 11 66 4e db 9d b4 25 90 d7 dc 46 b0
]]></artwork></figure>

<t>Encrypted session key and AEAD tag:</t>

<figure><artwork><![CDATA[
  78 c5 c0 41 9c c5 1b 3a 46 87 cb 32 e5 b7 03 1c
  e7 c6 69 75 76 5b 5c 21 d9 2a ef 4c c0 5c 3f ea
]]></artwork></figure>

</section>
<section anchor="starting-aead-ocb-decryption-of-the-session-key"><name>Starting AEAD-OCB decryption of the session key</name>

<t>The derived key is:</t>

<figure><artwork><![CDATA[
  e8 0d e2 43 a3 62 d9 3b 9d c6 07 ed e9 6a 73 56
]]></artwork></figure>

<t>HKDF info:</t>

<figure><artwork><![CDATA[
  c3 05 07 02
]]></artwork></figure>

<t>HKDF output:</t>

<figure><artwork><![CDATA[
  20 62 fb 76 31 ef be f4 df 81 67 ce d7 f3 a4 64
]]></artwork></figure>

<t>Authenticated Data:</t>

<figure><artwork><![CDATA[
  c3 05 07 02
]]></artwork></figure>

<t>Nonce:</t>

<figure><artwork><![CDATA[
  cf cc 5c 11 66 4e db 9d b4 25 90 d7 dc 46 b0
]]></artwork></figure>

<t>Decrypted session key:</t>

<figure><artwork><![CDATA[
  28 e7 9a b8 23 97 d3 c6 3d e2 4a c2 17 d7 b7 91
]]></artwork></figure>

</section>
<section anchor="sample-v2-seipd-packet-1"><name>Sample v2 SEIPD packet</name>

<t>Packet header:</t>

<figure><artwork><![CDATA[
  d2 69
]]></artwork></figure>

<t>Version, AES-128, OCB, Chunk size octet:</t>

<figure><artwork><![CDATA[
  02 07 02 06
]]></artwork></figure>

<t>Salt:</t>

<figure><artwork><![CDATA[
  20 a6 61 f7 31 fc 9a 30 32 b5 62 33 26 02 7e 3a
  5d 8d b5 74 8e be ff 0b 0c 59 10 d0 9e cd d6 41
]]></artwork></figure>

<t>Chunk #0 encrypted data:</t>

<figure><artwork><![CDATA[
  ff 9f d3 85 62 75 80 35 bc 49 75 4c e1 bf 3f ff
  a7 da d0 a3 b8 10 4f 51 33 cf 42 a4 10 0a 83 ee
  f4 ca 1b 48 01
]]></artwork></figure>

<t>Chunk #0 authentication tag:</t>

<figure><artwork><![CDATA[
  a8 84 6b f4 2b cd a7 c8 ce 9d 65 e2 12 f3 01 cb
]]></artwork></figure>

<t>Final (zero-sized chunk #1) authentication tag:</t>

<figure><artwork><![CDATA[
  cd 98 fd ca de 69 4a 87 7a d4 24 73 23 f6 e8 57
]]></artwork></figure>

</section>
<section anchor="decryption-of-data-1"><name>Decryption of data</name>

<t>Starting AEAD-OCB decryption of data, using the session key.</t>

<t>HKDF info:</t>

<figure><artwork><![CDATA[
  d2 02 07 02 06
]]></artwork></figure>

<t>HKDF output:</t>

<figure><artwork><![CDATA[
  71 66 2a 11 ee 5b 4e 08 14 4e 6d e8 83 a0 09 99
  eb de 12 bb 57 0d cf
]]></artwork></figure>

<t>Message key:</t>

<figure><artwork><![CDATA[
  71 66 2a 11 ee 5b 4e 08 14 4e 6d e8 83 a0 09 99
]]></artwork></figure>

<t>Initialization vector:</t>

<figure><artwork><![CDATA[
  eb de 12 bb 57 0d cf
]]></artwork></figure>

<t>Chunk #0:</t>

<t>Nonce:</t>

<figure><artwork><![CDATA[
  eb de 12 bb 57 0d cf 00 00 00 00 00 00 00 00
]]></artwork></figure>

<t>Additional authenticated data:</t>

<figure><artwork><![CDATA[
  d2 02 07 02 06
]]></artwork></figure>

<t>Decrypted chunk #0.</t>

<t>Literal data packet with the string contents <spanx style="verb">Hello, world!</spanx>:</t>

<figure><artwork><![CDATA[
  cb 13 62 00 00 00 00 00 48 65 6c 6c 6f 2c 20 77
  6f 72 6c 64 21
]]></artwork></figure>

<t>Padding packet:</t>

<figure><artwork><![CDATA[
  d5 0e ae 6a a1 64 9b 56 aa 83 5b 26 13 90 2b d2
]]></artwork></figure>

<t>Authenticating final tag:</t>

<t>Final nonce:</t>

<figure><artwork><![CDATA[
  eb de 12 bb 57 0d cf 00 00 00 00 00 00 00 01
]]></artwork></figure>

<t>Final additional authenticated data:</t>

<figure><artwork><![CDATA[
  d2 02 07 02 06 00 00 00 00 00 00 00 25
]]></artwork></figure>

</section>
<section anchor="complete-aead-ocb-encrypted-packet-sequence"><name>Complete AEAD-OCB encrypted packet sequence</name>

<figure><sourcecode type="application/pgp-encrypted" name="v5skesk-aes128-ocb.pgp"><![CDATA[
-----BEGIN PGP MESSAGE-----

wz8FHQcCCwMIVqKY0vXjZFP/z8xcEWZO2520JZDX3EaweMXAQZzFGzpGh8sy5bcD
HOfGaXV2W1wh2SrvTMBcP+rSaQIHAgYgpmH3MfyaMDK1YjMmAn46XY21dI6+/wsM
WRDQns3WQf+f04VidYA1vEl1TOG/P/+n2tCjuBBPUTPPQqQQCoPu9MobSAGohGv0
K82nyM6dZeIS8wHLzZj9yt5pSod61CRzI/boVw==
-----END PGP MESSAGE-----
]]></sourcecode></figure>

</section>
</section>
<section anchor="sample-aead-gcm-encryption-and-decryption"><name>Sample AEAD-GCM encryption and decryption</name>

<t>This example encrypts the cleartext string <spanx style="verb">Hello, world!</spanx> with the password <spanx style="verb">password</spanx>, using AES-128 with AEAD-GCM encryption.</t>

<section anchor="sample-parameters-2"><name>Sample Parameters</name>

<t>S2K:</t>

<figure><artwork><![CDATA[
  Iterated and Salted S2K
]]></artwork></figure>

<t>Iterations:</t>

<figure><artwork><![CDATA[
  65011712 (255), SHA2-256
]]></artwork></figure>

<t>Salt:</t>

<figure><artwork><![CDATA[
  e9 d3 97 85 b2 07 00 08
]]></artwork></figure>

</section>
<section anchor="sample-symmetric-key-encrypted-session-key-packet-v5-2"><name>Sample symmetric-key encrypted session key packet (v5)</name>

<t>Packet header:</t>

<figure><artwork><![CDATA[
  c3 3c
]]></artwork></figure>

<t>Version, algorithms, S2K fields:</t>

<figure><artwork><![CDATA[
  05 1a 07 03 0b 03 08 e9 d3 97 85 b2 07 00 08 ff
  b4 2e
]]></artwork></figure>

<t>Nonce:</t>

<figure><artwork><![CDATA[
  b4 2e 7c 48 3e f4 88 44 57 cb 37 26
]]></artwork></figure>

<t>Encrypted session key and AEAD tag:</t>

<figure><artwork><![CDATA[
  0c 0c 4b f3 f2 cd 6c b7 b6 e3 8b 5b f3 34 67 c1
  c7 19 44 dd 59 03 46 66 2f 5a de 61 ff 84 bc e0
]]></artwork></figure>

</section>
<section anchor="starting-aead-gcm-decryption-of-the-session-key"><name>Starting AEAD-GCM decryption of the session key</name>

<t>The derived key is:</t>

<figure><artwork><![CDATA[
  25 02 81 71 5b ba 78 28 ef 71 ef 64 c4 78 47 53
]]></artwork></figure>

<t>HKDF info:</t>

<figure><artwork><![CDATA[
  c3 05 07 03
]]></artwork></figure>

<t>HKDF output:</t>

<figure><artwork><![CDATA[
  de ec e5 81 8b c0 aa b9 0f 8a fb 02 fa 00 cd 13
]]></artwork></figure>

<t>Authenticated Data:</t>

<figure><artwork><![CDATA[
  c3 05 07 03
]]></artwork></figure>

<t>Nonce:</t>

<figure><artwork><![CDATA[
  b4 2e 7c 48 3e f4 88 44 57 cb 37 26
]]></artwork></figure>

<t>Decrypted session key:</t>

<figure><artwork><![CDATA[
  19 36 fc 85 68 98 02 74 bb 90 0d 83 19 36 0c 77
]]></artwork></figure>

</section>
<section anchor="sample-v2-seipd-packet-2"><name>Sample v2 SEIPD packet</name>

<t>Packet header:</t>

<figure><artwork><![CDATA[
  d2 69
]]></artwork></figure>

<t>Version, AES-128, GCM, Chunk size octet:</t>

<figure><artwork><![CDATA[
  02 07 03 06
]]></artwork></figure>

<t>Salt:</t>

<figure><artwork><![CDATA[
  fc b9 44 90 bc b9 8b bd c9 d1 06 c6 09 02 66 94
  0f 72 e8 9e dc 21 b5 59 6b 15 76 b1 01 ed 0f 9f
]]></artwork></figure>

<t>Chunk #0 encrypted data:</t>

<figure><artwork><![CDATA[
  fc 6f c6 d6 5b bf d2 4d cd 07 90 96 6e 6d 1e 85
  a3 00 53 78 4c b1 d8 b6 a0 69 9e f1 21 55 a7 b2
  ad 62 58 53 1b
]]></artwork></figure>

<t>Chunk #0 authentication tag:</t>

<figure><artwork><![CDATA[
  57 65 1f d7 77 79 12 fa 95 e3 5d 9b 40 21 6f 69
]]></artwork></figure>

<t>Final (zero-sized chunk #1) authentication tag:</t>

<figure><artwork><![CDATA[
  a4 c2 48 db 28 ff 43 31 f1 63 29 07 39 9e 6f f9
]]></artwork></figure>

</section>
<section anchor="decryption-of-data-2"><name>Decryption of data</name>

<t>Starting AEAD-GCM decryption of data, using the session key.</t>

<t>HKDF info:</t>

<figure><artwork><![CDATA[
  d2 02 07 03 06
]]></artwork></figure>

<t>HKDF output:</t>

<figure><artwork><![CDATA[
  ea 14 38 80 3c b8 a4 77 40 ce 9b 54 c3 38 77 8d
  4d 2b dc 2b
]]></artwork></figure>

<t>Message key:</t>

<figure><artwork><![CDATA[
  ea 14 38 80 3c b8 a4 77 40 ce 9b 54 c3 38 77 8d
]]></artwork></figure>

<t>Initialization vector:</t>

<figure><artwork><![CDATA[
  4d 2b dc 2b
]]></artwork></figure>

<t>Chunk #0:</t>

<t>Nonce:</t>

<figure><artwork><![CDATA[
  4d 2b dc 2b 00 00 00 00 00 00 00 00
]]></artwork></figure>

<t>Additional authenticated data:</t>

<figure><artwork><![CDATA[
  d2 02 07 03 06
]]></artwork></figure>

<t>Decrypted chunk #0.</t>

<t>Literal data packet with the string contents <spanx style="verb">Hello, world!</spanx>:</t>

<figure><artwork><![CDATA[
  cb 13 62 00 00 00 00 00 48 65 6c 6c 6f 2c 20 77
  6f 72 6c 64 21
]]></artwork></figure>

<t>Padding packet:</t>

<figure><artwork><![CDATA[
  d5 0e 1c e2 26 9a 9e dd ef 81 03 21 72 b7 ed 7c
]]></artwork></figure>

<t>Authenticating final tag:</t>

<t>Final nonce:</t>

<figure><artwork><![CDATA[
  4d 2b dc 2b 00 00 00 00 00 00 00 01
]]></artwork></figure>

<t>Final additional authenticated data:</t>

<figure><artwork><![CDATA[
  d2 02 07 03 06 00 00 00 00 00 00 00 25
]]></artwork></figure>

</section>
<section anchor="complete-aead-gcm-encrypted-packet-sequence"><name>Complete AEAD-GCM encrypted packet sequence</name>

<figure><sourcecode type="application/pgp-encrypted" name="v5skesk-aes128-gcm.pgp"><![CDATA[
-----BEGIN PGP MESSAGE-----

wzwFGgcDCwMI6dOXhbIHAAj/tC58SD70iERXyzcmDAxL8/LNbLe244tb8zRnwccZ
RN1ZA0ZmL1reYf+EvODSaQIHAwb8uUSQvLmLvcnRBsYJAmaUD3LontwhtVlrFXax
Ae0Pn/xvxtZbv9JNzQeQlm5tHoWjAFN4TLHYtqBpnvEhVaeyrWJYUxtXZR/Xd3kS
+pXjXZtAIW9ppMJI2yj/QzHxYykHOZ5v+Q==
-----END PGP MESSAGE-----
]]></sourcecode></figure>

</section>
</section>
<section anchor="sample-messages-encrypted-using-argon2"><name>Sample messages encrypted using Argon2</name>

<t>These messages are the literal data "Hello, world!" encrypted using v1 SEIPD, with Argon2 and the passphrase "password", using different session key sizes.
In each example, the choice of symmetric cipher is the same in both the v4 SKESK packet and v1 SEIPD packet.
In all cases, the Argon2 parameters are t = 1, p = 4, and m = 21.</t>

<section anchor="v4-skesk-using-argon2-with-aes-128"><name>v4 SKESK using Argon2 with AES-128</name>

<figure><sourcecode type="application/pgp-encrypted" name="v4skesk-argon2-aes128.pgp"><![CDATA[
-----BEGIN PGP MESSAGE-----
Comment: Encrypted using AES with 128-bit key
Comment: Session key: 01FE16BBACFD1E7B78EF3B865187374F

wycEBwScUvg8J/leUNU1RA7N/zE2AQQVnlL8rSLPP5VlQsunlO+ECxHSPgGYGKY+
YJz4u6F+DDlDBOr5NRQXt/KJIf4m4mOlKyC/uqLbpnLJZMnTq3o79GxBTdIdOzhH
XfA3pqV4mTzF
-----END PGP MESSAGE-----
]]></sourcecode></figure>

</section>
<section anchor="v4-skesk-using-argon2-with-aes-192"><name>v4 SKESK using Argon2 with AES-192</name>

<figure><sourcecode type="application/pgp-encrypted" name="v4skesk-argon2-aes192.pgp"><![CDATA[
-----BEGIN PGP MESSAGE-----
Comment: Encrypted using AES with 192-bit key
Comment: Session key: 27006DAE68E509022CE45A14E569E91001C2955...
Comment: Session key: ...AF8DFE194

wy8ECAThTKxHFTRZGKli3KNH4UP4AQQVhzLJ2va3FG8/pmpIPd/H/mdoVS5VBLLw
F9I+AdJ1Sw56PRYiKZjCvHg+2bnq02s33AJJoyBexBI4QKATFRkyez2gldJldRys
LVg77Mwwfgl2n/d572WciAM=
-----END PGP MESSAGE-----
]]></sourcecode></figure>

</section>
<section anchor="v4-skesk-using-argon2-with-aes-256"><name>v4 SKESK using Argon2 with AES-256</name>

<figure><sourcecode type="application/pgp-encrypted" name="v4skesk-argon2-aes256.pgp"><![CDATA[
-----BEGIN PGP MESSAGE-----
Comment: Encrypted using AES with 256-bit key
Comment: Session key: BBEDA55B9AAE63DAC45D4F49D89DACF4AF37FEF
Comment: Session key: ...C13BAB2F1F8E18FB74580D8B0

wzcECQS4eJUgIG/3mcaILEJFpmJ8AQQVnZ9l7KtagdClm9UaQ/Z6M/5roklSGpGu
623YmaXezGj80j4B+Ku1sgTdJo87X1Wrup7l0wJypZls21Uwd67m9koF60eefH/K
95D1usliXOEm8ayQJQmZrjf6K6v9PWwqMQ==
-----END PGP MESSAGE-----
]]></sourcecode></figure>

</section>
</section>
</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>Thanks to the openpgp design team for working on this document to prepare it for working group consumption: Stephen Farrell, Daniel Kahn Gillmor, Daniel Huigens, Jeffrey Lau, Yutaka Niibe, Justus Winter and Paul Wouters.</t>

<t>This document also draws on much previous work from a number of other authors, including: Derek Atkins, Charles Breed, Dave Del Torto, Marc Dyksterhouse, Gail Haspert, Gene Hoffman, Paul Hoffman, Ben Laurie, Raph Levien, Colin Plumb, Will Price, David Shaw, William Stallings, Mark Weaver, and Philip R. Zimmermann.</t>

</section>


  </back>

<!-- ##markdown-source:
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
sDJ+/wnyekHm2OjKLFX6aF9Tmw0SqOcxOhI9f2iA/QSaji65WqFSC2JM9+du
mslVAcvp7oK4/WIksJ0+gfYXURyCTjBmjFZsIW6ccp/I3FQPepNy2MOL9629
4yfr/ewp48odSRoyN+84Xih6m0IAfI0hL/eFmz69BifwqfoBrIDvsm/Rg3fZ
Q0r14SjKjah9jmzyrevuHr1r7ia9+vt3tZ+t/vrm+t3tDScebmzvrG+t99fZ
pe9ddpd+bO5ld3fJSX7/MNs6yDa2MnKDuiOORO7scdJk9gwJu0QU6TLJk++8
q9xVuLW5vrG+tW29l96RX5Sr/EF219W2nbnzyJ3gyX++8q2727XKt+/ayndu
qnxraeU7EEDiynd3Ufmum4xt9/9+f+ee+7njSIBiFaTyjV1MxTb9PNijEION
h/Q7Kj8cbu7s9O/pH5BLpF2dlg2qeCvp1JZUvruT3enXvb60vu3tu+EPW/nO
najnWxub99w/0nMc90nP792h0BL6Ez+FKrnzIqw397yfdMr0fPfhsp5/7zte
q3xnl1nRWn0HrJFRfHE5tiGTrMihkjZdgXjDj2suw91MIZMWU0n8Bp74hg4+
CnxkY+JceG6uoe7jwIe6Ki/yq3g7V1BYVoN8lCtiPEX3KRJDQSDL0yuvZ4sY
WxIUElKwcteFRTewYPV/R0CDTFGp+dwpcBomkqmkFqLHB4yUuCiRNtvHUT1f
kFaqfXD4vKPn8TKOh6FRWkOO5zdO3mxSM07fbJCRZNuvJ7xc0MXr5adWPdch
Cjpx8OZVLsU4As84P2M6rno/5/mL4COigYxpjfQuQG80V3Q2GV41JKXxoEg8
UW7qQhCqrrLhjdEBvUYb8O4y1rrWZcUcH45BYUk0dBXFPHD8hYDvMvIca3kx
UI/a5qNklJ4gBc/DYhXDRuri+YE3Q3p4MS6Ujml9hUsCc5RzwfEBFYFz8SIZ
phMXcSyiLn3KxcBWT3xlWeXf11+iWmBVouXesV7Z/lx6TSBUwM2XsFbrmII5
DkcjAkwYyEluVI57EYyEgUoB9vE44MSHuyJvDsaPY1g7wylKIJesc9inJ18B
3AogPhz8iaukZlLVdTK3Uic0lj6XEBMS5xd0jJTWfIIeE6Ngz8wohnM/rux1
OdMLdCViEz0KM8VTI8z+GTinV7TimVHK0vVXD7Rlj72ii8m6+Z3sd/ey1SQF
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
1y3ls3ACKcmGEcV6kdRySbI4UWXUTHFF9GgGFrwqjWj2wSkUe5VsEPiVcuS5
Wa+YK3XDSjnXC7tuMXBzbtgLvVIUlr1uLx+GUaGYLUbZsFQo+lGYyxWL2Ez8
wQmzMOCe77oFr9TL5spRFjh4DyYLHNzreZHvBZVsLucVCz2/GETdfLkSlQv5
rh8V3W4+m08wEau26wYeUi47hYiYRBZPfbaMv2SRhxScrOcU4IauIGepFOgL
X/OQCh7zMkgnIIy4DvFdBxivU/Cdig/b43gevtHrwcJAG/q9AGQA5FyRhw14
RSdXQqZDzKznhMTAAtfJAc+CPz3Ne4AAysjVenknhC4LWDCmGEGDoVOCP3xk
WMANi8z0suq9EHhRAMTp+C5WO4MLqAccr+w4EYyt4JR6NE6XGu9ZPMv3nKDi
ZHMobhZhEXynGDhRF5gZXDuRUy44+a7jR07RdbqwePkVrvY3MTUD9oZnOaPM
BfDxBu5meEWKxXXaB2fV65urpvC2QSvfrNbu29Xqfas6vCvcFW6q9f7T5aeL
3GP7Ifr4cTrz2v3G/u3z0+ly+mnQrN/nnh/6+95rt3Ya7ne2evP+rHKWG94f
5M/Cj7P5qXdfq57Vg+ti8/Zov5rPX9zut/uH9yfL4mB5ebp86E3jYnYQPd4s
Fvfdy2aSJ6aGl2aGBaduOQe2N7hTdpyvvzwXMuhH+Gtr61CnI2zyvlCeFYcY
THqcUYFdKb5rldTgTVUPsDzL5qNEwRn1AEFoJRpJRKSqx2L+sCtoSxafX0sW
hYzYfmiGf9cVF7TuB43L29f7KvxvXu/EB9XLy5r3FFxUL5uHlye3l/s37ZNc
f/K5PP98v6w+fn51K9WDwv3h1uJ0WT38VD+/Xt5Mb4/nVy+f+63D1/tjbKn9
clOnhl9Ob+vVSbPVr9arl+1u9aUd1S+z46365elh9eWpVntpHlX7QZ1eWrYf
a1fz5nH40Xs/GnULp/32l9I8Om+Wc63B0WN56O63Xpr5rS+D7EvjrHJSjYqX
F0e3nz7mW0Bvwf7p+ODj7bQKN3Sj3S7Vzt7XTq6O77+cnT92g4vn3n0r/8Xd
im7Lz5WH6Xh2XJsvb7zbqN+s5tu1ydVRrV1bTL/Mju9O8pXSg7t/mJ/vf/kY
n52/vFYOnvbPLs+2Spfd84vq7aB9Vrtr9mHMjfYxywYHd7eXzRYt2vnL52Kj
dVY78gpfyg/7H4+vqhWvdrA1fKldjntH44P7Wqv0eFE7hflUX5rtWvn4vHbV
/0iLUH1qVUftfrYV1A9eXvCDT+1Bs7V1kL2cunDD+Q/PT8vqp4uFm89ffwk+
tkeHy7u78l31+tP5yXX1NJede8+37cHnefv68HD+ZTSb3Gy52aeX6fAGTujs
adr0rnN39bPPJ/fjVrM3/ZR9Hy3PPt007vInD8so/1TotOtB+wlknLNW7/nz
1suyX5qd3L7/eDc88EoPpY7XP5vO3dvuQ6cWF9uvn77cVWv9379fzLkmHW2G
QCMTpv3EEbXCuhN4mRRcAMeAwh73UgzCeml7Q2vCH/D1jezB7vtt9sBP/ovs
QRr5e9kDK3I/yiCkWtoKh7jN/n0cAhqoVY9H0+fX6+FD5fiy+Om9f958Kvfu
o/3H7En5uDA9ihfV+8fnzu3W6MQrN7vX9c/Vm16rP6GTULs8oqNXfb1p1/uX
H4Fn1KqPcaP6mD9qdIKj6kvQqMOotqqXT/XaS1sfn+8/PXFtqzStlocfz7r9
u37l9kt5GTw8fHyqNmvV0/6nuJnLN+fN6afTbLE1f3lfqfTvPl3cFu6W++5o
FMVbk4Pc0fXDbRF4UL9/8Nh8avYPiuPzeBo8f8rNx3fl3iC3f+a/ZEuNw6x/
XXaruXktDge1j+3+Fpz6Do75FETgWr/ZrD6Et9XLG1I5SvXZ5PQm2xx3xxev
48r9tNnI3Tf9u2qrHpZHwcNWv3m3aJabOJ9G9bJ/iA3tu91K9/XlNusHVzeg
AM9OBseHYfb2dtCbtDtfvIvObZj/XGhvBe77fuP9Yf1T/+a+1UfOVj3Sq/0Y
n77Fn7fSDFrx53DmdtqfZ53m62spKHwuts7Co9PjB5hSwy8cX509VdyXrU/+
wDt6vTos3lcuxvGne7fqvq97wXhxdH4zqI7rR9VGuXF1VyrGp5Pz4tLtDYeF
q/nCi7LzyVbD74a3H72bfvd8cHpfdl9W1a31hP09jMiWFdYxIpI0kpwIEwcy
zepdAsef8D/Vn+JLVrYdeS5OhpaQ0weG8+dhNBxOdtEjNAz/nz+NP3AqmTLO
n+q3P3dFC6w2OxmE/NU5Lqnx0Hj1gFNlJrVu0J5zvhYHrAoQsXe8tcVfoHFX
P1ssZF235HrONqaP7Gp9DlqEF/VjfgFl5gJoCqHj9pygwEJ9Yjg6bi8JnJaC
C2KH/nNhZ0sVlmRrje4qyDl50PJuOR1sN1ElB5NFOPZRPw7qjhuhQQS1hy4K
/qAKbRguKDVq2hVQH9CiNg4isxb4IaocFRftIJWc0805BdBWQAmB3wuoH4G+
Uso5Qc/plbe2mmvniKtOSShzv6/bDuG9vFPsot4W5XBoUZnGmEflpFxCXSws
4WxAKQqVxQc0G9CWvJzjwXCyTsFzchGOolBBPS7P481is/B6kJPtwEriTE1C
QDb66goSHR8lwnLnDCPbegeaF/RSLKHeBgPwfVzOCg3DDUCrdIKikw9wUj34
MIS7GZF4MAbO3k9USXGD5GuOcNQPwLqAapcv4t4Vc45fQvWzVESVErYyyGN/
fhc7AF22ALtWTaC7YpDY+s7+xd1tRGt2VzcHqmgZVEjQmCNUgWEf4RDloRXY
zSKOA9qFz4Mu7VeUOCmp9LtNJyEEDbZinQThDrsO7OmuU6dUYw4B0Om4dCI8
dRzSp7jSQ6NAlkx6oB6DEFPMowHSzyOBuTDzshMGuKegHVdyiggL2BjQHujg
Uc/pwk8f/8Fb0GA27wSeExVxG92SUwAa4JH9kk2FDOth5H0gFdyMYoS2R79H
qxQ4fsXxA1xGD37mnVIWqdoN1P7lnBD6yiIteHkkP9gt2MWyj5+Xuzg1XGof
d7er7BbAEmCPyjmcRRhZY1vNBDaUQsZXOIdwtOA16ADmXCECgZ9+SDwH54R2
kwiYYItCqrYpqTumzA3OA//F3XmrHzxcOWwJSKhXwH+Rhx0WAjwEZQ8HAnQF
q5TLQedMQo3EWcZ1xSrub594DrC2DI0JVMnVIwuElyCidacWDgwsEmwiblmA
9iC4Y4HdhiGuNkyqACsPZAafA4tQfLdUdrpk/IbTHFWQEoC/BcDuTyV4zT5i
P9rFVhtrvvpDVRic3USGz2zqW9HEhzTL2PAGGdTW/LNBwZwkBHWC/tPLaxiN
kE0WduWECpIOpUC9BQVAG8gihg5vTckahh128VQXvfRY82W0jRUD+tfD8+YB
y1W3DnxS8ugrWH0XuZMdU2mmUUBWgndYFxl4EOI9AUcDeCpw8kIB+SM00s0i
W4Gb1+bb2BwjIfCB4BM0/hdW31WN+D+xB+vb9Ap85OpSfWVFItPpDQ4DBQUb
Fbz4KYqfMn4UA//ORP7rHuhyGzQ83XZazTttdjrVA2UFfMlWW4f9oFZ/OW1P
/cLd+Gq/5dWf9/3O0cXTw+g6dmvPk9JH3x9fXLw/m2b9/KdPt+8Hi9vzxWE+
DFpbYRg839dPp0+t9vvR8Omo0zmq+u8PG9kRql/Ng/H+0/n5l/bDw8X50/HV
RTt3+vD4tLyp3Qx6z/P3s89b06Ny82XxkG257vFF52jhft4/GR+P4ubg5SY4
bwb3levq5+Vl4E/Pj932c2E0/PywuFwU+8u76P7yyt26rH88nhc++kM/2zoM
P38svt42DnsltxK1h3fHUf3+9mpxWpiklILEMqSsjbRB5/XafykRPjme/zQR
HmvLeiiSAOnjVZPD413I/QeJ8Lnej4nwIZ1Fz4jwG4ZrRHiQ0oIgzbHpQ7xA
XRc9CvkIpUi4Mrp5vFhBggUZGyQcEDa72R+S34EZgRYB3CfvoqgCv7tddKFC
SyC8ByRPgYwMggIMX8ssUYmEqQoKEyDRAqOEoXkuemo9H4UpkJ2hTfgw1wOR
ap38jtTz8/I7KBnZEMUKEDR8ugmg6xwtCQwMlhxDUioi9xaKb8vv3npJAK4O
aLfXxRnmXBIRI/L29OgGgCWIcNlZzizmv1N+X9HOfmxr3xbe4XzC1oA8BxcM
aFcVeDOHC5LjtfJRpAVhFlpEyc/9W4V32NBvC+/eqvAOy+yTYN4r4TL3Ahx/
LouEB4IS7ADclCAiwaslEBiVv68AslKID4B4Xo5oZyjaIBugEulmyc8W4eUN
knje/bbwDq+D1A/LVaZOgbDLMAag/AA1RRSaAxTbuz0kaX1YQZ4FcRn6QlWr
jP2CIlZwccywr3kPScNFNyVKdpFy5gERBT4eNJBXsu73Ce8+6GWkaMPLoPHD
xKBvEEACEh2LJGMDrwRqhJs/+HnhHRoG5tRDUGs4fHjGgWyAFZRIHQEFBQ4U
kFaviGewUPpe4X31uP+88O5tFN5LdISABcFZikiAg+METBe0LvilGOKYYSP8
LJoZKkqXiro4U1g8ELoLJWQsQW+95P6j7X9Dcl/f8Uaxfd3jf5/M7v1fIbMD
x/ddfLjSpauWDh7sE3AQ6B24KZyd0Pthmf0Hlv6nBXbvTYF9jcRuCWA/KbFP
gu7fILF/KbcOL4M6Suy3n4/vs893nx5aF/tfyq9B8+PDuVfwskcPjbtc03+J
Tu+qlw9fWgdfpgeP5XhZ6AaNrcPz3oF/d+t9dF8evc7s+fq0Fly8n3X8y/Zh
tX/fn44Oc6e9pX/aOHbvP52OquN88e7ec8N28f3+S3y69fGqcTmOcx8ve+97
2fztILyvus/NoXt9frB/sf9+7M3rnxa12sXN9cXF5efLy/rkYlE5nXRhEpPH
g+fs1nHZGy9Pi+FD1O6UXw5Pvjx8qiznhWlnEhbd+tWX9n53cvuSdid+U2I/
qJ/+l5LYk+P5T5PYQTALSTiBq7bLtA9kXv6PktiDH5PYfRpQzkjsG4ZrhACU
1KI0s6YPMSoR+FuO5MZy2cnnkXugVF0CjvRDgjoINvAv38UbvueRVSJAKa5b
RB2i3CVrRQ7jIVEyddX8S2gNzVOIUoHCh0COLFJcZIHvdxclH5AsQM6JsusE
dSSanxfUPYraAnkZrs4C2SxB40AxtYefwE9g1UEeP8yXSGt7S1DPrb/1MS0/
QC0FuoGFCMie361gWGnZRwEeRtDzcddg1dzcdwrquZ/a0bflc9iLXBFFXBQy
yyhooVibx1sFrqYs2//oGdjrUulvlc9hH78tn+dW5XMYbZdICEbYpd9hjbsh
RqOFZGNChauCDQBdVfKqPbq3I4pNC0k3BFkdKBAEWJd0xi4F/MI6ZVHw/g75
nKQD6CskfbOLsXhOPsQthYHD2CpFtCiDDOZiNJySmnO47aBeI4EF2GlYxiMD
EhpItjC2HoUKFgooTXdVcJ8fopxSKFO0cff75HOgAhBj3B4qV6UShia7RHUV
0vFBXQGBBO3uLk4Dd+gn5XOf/BJAgqAlesiEUAVGvclFT4JXwdXI0dSK6BX5
Xvl89ZT/vHye2yifRz6KyuhiAt0qQI0JplOioG/UY7roFkCWXcYPy6Hyq4Qk
tQXkmF0nlv9os98QyxP9bZTGraf+PiE893++EO4G5O4pklspothYMpjA3ID4
oZ0uWWdKwQ8L4d9e8Z+WvXM/aCy3JKmfFL37wejvEL1fWgf9oIGidzE8v3vs
gsRc/bQ/rxfKnUYpO2he3S2/BKNG9fWkvH9y1j2JvHx+3i1/uRq/BMHD1tWZ
+1DNPoxO3Fl033vffD5vsNj90i0vbjqXzyejk+dgfFWL74+qI/+mkTsBEnt5
nN8OZ607/3WrGmUvxvuvz6/zh+5z5ejsy2V0ORwV5oeTj5+qrbP89cnh/fxz
bTp+bj7e+tFy9vHo/uZ1fvdwtX8X5p46W++nd5/uHubV9sfKdHp61PaWn/Yv
vxy+3i+fDs8fCs/vL39E7NYALWZzRBie9Sdjj0SVOIXjQumO9uF6lzg871ba
UnCxgjLBTRu8QFOt8J2Syd8pRmoywNMFlRjQmBL/dLYgqQKPE4TlRAxTjR+l
6i7FJg9/IOgjlMWWrFFJI0tB3FJnmLxoQbLJPKw0JFod53fH3XWm8J+81OuF
Xz1XtAfdl73MSuUgyWNTRLmcBnpBDsW/fCDqDHnxwUJV1roQDwqPHpaIQblV
P92xRDVgIq2mW6zVqvVWw22WaqVys5WrlYsFt1zKlfItOHXLoFl76QQ3z/3y
0f4wujm7ca+qpbP9L02venl5Ox6elGedk4uLwu3wMl6Mh+fvm/XXw85F/+D+
4Pj+/db90Zf8oth632gMG7XzWeHs6vJuvn981O7lR/nR+fB4Wd9ffD7pTscn
Rw+n4+vPuUmpcvBauw7b4fmXx8Otu141N/18mx9df2l9+3B8e5cq3nfvUsX7
37FLFe8bu+SVstlio9oslpuFbCXrefVmvlB1881CsdKsuNmsW/cqhcLe3t6G
BuCbaqvcgL0GmRW2tNysV68fr49fD1vXVw8Hx8NB7vjsMH9zkcctffxycuQ9
+7nWQXl/Opq2L8L9w/1ROLntFG5rJycvW61K+301PHI7L4XixdX94PjhU/35
sP/e644/Z704l6seHU2Wtei11s5fHlevW1dPy+iL1x+GR8Pwahlvndz2S6XT
l5def+iN98NCyfsYDKqn38H7vrm9pIF/3/bCo/8bthd6+cb21mrNRrVQqFWq
sMW5RrWeLzTyrXylUa7AH618tZUrtZqtzXtbd3O1as1rua1y0y23aqV8oZxt
lGtZvDSDZv2yk4+Obvrtg/3cKPDbJ82j1nR0VKbj+1AZlo5BDAnrw1Hlxr/c
fyie7hdmk6dh52B6sNgqern7kX8XfTn4VM5+ytfeHy/cuH8dHk3KpTv342wx
LQ2zL0fL6cMw9tybl7BYGlWeJq1iNop6h/vHW5VCw13Ew8HdeXNU9peXR5ej
h9mnXvG4+Fy5+Pjy+fR77jynasovUdI/Xm7++ClWiXGSbS8ozs488hmrQkF5
UGayDUAwJ9wjrHdFydfWo4z6gdHnixEpCLDg82iKKCQtfzaLEPin4Y8H0dA5
9h/HzsFgOBxNZvrDw8WgH2EVzaOo15vBjXfiL3ad+8Xcf/Kds8GgC5fd0SKe
L2LnI5e1xovmwl8MnY+gQlB9czaX6cESqEo4818INWaE+d4I2kSIVwRXJsnj
pj4RQ94wDC2COil0rQ+gHs2iJ6c6h7kiNPmjPxuCbFCbRVg2oIFwAQ2YxPVk
Ngep4NSfBU5j+YSltrFUKAz9wB/AHP14GiH8BiKrOoeTXm/kg/5Nk9B/1WDF
YO6zAbx15U8fnRMYcgRf1CdDuMIvhjDaXVgDuJkv4KaPqPtB6HQeEcYWPx/A
LoLqNhwycg+M5sn5GPnPqoDOxeNgOJg6V3v/638+DOBwIMDpeG/r/wegzZ6r
BR8EAA==

-->

</rfc>

