d4add88e8de8d9fa48fa89f4029c647bd6eabdd5
[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 .PP
305 Run
306 .B catsign show hash
307 for a list of supported hash functions.
308 .SH "ENCODINGS"
309 Two encodings for the ciphertext are supported.
310 .TP
311 .B binary
312 The raw format, which has the benefit of being smaller, but needs to be
313 attached to mail messages and generally handled with care.
314 .TP
315 .B pem
316 PEM-encapsulated Base-64 encoded text. This format can be included
317 directly in email and picked out again automatically; but there is a
318 4-to-3 data expansion as a result.
319 .SH "SIGNATURE FORMATS"
320 There are two basic signature formats understood by
321 .BR catsign .
322 .hP \*o
323 Embedded signatures include (embed) the message they sign; hence they're
324 complete in and of themselves. The
325 .B catsign
326 program extracts the message during signature verification.
327 .hP \*o
328 Detached signatures are separate from the messages they sign, and both
329 the original file and the signature are required for a successful
330 verification.
331 .PP
332 Another important distinction is whether the message data is considered
333 to be plain text or raw binary data.
334 .hP \*o
335 When dealing with plain text,
336 .B catsign
337 allows a limited quantity of leeway in the messages it processes. It
338 ignores trailing whitespace on a line, including stray carriage-returns,
339 which may appear if Windows boxes have had their way with the data. It
340 also appends a final newline if there wasn't one before. In embedded
341 signatures, the text is left unencoded, so that the message is readable.
342 .hP \*o
343 Binary files are preserved completely, and no variation whatever is
344 permitted.
345 .PP
346 The
347 .VS
348 catsign format
349 .VE
350 command can convert between detached and embedded signatures; it cannot
351 convert between binary and text mode signatures. (The data actually
352 signed includes a flag saying whether the message is textual. The
353 rationale here is that what looks like an ASCII space before a newline
354 may be devastatingly significant in a binary data file, and if a message
355 is signed as raw binary then no changes whatever should be allowed.)
356 .SH "COMMAND REFERENCE"
357 .SS help
358 The
359 .B help
360 command behaves exactly as the
361 .B \-\-help
362 option. With no arguments, it shows an overview of
363 .BR catsign 's
364 options; with arguments, it describes the named subcommands.
365 .SS show
366 The
367 .B show
368 command prints various lists of tokens understood by
369 .BR catsign .
370 With no arguments, it prints all of the lists; with arguments, it prints
371 just the named lists, in order. The recognized lists can be enumerated
372 using the
373 .VS
374 catsign show list
375 .VE
376 command. The lists are as follows.
377 .TP
378 .B list
379 The lists which can be enumerated by the
380 .B show
381 command.
382 .TP
383 .B sig
384 The signature algorithms which can be used in a signing key's
385 .B sig
386 attribute.
387 .TP
388 .B hash
389 The hash functions which can be used in a key's
390 .B hash
391 attribute.
392 .TP
393 .B enc
394 The encodings which can be applied to encrypted messages; see
395 .B ENCODINGS
396 above.
397 .SS sign
398 The
399 .B sign
400 command signs a message and writes out an appropriately-encoded
401 signature. By default, it reads a message from standard input and
402 writes the signature to standard output. If a filename argument is
403 given, this file is read instead.
404 .PP
405 The following options are recognized.
406 .TP
407 .B "\-a, \-\-armour"
408 Produce ASCII-armoured output. This is equivalent to specifying
409 .BR "\-f pem" .
410 The variant spelling
411 .B "\-\-armor"
412 is also accepted.
413 .TP
414 .B "\-b, \-\-binary"
415 Read and sign the input as binary data. The default is to treat the
416 input as text.
417 .TP
418 .B "\-d, \-\-detach"
419 Produce a detached signature. The default is to produce a signature
420 with embedded message.
421 .TP
422 .BI "\-f, \-\-format " format
423 Produce output encoded according to
424 .IR format .
425 .TP
426 .BI "\-k, \-\-key " tag
427 Use the signing key named
428 .I tag
429 in the current keyring; the default key is
430 .BR ccsig .
431 .TP
432 .BI "\-o, \-\-ouptut " file
433 Write output to
434 .I file
435 rather than to standard output.
436 .TP
437 .BI "\-p, \-\-progress"
438 Write a progress meter to standard error while processing large files.
439 .TP
440 .B "\-t, \-\-text"
441 Read and sign the input as text. This is the default.
442 .TP
443 .B "\-C, \-\-nocheck"
444 Don't check the private key for validity. This makes signing go much
445 faster, but at the risk of using a duff key, and potentially leaking
446 information about the private key.
447 .SS verify
448 The
449 .B verify
450 command checks a signature's validity, producing as output information
451 about the signature and the signed message.
452 .PP
453 The first non-option argument is the name of the file containing the
454 signature data; this may be omitted or
455 .RB ` \- '
456 to indicate that the signature be read from standard input. The second
457 non-option argument, if any, is the name of the file to read the message
458 from, if the signature is detached. An error is reported if a message
459 file is specified but the signature contains an embedded message
460 already; if the signature is detached but no filename is given, then the
461 message is expected on stdin (immediately after the signature, if any).
462 .TP
463 .B "\-a, \-\-armour"
464 Read ASCII-armoured input. This is equivalent to specifying
465 .BR "\-f pem" .
466 The variant spelling
467 .B "\-\-armor"
468 is also accepted.
469 .TP
470 .B "\-b, \-\-buffer"
471 Buffer the message until the signature is verified. This is forced on
472 if output is to stdout, but is always available as an option.
473 .TP
474 .BI "\-f, \-\-format " format
475 Read input encoded according to
476 .IR format .
477 .TP
478 .B "\-v, \-\-verbose"
479 Produce more verbose messages. See below for the messages produced
480 during decryption. The default verbosity level is 1. (Currently this
481 is the most verbose setting. This might not be the case always.)
482 .TP
483 .BI "\-p, \-\-progress"
484 Write a progress meter to standard error while processing large files.
485 .TP
486 .B "\-q, \-\-quiet"
487 Produce fewer messages.
488 .TP
489 .BI "\-k, \-\-key " tag
490 Usually
491 .B catsign
492 uses the signature header to work out which key to use to verify a
493 signature. Using this option causes verification to fail unless the
494 signature header specifies the key named
495 .IR tag .
496 .TP
497 .BI "\-t, \-\-freshtime " time
498 Only accept signatures claiming to have been made more recently than
499 .IR time .
500 If
501 .I time
502 is
503 .B always
504 (the default) then any timestamp in the past is acceptable.
505 .TP
506 .B "\-u, \-\-utc"
507 Show the datestamp in the signature in UTC rather than (your) local
508 time. The synonym
509 .B \-\-gmt
510 is also accepted.
511 .TP
512 .BI "\-o, \-\-output " file
513 Write the verified message to
514 .IR file .
515 The file is written in text or binary
516 mode as appropriate. The default is to write the message to standard
517 output unless verifying a detached signature, in which case nothing is
518 written.
519 .TP
520 .B "\-C, \-\-nocheck"
521 Don't check the public key for validity. This makes verification go
522 much faster, but at the risk of using a duff key, and potentially
523 accepting false signatures.
524 .PP
525 Output is written to standard output in a machine-readable format.
526 Major problems cause the program to write a diagnostic to standard error
527 and exit nonzero as usual. The quantity of output varies depending on
528 the verbosity level and whether the message is also being written to
529 standard output. Output lines begin with a keyword:
530 .TP
531 .BI "FAIL " reason
532 An error prevented verification. The program will exit nonzero.
533 .TP
534 .BI "WARN " reason
535 .B catsign
536 encountered a situation which may or may not invalidate the
537 verification.
538 .TP
539 .BI "OK " message
540 Verification was successful. This is only produced if the message is
541 being sent somewhere other than standard output.
542 .TP
543 .B "DATA"
544 The message follows, starting just after the next newline character or
545 sequence. This is only produced if the message is being written to
546 standard output.
547 .TP
548 .BI "INFO " note
549 Any other information.
550 .PP
551 The information written at the various verbosity levels is as follows.
552 .hP 0.
553 No output. Watch the exit status.
554 .hP 1.
555 All messages.
556 .PP
557 .B Warning!
558 Unless the
559 .B \-b
560 option is set (which happens automatically if writing to standard
561 output),
562 .BR catsign 's
563 output is
564 .I not
565 checked for authenticity until it has all been written. Even with
566 .BR \-b ,
567 output can fail midway for many reasons, and the resulting message may
568 therefore be truncated. Don't rely on the output being complete until
569 .B OK
570 is printed or
571 .B catsign verify
572 exits successfully.
573 .SS info
574 The
575 .B info
576 command analyses a signature without verifying it, and prints
577 interesting information about it. This might be useful for diagnostic
578 purposes. No keys are needed for this operation, though you get more
579 useful information if you have them.
580 .PP
581 If a non-option argument is given, and it is not
582 .RB ` \- ',
583 then it is taken to name the file containing the signature to parse;
584 otherwise a signature is read from standard input.
585 .PP
586 The following options are recognized.
587 .TP
588 .B "\-a, \-\-armour"
589 Read ASCII-armoured input. This is equivalent to specifying
590 .BR "\-f pem" .
591 The variant spelling
592 .B "\-\-armor"
593 is also accepted.
594 .TP
595 .BI "\-f, \-\-format " format
596 Read input encoded according to
597 .IR format .
598 .TP
599 .BI "\-p, \-\-progress"
600 Write a progress meter to standard error while processing large files.
601 .TP
602 .B "\-u, \-\-utc"
603 Show the datestamp in the signature in UTC rather than (your) local
604 time. The synonym
605 .B \-\-gmt
606 is also accepted.
607 .PP
608 A description of the signature block is produced on standard output; it
609 is mostly machine-readable. The first word on each line explains what
610 kind of output it is.
611 .TP
612 .BI "BAD " message
613 The signature data is invalid and cannot be parsed.
614 .TP
615 .BI "WARN " message
616 Something is wrong with the data, but isn't fatal.
617 .TP
618 .BI "NOTE " message
619 An environmental problem means that the information isn't as helpful as
620 it might be. For example, the keyring file can't be opened, so we don't
621 know whether the verification key is there.
622 .TP
623 .BI "INFO flags " flags
624 Describes the flags set in the signature header. The
625 .I flags
626 are a list of flags, one per word, preceded by a
627 .RB ` ! '
628 if the flag is clear.
629 .TP
630 .BI "INFO expected-flags " flags
631 If the PEM boundary string didn't match the actual signature data then
632 this line is output, listing the expected flags and their settings.
633 Problems with boundary mismatches can be resolved using the
634 .B format
635 command.
636 .TP
637 .BI "INFO date " yyyy "\-" mm "\-" dd " " hh ":" mm ":" ss " " tz
638 Signature was (allegedly!) made at the given time and date. If the
639 .B \-u
640 option was given, this will be in UTC.
641 .TP
642 .BI "INFO key " tag
643 Signature was (allegedly!) made using the key
644 .IR tag ,
645 which is present in the current keyring.
646 .TP
647 .BI "INFO unknown-key " keyid
648 Signature was (allegedly!) made using the key with id
649 .IR keyid
650 which is not in the current keyring (or the keyring wasn't found).
651 .SS format
652 The
653 .B format
654 command translates signatures between the various supported formats.
655 This is a (slightly) more complex operation than re-encoding, though it
656 does not require any cryptographic operations.
657 .PP
658 The first non-option argument is the name of the file containing the
659 signature data; this may be omitted or
660 .RB ` \- '
661 to indicate that the signature be read from standard input. The second
662 non-option argument, if any, is the name of the file to read the message
663 from, if the signature is detached. An error is reported if a message
664 file is specified but the signature contains an embedded message
665 already; if the signature is detached but no filename is given, then the
666 message is expected on stdin (immediately after the signature, if any).
667 .PP
668 The options follow a rough convention: options describing the input
669 format are lower-case and options specifying the output format are
670 upper-case. The following options are recognized.
671 .TP
672 .BI "\-a, \-\-armour-in"
673 Read ASCII-armoured input. This is equivalent to specifying
674 .BR "\-f pem" .
675 The variant spelling
676 .B "\-\-armor"
677 is also accepted.
678 .TP
679 .BI "\-p, \-\-progress"
680 Write a progress meter to standard error while processing large files.
681 .TP
682 .BI "\-A, \-\-armour-out"
683 Produce ASCII-armoured output. This is equivalent to specifying
684 .BR "\-F pem" .
685 The variant spelling
686 .B "\-\-armor-out"
687 is also accepted.
688 .TP
689 .B "\-D, \-\-detach"
690 Produce a detached signature. This may be used to detach a signature
691 from an embedded message.
692 .TP
693 .B "\-E, \-\-embed"
694 Produce a signature with embedded message. This may be used to
695 reattach a message to its detached signature.
696 .TP
697 .BI "\-f, \-\-format-in " format
698 Read input encoded according to
699 .IR format .
700 .TP
701 .BI "\-F, \-\-format-out " format
702 Produce output encoded according to
703 .IR format .
704 .TP
705 .BI "\-m, \-\-message " file
706 Write the message to
707 .IR file .
708 If
709 .I file
710 is
711 .RB ` \- '
712 then write the message to standard output. Don't send the message and
713 signature to the same place because it doesn't work.
714 .TP
715 .BI "\-o, \-\-output " file
716 Write the signature to
717 .IR file .
718 If no
719 .B \-m
720 or
721 .B \-o
722 option is given, a signature is written to standard output.
723 .SS "encode"
724 The
725 .B encode
726 command encodes an input file according to one of the encodings
727 described above in
728 .BR ENCODINGS .
729 The input is read from the
730 .I file
731 given on the command line, or from standard input if none is specified.
732 Options provided are:
733 .TP
734 .BI "\-f, \-\-format " format
735 Produce output in
736 .IR format .
737 Run
738 .B catsign show enc
739 for a list of encoding formats.
740 .TP
741 .BI "\-b, \-\-boundary " label
742 Set the PEM boundary string to
743 .IR label ;
744 i.e., assuming we're encoding in PEM format, the output will have
745 .BI "\-\-\-\-\-BEGIN " label "\-\-\-\-\-"
746 at the top and
747 .BI "\-\-\-\-\-END " label "\-\-\-\-\-"
748 at the bottom. The default
749 .I label
750 is
751 .BR MESSAGE .
752 .TP
753 .BI "\-p, \-\-progress"
754 Write a progress meter to standard error while processing large files.
755 .TP
756 .BI "\-o, \-\-output " file
757 Write output to
758 .I file
759 instead of to standard output.
760 .SS "decode"
761 The
762 .B decode
763 command decodes an input file encoded according to one of the encodings
764 described above in
765 .BR ENCODINGS .
766 The input is read from the
767 .I file
768 given on the command line, or from standard input if none is specified.
769 Options provided are:
770 .TP
771 .BI "\-f, \-\-format " format
772 Decode input in
773 .IR format .
774 Run
775 .B catsign show enc
776 for a list of encoding formats.
777 .TP
778 .BI "\-b, \-\-boundary " label
779 Set the PEM boundary string to
780 .IR label ;
781 i.e., assuming we're encoding in PEM format, start processing input
782 between
783 .BI "\-\-\-\-\-BEGIN " label "\-\-\-\-\-"
784 and
785 .BI "\-\-\-\-\-END " label "\-\-\-\-\-"
786 lines. Without this option,
787 .B catsign
788 will start reading at the first plausible boundary string, and continue
789 processing until it reaches the matching end boundary.
790 .TP
791 .BI "\-p, \-\-progress"
792 Write a progress meter to standard error while processing large files.
793 .TP
794 .BI "\-o, \-\-output " file
795 Write output to
796 .I file
797 instead of to standard output.
798 .SH "BUGS"
799 The trailing-whitespace deletion doesn't work for more than 32K of
800 whitespace. I don't think this is a big problem, really.
801 .PP
802 The
803 .B format
804 command does something unhelpful if message and signature are sent to
805 the same file.
806 .SH "SEE ALSO"
807 .BR key (1),
808 .BR catcrypt (1),
809 .BR dsig (1),
810 .BR hashsum (1),
811 .BR keyring (5).
812 .SH AUTHOR
813 Mark Wooding, <mdw@distorted.org.uk>