math/fgoldi.[ch]: Implement the extra operations needed for Ed448.
[catacomb] / progs / catsign.1
1 .\" -*-nroff-*-
2 .de VS
3 .sp 1
4 .RS
5 .nf
6 .ft B
7 ..
8 .de VE
9 .ft R
10 .fi
11 .RE
12 .sp 1
13 ..
14 .ie t \{\
15 . if \n(.g \{\
16 . fam P
17 . \}
18 .\}
19 .de hP
20 .IP
21 .ft B
22 \h'-\w'\\$1\ 'u'\\$1\ \c
23 .ft P
24 ..
25 .ie t .ds o \(bu
26 .el .ds o o
27 .TH catsign 1 "17 March 2005" "Straylight/Edgeware" "Catacomb cryptographic library"
28 .SH NAME
29 catsign \- sign and verify messages
30 .SH SYNOPSIS
31 .B catsign
32 .RB [ \-k
33 .IR keyring ]
34 .I command
35 .PP
36 where
37 .I command
38 is one of:
39 .PP
40 .B help
41 .RI [ command ...]
42 .br
43 .B show
44 .RI [ item ...]
45 .br
46 .B sign
47 .RB [ \-adptC ]
48 .RB [ \-k
49 .IR tag ]
50 .RB [ \-f
51 .IR format ]
52 .RB [ \-o
53 .IR output ]
54 .RI [ file ]
55 .br
56 .B verify
57 .RB [ \-apquvC ]
58 .RB [ \-k
59 .IR tag ]
60 .RB [ \-f
61 .IR format ]
62 .RB [ \-t
63 .IR time ]
64 .br
65 \h'8n'
66 .RB [ \-o
67 .IR output ]
68 .RI [ file
69 .RI [ message ]]
70 .br
71 .B info
72 .RB [ \-a ]
73 .RB [ \-f
74 .IR format ]
75 .RI [ file ]
76 .br
77 .B format
78 .RB [ \-apuABDET ]
79 .RB [ \-f
80 .IR format ]
81 .RB [ \-F
82 .IR format ]
83 .br
84 \h'8n'
85 .RB [ \-m
86 .IR file ]
87 .RB [ \-o
88 .IR output ]
89 .RI [ file
90 .RI [ message ]]
91 .br
92 .B encode
93 .RB [ \-p ]
94 .RB [ \-f
95 .IR format ]
96 .RB [ \-b
97 .IR boundary ]
98 .RB [ \-o
99 .IR output ]
100 .RI [ file ]
101 .br
102 .B decode
103 .RB [ \-p ]
104 .RB [ \-f
105 .IR format ]
106 .RB [ \-b
107 .IR boundary ]
108 .RB [ \-o
109 .IR output ]
110 .RI [ file ]
111 .SH "DESCRIPTION"
112 The
113 .B catsign
114 command signs and verifies messages. It also works as a simple PEM
115 encoder and decoder. It provides a number of subcommands, by which the
116 various operations may be carried out.
117 .SS "Global options"
118 Before the command name,
119 .I "global options"
120 may be given. The following global options are supported:
121 .TP
122 .BR "\-h, \-\-help " [ \fIcommand ...]
123 Writes a brief summary of
124 .BR catsign 's
125 various options to standard output, and returns a successful exit
126 status. With command names, gives help on those commands.
127 .TP
128 .B "\-v, \-\-version"
129 Writes the program's version number to standard output, and returns a
130 successful exit status.
131 .TP
132 .B "\-u, \-\-usage"
133 Writes a very terse command line summary to standard output, and returns
134 a successful exit status.
135 .TP
136 .BI "\-k, \-\-keyring " file
137 Names the keyring file which
138 .B key
139 is to process. The default keyring, used if this option doesn't specify
140 one, is the file named
141 .B keyring
142 in the current directory. See
143 .BR key (1)
144 and
145 .BR keyring (5)
146 for more details about keyring files.
147 .SH "KEY SETUP"
148 Algorithms to be used with a particular key are described by attributes
149 on the key, or its type. The
150 .B catsign
151 command deals with signing keys. (Note that
152 .B catsign
153 uses signing keys in the same way as
154 .BR catcrypt (1).)
155 .PP
156 A
157 .I sigalgspec
158 has the form
159 .IR sig \c
160 .RB [ / \c
161 .IR hash ].
162 If a
163 .B sig
164 attribute is present on the key, then it must have this form; otherwise,
165 the key's type must have the form
166 .BI ccsig- \c
167 .IR sigalgspec .
168 Algorithm selections are taken from appropriately-named attributes, or,
169 failing that, from the
170 .IR sigalgspec .
171 .PP
172 The signature algorithm is chosen according to the setting of
173 .I sig
174 as follows. Run
175 .B catsign show sig
176 for a list of supported signature algorithms.
177 .TP
178 .B rsapkcs1
179 This is almost the same as the RSASSA-PKCS1-v1_5 algorithm described in
180 RFC3447; the difference is that the hash is left bare rather than being
181 wrapped in a DER-encoded
182 .B DigestInfo
183 structure. This doesn't affect security since the key can only be used
184 with the one hash function anyway, and dropping the DER wrapping permits
185 rapid adoption of new hash functions. Regardless, use of this algorithm
186 is not recommended, since the padding method has been shown vulnerable
187 to attack. Use the
188 .B rsa
189 algorithm of the
190 .B key add
191 command (see
192 .BR key (1))
193 to generate the key.
194 .TP
195 .B rsapss
196 This is the RSASSA-PSS algorithm described in RFC3447. It is the
197 preferred RSA-based signature scheme. Use the
198 .B rsa
199 algorithm of the
200 .B key add
201 command (see
202 .BR key (1))
203 to generate the key.
204 .TP
205 .B dsa
206 This is the DSA algorithm described in FIPS180-1 and FIPS180-2. Use the
207 .B dsa
208 algorithm of the
209 .B key add
210 command (see
211 .BR key (1))
212 to generate the key.
213 .TP
214 .B ecdsa
215 This is the ECDSA algorithm described in ANSI X9.62 and FIPS180-2. Use
216 the
217 .B ec
218 algorithm of the
219 .B key add
220 command (see
221 .BR key (1))
222 to generate the key.
223 .TP
224 .B kcdsa
225 This is the revised KCDSA (Korean Certificate-based Digital Signature
226 Algorithm) described in
227 .I The Revised Version of KCDSA
228 .RB ( http://dasan.sejong.ac.kr/~chlim/pub/kcdsa1.ps ).
229 Use the
230 .B dh
231 algorithm of the
232 .B key add
233 command with the
234 .B \-LS
235 options (see
236 .BR key (1))
237 to generate the key.
238 .TP
239 .B eckcdsa
240 This is an unofficial elliptic-curve analogue of the KCDSA algorithm.
241 Use the
242 .B ec
243 algorithm of the
244 .B key add
245 command (see
246 .BR key (1))
247 to generate the key.
248 .TP
249 .B ed25519
250 This is Bernstein, Duif, Lange, Schwabe, and Yang's Ed25519 algorithm.
251 More specifically, this is HashEd25519
252 using the selected
253 .B hash
254 algorithm \(en by default
255 .BR sha512 .
256 Use the
257 .B ed25519
258 algorithm of the
259 .B key add
260 command
261 (see
262 .BR key (1))
263 to generate the key.
264 .TP
265 .B mac
266 This uses a symmetric message-authentication algorithm rather than a
267 digital signature. The precise message-authentication scheme used is
268 determined by the
269 .B mac
270 attribute on the key, which defaults to
271 .IB hash -hmac
272 if unspecified. Use the
273 .B binary
274 algorithm of the
275 .B key add
276 command (see
277 .BR key (1))
278 to generate the key.
279 .PP
280 As well as the signature algorithm itself, a hash function is used.
281 This is taken from the
282 .B hash
283 attribute on the key, or, failing that, from the
284 .I hash
285 specified in the
286 .IR sigalgspec ,
287 or, if that is absent, determined by the signature algorithm as follows.
288 .hP \*o
289 For
290 .BR rsapkcs1 ,
291 .BR rsapss ,
292 .BR dsa ,
293 and
294 .BR ecdsa ,
295 the default hash function is
296 .BR sha .
297 .hP \*o
298 For
299 .BR kcdsa
300 and
301 .BR eckcdsa ,
302 the default hash function is
303 .BR has160 .
304 For
305 .BR ed25519 ,
306 the default hash function is
307 .BR sha512 .
308 .PP
309 Run
310 .B catsign show hash
311 for a list of supported hash functions.
312 .SH "ENCODINGS"
313 Two encodings for the ciphertext are supported.
314 .TP
315 .B binary
316 The raw format, which has the benefit of being smaller, but needs to be
317 attached to mail messages and generally handled with care.
318 .TP
319 .B pem
320 PEM-encapsulated Base-64 encoded text. This format can be included
321 directly in email and picked out again automatically; but there is a
322 4-to-3 data expansion as a result.
323 .SH "SIGNATURE FORMATS"
324 There are two basic signature formats understood by
325 .BR catsign .
326 .hP \*o
327 Embedded signatures include (embed) the message they sign; hence they're
328 complete in and of themselves. The
329 .B catsign
330 program extracts the message during signature verification.
331 .hP \*o
332 Detached signatures are separate from the messages they sign, and both
333 the original file and the signature are required for a successful
334 verification.
335 .PP
336 Another important distinction is whether the message data is considered
337 to be plain text or raw binary data.
338 .hP \*o
339 When dealing with plain text,
340 .B catsign
341 allows a limited quantity of leeway in the messages it processes. It
342 ignores trailing whitespace on a line, including stray carriage-returns,
343 which may appear if Windows boxes have had their way with the data. It
344 also appends a final newline if there wasn't one before. In embedded
345 signatures, the text is left unencoded, so that the message is readable.
346 .hP \*o
347 Binary files are preserved completely, and no variation whatever is
348 permitted.
349 .PP
350 The
351 .VS
352 catsign format
353 .VE
354 command can convert between detached and embedded signatures; it cannot
355 convert between binary and text mode signatures. (The data actually
356 signed includes a flag saying whether the message is textual. The
357 rationale here is that what looks like an ASCII space before a newline
358 may be devastatingly significant in a binary data file, and if a message
359 is signed as raw binary then no changes whatever should be allowed.)
360 .SH "COMMAND REFERENCE"
361 .SS help
362 The
363 .B help
364 command behaves exactly as the
365 .B \-\-help
366 option. With no arguments, it shows an overview of
367 .BR catsign 's
368 options; with arguments, it describes the named subcommands.
369 .SS show
370 The
371 .B show
372 command prints various lists of tokens understood by
373 .BR catsign .
374 With no arguments, it prints all of the lists; with arguments, it prints
375 just the named lists, in order. The recognized lists can be enumerated
376 using the
377 .VS
378 catsign show list
379 .VE
380 command. The lists are as follows.
381 .TP
382 .B list
383 The lists which can be enumerated by the
384 .B show
385 command.
386 .TP
387 .B sig
388 The signature algorithms which can be used in a signing key's
389 .B sig
390 attribute.
391 .TP
392 .B hash
393 The hash functions which can be used in a key's
394 .B hash
395 attribute.
396 .TP
397 .B enc
398 The encodings which can be applied to encrypted messages; see
399 .B ENCODINGS
400 above.
401 .SS sign
402 The
403 .B sign
404 command signs a message and writes out an appropriately-encoded
405 signature. By default, it reads a message from standard input and
406 writes the signature to standard output. If a filename argument is
407 given, this file is read instead.
408 .PP
409 The following options are recognized.
410 .TP
411 .B "\-a, \-\-armour"
412 Produce ASCII-armoured output. This is equivalent to specifying
413 .BR "\-f pem" .
414 The variant spelling
415 .B "\-\-armor"
416 is also accepted.
417 .TP
418 .B "\-b, \-\-binary"
419 Read and sign the input as binary data. The default is to treat the
420 input as text.
421 .TP
422 .B "\-d, \-\-detach"
423 Produce a detached signature. The default is to produce a signature
424 with embedded message.
425 .TP
426 .BI "\-f, \-\-format " format
427 Produce output encoded according to
428 .IR format .
429 .TP
430 .BI "\-k, \-\-key " tag
431 Use the signing key named
432 .I tag
433 in the current keyring; the default key is
434 .BR ccsig .
435 .TP
436 .BI "\-o, \-\-ouptut " file
437 Write output to
438 .I file
439 rather than to standard output.
440 .TP
441 .BI "\-p, \-\-progress"
442 Write a progress meter to standard error while processing large files.
443 .TP
444 .B "\-t, \-\-text"
445 Read and sign the input as text. This is the default.
446 .TP
447 .B "\-C, \-\-nocheck"
448 Don't check the private key for validity. This makes signing go much
449 faster, but at the risk of using a duff key, and potentially leaking
450 information about the private key.
451 .SS verify
452 The
453 .B verify
454 command checks a signature's validity, producing as output information
455 about the signature and the signed message.
456 .PP
457 The first non-option argument is the name of the file containing the
458 signature data; this may be omitted or
459 .RB ` \- '
460 to indicate that the signature be read from standard input. The second
461 non-option argument, if any, is the name of the file to read the message
462 from, if the signature is detached. An error is reported if a message
463 file is specified but the signature contains an embedded message
464 already; if the signature is detached but no filename is given, then the
465 message is expected on stdin (immediately after the signature, if any).
466 .TP
467 .B "\-a, \-\-armour"
468 Read ASCII-armoured input. This is equivalent to specifying
469 .BR "\-f pem" .
470 The variant spelling
471 .B "\-\-armor"
472 is also accepted.
473 .TP
474 .B "\-b, \-\-buffer"
475 Buffer the message until the signature is verified. This is forced on
476 if output is to stdout, but is always available as an option.
477 .TP
478 .BI "\-f, \-\-format " format
479 Read input encoded according to
480 .IR format .
481 .TP
482 .B "\-v, \-\-verbose"
483 Produce more verbose messages. See below for the messages produced
484 during decryption. The default verbosity level is 1. (Currently this
485 is the most verbose setting. This might not be the case always.)
486 .TP
487 .BI "\-p, \-\-progress"
488 Write a progress meter to standard error while processing large files.
489 .TP
490 .B "\-q, \-\-quiet"
491 Produce fewer messages.
492 .TP
493 .BI "\-k, \-\-key " tag
494 Usually
495 .B catsign
496 uses the signature header to work out which key to use to verify a
497 signature. Using this option causes verification to fail unless the
498 signature header specifies the key named
499 .IR tag .
500 .TP
501 .BI "\-t, \-\-freshtime " time
502 Only accept signatures claiming to have been made more recently than
503 .IR time .
504 If
505 .I time
506 is
507 .B always
508 (the default) then any timestamp in the past is acceptable.
509 .TP
510 .B "\-u, \-\-utc"
511 Show the datestamp in the signature in UTC rather than (your) local
512 time. The synonym
513 .B \-\-gmt
514 is also accepted.
515 .TP
516 .BI "\-o, \-\-output " file
517 Write the verified message to
518 .IR file .
519 The file is written in text or binary
520 mode as appropriate. The default is to write the message to standard
521 output unless verifying a detached signature, in which case nothing is
522 written.
523 .TP
524 .B "\-C, \-\-nocheck"
525 Don't check the public key for validity. This makes verification go
526 much faster, but at the risk of using a duff key, and potentially
527 accepting false signatures.
528 .PP
529 Output is written to standard output in a machine-readable format.
530 Major problems cause the program to write a diagnostic to standard error
531 and exit nonzero as usual. The quantity of output varies depending on
532 the verbosity level and whether the message is also being written to
533 standard output. Output lines begin with a keyword:
534 .TP
535 .BI "FAIL " reason
536 An error prevented verification. The program will exit nonzero.
537 .TP
538 .BI "WARN " reason
539 .B catsign
540 encountered a situation which may or may not invalidate the
541 verification.
542 .TP
543 .BI "OK " message
544 Verification was successful. This is only produced if the message is
545 being sent somewhere other than standard output.
546 .TP
547 .B "DATA"
548 The message follows, starting just after the next newline character or
549 sequence. This is only produced if the message is being written to
550 standard output.
551 .TP
552 .BI "INFO " note
553 Any other information.
554 .PP
555 The information written at the various verbosity levels is as follows.
556 .hP 0.
557 No output. Watch the exit status.
558 .hP 1.
559 All messages.
560 .PP
561 .B Warning!
562 Unless the
563 .B \-b
564 option is set (which happens automatically if writing to standard
565 output),
566 .BR catsign 's
567 output is
568 .I not
569 checked for authenticity until it has all been written. Even with
570 .BR \-b ,
571 output can fail midway for many reasons, and the resulting message may
572 therefore be truncated. Don't rely on the output being complete until
573 .B OK
574 is printed or
575 .B catsign verify
576 exits successfully.
577 .SS info
578 The
579 .B info
580 command analyses a signature without verifying it, and prints
581 interesting information about it. This might be useful for diagnostic
582 purposes. No keys are needed for this operation, though you get more
583 useful information if you have them.
584 .PP
585 If a non-option argument is given, and it is not
586 .RB ` \- ',
587 then it is taken to name the file containing the signature to parse;
588 otherwise a signature is read from standard input.
589 .PP
590 The following options are recognized.
591 .TP
592 .B "\-a, \-\-armour"
593 Read ASCII-armoured input. This is equivalent to specifying
594 .BR "\-f pem" .
595 The variant spelling
596 .B "\-\-armor"
597 is also accepted.
598 .TP
599 .BI "\-f, \-\-format " format
600 Read input encoded according to
601 .IR format .
602 .TP
603 .BI "\-p, \-\-progress"
604 Write a progress meter to standard error while processing large files.
605 .TP
606 .B "\-u, \-\-utc"
607 Show the datestamp in the signature in UTC rather than (your) local
608 time. The synonym
609 .B \-\-gmt
610 is also accepted.
611 .PP
612 A description of the signature block is produced on standard output; it
613 is mostly machine-readable. The first word on each line explains what
614 kind of output it is.
615 .TP
616 .BI "BAD " message
617 The signature data is invalid and cannot be parsed.
618 .TP
619 .BI "WARN " message
620 Something is wrong with the data, but isn't fatal.
621 .TP
622 .BI "NOTE " message
623 An environmental problem means that the information isn't as helpful as
624 it might be. For example, the keyring file can't be opened, so we don't
625 know whether the verification key is there.
626 .TP
627 .BI "INFO flags " flags
628 Describes the flags set in the signature header. The
629 .I flags
630 are a list of flags, one per word, preceded by a
631 .RB ` ! '
632 if the flag is clear.
633 .TP
634 .BI "INFO expected-flags " flags
635 If the PEM boundary string didn't match the actual signature data then
636 this line is output, listing the expected flags and their settings.
637 Problems with boundary mismatches can be resolved using the
638 .B format
639 command.
640 .TP
641 .BI "INFO date " yyyy "\-" mm "\-" dd " " hh ":" mm ":" ss " " tz
642 Signature was (allegedly!) made at the given time and date. If the
643 .B \-u
644 option was given, this will be in UTC.
645 .TP
646 .BI "INFO key " tag
647 Signature was (allegedly!) made using the key
648 .IR tag ,
649 which is present in the current keyring.
650 .TP
651 .BI "INFO unknown-key " keyid
652 Signature was (allegedly!) made using the key with id
653 .IR keyid
654 which is not in the current keyring (or the keyring wasn't found).
655 .SS format
656 The
657 .B format
658 command translates signatures between the various supported formats.
659 This is a (slightly) more complex operation than re-encoding, though it
660 does not require any cryptographic operations.
661 .PP
662 The first non-option argument is the name of the file containing the
663 signature data; this may be omitted or
664 .RB ` \- '
665 to indicate that the signature be read from standard input. The second
666 non-option argument, if any, is the name of the file to read the message
667 from, if the signature is detached. An error is reported if a message
668 file is specified but the signature contains an embedded message
669 already; if the signature is detached but no filename is given, then the
670 message is expected on stdin (immediately after the signature, if any).
671 .PP
672 The options follow a rough convention: options describing the input
673 format are lower-case and options specifying the output format are
674 upper-case. The following options are recognized.
675 .TP
676 .BI "\-a, \-\-armour-in"
677 Read ASCII-armoured input. This is equivalent to specifying
678 .BR "\-f pem" .
679 The variant spelling
680 .B "\-\-armor"
681 is also accepted.
682 .TP
683 .BI "\-p, \-\-progress"
684 Write a progress meter to standard error while processing large files.
685 .TP
686 .BI "\-A, \-\-armour-out"
687 Produce ASCII-armoured output. This is equivalent to specifying
688 .BR "\-F pem" .
689 The variant spelling
690 .B "\-\-armor-out"
691 is also accepted.
692 .TP
693 .B "\-D, \-\-detach"
694 Produce a detached signature. This may be used to detach a signature
695 from an embedded message.
696 .TP
697 .B "\-E, \-\-embed"
698 Produce a signature with embedded message. This may be used to
699 reattach a message to its detached signature.
700 .TP
701 .BI "\-f, \-\-format-in " format
702 Read input encoded according to
703 .IR format .
704 .TP
705 .BI "\-F, \-\-format-out " format
706 Produce output encoded according to
707 .IR format .
708 .TP
709 .BI "\-m, \-\-message " file
710 Write the message to
711 .IR file .
712 If
713 .I file
714 is
715 .RB ` \- '
716 then write the message to standard output. Don't send the message and
717 signature to the same place because it doesn't work.
718 .TP
719 .BI "\-o, \-\-output " file
720 Write the signature to
721 .IR file .
722 If no
723 .B \-m
724 or
725 .B \-o
726 option is given, a signature is written to standard output.
727 .SS "encode"
728 The
729 .B encode
730 command encodes an input file according to one of the encodings
731 described above in
732 .BR ENCODINGS .
733 The input is read from the
734 .I file
735 given on the command line, or from standard input if none is specified.
736 Options provided are:
737 .TP
738 .BI "\-f, \-\-format " format
739 Produce output in
740 .IR format .
741 Run
742 .B catsign show enc
743 for a list of encoding formats.
744 .TP
745 .BI "\-b, \-\-boundary " label
746 Set the PEM boundary string to
747 .IR label ;
748 i.e., assuming we're encoding in PEM format, the output will have
749 .BI "\-\-\-\-\-BEGIN " label "\-\-\-\-\-"
750 at the top and
751 .BI "\-\-\-\-\-END " label "\-\-\-\-\-"
752 at the bottom. The default
753 .I label
754 is
755 .BR MESSAGE .
756 .TP
757 .BI "\-p, \-\-progress"
758 Write a progress meter to standard error while processing large files.
759 .TP
760 .BI "\-o, \-\-output " file
761 Write output to
762 .I file
763 instead of to standard output.
764 .SS "decode"
765 The
766 .B decode
767 command decodes an input file encoded according to one of the encodings
768 described above in
769 .BR ENCODINGS .
770 The input is read from the
771 .I file
772 given on the command line, or from standard input if none is specified.
773 Options provided are:
774 .TP
775 .BI "\-f, \-\-format " format
776 Decode input in
777 .IR format .
778 Run
779 .B catsign show enc
780 for a list of encoding formats.
781 .TP
782 .BI "\-b, \-\-boundary " label
783 Set the PEM boundary string to
784 .IR label ;
785 i.e., assuming we're encoding in PEM format, start processing input
786 between
787 .BI "\-\-\-\-\-BEGIN " label "\-\-\-\-\-"
788 and
789 .BI "\-\-\-\-\-END " label "\-\-\-\-\-"
790 lines. Without this option,
791 .B catsign
792 will start reading at the first plausible boundary string, and continue
793 processing until it reaches the matching end boundary.
794 .TP
795 .BI "\-p, \-\-progress"
796 Write a progress meter to standard error while processing large files.
797 .TP
798 .BI "\-o, \-\-output " file
799 Write output to
800 .I file
801 instead of to standard output.
802 .SH "BUGS"
803 The trailing-whitespace deletion doesn't work for more than 32K of
804 whitespace. I don't think this is a big problem, really.
805 .PP
806 The
807 .B format
808 command does something unhelpful if message and signature are sent to
809 the same file.
810 .SH "SEE ALSO"
811 .BR key (1),
812 .BR catcrypt (1),
813 .BR dsig (1),
814 .BR hashsum (1),
815 .BR keyring (5).
816 .SH AUTHOR
817 Mark Wooding, <mdw@distorted.org.uk>