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