progs/key.c, progs/key.1: Fix option discrepancies.
[catacomb] / progs / key.1
... / ...
CommitLineData
1.\" -*-nroff-*-
2.ie t \{\
3. if \n(.g \{\
4. fam P
5. \}
6. ds ss \s8\u
7. ds se \d\s0
8. ds us \s8\d
9. ds ue \u\s0
10. ds *b \(*b
11.\}
12.el \{\
13. ds ss ^
14. ds se
15. ds us _
16. ds ue
17. ds *b \fIbeta\fP
18.\}
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..
31.TH key 1 "5 June 1999" "Straylight/Edgeware" "Catacomb cryptographic library"
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
44.B help
45.RI [ command ...]
46.br
47.B show
48.RI [ item ...]
49.br
50.B add
51.RB [ \-lqrLKS ]
52.RB [ \-a
53.IR alg ]
54.RB [ \-b | \-B
55.IR bits ]
56.RB [ \-E
57.IR pubexp ]
58.RB [ \-p
59.IR param ]
60.RB [ \-R
61.IR tag ]
62.br
63\h'8n'
64.RB [ \-A
65.IR seed-alg ]
66.RB [ \-s
67.IR seed ]
68.RB [ \-n
69.IR bits ]
70.br
71\h'8n'
72.RB [ \-e
73.IR expire ]
74.RB [ \-t
75.IR tag ]
76.RB [ \-c
77.IR comment ]
78.RB [ \-C
79.IR curve ]
80.br
81\h'8n'
82.I type
83.IR attr ...
84.br
85.B expire
86.IR tag ...
87.br
88.B delete
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 ]
98.br
99.B setattr
100.I tag
101.IR attr ...
102.br
103.B getattr
104.I tag
105.I attr
106.br
107.B lock
108.I qtag
109.br
110.B unlock
111.I qtag
112.br
113.B list
114.RB [ \-uqv ]
115.RB [ \-f
116.IR filter ]
117.RI [ tag ...]
118.br
119.B fingerprint
120.RB [ \-f
121.IR filter ]
122.RB [ \-p
123.IR style ]
124.RB [ \-a
125.IR hash ]
126.RI [ tag ...]
127.br
128.B verify
129.RB [ \-f
130.IR filter ]
131.RB [ \-p
132.IR style ]
133.RB [ \-a
134.IR hash ]
135.I tag
136.I fingerprint
137.br
138.B tidy
139.br
140.B extract
141.RB [ \-f
142.IR filter ]
143.I file
144.RI [ tag ...]
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
159.BR "\-h, \-\-help " [ \fIcommand ...]
160Writes a brief summary of
161.BR key 's
162various options to standard output, and
163returns a successful exit status. With command names, gives help on
164those commands.
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
174.BI "\-k, \-\-keyring " file
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
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
197.I deleted
198key cannot be looked up by keyid.
199.TP
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"
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
211characters, dots or colons. Applications use key types to obtain an
212arbitrary but suitable key for some purpose. An
213.I expired
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"
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
229.I structured
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.
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 ,
241.BR struct ,
242.BR ec ,
243.BR string ,
244or
245.B encrypt
246(describing the key encoding);
247.BR symmetric ,
248.BR private ,
249.BR public ,
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.
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
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
279applications, and will be removed from the keyring next time it's
280written to disk.
281.TP
282.B "comment"
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
287.B "attributes"
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
290attributes may have meaning for particular applications or key types;
291others may be assigned global meanings in future.
292.SH "COMMAND REFERENCE"
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
322and
323.B verify
324commands.
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
332The built-in Diffie\(enHellman groups which can be used with the
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.
349.TP
350.B fpres
351Fingerprint presentation styles, as used by the
352.B fingerprint
353and
354.B verify
355commands.
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
362.BI "\-a, \-\-algorithm " alg
363Selects a key generation algorithm. The default algorithm is
364.BR binary ;
365the different algorithms are described below. The command
366.B key show keygen
367lists the recognized key-generation algorithms.
368.TP
369.BI "\-b, \-\-bits " bits
370The length of the key to generate, in bits. The default, if this option
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
378Selects a key containing parameter values to copy.
379A new key also inherits attributes from its parameter key.
380.TP
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
426.BI "\-e, \-\-expire " expire
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
442.BI "\-c, \-\-comment " comment
443Sets a comment for the key. The default is not to attach a comment.
444.TP
445.BI "\-C, \-\-curve " curve-spec
446Use the elliptic curve described by
447.I curve-spec
448when generating elliptic curve parameters.
449.TP
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
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
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.
476.TP
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
485.BI "\-L, \-\-lim-lee"
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.
489.TP
490.BI "\-K, \-\-kcdsa"
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.
494.TP
495.BI "\-S, \-\-subgroup"
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."
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
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
537.IR ed \~\(==\~1
538(mod
539.RI lcm( p "\~\-\~1, " q \~\-\~1));
540and some other values useful for optimizing private-key operations:
541.IR q "\*(ss\-1\*(se mod " p ,
542.IR d "\~mod " p \~\-\~1,
543and
544.IR d "\~mod " q \~\-\~1.
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
563.IR p \~\-\~1
564and
565.IR p \~+\~1
566have large prime factors \(en call them
567.I r
568and
569.I s
570respectively \(en and
571.IR r \~\-\~1
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
582.B "dh-param"
583Generates parameters for use with the Diffie\(enHellman key exchange
584protocol, and many related systems, such as ElGamal encryption and
585signatures, and even DSA. (The separate DSA algorithm uses the
586generator described in FIPS186-1.)
587.IP
588The Diffie\(enHellman parameters are a prime modulus
589.I p
590and a generator
591.I g
592of a subgroup of
593.BR Z / \c
594.IB p Z
595of order
596.IR q .
597The
598.B \-b
599option controls the size of the modulus
600.IR p ;
601the default size is 1024 bits.
602.IP
603If no
604.I q
605size is selected using the
606.B \-B
607option and the Lim\(enLee prime options are disabled, then
608.I p
609is chosen to be a `safe' prime (i.e.,
610.IR p "\~= 2" q \~+\~1,
611with
612.I q
613prime). Finding safe primes takes a very long time. In this case, the
614value of
615.I g
616is fixed as 4.
617.IP
618If a size is chosen for
619.I q
620and Lim\(enLee primes are not selected then the prime
621.I q
622is generated and
623.I p
624is chosen so that
625.IR p \~\-\~1
626is a multiple of
627.IR q .
628.IP
629If the
630.B \-L
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,
636where the
637.IR q \*(us i \*(ue
638are primes at least as large as the setting given by the
639.B \-B
640option (or 256 bits, if no setting was given).
641.IP
642If the
643.B \-K
644option was given, KCDSA-style Lim\(enLee primes are selected: the
645parameters are chosen such that
646.IR p "\~= 2" qv \~+\~1,
647where
648.IR p,
649.I q
650and
651.I v
652are primes.
653.IP
654If the
655.B \-S
656or
657.B \-K
658options were given, the generator
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
665.RI ( p "\~\-\~1)/2\~= " q "\*(us0\*(ue " q \*(us1\*(ue
666.IR q \*(us2\*(ue\~...
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
673.B "key show dh"
674for a list) or a triple
675.RI ( p ,\~ q ,\~ g ).
676separated by commas. No random generation is done in this case: the
677given parameters are simply stored.
678.TP
679.B "dh"
680Generates a public/private key pair for use with offline Diffie\(enHellman,
681ElGamal, DSA or similar discrete-logarithm-based systems. It selects a
682private key
683.IR x \~<\~ q ,
684and computes the public key
685.IR y "\~= " g \*(ss x "\*(se mod\~" p .
686.TP
687.B "dsa-param"
688Generates parameters for the DSA algorithm. DSA parameters are also
689suitable for use with Diffie\(enHellman and ElGamal system.
690.IP
691The main difference between DSA and Diffie\(enHellman parameter generation
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"
716Generates a public/private key pair for DSA. As for Diffie\(enHellman
717keys, it selects a
718private key
719.IR x \~<\~ q ,
720and computes the public key
721.IR y "\~= " g \*(ss x "\*(se mod\~" p .
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 ,
732both congruent to 3 (mod\~4), and their product
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
750.RI ( p \~\-\~1)/2
751and
752.RI ( q \~\-\~1)/2
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.
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
775.B "key show ec"
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" ,
790.BR "binpoly" ,
791.or
792.BR "binnorm" ;
793an optional
794.RB ` : ';
795the field modulus
796.IR p ;
797if the field type is
798.B binnorm
799then an optional
800.RB ` , '
801and the representation of the normal element \*(*b; an optional
802.RB ` ; ';
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
817.IR b
818which define the elliptic curve
819.IR E ,
820separated by an optional
821.RB ` , ';
822an optional
823.RB ` ; ';
824the
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
836of the group generated by
837.IR G ;
838an optional
839.RB ` * ';
840and the
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 .
858.TP
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
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
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
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
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.
894.SS "expire"
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
898.IR tag s.
899.SS "delete"
900Deletes keys immediately. The keys to delete are listed by their
901.IR tag s.
902Be careful when deleting keys. It might be a better idea
903to expire keys rather than deleting them.
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
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
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.
917.SS "setattr"
918Attaches attributes to a key. The key to which the attributes should be
919attached is given by its
920.IR tag .
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.
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.
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"
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.
958.TP
959.B "\-u, \-\-utc"
960Display key expiry times as UTC rather than using the local time zone.
961.TP
962.BI "\-f, \-\-filter " filter
963Specifies a filter. Only keys and key components which match the filter
964are listed.
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
970and deletion, key attributes, and a dump of the actual key data. If the
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!
974.SS "fingerprint"
975Reports a fingerprint (secure hash) on components of requested keys.
976The following options are supported:
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.
982.TP
983.BI "\-p, \-\-presentation " style
984Write fingerprints in the given
985.IR style .
986See below for a list of presentation styles.
987.TP
988.BI "\-a, \-\-algorithm " hash
989Names the hashing algorithm. Run
990.B key show hash
991for a list of hashing algorithms. The default is
992.BR rmd160 .
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
996the filter are fingerprinted. See
997.BR keyring (5)
998for a description of how key fingerprints are computed.
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.)
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
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
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
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.
1043.SS "tidy"
1044Simply reads the keyring from file and writes it back again. This has
1045the effect of removing any deleted keys from the file.
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,
1054which may be
1055.RB ` \- '
1056to designate standard output. The keys to extract are listed by their
1057tags; if no tags are given, all keys which match the filter are
1058extracted. The output is a valid keyring file.
1059.SS "merge"
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.
1067.SH "SEE ALSO"
1068.BR keyring (5).
1069.SH AUTHOR
1070Mark Wooding, <mdw@distorted.org.uk>