progs/key.c, progs/key.1: Fix option discrepancies.
[catacomb] / progs / key.1
CommitLineData
d03ab969 1.\" -*-nroff-*-
052b36d0 2.ie t \{\
8404fd75 3. if \n(.g \{\
4. fam P
5. \}
052b36d0 6. ds ss \s8\u
7. ds se \d\s0
1476eebc 8. ds us \s8\d
9. ds ue \u\s0
8404fd75 10. ds *b \(*b
052b36d0 11.\}
12.el \{\
13. ds ss ^
14. ds se
1476eebc 15. ds us _
8404fd75 16. ds ue
17. ds *b \fIbeta\fP
052b36d0 18.\}
c65df279 19.de VS
20.sp 1
21.RS
22.nf
23.ft B
24..
25.de VE
26.ft R
27.fi
28.RE
29.sp 1
30..
d07dfe80 31.TH key 1 "5 June 1999" "Straylight/Edgeware" "Catacomb cryptographic library"
d03ab969 32.SH NAME
33key \- simple key management system
34.SH SYNOPSIS
35.B key
36.RB [ \-k
37.IR keyring ]
38.I command
39.PP
40where
41.I command
42is one of:
43.PP
c65df279 44.B help
45.RI [ command ...]
46.br
47.B show
48.RI [ item ...]
49.br
d03ab969 50.B add
4e67e30b 51.RB [ \-lqrLKS ]
052b36d0 52.RB [ \-a
53.IR alg ]
54.RB [ \-b | \-B
d03ab969 55.IR bits ]
075439a7
MW
56.RB [ \-E
57.IR pubexp ]
052b36d0 58.RB [ \-p
59.IR param ]
d07dfe80 60.RB [ \-R
052b36d0 61.IR tag ]
62.br
63\h'8n'
c65df279 64.RB [ \-A
65.IR seed-alg ]
66.RB [ \-s
67.IR seed ]
68.RB [ \-n
69.IR bits ]
70.br
71\h'8n'
d03ab969 72.RB [ \-e
73.IR expire ]
052b36d0 74.RB [ \-t
75.IR tag ]
d03ab969 76.RB [ \-c
77.IR comment ]
eb31b00e 78.RB [ \-C
79.IR curve ]
80.br
81\h'8n'
d03ab969 82.I type
83.IR attr ...
84.br
85.B expire
052b36d0 86.IR tag ...
d03ab969 87.br
88.B delete
052b36d0 89.IR tag ...
90.br
91.B tag
92.I tag
93.RI [ new-tag ]
94.br
95.B comment
96.I tag
97.RI [ comment ]
d03ab969 98.br
99.B setattr
052b36d0 100.I tag
d03ab969 101.IR attr ...
102.br
e9be047b 103.B getattr
104.I tag
105.I attr
106.br
052b36d0 107.B lock
108.I qtag
109.br
110.B unlock
111.I qtag
112.br
d03ab969 113.B list
052b36d0 114.RB [ \-uqv ]
115.RB [ \-f
116.IR filter ]
117.RI [ tag ...]
118.br
119.B fingerprint
120.RB [ \-f
121.IR filter ]
16810bbd
MW
122.RB [ \-p
123.IR style ]
b817bfc6 124.RB [ \-a
125.IR hash ]
052b36d0 126.RI [ tag ...]
d03ab969 127.br
58507325 128.B verify
129.RB [ \-f
130.IR filter ]
16810bbd
MW
131.RB [ \-p
132.IR style ]
58507325 133.RB [ \-a
134.IR hash ]
135.I tag
136.I fingerprint
137.br
d03ab969 138.B tidy
139.br
140.B extract
052b36d0 141.RB [ \-f
142.IR filter ]
d03ab969 143.I file
052b36d0 144.RI [ tag ...]
d03ab969 145.br
146.B merge
147.I file
148.SH DESCRIPTION
149The
150.B key
151command performs useful operations on Catacomb keyring files. It
152provides a number of subcommands, by which the various operations may be
153carried out.
154.SS "Global options"
155Before the command name,
156.I "global options"
157may be given. The following global options are supported:
158.TP
c65df279 159.BR "\-h, \-\-help " [ \fIcommand ...]
d03ab969 160Writes a brief summary of
161.BR key 's
162various options to standard output, and
c65df279 163returns a successful exit status. With command names, gives help on
164those commands.
d03ab969 165.TP
166.B "\-v, \-\-version"
167Writes the program's version number to standard output, and returns a
168successful exit status.
169.TP
170.B "\-u, \-\-usage"
171Writes a very terse command line summary to standard output, and returns
172a successful exit status.
173.TP
c9e31e42 174.BI "\-k, \-\-keyring " file
d03ab969 175Names the keyring file which
176.B key
177is to process. The default keyring, used if this option doesn't specify
178one, is the file named
179.B keyring
180in the current directory. The keyring must be stored in a regular file:
181pipes, sockets, devices etc. are not allowed.
182The
183.B key
184program attempts to lock the keyring before accessing it, using
185.BR fcntl (2)
186locking. It will however time out after a short while (10 seconds) and
187report a failure.
188.SS Concepts
189In addition to the actual key data itself, a Catacomb key has a number
190of other pieces of information attached to it:
191.TP
052b36d0 192.B "keyid"
193Every key has a 32-bit identifying number, written in hexadecimal.
194Keyids are not actually related to the key contents: they're generated
195randomly. Applications use keyids to refer to specific keys; users are
196probably better off with tags and types. A
d03ab969 197.I deleted
198key cannot be looked up by keyid.
199.TP
052b36d0 200.B "tag"
201A key's tag is a unique string which can be used by users and
202applications to identify the key. Tag strings may not contain spaces,
203colons or dots. A
204.I deleted
205key cannot be looked up by tag. Whenever a tag name is wanted, a hex
206keyid or key type string can be given instead.
207.TP
208.B "type"
d03ab969 209A key's type string describes what the key may be used for. The type
210string is arbitrary, except that it may not contain whitespace
052b36d0 211characters, dots or colons. Applications use key types to obtain an
212arbitrary but suitable key for some purpose. An
d03ab969 213.I expired
052b36d0 214key cannot be looked up by type, but may be looked up by keyid or tag.
215.TP
216.B "key encoding"
217There are a number of different ways in which keys can be represented,
218according to the uses to which the key will be put. Most symmetric
219algorithms use
220.I binary
221keys. Keys used with number-theoretic systems (like most common
222public-key systems) use
223.I "multiprecision integer"
8404fd75 224keys. Elliptic curve systems use
225.I "curve point"
226keys, which are either a pair of integers representing field elements,
227or a `point at infinity'. Algorithms which require several key
228constituents (again, like most public-key systems) use
052b36d0 229.I structured
8404fd75 230keys, which consist of a collection of named parts. It's possible to
231store an
232.I "ASCII string"
233as a key, though this is usually done as a component of a structured
234key. Finally, keys (including structured keys) can be encrypted.
052b36d0 235.TP
236.B "filter"
237Keys and key components may be selected by a filter expression, a
238sequence of flag names separated by commas. Flags are:
239.BR binary ,
240.BR integer ,
8404fd75 241.BR struct ,
242.BR ec ,
243.BR string ,
052b36d0 244or
245.B encrypt
246(describing the key encoding);
247.BR symmetric ,
248.BR private ,
8404fd75 249.BR public ,
052b36d0 250or
251.B shared
252(describing the category of key);
253.B burn
254and its negation
255.B \-burn
256(whether the key should be erased from memory after use); and
257.B secret
258and its negation
259.B \-secret
260(whether the key is safe to divulge).
261.TP
262.B "qualified tag"
263A key component may be identified by the key's tag (or keyid, or type).
264Subcomponents of structured keys are identified by following the tag by
265a dot and the name of the subcomponent.
d03ab969 266.TP
267.B "expiry time"
268Most keys expire after a certain amount of time. Once a key has
269expired, it will no longer be chosen as a result of a lookup by key
270type. However, it is not deleted until its deletion time is also
271reached.
272.TP
273.B "deletion time"
274A key's deletion time is the latest expiry time of any of the objects
275which require that key. For example, a key used for authenticating
276cryptographic cookies should have its deletion time set to the longest
052b36d0 277expiry time of any of the cookies it can authenticate. Once a key's
278deletion time is passed, it can no longer be referred to by
d03ab969 279applications, and will be removed from the keyring next time it's
280written to disk.
281.TP
052b36d0 282.B "comment"
d03ab969 283A key may be given a comment when it's created. The comment is for the
284benefit of users, and isn't interpreted by applications at all.
285(Hopefully.)
286.TP
052b36d0 287.B "attributes"
ef3b232f
MW
288A key has zero or more name/value pairs. The names and values are
289arbitrary strings, except that they may not contain null bytes. Some
d03ab969 290attributes may have meaning for particular applications or key types;
291others may be assigned global meanings in future.
292.SH "COMMAND REFERENCE"
c65df279 293.SS help
294The
295.B help
296command behaves exactly as the
297.B \-\-help
298option. With no arguments, it shows an overview of
299.BR key 's
300options; with arguments, it describes the named subcommands.
301.SS show
302The
303.B show
304command prints various lists of tokens understood by
305.BR key .
306With no arguments, it prints all of the lists; with arguments, it prints
307just the named lists, in order. The recognized lists can be enumerated
308using the
309.VS
310key show list
311.VE
312command. The lists are as follows.
313.TP
314.B list
315The lists which can be enumerated by the
316.B show
317command.
318.TP
319.B hash
320The hash functions which can be used with the
321.B fingerprint
58507325 322and
323.B verify
324commands.
c65df279 325.TP
326.B ec
327The built-in elliptic curves which can be used with the
328.B add \-a ec
329command.
330.TP
331.B dh
ef3b232f 332The built-in Diffie\(enHellman groups which can be used with the
c65df279 333.B add \-a dh
334command.
335.TP
336.B keygen
337The key-generation algorithms which are acceptable to the
338.B \-a
339option of the
340.B add
341command.
342.TP
343.B seed
344The pseudorandom generators which are acceptable to the
345.B \-s
346option of the
347.B add
348command.
16810bbd
MW
349.TP
350.B fpres
351Fingerprint presentation styles, as used by the
352.B fingerprint
353and
354.B verify
355commands.
d03ab969 356.SS add
357The
358.B add
359command creates a new key and adds it to the keyring. The command
360accepts the following options:
361.TP
052b36d0 362.BI "\-a, \-\-algorithm " alg
363Selects a key generation algorithm. The default algorithm is
364.BR binary ;
c65df279 365the different algorithms are described below. The command
366.B key show keygen
367lists the recognized key-generation algorithms.
052b36d0 368.TP
c9e31e42 369.BI "\-b, \-\-bits " bits
d03ab969 370The length of the key to generate, in bits. The default, if this option
052b36d0 371is not supplied, depends on the key-generation algorithm.
372.TP
373.BI "\-B, \-\-qbits " bits
374The length of the subsidiary key or parameter, in bits. Not all
375key-generation algorithms have a subsidiary key size.
376.TP
377.BI "\-p, \-\-parameters " tag
7532e25e
MW
378Selects a key containing parameter values to copy.
379A new key also inherits attributes from its parameter key.
d03ab969 380.TP
c65df279 381.BI "\-A, \-\-seedalg " seed-alg
382Use the deterministic random number generator algorithm
383.I seed-alg
384to generate the key. Use
385.I before
386the
387.B \-s
388or
389.B \-n
390options; without one of these,
391.B \-A
392has no effect. The default algorithm is
393.BR rmd160-mgf .
394The command
395.B key show seed
396shows a list of recognized seeding algorithms. The seeding algorithm
397used to generate a key is recorded as the key's
398.B seedalg
399attribute.
400.TP
401.BI "\-s, \-\-seed " seed
402Generate the key deterministically using the given
403.IR seed ,
404which should be a Base64-encoded binary string. This is mainly useful
405for parameters keys (types
406.BR dsa-param
407and
408.BR dh-param ),
409to demonstrate that a set of parameters has been generated in an honest
410fashion. The
411.B dsarand
412generation algorithm can be used to generate
413.B dsa-param
414keys as required by FIPS186. The requested seed is recorded,
415Base64-encoded, as the new key's
416.B seed
417attribute.
418.TP
419.BI "\-n, \-\-newseed " bits
420Generate a new seed, with the given length in
421.IR bits .
422The generated seed is recorded, Base64-encoded, as the new key's
423.B seed
424attribute.
425.TP
c9e31e42 426.BI "\-e, \-\-expire " expire
d03ab969 427The expiry date for the generated key. This may be the string
428.RB ` forever '
429if the key should never expire automatically, or any date acceptable to
430the
431.BR getdate (3)
432library function. Briefly,
433.B getdate
434understands absolute dates such as
435.RB ` 1999-08-02 '
436or
437.RB ` "August 2nd, 1999" ',
438and (perhaps more usefully) relative dates such as
439.RB ` "+2 weeks" '.
440The default is to allow a 2 week expiry, which isn't useful.
441.TP
c9e31e42 442.BI "\-c, \-\-comment " comment
d03ab969 443Sets a comment for the key. The default is not to attach a comment.
052b36d0 444.TP
eb31b00e 445.BI "\-C, \-\-curve " curve-spec
446Use the elliptic curve described by
447.I curve-spec
448when generating elliptic curve parameters.
449.TP
052b36d0 450.BI "\-t, \-\-tag " tag
451Selects a tag string for the key. The default is not to set a tag. It
452is an error to select a tag which already exists.
453.TP
d07dfe80 454.BI "\-r, \-\-retag"
455If a
456.B \-t
457option is given, remove this tag from any key which already has it.
458.TP
459.BI "\-R, \-\-rand-id " tag
052b36d0 460Selects the key to use for the random number generator. Catacomb's
461random number generator can be
462.IR keyed ,
463so that, even if the inputs to the generator are compromised, knowledge
464of the key is also necessary to be able to predict the output. By
465default, the latest-expiring key with type
466.B catacomb-rand
467is used, if present; if not, no key is used.
468.TP
469.BI "\-l, \-\-lock"
470Requests that the secret parts of the newly-generated key be encrypted
471using a passphrase.
472.TP
473.BI "\-q, \-\-quiet"
474Suppresses the progress indication which is usually generated while
475time-consuming key generation tasks are being performed.
1476eebc 476.TP
8de0fc89
MW
477.BI "\-E, \-\-public-exponent"
478Set the public exponent for RSA keys.
479The default is 65537,
480because this seems to be the overwhelmingly popular choice
481among practitioners
482and because it was the exponent used before this option was introduced.
483The value 3 is fine unless you use a completely terrible padding scheme.
484.TP
4e67e30b 485.BI "\-L, \-\-lim-lee"
ef3b232f
MW
486When generating Diffie\(enHellman parameters, generate a Lim\(enLee
487prime rather than a random (or safe) prime. See the details on
488Diffie\(enHellman key generation below.
1476eebc 489.TP
4e67e30b 490.BI "\-K, \-\-kcdsa"
ef3b232f
MW
491When generating Diffie\(enHellman parameters, generate a KCDSA-style
492Lim\(enLee prime rather than a random (or safe) prime. See the details
493on Diffie\(enHellman key generation below.
4e67e30b
MW
494.TP
495.BI "\-S, \-\-subgroup"
ef3b232f
MW
496When generating Diffie\(enHellman parameters with a Lim\(enLee prime,
497choose a generator of a prime-order subgroup rather than a subgroup of
498order
499.RI ( p "\ \-\ 1)/2."
d03ab969 500.PP
501The key's type is given by the required
502.I type
503argument. Following the type are zero or more attributes, which are
504attached to the key in the same way as for the
505.B setattr
506command.
507.PP
052b36d0 508The key-generation algorithms supported are as follows:
509.TP
510.B "binary"
511Generates a plain binary key of the requested length. If the requested
512key length is not a multiple of eight, the high-order bits of the first
513octet of the key are zeroed. The default key length is 128 bits.
514.TP
515.B "des"
516Generates a DES key, with parity bits. The key length must be 56, 112
517or 168; the default is 56. The low-order bit of each octet is ignored by
518the DES algorithm; it is used to give each octet odd parity.
519.TP
520.B "rsa"
521Generates a public/private key pair for use with the RSA algorithm.
522.IP
523The key components are
524.I p
525and
526.IR q ,
527a pair of prime numbers;
528.IR n ,
529the product of
530.I p
531and
532.IR q ;
533.IR e ,
534the public exponent;
535.IR d ,
536the private exponent, chosen such that
ef3b232f 537.IR ed \~\(==\~1
052b36d0 538(mod
ef3b232f 539.RI lcm( p "\~\-\~1, " q \~\-\~1));
052b36d0 540and some other values useful for optimizing private-key operations:
ef3b232f
MW
541.IR q "\*(ss\-1\*(se mod " p ,
542.IR d "\~mod " p \~\-\~1,
052b36d0 543and
ef3b232f 544.IR d "\~mod " q \~\-\~1.
052b36d0 545The values
546.I n
547and
548.I e
549constitute the public key; the rest must be kept secret. The key size
550requested by the
551.B \-b
552option determines the size of the modulus
553.IR n ;
554the default is 1024 bits.
555.IP
556The key generation algorithm chooses
557.I p
558and
559.I q
560to be
561.I strong
562primes: both
ef3b232f 563.IR p \~\-\~1
052b36d0 564and
ef3b232f
MW
565.IR p \~+\~1
566have large prime factors \(en call them
052b36d0 567.I r
568and
569.I s
ef3b232f
MW
570respectively \(en and
571.IR r \~\-\~1
052b36d0 572also has a large prime factor;
573.I q
574has similar properties.
575.IP
576The modulus
577.I n
578cannot be sensibly used as a shared parameter, since knowledge of
579corrssponding public and private exponents is sufficient to be able to
580factor the modulus and recover other users' private keys.
581.TP
eb31b00e 582.B "dh-param"
ef3b232f 583Generates parameters for use with the Diffie\(enHellman key exchange
052b36d0 584protocol, and many related systems, such as ElGamal encryption and
1476eebc 585signatures, and even DSA. (The separate DSA algorithm uses the
586generator described in FIPS186-1.)
587.IP
ef3b232f 588The Diffie\(enHellman parameters are a prime modulus
1476eebc 589.I p
052b36d0 590and a generator
591.I g
1476eebc 592of a subgroup of
593.BR Z / \c
594.IB p Z
595of order
596.IR q .
597The
052b36d0 598.B \-b
1476eebc 599option controls the size of the modulus
052b36d0 600.IR p ;
1476eebc 601the default size is 1024 bits.
602.IP
45c0fd36 603If no
052b36d0 604.I q
1476eebc 605size is selected using the
052b36d0 606.B \-B
ef3b232f 607option and the Lim\(enLee prime options are disabled, then
1476eebc 608.I p
609is chosen to be a `safe' prime (i.e.,
ef3b232f 610.IR p "\~= 2" q \~+\~1,
1476eebc 611with
612.I q
8404fd75 613prime). Finding safe primes takes a very long time. In this case, the
614value of
1476eebc 615.I g
616is fixed as 4.
617.IP
618If a size is chosen for
619.I q
ef3b232f 620and Lim\(enLee primes are not selected then the prime
1476eebc 621.I q
622is generated and
623.I p
624is chosen so that
ef3b232f 625.IR p \~\-\~1
1476eebc 626is a multiple of
627.IR q .
628.IP
629If the
630.B \-L
ef3b232f
MW
631option was given, Lim\(enLee primes are selected: the parameters are
632chosen such that
633.IR p "\~= 2\~" q \*(us0\*(ue
634.IR q \*(us1\*(ue
635.IR q \*(us2\*(ue\~...\~+\~1,
1476eebc 636where the
ef3b232f 637.IR q \*(us i \*(ue
1476eebc 638are primes at least as large as the setting given by the
639.B \-B
640option (or 256 bits, if no setting was given).
052b36d0 641.IP
1476eebc 642If the
45c0fd36 643.B \-K
ef3b232f 644option was given, KCDSA-style Lim\(enLee primes are selected: the
4e67e30b 645parameters are chosen such that
ef3b232f 646.IR p "\~= 2" qv \~+\~1,
4e67e30b 647where
45c0fd36 648.IR p,
4e67e30b
MW
649.I q
650and
651.I v
652are primes.
653.IP
654If the
1476eebc 655.B \-S
4e67e30b
MW
656or
657.B \-K
658options were given, the generator
1476eebc 659.I g
660is chosen to generate the subgroup of order
661.IR q \*(us0\*(ue;
662otherwise,
663.I g
664will generate the group of order
ef3b232f
MW
665.RI ( p "\~\-\~1)/2\~= " q "\*(us0\*(ue " q \*(us1\*(ue
666.IR q \*(us2\*(ue\~...
8404fd75 667.IP
668Finally, the
669.B \-C
670option can be given, in which case the parameters are taken directly
671from the provided group specification, which may either be the the name
672of one of the built-in groups (say
58507325 673.B "key show dh"
8404fd75 674for a list) or a triple
ef3b232f 675.RI ( p ,\~ q ,\~ g ).
8404fd75 676separated by commas. No random generation is done in this case: the
677given parameters are simply stored.
052b36d0 678.TP
679.B "dh"
ef3b232f 680Generates a public/private key pair for use with offline Diffie\(enHellman,
052b36d0 681ElGamal, DSA or similar discrete-logarithm-based systems. It selects a
682private key
ef3b232f 683.IR x \~<\~ q ,
052b36d0 684and computes the public key
ef3b232f 685.IR y "\~= " g \*(ss x "\*(se mod\~" p .
052b36d0 686.TP
687.B "dsa-param"
688Generates parameters for the DSA algorithm. DSA parameters are also
ef3b232f 689suitable for use with Diffie\(enHellman and ElGamal system.
052b36d0 690.IP
ef3b232f 691The main difference between DSA and Diffie\(enHellman parameter generation
052b36d0 692is thatthe DSA parameter generation
693algorithm creates a
694.I seed
695from which the parameters are derived, and, assuming that the SHA-1 hash
696function is strong, it's not feasible to construct a seed from which
697deliberately weak parameters are derived. The algorithm used is the one
698described in the DSA standard, FIPS\ 186, extended only to allow
699sequential search for a prime
700.I q
701and to allow arbitrary parameter sizes. The seed is stored,
702Base64-encoded, as the value of the attribute
703.BR seed .
704.IP
705The default lengths for
706.I p
707and
708.I q
709are 768 and 160 bits respectively, since the DSA standard specifies that
710.I q
711be 160 bits, and the choice of 768 bits for
712.I p
713gives commensurate security.
714.TP
715.B "dsa"
ef3b232f 716Generates a public/private key pair for DSA. As for Diffie\(enHellman
052b36d0 717keys, it selects a
718private key
ef3b232f 719.IR x \~<\~ q ,
052b36d0 720and computes the public key
ef3b232f 721.IR y "\~= " g \*(ss x "\*(se mod\~" p .
052b36d0 722.TP
723.B "bbs"
724Generates a public/private key pair for the Blum-Blum-Shub random-number
725generator, and the Blum-Goldwasser semantically-secure public-key
726encryption system.
727.IP
728The key components are prime numbers
729.I p
730and
731.IR q ,
ef3b232f 732both congruent to 3 (mod\~4), and their product
052b36d0 733.IR n .
734The public key is simply the modulus
735.IR n ;
736the factors
737.I p
738and
739.I q
740are the private key.
741.IP
742The key-generation algorithm ensures that the two primes
743.I p
744and
745.I q
746are
747.I strong
748(see the discussion of strong primes above, in the section on RSA keys),
749and that
ef3b232f 750.RI ( p \~\-\~1)/2
052b36d0 751and
ef3b232f 752.RI ( q \~\-\~1)/2
052b36d0 753are relatively prime, giving a maximum possible period length.
754.IP
755The key size requested by the
756.B \-b
757option determines the length of the modulus
758.IR n ;
759the default length is 1024 bits.
eb31b00e 760.TP
761.B "ec-param"
762Store an elliptic curve specification. If no explicit
763.I curve-spec
764is given (the
765.RB ` \-C '
766option) then a curve is chosen whose order is about the size given by the
767.RB ` \-b '
768option (default is 256 bits).
769.IP
770A
771.I curve-spec
772can be given explicitly (in which case
773.RB ` \-b '
774is ignored). It can either be the name of a built-in curve (say
58507325 775.B "key show ec"
eb31b00e 776for a list of curve names) or a full specification. The curve is
777checked for correctness and security according to the SEC1
778specification: failed checks cause a warning to be issued to standard
779error (though the program continues anyway). The check can be
780suppressed using the
781.RB ` \-q '
782option.
783.IP
784A curve specification consists of the following elements optionally
785separated by whitespace: a
786.IR "field type" ,
787which is one of
788.BR "prime" ,
789.BR "niceprime" ,
8404fd75 790.BR "binpoly" ,
791.or
792.BR "binnorm" ;
eb31b00e 793an optional
794.RB ` : ';
795the field modulus
796.IR p ;
8404fd75 797if the field type is
798.B binnorm
799then an optional
800.RB ` , '
801and the representation of the normal element \*(*b; an optional
20095408 802.RB ` ; ';
eb31b00e 803a
804.IR "curve type" ,
805which is one of
806.BR "prime" ,
807.BR "primeproj" ,
808.BR "bin" ,
809and
810.BR "binproj"
811(the `proj' types currently have much better performance);
812an optional
813.RB ` : ';
814the two field-element parameters
815.I a
816and
45c0fd36 817.IR b
eb31b00e 818which define the elliptic curve
819.IR E ,
820separated by an optional
821.RB ` , ';
822an optional
20095408 823.RB ` ; ';
45c0fd36 824the
eb31b00e 825.IR x -
826and
827.IR y -coordinates
828of the generator point
829.IR G ,
830separated by an optional
831.RB ` , ';
832an optional
833.RB ` : ';
834the order
835.I r
45c0fd36 836of the group generated by
eb31b00e 837.IR G ;
838an optional
839.RB ` * ';
45c0fd36 840and the
eb31b00e 841.I cofactor
842.I h
843=
844.RI # E / r .
845.TP
846.B "ec"
847Generate a private scalar and a corresponding public point on an
848elliptic curve. See
849.B ec-param
850above for how to specify elliptic curve parameter sets. The scalar
851.I x
852is chosen unformly between 0 and the curve order
853.IR r ;
854the public point is then
855.I x
856\(mu
857.IR G .
7532e25e 858.TP
fc2d44af
MW
859.B x25519
860Generate a private scalar and a corresponding public point on the
861(Montgomery-form) Curve25519 elliptic curve.
862The scalar is simply a random 256-bit string;
863the public key is the
864.IR x -coordinate
865of the corresponding point.
866.TP
643eb1bb
MW
867.B x448
868Generate a private scalar and a corresponding public point on the
869(Montgomery-form) Ed448-Goldilocks elliptic curve.
870The scalar is simply a random 256-bit string;
871the public key is the
872.IR x -coordinate
873of the corresponding point.
874.TP
d56fd9d1
MW
875.B ed25519
876Generate a private key and a corresponding public point on the
877(twisted Edwards-form) Curve25519 elliptic curve.
878The private key is simply a random 256-bit string,
879from which a scalar and secret prefix are derived;
880the public key is the compressed form of the corresponding point.
881.TP
c578d5d8
MW
882.B ed448
883Generate a private key and a corresponding public point on the
884(Edwards-form) Ed448-Goldilocks elliptic curve.
885The private key is simply a random 456-bit string,
886from which a scalar and secret prefix are derived;
887the public key is the compressed form of the corresponding point.
888.TP
7532e25e
MW
889.B empty
890Generate an empty key, with trivial contents.
891This is useful as a `parameters' key,
892carrying attributes to be applied to other keys
893if they don't require more detailed parameters.
052b36d0 894.SS "expire"
d03ab969 895Forces keys to immediately expire. An expired key is not chosen when a
896program requests a key by its type. The keys to expire are listed by
897their
052b36d0 898.IR tag s.
899.SS "delete"
d03ab969 900Deletes keys immediately. The keys to delete are listed by their
052b36d0 901.IR tag s.
d03ab969 902Be careful when deleting keys. It might be a better idea
903to expire keys rather than deleting them.
052b36d0 904.SS "tag"
905Sets, deletes or changes the tag attached to a key. The first tag or
906keyid names the key to be modified; the second, if present specifies the
907new tag to be set. If no second argument is given, the existing tag, if
d07dfe80 908any, is removed and no new tag is set. It is an error to set a tag
909which already exists on another key, unless you give the
910.B \-r
2face0de
MW
911option.
912.PP
913The following options are recognized.
914.TP
915.B "\-r, \-\-retag"
916Untag the existing key with the desired new tag, if any.
052b36d0 917.SS "setattr"
d03ab969 918Attaches attributes to a key. The key to which the attributes should be
919attached is given by its
052b36d0 920.IR tag .
d03ab969 921Each attribute has the form
922.IB name = value\fR.
923An attribute can be deleted by assigning it an empty value. Although
924the keyring file format is capable of representing an attribute with an
925empty value as distinct from a nonexistant attribute, this interface
926does not allow empty attributes to be set.
e9be047b 927.SS "getattr"
928Fetches a single attribute of a key. The key whose attribute is to be
929read is given by its
930.IR tag .
931The attribute's value is written to standard output followed by a
932newline. If the key or attribute is absent, a message is written to
933standard error and the program exits nonzero.
052b36d0 934.SS "comment"
935Sets, deletes or changes the comment attached to a key. The first
936argument is a key tag or keyid which names the key to be modified; the
937second, if present, is the new comment. If no second argument is given,
938the existing comment, if any, is removed, and no new comment is set.
939.SS "lock"
940Locks a key or key component using a passphrase. If the key is already
941locked, the existing passphrase is requested, and a new passphrase is
942set.
943.SS "unlock"
944Unlocks a passphrase-locked key or key component. If the key is not
945locked, an error is reported.
946.SS "list"
d03ab969 947Lists the keys in the keyring. A couple of options are supported:
948.TP
949.B "\-v, \-\-verbose"
950Increases the amount of information displayed for each key. Repeat for
951a greater effect.
952.TP
953.B "\-q, \-\-quiet"
954Decreases the amount of information displayed for each key. Each use
955cancels a
956.RB ` \-v '
957option.
c9e31e42 958.TP
959.B "\-u, \-\-utc"
960Display key expiry times as UTC rather than using the local time zone.
052b36d0 961.TP
962.BI "\-f, \-\-filter " filter
963Specifies a filter. Only keys and key components which match the filter
964are listed.
d03ab969 965.PP
966By default, a single line of output is generated for each, showing
967keyids, types, expiry and deletion dates, and comments. Additional
968.RB ` \-v '
969options show more information, such as the exact time of day for expiry
052b36d0 970and deletion, key attributes, and a dump of the actual key data. If the
d5d89214
MW
971verbosity level is sufficiently high, secret parts of keys are printed,
972and passphrases are requested to decrypt locked keys. Make sure nobody
973is looking over your shoulder when you do this!
052b36d0 974.SS "fingerprint"
975Reports a fingerprint (secure hash) on components of requested keys.
58507325 976The following options are supported:
052b36d0 977.TP
978.BI "\-f, \-\-filter " filter
979Specifies a filter. Only keys and key components which match the filter
980are fingerprinted. The default is to only fingerprint nonsecret
981components.
b817bfc6 982.TP
16810bbd
MW
983.BI "\-p, \-\-presentation " style
984Write fingerprints in the given
985.IR style .
986See below for a list of presentation styles.
987.TP
b817bfc6 988.BI "\-a, \-\-algorithm " hash
989Names the hashing algorithm. Run
58507325 990.B key show hash
b817bfc6 991for a list of hashing algorithms. The default is
992.BR rmd160 .
052b36d0 993.PP
994The keys to be fingerprinted are named by their tags or keyids given as
995command line arguments. If no key tags are given, all keys which match
b817bfc6 996the filter are fingerprinted. See
997.BR keyring (5)
998for a description of how key fingerprints are computed.
16810bbd
MW
999.PP
1000The fingerprint may be shown in the following styles.
1001.TP
1002.B hex
1003Lowercase hexadecimal, with groups of eight digits separated by hyphens
1004(`\-'). This is the default presentation style. (On input, colons are
1005also permitted as separators.)
1006.TP
1007.B base32
1008Lowercase Base32 encoding, without `=' padding, with groups of six
1009digits separated by colons (`:'). (On input, padding characters are
1010ignored.)
58507325 1011.SS "verify"
1012Check a key's fingerprint against a reference copy. The following
1013options are supported:
1014.TP
1015.BI "\-f, \-\-filter " filter
1016Specifies a filter. Only key components which match the filter are
1017hashed. The default is to only fingerprint nonsecret components. An
1018error is reported if no part of the key matches.
1019.TP
16810bbd
MW
1020.BI "\-p, \-\-presentation " style
1021Expect the
1022.I fingerprint
1023to be in the given presentation
1024.IR style .
1025These match the styles produced by the
1026.B fingerprint
1027command described above.
1028.TP
58507325 1029.BI "\-a, \-\-algorithm " hash
1030Names the hashing algorithm. Run
1031.B key show hash
1032for a list of hashing algorithms. The default is
1033.BR rmd160 .
1034.PP
16810bbd
MW
1035The fingerprint should be provided in the form printed by the
1036.B fingerprint
1037command, using the same presentation
1038.IR style .
1039A little flexibility is permitted: separators may be placed anywhere (or
1040not at all) and are ignored; whitespace is permitted and ignored; and
1041case is ignored in presentation styles which don't make use of both
1042upper- and lower-case characters.
052b36d0 1043.SS "tidy"
d03ab969 1044Simply reads the keyring from file and writes it back again. This has
1045the effect of removing any deleted keys from the file.
052b36d0 1046.SS "extract"
1047Writes a selection of keys to a file. An option is supported:
1048.TP
1049.BI "\-f, \-\-filter " filter
1050Specifies a filter. Only keys and key components which match the filter
1051are written.
1052.PP
1053Keys extracted are written to the file named by the first argument,
d03ab969 1054which may be
1055.RB ` \- '
1056to designate standard output. The keys to extract are listed by their
052b36d0 1057tags; if no tags are given, all keys which match the filter are
1058extracted. The output is a valid keyring file.
1059.SS "merge"
d03ab969 1060Merges the keys from the named
1061.IR file ,
1062which may be
1063.RB ` \- '
1064to designate standard input, with the keyring. Keys already in the
1065keyring are not overwritten: you must explicitly remove them first if
1066you want them to be replaced during the merge.
d03ab969 1067.SH "SEE ALSO"
1068.BR keyring (5).
1069.SH AUTHOR
f387fcb1 1070Mark Wooding, <mdw@distorted.org.uk>