summaryrefslogtreecommitdiff
path: root/docs/DETAILS
diff options
context:
space:
mode:
Diffstat (limited to 'docs/DETAILS')
-rw-r--r--docs/DETAILS1225
1 files changed, 0 insertions, 1225 deletions
diff --git a/docs/DETAILS b/docs/DETAILS
deleted file mode 100644
index d5c5cea..0000000
--- a/docs/DETAILS
+++ /dev/null
@@ -1,1225 +0,0 @@
-# doc/DETAILS -*- org -*-
-#+TITLE: GnuPG Details
-# Globally disable superscripts and subscripts:
-#+OPTIONS: ^:{}
-#
-
-# Note: This file uses org-mode; it should be easy to read as plain
-# text but be aware of some markup peculiarities: Verbatim code is
-# enclosed in #+begin-example, #+end-example blocks or marked by a
-# colon as the first non-white-space character, words bracketed with
-# equal signs indicate a monospace font, and the usual /italics/,
-# *bold*, and _underline_ conventions are recognized.
-
-This is the DETAILS file for GnuPG which specifies some internals and
-parts of the external API for GPG and GPGSM.
-
-* Format of the colon listings
- The format is a based on colon separated record, each recods starts
- with a tag string and extends to the end of the line. Here is an
- example:
-#+begin_example
-$ gpg --with-colons --list-keys \
- --with-fingerprint --with-fingerprint wk@gnupg.org
-pub:f:1024:17:6C7EE1B8621CC013:899817715:1055898235::m:::scESC:
-fpr:::::::::ECAF7590EB3443B5C7CF3ACB6C7EE1B8621CC013:
-uid:f::::::::Werner Koch <wk@g10code.com>:
-uid:f::::::::Werner Koch <wk@gnupg.org>:
-sub:f:1536:16:06AD222CADF6A6E1:919537416:1036177416:::::e:
-fpr:::::::::CF8BCC4B18DE08FCD8A1615906AD222CADF6A6E1:
-sub:r:1536:20:5CE086B5B5A18FF4:899817788:1025961788:::::esc:
-fpr:::::::::AB059359A3B81F410FCFF97F5CE086B5B5A18FF4:
-#+end_example
-
-The double =--with-fingerprint= prints the fingerprint for the subkeys
-too. Old versions of gpg used a lighly different format and required
-the use of the option =--fixed-list-mode= to conform to format
-described here.
-
-** Description of the fields
-*** Field 1 - Type of record
-
- - pub :: Public key
- - crt :: X.509 certificate
- - crs :: X.509 certificate and private key available
- - sub :: Subkey (secondary key)
- - sec :: Secret key
- - ssb :: Secret subkey (secondary key)
- - uid :: User id (only field 10 is used).
- - uat :: User attribute (same as user id except for field 10).
- - sig :: Signature
- - rev :: Revocation signature
- - fpr :: Fingerprint (fingerprint is in field 10)
- - pkd :: Public key data [*]
- - grp :: Keygrip
- - rvk :: Revocation key
- - tru :: Trust database information [*]
- - spk :: Signature subpacket [*]
- - cfg :: Configuration data [*]
-
- Records marked with an asterisk are described at [[*Special%20field%20formats][*Special fields]].
-
-*** Field 2 - Validity
-
- This is a letter describing the computed validity of a key.
- Currently this is a single letter, but be prepared that additional
- information may follow in some future versions. Note that GnuPG <
- 2.1 does not set this field for secret key listings.
-
- - o :: Unknown (this key is new to the system)
- - i :: The key is invalid (e.g. due to a missing self-signature)
- - d :: The key has been disabled
- (deprecated - use the 'D' in field 12 instead)
- - r :: The key has been revoked
- - e :: The key has expired
- - - :: Unknown validity (i.e. no value assigned)
- - q :: Undefined validity. '-' and 'q' may safely be treated as
- the same value for most purposes
- - n :: The key is not valid
- - m :: The key is marginal valid.
- - f :: The key is fully valid
- - u :: The key is ultimately valid. This often means that the
- secret key is available, but any key may be marked as
- ultimately valid.
- - w :: The key has a well known private part.
- - s :: The key has special validity. This means that it might be
- self-signed and expected to be used in the STEED sytem.
-
- If the validity information is given for a UID or UAT record, it
- describes the validity calculated based on this user ID. If given
- for a key record it describes the validity taken from the best
- rated user ID.
-
- For X.509 certificates a 'u' is used for a trusted root
- certificate (i.e. for the trust anchor) and an 'f' for all other
- valid certificates.
-
-*** Field 3 - Key length
-
- The length of key in bits.
-
-*** Field 4 - Public key algorithm
-
- The values here are those from the OpenPGP specs or if they are
- greather than 255 the algorithm ids as used by Libgcrypt.
-
-*** Field 5 - KeyID
-
- This is the 64 bit keyid as specified by OpenPGP and the last 64
- bit of the SHA-1 fingerprint of an X.509 certifciate.
-
-*** Field 6 - Creation date
-
- The creation date of the key is given in UTC. For UID and UAT
- records, this is used for the self-signature date. Note that the
- date is usally printed in seconds since epoch, however, we are
- migrating to an ISO 8601 format (e.g. "19660205T091500"). This is
- currently only relevant for X.509. A simple way to detect the new
- format is to scan for the 'T'. Note that old versions of gpg
- without using the =--fixed-list-mode= option used a "yyyy-mm-tt"
- format.
-
-*** Field 7 - Expiration date
-
- Key or UID/UAT expiration date or empty if it does not expire.
-
-*** Field 8 - Certificate S/N, UID hash, trust signature info
-
- Used for serial number in crt records. For UID and UAT records,
- this is a hash of the user ID contents used to represent that
- exact user ID. For trust signatures, this is the trust depth
- seperated by the trust value by a space.
-
-*** Field 9 - Ownertrust
-
- This is only used on primary keys. This is a single letter, but
- be prepared that additional information may follow in future
- versions. For trust signatures with a regular expression, this is
- the regular expression value, quoted as in field 10.
-
-*** Field 10 - User-ID
- The value is quoted like a C string to avoid control characters
- (the colon is quoted =\x3a=). For a "pub" record this field is
- not used on --fixed-list-mode. A UAT record puts the attribute
- subpacket count here, a space, and then the total attribute
- subpacket size. In gpgsm the issuer name comes here. A FPR
- record stores the fingerprint here. The fingerprint of a
- revocation key is stored here.
-*** Field 11 - Signature class
-
- Signature class as per RFC-4880. This is a 2 digit hexnumber
- followed by either the letter 'x' for an exportable signature or
- the letter 'l' for a local-only signature. The class byte of an
- revocation key is also given here, 'x' and 'l' is used the same
- way. This field if not used for X.509.
-
-*** Field 12 - Key capabilities
-
- The defined capabilities are:
-
- - e :: Encrypt
- - s :: Sign
- - c :: Certify
- - a :: Authentication
- - ? :: Unknown capability
-
- A key may have any combination of them in any order. In addition
- to these letters, the primary key has uppercase versions of the
- letters to denote the _usable_ capabilities of the entire key, and
- a potential letter 'D' to indicate a disabled key.
-
-*** Field 13 - Issuer certificate fingerprint or other info
-
- Used in FPR records for S/MIME keys to store the fingerprint of
- the issuer certificate. This is useful to build the certificate
- path based on certificates stored in the local key database it is
- only filled if the issuer certificate is available. The root has
- been reached if this is the same string as the fingerprint. The
- advantage of using this value is that it is guaranteed to have
- been been build by the same lookup algorithm as gpgsm uses.
-
- For "uid" records this field lists the preferences in the same way
- gpg's --edit-key menu does.
-
- For "sig" records, this is the fingerprint of the key that issued
- the signature. Note that this is only filled in if the signature
- verified correctly. Note also that for various technical reasons,
- this fingerprint is only available if --no-sig-cache is used.
-
-*** Field 14 - Flag field
-
- Flag field used in the --edit menu output
-
-*** Field 15 - S/N of a token
-
- Used in sec/sbb to print the serial number of a token (internal
- protect mode 1002) or a '#' if that key is a simple stub (internal
- protect mode 1001)
-
-*** Field 16 - Hash algorithm
-
- For sig records, this is the used hash algorithm. For example:
- 2 = SHA-1, 8 = SHA-256.
-
-** Special fields
-
-*** PKD - Public key data
-
- If field 1 has the tag "pkd", a listing looks like this:
-#+begin_example
-pkd:0:1024:B665B1435F4C2 .... FF26ABB:
- ! ! !-- the value
- ! !------ for information number of bits in the value
- !--------- index (eg. DSA goes from 0 to 3: p,q,g,y)
-#+end_example
-
-*** TRU - Trust database information
- Example for a "tru" trust base record:
-#+begin_example
- tru:o:0:1166697654:1:3:1:5
-#+end_example
-
- - Field 2 :: Reason for staleness of trust. If this field is
- empty, then the trustdb is not stale. This field may
- have multiple flags in it:
-
- - o :: Trustdb is old
- - t :: Trustdb was built with a different trust model
- than the one we are using now.
-
- - Field 3 :: Trust model
-
- - 0 :: Classic trust model, as used in PGP 2.x.
- - 1 :: PGP trust model, as used in PGP 6 and later.
- This is the same as the classic trust model,
- except for the addition of trust signatures.
-
- GnuPG before version 1.4 used the classic trust model
- by default. GnuPG 1.4 and later uses the PGP trust
- model by default.
-
- - Field 4 :: Date trustdb was created in seconds since Epoch.
- - Field 5 :: Date trustdb will expire in seconds since Epoch.
- - Field 6 :: Number of marginally trusted users to introduce a new
- key signer (gpg's option --marginals-needed).
- - Field 7 :: Number of completely trusted users to introduce a new
- key signer. (gpg's option --completes-needed)
-
- - Field 8 :: Maximum depth of a certification chain. (gpg's option
- --max-cert-depth)
-
-*** SPK - Signature subpacket records
-
- - Field 2 :: Subpacket number as per RFC-4880 and later.
- - Field 3 :: Flags in hex. Currently the only two bits assigned
- are 1, to indicate that the subpacket came from the
- hashed part of the signature, and 2, to indicate the
- subpacket was marked critical.
- - Field 4 :: Length of the subpacket. Note that this is the
- length of the subpacket, and not the length of field
- 5 below. Due to the need for %-encoding, the length
- of field 5 may be up to 3x this value.
- - Field 5 :: The subpacket data. Printable ASCII is shown as
- ASCII, but other values are rendered as %XX where XX
- is the hex value for the byte.
-
-*** CFG - Configuration data
-
- --list-config outputs information about the GnuPG configuration
- for the benefit of frontends or other programs that call GnuPG.
- There are several list-config items, all colon delimited like the
- rest of the --with-colons output. The first field is always "cfg"
- to indicate configuration information. The second field is one of
- (with examples):
-
- - version :: The third field contains the version of GnuPG.
-
- : cfg:version:1.3.5
-
- - pubkey :: The third field contains the public key algorithms
- this version of GnuPG supports, separated by
- semicolons. The algorithm numbers are as specified in
- RFC-4880. Note that in contrast to the --status-fd
- interface these are _not_ the Libgcrypt identifiers.
-
- : cfg:pubkey:1;2;3;16;17
-
- - cipher :: The third field contains the symmetric ciphers this
- version of GnuPG supports, separated by semicolons.
- The cipher numbers are as specified in RFC-4880.
-
- : cfg:cipher:2;3;4;7;8;9;10
-
- - digest :: The third field contains the digest (hash) algorithms
- this version of GnuPG supports, separated by
- semicolons. The digest numbers are as specified in
- RFC-4880.
-
- : cfg:digest:1;2;3;8;9;10
-
- - compress :: The third field contains the compression algorithms
- this version of GnuPG supports, separated by
- semicolons. The algorithm numbers are as specified
- in RFC-4880.
-
- : cfg:compress:0;1;2;3
-
- - group :: The third field contains the name of the group, and the
- fourth field contains the values that the group expands
- to, separated by semicolons.
-
- For example, a group of:
- : group mynames = paige 0x12345678 joe patti
- would result in:
- : cfg:group:mynames:patti;joe;0x12345678;paige
-
-
-* Format of the --status-fd output
-
- Every line is prefixed with "[GNUPG:] ", followed by a keyword with
- the type of the status line and some arguments depending on the type
- (maybe none); an application should always be prepared to see more
- arguments in future versions.
-
-** General status codes
-*** NEWSIG
- May be issued right before a signature verification starts. This
- is useful to define a context for parsing ERROR status messages.
- No arguments are currently defined.
-
-*** GOODSIG <long_keyid_or_fpr> <username>
- The signature with the keyid is good. For each signature only one
- of the codes GOODSIG, BADSIG, EXPSIG, EXPKEYSIG, REVKEYSIG or
- ERRSIG will be emitted. In the past they were used as a marker
- for a new signature; new code should use the NEWSIG status
- instead. The username is the primary one encoded in UTF-8 and %XX
- escaped. The fingerprint may be used instead of the long keyid if
- it is available. This is the case with CMS and might eventually
- also be available for OpenPGP.
-
-*** EXPSIG <long_keyid_or_fpr> <username>
- The signature with the keyid is good, but the signature is
- expired. The username is the primary one encoded in UTF-8 and %XX
- escaped. The fingerprint may be used instead of the long keyid if
- it is available. This is the case with CMS and might eventually
- also be available for OpenPGP.
-
-*** EXPKEYSIG <long_keyid_or_fpr> <username>
- The signature with the keyid is good, but the signature was made
- by an expired key. The username is the primary one encoded in
- UTF-8 and %XX escaped. The fingerprint may be used instead of the
- long keyid if it is available. This is the case with CMS and
- might eventually also be available for OpenPGP.
-
-*** REVKEYSIG <long_keyid_or_fpr> <username>
- The signature with the keyid is good, but the signature was made
- by a revoked key. The username is the primary one encoded in UTF-8
- and %XX escaped. The fingerprint may be used instead of the long
- keyid if it is available. This is the case with CMS and might
- eventually also beƱ available for OpenPGP.
-
-*** BADSIG <long_keyid_or_fpr> <username>
- The signature with the keyid has not been verified okay. The
- username is the primary one encoded in UTF-8 and %XX escaped. The
- fingerprint may be used instead of the long keyid if it is
- available. This is the case with CMS and might eventually also be
- available for OpenPGP.
-
-*** ERRSIG <keyid> <pkalgo> <hashalgo> <sig_class> <time> <rc>
- It was not possible to check the signature. This may be caused by
- a missing public key or an unsupported algorithm. A RC of 4
- indicates unknown algorithm, a 9 indicates a missing public
- key. The other fields give more information about this signature.
- sig_class is a 2 byte hex-value. The fingerprint may be used
- instead of the keyid if it is available. This is the case with
- gpgsm and might eventually also be available for OpenPGP.
-
- Note, that TIME may either be the number of seconds since Epoch or
- the letter 'T'.
- an ISO 8601 string. The latter can be detected by the presence of
-
-*** VALIDSIG <args>
-
- The args are:
-
- - <fingerprint_in_hex>
- - <sig_creation_date>
- - <sig-timestamp>
- - <expire-timestamp>
- - <sig-version>
- - <reserved>
- - <pubkey-algo>
- - <hash-algo>
- - <sig-class>
- - [ <primary-key-fpr> ]
-
- This status indicates that the signature is good. This is the same
- as GOODSIG but has the fingerprint as the argument. Both status
- lines are emitted for a good signature. All arguments here are on
- one long line. sig-timestamp is the signature creation time in
- seconds after the epoch. expire-timestamp is the signature
- expiration time in seconds after the epoch (zero means "does not
- expire"). sig-version, pubkey-algo, hash-algo, and sig-class (a
- 2-byte hex value) are all straight from the signature packet.
- PRIMARY-KEY-FPR is the fingerprint of the primary key or identical
- to the first argument. This is useful to get back to the primary
- key without running gpg again for this purpose.
-
- The primary-key-fpr parameter is used for OpenPGP and not
- class is not defined for CMS and currently set to 0 and 00.
- available for CMS signatures. The sig-version as well as the sig
-
- Note, that *-TIMESTAMP may either be a number of seconds since
- Epoch or an ISO 8601 string which can be detected by the presence
- of the letter 'T'.
-
-*** SIG_ID <radix64_string> <sig_creation_date> <sig-timestamp>
- This is emitted only for signatures of class 0 or 1 which have
- been verified okay. The string is a signature id and may be used
- in applications to detect replay attacks of signed messages. Note
- that only DLP algorithms give unique ids - others may yield
- duplicated ones when they have been created in the same second.
-
- Note, that SIG-TIMESTAMP may either be a number of seconds since
- Epoch or an ISO 8601 string which can be detected by the presence
- of the letter 'T'.
-
-*** ENC_TO <long_keyid> <keytype> <keylength>
- The message is encrypted to this LONG_KEYID. KEYTYPE is the
- numerical value of the public key algorithm or 0 if it is not
- known, KEYLENGTH is the length of the key or 0 if it is not known
- (which is currently always the case). Gpg prints this line
- always; Gpgsm only if it knows the certificate.
-
-*** BEGIN_DECRYPTION
- Mark the start of the actual decryption process. This is also
- emitted when in --list-only mode.
-*** END_DECRYPTION
- Mark the end of the actual decryption process. This are also
- emitted when in --list-only mode.
-*** DECRYPTION_INFO <mdc_method> <sym_algo>
- Print information about the symmetric encryption algorithm and the
- MDC method. This will be emitted even if the decryption fails.
-
-*** DECRYPTION_FAILED
- The symmetric decryption failed - one reason could be a wrong
- passphrase for a symmetrical encrypted message.
-
-*** DECRYPTION_OKAY
- The decryption process succeeded. This means, that either the
- correct secret key has been used or the correct passphrase for a
- conventional encrypted message was given. The program itself may
- return an errorcode because it may not be possible to verify a
- signature for some reasons.
-
-*** SESSION_KEY <algo>:<hexdigits>
- The session key used to decrypt the message. This message will
- only be emitted when the special option --show-session-key is
- used. The format is suitable to be passed to the option
- --override-session-key
-
-*** BEGIN_ENCRYPTION <mdc_method> <sym_algo>
- Mark the start of the actual encryption process.
-
-*** END_ENCRYPTION
- Mark the end of the actual encryption process.
-
-*** FILE_START <what> <filename>
- Start processing a file <filename>. <what> indicates the performed
- operation:
- - 1 :: verify
- - 2 :: encrypt
- - 3 :: decrypt
-
-*** FILE_DONE
- Marks the end of a file processing which has been started
- by FILE_START.
-
-*** BEGIN_SIGNING
- Mark the start of the actual signing process. This may be used as
- an indication that all requested secret keys are ready for use.
-
-*** ALREADY_SIGNED <long-keyid>
- Warning: This is experimental and might be removed at any time.
-
-*** SIG_CREATED <type> <pk_algo> <hash_algo> <class> <timestamp> <keyfpr>
- A signature has been created using these parameters.
- Values for type <type> are:
- - D :: detached
- - C :: cleartext
- - S :: standard
- (only the first character should be checked)
-
- <class> are 2 hex digits with the OpenPGP signature class.
-
- Note, that TIMESTAMP may either be a number of seconds since Epoch
- or an ISO 8601 string which can be detected by the presence of the
- letter 'T'.
-
-*** NOTATION_
- There are actually two related status codes to convey notation
- data:
-
- - NOTATION_NAME <name>
- - NOTATION_DATA <string>
-
- <name> and <string> are %XX escaped; the data may be split among
- several NOTATION_DATA lines.
-
-*** POLICY_URL <string>
- Note that URL in <string> is %XX escaped.
-
-*** PLAINTEXT <format> <timestamp> <filename>
- This indicates the format of the plaintext that is about to be
- written. The format is a 1 byte hex code that shows the format of
- the plaintext: 62 ('b') is binary data, 74 ('t') is text data with
- no character set specified, and 75 ('u') is text data encoded in
- the UTF-8 character set. The timestamp is in seconds since the
- epoch. If a filename is available it gets printed as the third
- argument, percent-escaped as usual.
-
-*** PLAINTEXT_LENGTH <length>
- This indicates the length of the plaintext that is about to be
- written. Note that if the plaintext packet has partial length
- encoding it is not possible to know the length ahead of time. In
- that case, this status tag does not appear.
-
-*** ATTRIBUTE <arguments>
- The list or argemnts are:
- - <fpr>
- - <octets>
- - <type>
- - <index>
- - <count>
- - <timestamp>
- - <expiredate>
- - <flags>
-
- This is one long line issued for each attribute subpacket when an
- attribute packet is seen during key listing. <fpr> is the
- fingerprint of the key. <octets> is the length of the attribute
- subpacket. <type> is the attribute type (e.g. 1 for an image).
- <index> and <count> indicate that this is the N-th indexed
- subpacket of count total subpackets in this attribute packet.
- <timestamp> and <expiredate> are from the self-signature on the
- attribute packet. If the attribute packet does not have a valid
- self-signature, then the timestamp is 0. <flags> are a bitwise OR
- of:
- - 0x01 :: this attribute packet is a primary uid
- - 0x02 :: this attribute packet is revoked
- - 0x04 :: this attribute packet is expired
-
-*** SIG_SUBPACKET <type> <flags> <len> <data>
- This indicates that a signature subpacket was seen. The format is
- the same as the "spk" record above.
-
-** Key related
-*** INV_RECP, INV_SGNR
- The two similar status codes:
-
- - INV_RECP <reason> <requested_recipient>
- - INV_SGNR <reason> <requested_sender>
-
- are issued for each unusable recipient/sender. The reasons codes
- currently in use are:
-
- - 0 :: No specific reason given
- - 1 :: Not Found
- - 2 :: Ambigious specification
- - 3 :: Wrong key usage
- - 4 :: Key revoked
- - 5 :: Key expired
- - 6 :: No CRL known
- - 7 :: CRL too old
- - 8 :: Policy mismatch
- - 9 :: Not a secret key
- - 10 :: Key not trusted
- - 11 :: Missing certificate
- - 12 :: Missing issuer certificate
-
- Note that for historical reasons the INV_RECP status is also used
- for gpgsm's SIGNER command where it relates to signer's of course.
- Newer GnuPG versions are using INV_SGNR; applications should
- ignore the INV_RECP during the sender's command processing once
- they have seen an INV_SGNR. Different codes are used so that they
- can be distinguish while doing an encrypt+sign operation.
-*** NO_RECP <reserved>
- Issued if no recipients are usable.
-
-*** NO_SGNR <reserved>
- Issued if no senders are usable.
-
-*** KEYEXPIRED <expire-timestamp>
- The key has expired. expire-timestamp is the expiration time in
- seconds since Epoch. This status line is not very useful because
- it will also be emitted for expired subkeys even if this subkey is
- not used. To check whether a key used to sign a message has
- expired, the EXPKEYSIG status line is to be used.
-
- Note, that the TIMESTAMP may either be a number of seconds since
- Epoch or an ISO 8601 string which can be detected by the presence
- of the letter 'T'.
-
-*** KEYREVOKED
- The used key has been revoked by its owner. No arguments yet.
-
-*** NO_PUBKEY <long keyid>
- The public key is not available
-
-*** NO_SECKEY <long keyid>
- The secret key is not available
-
-*** KEY_CREATED <type> <fingerprint> [<handle>]
- A key has been created. Values for <type> are:
- - B :: primary and subkey
- - P :: primary
- - S :: subkey
- The fingerprint is one of the primary key for type B and P and the
- one of the subkey for S. Handle is an arbitrary non-whitespace
- string used to match key parameters from batch key creation run.
-
-*** KEY_NOT_CREATED [<handle>]
- The key from batch run has not been created due to errors.
-
-*** TRUST_
- These are several similar status codes:
-
- - TRUST_UNDEFINED <error_token>
- - TRUST_NEVER <error_token>
- - TRUST_MARGINAL [0 [<validation_model>]]
- - TRUST_FULLY [0 [<validation_model>]]
- - TRUST_ULTIMATE [0 [<validation_model>]]
-
- For good signatures one of these status lines are emitted to
- indicate the validity of the key used to create the signature.
- The error token values are currently only emitted by gpgsm.
-
- VALIDATION_MODEL describes the algorithm used to check the
- validity of the key. The defaults are the standard Web of Trust
- model for gpg and the the standard X.509 model for gpgsm. The
- defined values are
-
- - pgp :: The standard PGP WoT.
- - shell :: The standard X.509 model.
- - chain :: The chain model.
- - steed :: The STEED model.
-
- Note that the term =TRUST_= in the status names is used for
- historic reasons; we now speak of validity.
-
-*** PKA_TRUST_
- This is is one:
-
- - PKA_TRUST_GOOD <mailbox>
- - PKA_TRUST_BAD <mailbox>
-
- Depending on the outcome of the PKA check one of the above status
- codes is emitted in addition to a =TRUST_*= status.
-
-** Remote control
-*** GET_BOOL, GET_LINE, GET_HIDDEN, GOT_IT
-
- These status line are used with --command-fd for interactive
- control of the process.
-
-*** USERID_HINT <long main keyid> <string>
- Give a hint about the user ID for a certain keyID.
-
-*** NEED_PASSPHRASE <long keyid> <long main keyid> <keytype> <keylength>
- Issued whenever a passphrase is needed. KEYTYPE is the numerical
- value of the public key algorithm or 0 if this is not applicable,
- KEYLENGTH is the length of the key or 0 if it is not known (this
- is currently always the case).
-
-*** NEED_PASSPHRASE_SYM <cipher_algo> <s2k_mode> <s2k_hash>
- Issued whenever a passphrase for symmetric encryption is needed.
-
-*** NEED_PASSPHRASE_PIN <card_type> <chvno> [<serialno>]
- Issued whenever a PIN is requested to unlock a card.
-
-*** MISSING_PASSPHRASE
- No passphrase was supplied. An application which encounters this
- message may want to stop parsing immediately because the next
- message will probably be a BAD_PASSPHRASE. However, if the
- application is a wrapper around the key edit menu functionality it
- might not make sense to stop parsing but simply ignoring the
- following BAD_PASSPHRASE.
-
-*** BAD_PASSPHRASE <long keyid>
- The supplied passphrase was wrong or not given. In the latter
- case you may have seen a MISSING_PASSPHRASE.
-
-*** GOOD_PASSPHRASE
- The supplied passphrase was good and the secret key material
- is therefore usable.
-
-** Import/Export
-*** IMPORT_CHECK <long keyid> <fingerprint> <user ID>
- This status is emitted in interactive mode right before
- the "import.okay" prompt.
-
-*** IMPORTED <long keyid> <username>
- The keyid and name of the signature just imported
-
-*** IMPORT_OK <reason> [<fingerprint>]
- The key with the primary key's FINGERPRINT has been imported.
- REASON flags are:
-
- - 0 :: Not actually changed
- - 1 :: Entirely new key.
- - 2 :: New user IDs
- - 4 :: New signatures
- - 8 :: New subkeys
- - 16 :: Contains private key.
-
- The flags may be ORed.
-
-*** IMPORT_PROBLEM <reason> [<fingerprint>]
- Issued for each import failure. Reason codes are:
-
- - 0 :: No specific reason given.
- - 1 :: Invalid Certificate.
- - 2 :: Issuer Certificate missing.
- - 3 :: Certificate Chain too long.
- - 4 :: Error storing certificate.
-
-*** IMPORT_RES <args>
- Final statistics on import process (this is one long line). The
- args are a list of unsigned numbers separated by white space:
-
- - <count>
- - <no_user_id>
- - <imported>
- - <imported_rsa>
- - <unchanged>
- - <n_uids>
- - <n_subk>
- - <n_sigs>
- - <n_revoc>
- - <sec_read>
- - <sec_imported>
- - <sec_dups>
- - <skipped_new_keys>
- - <not_imported>
-
-** Smartcard related
-*** CARDCTRL <what> [<serialno>]
- This is used to control smartcard operations. Defined values for
- WHAT are:
-
- - 1 :: Request insertion of a card. Serialnumber may be given
- to request a specific card. Used by gpg 1.4 w/o
- scdaemon
- - 2 :: Request removal of a card. Used by gpg 1.4 w/o scdaemon.
- - 3 :: Card with serialnumber detected
- - 4 :: No card available
- - 5 :: No card reader available
- - 6 :: No card support available
-
-*** SC_OP_FAILURE [<code>]
- An operation on a smartcard definitely failed. Currently there is
- no indication of the actual error code, but application should be
- prepared to later accept more arguments. Defined values for
- <code> are:
-
- - 0 :: unspecified error (identically to a missing CODE)
- - 1 :: canceled
- - 2 :: bad PIN
-
-*** SC_OP_SUCCESS
- A smart card operaion succeeded. This status is only printed for
- certain operation and is mostly useful to check whether a PIN
- change really worked.
-
-** Miscellaneous status codes
-*** NODATA <what>
- No data has been found. Codes for WHAT are:
-
- - 1 :: No armored data.
- - 2 :: Expected a packet but did not found one.
- - 3 :: Invalid packet found, this may indicate a non OpenPGP
- message.
- - 4 :: Signature expected but not found
-
- You may see more than one of these status lines.
-
-*** UNEXPECTED <what>
- Unexpected data has been encountered. Codes for WHAT are:
- - 0 :: Not further specified
-
-*** TRUNCATED <maxno>
- The output was truncated to MAXNO items. This status code is
- issued for certain external requests.
-
-*** ERROR <error location> <error code> [<more>]
- This is a generic error status message, it might be followed by
- error location specific data. <error code> and <error_location>
- should not contain spaces. The error code is a either a string
- commencing with a letter or such a string prefixed with a
- numerical error code and an underscore; e.g.: "151011327_EOF".
-
-*** SUCCESS [<location>]
- Postive confirimation that an operation succeeded. <location> is
- optional but if given should not contain spaces. Used only with a
- few commands.
-
-*** BADARMOR
- The ASCII armor is corrupted. No arguments yet.
-
-*** DELETE_PROBLEM <reason_code>
- Deleting a key failed. Reason codes are:
- - 1 :: No such key
- - 2 :: Must delete secret key first
- - 3 :: Ambigious specification
-
-*** PROGRESS <what> <char> <cur> <total>
- Used by the primegen and Public key functions to indicate
- progress. <char> is the character displayed with no --status-fd
- enabled, with the linefeed replaced by an 'X'. <cur> is the
- current amount done and <total> is amount to be done; a <total> of
- 0 indicates that the total amount is not known. The condition
- : TOTAL && CUR == TOTAL
- may be used to detect the end of an operation.
-
- Well known values for WHAT are:
-
- - pk_dsa :: DSA key generation
- - pk_elg :: Elgamal key generation
- - primegen :: Prime generation
- - need_entropy :: Waiting for new entropy in the RNG
- - tick :: Generic tick without any special meaning - useful
- for letting clients know that the server is still
- working.
- - starting_agent :: A gpg-agent was started because it is not
- running as a daemon.
- - learncard :: Send by the agent and gpgsm while learing
- the data of a smartcard.
- - card_busy :: A smartcard is still working
-
-*** BACKUP_KEY_CREATED <fingerprint> <fname>
- A backup of a key identified by <fingerprint> has been writte to
- the file <fname>; <fname> is percent-escaped.
-
-*** MOUNTPOINT <name>
- <name> is a percent-plus escaped filename describing the
- mountpoint for the current operation (e.g. used by "g13 --mount").
- This may either be the specified mountpoint or one randomly
- choosen by g13.
-
-*** PINENTRY_LAUNCHED <pid>
- This status line is emitted by gpg to notify a client that a
- Pinentry has been launched. <pid> is the PID of the Pinentry. It
- may be used to display a hint to the user but can't be used to
- synchronize with Pinentry. Note that there is also an Assuan
- inquiry line with the same name used internally or, if enabled,
- send to the client instead of this status line. Such an inquiry
- may be used to sync with Pinentry
-
-** Obsolete status codes
-*** SIGEXPIRED
- Removed on 2011-02-04. This is deprecated in favor of KEYEXPIRED.
-*** RSA_OR_IDEA
- Obsolete. This status message used to be emitted for requests to
- use the IDEA or RSA algorithms. It has been dropped from GnuPG
- 2.1 after the respective patents expired.
-*** SHM_INFO, SHM_GET, SHM_GET_BOOL, SHM_GET_HIDDEN
- These were used for the ancient shared memory based co-processing.
-*** BEGIN_STREAM, END_STREAM
- Used to issued by the experimental pipemode.
-
-
-* Format of the --attribute-fd output
-
- When --attribute-fd is set, during key listings (--list-keys,
- --list-secret-keys) GnuPG dumps each attribute packet to the file
- descriptor specified. --attribute-fd is intended for use with
- --status-fd as part of the required information is carried on the
- ATTRIBUTE status tag (see above).
-
- The contents of the attribute data is specified by RFC 4880. For
- convenience, here is the Photo ID format, as it is currently the
- only attribute defined:
-
- - Byte 0-1 :: The length of the image header. Due to a historical
- accident (i.e. oops!) back in the NAI PGP days, this
- is a little-endian number. Currently 16 (0x10 0x00).
-
- - Byte 2 :: The image header version. Currently 0x01.
-
- - Byte 3 :: Encoding format. 0x01 == JPEG.
-
- - Byte 4-15 :: Reserved, and currently unused.
-
- All other data after this header is raw image (JPEG) data.
-
-
-* Unattended key generation
-
- Please see the GnuPG manual for a description.
-
-
-* Layout of the TrustDB
-
- The TrustDB is built from fixed length records, where the first byte
- describes the record type. All numeric values are stored in network
- byte order. The length of each record is 40 bytes. The first record
- of the DB is always of type 1 and this is the only record of this
- type.
-
- FIXME: The layout changed, document it here.
-#+begin_example
- Record type 0:
- --------------
- Unused record, can be reused for any purpose.
-
- Record type 1:
- --------------
- Version information for this TrustDB. This is always the first
- record of the DB and the only one with type 1.
- 1 byte value 1
- 3 bytes 'gpg' magic value
- 1 byte Version of the TrustDB (2)
- 1 byte marginals needed
- 1 byte completes needed
- 1 byte max_cert_depth
- The three items are used to check whether the cached
- validity value from the dir record can be used.
- 1 u32 locked flags [not used]
- 1 u32 timestamp of trustdb creation
- 1 u32 timestamp of last modification which may affect the validity
- of keys in the trustdb. This value is checked against the
- validity timestamp in the dir records.
- 1 u32 timestamp of last validation [currently not used]
- (Used to keep track of the time, when this TrustDB was checked
- against the pubring)
- 1 u32 record number of keyhashtable [currently not used]
- 1 u32 first free record
- 1 u32 record number of shadow directory hash table [currently not used]
- It does not make sense to combine this table with the key table
- because the keyid is not in every case a part of the fingerprint.
- 1 u32 record number of the trusthashtbale
-
-
- Record type 2: (directory record)
- --------------
- Informations about a public key certificate.
- These are static values which are never changed without user interaction.
-
- 1 byte value 2
- 1 byte reserved
- 1 u32 LID . (This is simply the record number of this record.)
- 1 u32 List of key-records (the first one is the primary key)
- 1 u32 List of uid-records
- 1 u32 cache record
- 1 byte ownertrust
- 1 byte dirflag
- 1 byte maximum validity of all the user ids
- 1 u32 time of last validity check.
- 1 u32 Must check when this time has been reached.
- (0 = no check required)
-
-
- Record type 3: (key record)
- --------------
- Informations about a primary public key.
- (This is mainly used to lookup a trust record)
-
- 1 byte value 3
- 1 byte reserved
- 1 u32 LID
- 1 u32 next - next key record
- 7 bytes reserved
- 1 byte keyflags
- 1 byte pubkey algorithm
- 1 byte length of the fingerprint (in bytes)
- 20 bytes fingerprint of the public key
- (This is the value we use to identify a key)
-
- Record type 4: (uid record)
- --------------
- Informations about a userid
- We do not store the userid but the hash value of the userid because that
- is sufficient.
-
- 1 byte value 4
- 1 byte reserved
- 1 u32 LID points to the directory record.
- 1 u32 next next userid
- 1 u32 pointer to preference record
- 1 u32 siglist list of valid signatures
- 1 byte uidflags
- 1 byte validity of the key calculated over this user id
- 20 bytes ripemd160 hash of the username.
-
-
- Record type 5: (pref record)
- --------------
- This record type is not anymore used.
-
- 1 byte value 5
- 1 byte reserved
- 1 u32 LID; points to the directory record (and not to the uid record!).
- (or 0 for standard preference record)
- 1 u32 next
- 30 byte preference data
-
- Record type 6 (sigrec)
- -------------
- Used to keep track of key signatures. Self-signatures are not
- stored. If a public key is not in the DB, the signature points to
- a shadow dir record, which in turn has a list of records which
- might be interested in this key (and the signature record here
- is one).
-
- 1 byte value 6
- 1 byte reserved
- 1 u32 LID points back to the dir record
- 1 u32 next next sigrec of this uid or 0 to indicate the
- last sigrec.
- 6 times
- 1 u32 Local_id of signatures dir or shadow dir record
- 1 byte Flag: Bit 0 = checked: Bit 1 is valid (we have a real
- directory record for this)
- 1 = valid is set (but may be revoked)
-
-
-
- Record type 8: (shadow directory record)
- --------------
- This record is used to reserve a LID for a public key. We
- need this to create the sig records of other keys, even if we
- do not yet have the public key of the signature.
- This record (the record number to be more precise) will be reused
- as the dir record when we import the real public key.
-
- 1 byte value 8
- 1 byte reserved
- 1 u32 LID (This is simply the record number of this record.)
- 2 u32 keyid
- 1 byte pubkey algorithm
- 3 byte reserved
- 1 u32 hintlist A list of records which have references to
- this key. This is used for fast access to
- signature records which are not yet checked.
- Note, that this is only a hint and the actual records
- may not anymore hold signature records for that key
- but that the code cares about this.
- 18 byte reserved
-
-
-
- Record Type 10 (hash table)
- --------------
- Due to the fact that we use fingerprints to lookup keys, we can
- implement quick access by some simple hash methods, and avoid
- the overhead of gdbm. A property of fingerprints is that they can be
- used directly as hash values. (They can be considered as strong
- random numbers.)
- What we use is a dynamic multilevel architecture, which combines
- hashtables, record lists, and linked lists.
-
- This record is a hashtable of 256 entries; a special property
- is that all these records are stored consecutively to make one
- big table. The hash value is simple the 1st, 2nd, ... byte of
- the fingerprint (depending on the indirection level).
-
- When used to hash shadow directory records, a different table is used
- and indexed by the keyid.
-
- 1 byte value 10
- 1 byte reserved
- n u32 recnum; n depends on the record length:
- n = (reclen-2)/4 which yields 9 for the current record length
- of 40 bytes.
-
- the total number of such record which makes up the table is:
- m = (256+n-1) / n
- which is 29 for a record length of 40.
-
- To look up a key we use the first byte of the fingerprint to get
- the recnum from this hashtable and look up the addressed record:
- - If this record is another hashtable, we use 2nd byte
- to index this hash table and so on.
- - if this record is a hashlist, we walk all entries
- until we found one a matching one.
- - if this record is a key record, we compare the
- fingerprint and to decide whether it is the requested key;
-
-
- Record type 11 (hash list)
- --------------
- see hash table for an explanation.
- This is also used for other purposes.
-
- 1 byte value 11
- 1 byte reserved
- 1 u32 next next hash list record
- n times n = (reclen-5)/5
- 1 u32 recnum
-
- For the current record length of 40, n is 7
-
-
-
- Record type 254 (free record)
- ---------------
- All these records form a linked list of unused records.
- 1 byte value 254
- 1 byte reserved (0)
- 1 u32 next_free
-#+end_example
-
-
-* GNU extensions to the S2K algorithm
-
- S2K mode 101 is used to identify these extensions.
- After the hash algorithm the 3 bytes "GNU" are used to make
- clear that these are extensions for GNU, the next bytes gives the
- GNU protection mode - 1000. Defined modes are:
- - 1001 :: Do not store the secret part at all.
- - 1002 :: A stub to access smartcards (not used in 1.2.x)
-
-* Keyserver helper message format
-
- The keyserver may be contacted by a Unix Domain socket or via TCP.
-
- The format of a request is:
-#+begin_example
- command-tag
- "Content-length:" digits
- CRLF
-#+end_example
-
- Where command-tag is
-
-#+begin_example
- NOOP
- GET <user-name>
- PUT
- DELETE <user-name>
-#+end_example
-
-The format of a response is:
-
-#+begin_example
- "GNUPG/1.0" status-code status-text
- "Content-length:" digits
- CRLF
-#+end_example
-followed by <digits> bytes of data
-
-Status codes are:
-
- - 1xx :: Informational - Request received, continuing process
-
- - 2xx :: Success - The action was successfully received, understood,
- and accepted
-
- - 4xx :: Client Error - The request contains bad syntax or cannot be
- fulfilled
-
- - 5xx :: Server Error - The server failed to fulfill an apparently
- valid request
-
-
-* Object identifiers
-
- OIDs below the GnuPG arc:
-
-#+begin_example
- 1.3.6.1.4.1.11591.2 GnuPG
- 1.3.6.1.4.1.11591.2.1 notation
- 1.3.6.1.4.1.11591.2.1.1 pkaAddress
- 1.3.6.1.4.1.11591.2.2 X.509 extensions
- 1.3.6.1.4.1.11591.2.2.1 standaloneCertificate
- 1.3.6.1.4.1.11591.2.2.2 wellKnownPrivateKey
- 1.3.6.1.4.1.11591.2.12242973 invalid encoded OID
-#+end_example
-
-
-
-* Miscellaneous notes
-
-** v3 fingerprints
- For packet version 3 we calculate the keyids this way:
- - RSA :: Low 64 bits of n
- - ELGAMAL :: Build a v3 pubkey packet (with CTB 0x99) and
- calculate a RMD160 hash value from it. This is used
- as the fingerprint and the low 64 bits are the keyid.
-
-** Simplified revocation certificates
- Revocation certificates consist only of the signature packet;
- "--import" knows how to handle this. The rationale behind it is to
- keep them small.
-
-** Documentation on HKP (the http keyserver protocol):
-
- A minimalistic HTTP server on port 11371 recognizes a GET for
- /pks/lookup. The standard http URL encoded query parameters are
- this (always key=value):
-
- - op=index (like pgp -kv), op=vindex (like pgp -kvv) and op=get (like
- pgp -kxa)
-
- - search=<stringlist>. This is a list of words that must occur in the key.
- The words are delimited with space, points, @ and so on. The delimiters
- are not searched for and the order of the words doesn't matter (but see
- next option).
-
- - exact=on. This switch tells the hkp server to only report exact matching
- keys back. In this case the order and the "delimiters" are important.
-
- - fingerprint=on. Also reports the fingerprints when used with 'index' or
- 'vindex'
-
- The keyserver also recognizes http-POSTs to /pks/add. Use this to upload
- keys.
-
-
- A better way to do this would be a request like:
-
- /pks/lookup/<gnupg_formatierte_user_id>?op=<operation>
-
- This can be implemented using Hurd's translator mechanism.
- However, I think the whole key server stuff has to be re-thought;
- I have some ideas and probably create a white paper.