Hash utilities: maintain a hash state object, not a bundle of arguments.
[u/mdw/catacomb] / dsig.1
CommitLineData
c65df279 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 dsig 1 "30 September 2004" "Straylight/Edgeware" "Catacomb cryptographic library"
28.SH NAME
29dsig \- compute and verify signatures on collections of files
30.SH SYNOPSIS
31.B dsig
32.RB [ \-k
33.IR keyring ]
34.I command
35.PP
36where
37.I command
38is one of:
39.PP
40.B help
41.RI [ command ...]
42.br
43.B show
44.RI [ item ...]
45.br
46.B sign
cd6eca43 47.RB [ \-0bpqvC ]
c65df279 48.RB [ \-c
49.IR comment ]
50.RB [ \-k
51.IR tag ]
52.RB [ \-e
53.IR expire ]
54.br
55\h'8n'
56.RB [ \-f
57.IR file ]
95d92463
MW
58.RB [ \-h
59.IR file ]
c65df279 60.RB [ \-o
61.IR output ]
62.br
63.B verify
cd6eca43 64.RB [ \-pqvC ]
c65df279 65.RI [ file ]
66.SH DESCRIPTION
67The
68.B dsig
69command signs and verifies signatures on a collection of files. It
70provides a number of subcommands, by which the various operations may be
71carried out.
72.SS "Global options"
73Before the command name,
74.I "global options"
75may be given. The following global options are supported:
76.TP
77.BR "\-h, \-\-help " [ \fIcommand ...]
78Writes a brief summary of
79.BR dsig 's
80various options to standard output, and returns a successful exit
81status. With command names, gives help on those commands.
82.TP
83.B "\-v, \-\-version"
84Writes the program's version number to standard output, and returns a
85successful exit status.
86.TP
87.B "\-u, \-\-usage"
88Writes a very terse command line summary to standard output, and returns
89a successful exit status.
90.TP
91.BI "\-k, \-\-keyring " file
92Names the keyring file which
93.B key
94is to process. The default keyring, used if this option doesn't specify
95one, is the file named
96.B keyring
97in the current directory. See
98.BR key (1)
99and
100.BR keyring (5)
101for more details about keyring files.
102.SH "KEY SETUP"
103A
104.I sigalgspec
105has the form
106.IR sig \c
107.RB [ / \c
108.IR hash ].
109If a
110.B sig
111attribute is present on the key, then it must have this form; otherwise,
112the key's type must have the form
113.BI dsig- \c
114.IR sigalgspec .
115Algorithm selections are taken from appropriately-named attributes, or,
116failing that, from the
117.IR sigalgspec .
118.PP
119The signature algorithm is chosen according to the setting of
120.I sig
121as follows. Run
122.B dsig show sig
123for a list of supported signature algorithms.
124.TP
125.B rsapkcs1
126This is almost the same as the RSASSA-PKCS1-v1_5 algorithm described in
127RFC3447; the difference is that the hash is left bare rather than being
45c0fd36 128wrapped in a DER-encoded
c65df279 129.B DigestInfo
130structure. This doesn't affect security since the key can only be used
131with the one hash function anyway, and dropping the DER wrapping permits
132rapid adoption of new hash functions. Regardless, use of this algorithm
133is not recommended, since the padding method has been shown vulnerable
134to attack. Use the
135.B rsa
136algorithm of the
137.B key add
138command (see
139.BR key (1))
140to generate the key.
141.TP
142.B rsapss
143This is the RSASSA-PSS algorithm described in RFC3447. It is the
144preferred RSA-based signature scheme. Use the
145.B rsa
146algorithm of the
147.B key add
148command (see
149.BR key (1))
150to generate the key.
151.TP
152.B dsa
45c0fd36 153This is the DSA algorithm described in FIPS180-1 and FIPS180-2. Use the
c65df279 154.B dsa
155algorithm of the
156.B key add
157command (see
158.BR key (1))
159to generate the key.
160.TP
161.B ecdsa
162This is the ECDSA algorithm described in ANSI X9.62 and FIPS180-2. Use
163the
164.B ec
165algorithm of the
166.B key add
167command (see
168.BR key (1))
169to generate the key.
170.TP
171.B kcdsa
172This is the revised KCDSA (Korean Certificate-based Digital Signature
173Algorithm) described in
174.I The Revised Version of KCDSA
175.RB ( http://dasan.sejong.ac.kr/~chlim/pub/kcdsa1.ps ).
176Use the
177.B dh
178algorithm of the
179.B key add
180command with the
181.B \-LS
182options (see
183.BR key (1))
184to generate the key.
185.TP
186.B eckcdsa
187This is an unofficial elliptic-curve analogue of the KCDSA algorithm.
188Use the
189.B ec
190algorithm of the
191.B key add
192command (see
193.BR key (1))
194to generate the key.
195.PP
196As well as the signature algorithm itself, a hash function is used.
197This is taken from the
198.B hash
199attribute on the key, or, failing that, from the
200.I hash
201specified in the
202.IR sigalgspec ,
203or, if that is absent, determined by the signature algorithm as follows.
204.hP \*o
205For
206.BR rsapkcs1 ,
207.BR rsapss ,
208.BR dsa ,
209and
210.BR ecdsa ,
211the default hash function is
212.BR sha .
213.hP \*o
214For
45c0fd36 215.BR kcdsa
c65df279 216and
217.BR eckcdsa ,
218the default hash function is
219.BR has160 .
220.PP
221Run
222.B dsig show hash
223for a list of supported hash functions.
224.SH "COMMAND REFERENCE"
225.SS help
226The
227.B help
228command behaves exactly as the
229.B \-\-help
230option. With no arguments, it shows an overview of
231.BR dsig 's
232options; with arguments, it describes the named subcommands.
233.SS show
234The
235.B show
236command prints various lists of tokens understood by
237.BR dsig .
238With no arguments, it prints all of the lists; with arguments, it prints
239just the named lists, in order. The recognized lists can be enumerated
240using the
241.VS
242dsig show list
243.VE
244command. The lists are as follows.
245.TP
246.B list
247The lists which can be enumerated by the
248.B show
249command.
250.TP
251.B sig
252The signature algorithms which can be used in a key's
253.B sig
254attribute.
255.TP
256.B hash
257The hash functions which can be used in a key's
258.B hash
259attribute.
260.SS sign
261The
262.B sign
263command creates a signature for a collection of files. The default
264behaviour is to read a list of whitespace-separated file names (see
265below for the precise format) from standard input and write the
266an output file, containing hashes of the files and a digital signature
267made by the key
268.B dsig
269in the current keyring, to standard output, in plain text with binary
270values Base64-encoded. It is intended to be used in conjunction with
271.BR find (1).
272This behaviour can be modified by specifying command-line options.
273.TP
274.B "\-0, \-\-null"
275Read null-terminated filenames, rather than whitespace-separated names.
276This is the recommended mode of operation if you have a
277.BR find (1)
278which understands the
279.B \-print0
280option.
281.TP
282.B "\-b, \-\-binary"
283Produce output in raw binary rather than the textual output. This isn't
284a useful thing to do unless you're trying to debug
285.BR dsig .
286.TP
287.B "\-v, \-\-verbose"
288Makes
289.B dsig
290more verbose. At present, this just means that it'll print the hashes
291of files that it comes across in hex. (Use
292.BR hashsum (1)
293if this is the output you actually wanted.)
294.TP
295.B "\-q, \-\-quiet"
296Makes
297.B dsig
298less verbose.
299.TP
300.BI "\-c, \-\-comment " string
301Writes
302.I string
303as a comment in the output file. The comment's integrity is protected
304by the signature.
305.TP
cd6eca43
MW
306.BI "\-p, \-\-progress"
307Write a progress meter to standard error while processing large files.
308.TP
c65df279 309.BI "\-f, \-\-file " name
310Read filenames from
311.I name
312instead of from standard input.
313.TP
95d92463
MW
314.BI "\-h, \-\-hashes " name
315Rather than hashing files, read precomputed hashes from the file
316.IR name ,
317which should be in the format produced by
318.BR hashsum (1).
319.TP
c65df279 320.BI "\-o, \-\-output " name
321Write output to
322.I name
323instead of to standard output.
324.TP
325.BI "\-k, \-\-key " tag
326Use the key named
327.I tag
328rather than the default
329.BR dsig .
330.TP
331.BI "\-e, \-\-expire " date
332Set the signature to expire at
333.IR date .
334The default is to expire 28 days from creation. Use
335.B forever
336to make the signature not expire.
946c3f72 337.TP
338.B "\-C, \-\-nocheck"
339Don't check the private key for validity. This makes signing go much
340faster, but at the risk of using a duff key, and potentially leaking
341information about the private key.
c65df279 342.PP
343The whitespace-separated format for filenames allows quoting and
344escaping of strange characters. The backslash
345.RB ` \e '
346can be used to escape whitespace, quotes, or other special characters
347(including itself), and to represent special characters using the
348standard C escape sequences
349.RB ` \ea ',
350.RB ` \eb ',
351.RB ` \ef ',
352.RB ` \en ',
353.RB ` \et ',
354and
355.RB ` \eb '.
356A filename can be quoted in
357.BR ` ... ',
358.BR ' ... '
359or
360.BR """" ... """".
361Whitespace within quotes is part of the filename. The quotes must be at
362the beginning and end of the name.
363.SS verify
364The
365.B verify
366command will verify signatures made by the
367.B sign
368command. With no arguments, it expects to read a text-format signature
369file from standard input; with an argument, it examines the file it
370names to see whether it's text or binary.
371.PP
372Command-line options provided are:
373.TP
374.B "\-v, \-\-verbose"
375Produce more informational output. The default verbosity level is 1.
376.TP
377.B "\-q, \-\-quiet"
378Produce less information output.
946c3f72 379.TP
cd6eca43
MW
380.BI "\-p, \-\-progress"
381Write a progress meter to standard error while processing large files.
382.TP
946c3f72 383.B "\-C, \-\-nocheck"
384Don't check the public key for validity. This makes verification go
385much faster, but at the risk of using a duff key, and potentially
386accepting false signatures.
c65df279 387.PP
388Output is written to standard output in a machine-readable format.
389Formatting errors cause the program to write a diagnostic to standard
390error and exit nonzero as usual. Lines begin with a keyword:
391.TP
392.BI "FAIL " reason
393An error prevented verification.
394.TP
395.BI "BAD " reason
396The signature is bad: some file had the wrong hash or the signature is
45c0fd36 397invalid.
c65df279 398.TP
399.BI "WARN " reason
400.B dsig
401encountered a situation which may or may not invalidate the signature.
402.TP
403.BI "OK " message
404The signature verified correctly.
405.TP
406.BI "INFO " note
45c0fd36 407Any other information.
c65df279 408.PP
409The information written at the various verbosity levels is as follows.
410.hP 0.
411No output. Watch the exit status.
412.B dsig
413exits zero if the signature was good.
414.hP 1.
415All
416.BR OK ,
417.B FAIL
418and
419.B WARN
420messages are printed.
421.hP 2.
422As for level 1; also
423.B BAD
424messages are printed describing reasons why the signature verification
425failed, and an
426.B INFO
427message is printed showing the signature file's comment if any.
428.hP 3.
429As for level 2; also
430.B INFO
431messages are shown listing the signing program's identification string,
432the signing key, the signature and expiry dates, and actual signature
433verification.
434.hP 4.
435As for level 3; also
436.B INFO
437messages are printed for each file covered, showing its name and hash.
438.SH "OUTPUT FORMAT"
439There are two output formats: textual and binary. The hash used in the
440digital signature is always computed on the
441.I binary
442version of the data, regardless of the external representation.
443.SS "Textual format"
444Within the file, whitespace and comments between strings are ignored. A
445comment begins with a hash
446.RB (` # ')
447and extends until the next newline.
448.PP
449Strings are either quoted or whitespace-delimited. A string may be
450quoted by
451.BR ` ... ',
452.BR ' ... '
453or
454.BR """" ... """".
455The end-quote character can be backslash-escaped within the string. An
456occurrence of the unescaped end-quote character terminates the string.
457A whitespace-delimited string is terminated by any unescaped whitespace
458character. The C-language escape sequences
459.RB ` \ea ',
460.RB ` \eb ',
461.RB ` \ef ',
462.RB ` \en ',
463.RB ` \et ',
464and
465.RB ` \eb '
466are recognized within either kind of string.
467.PP
468Blocks within the file consist of sequences of strings. The first
469string is a
470.I tag
471\(en a simple string ending in a colon
472.RB (` : ')
473\(en which describes the format of the remaining strings.
474.SS "Binary format"
475The file consists of a sequence of blocks, each of which begins with a
476tag byte. The format of the test of the block depends on the tag.
477Strings are null-terminated; all integers are in network byte order.
478.PP
479A binary file always begins with an ident block, which has a tag of 0.
480.SS "Block types"
481The following block types are known. They must appear in the order
482given, and except where noted must appear exactly once each.
483.TP
484.BR "ident: " (0)
485Identification string of the generating program.
486.BR "keyid: " (1)
487The signing key's id, as eight hex digits (text) or a 32-bit integer
488(binary).
489.TP
490.BR "comment: " (2)
491The comment string set with the
492.B \-c
493option to the
494.B sign
495command. This block need not appear.
496.TP
497.BR "date: " (3)
498The date the signature was made. In a text file, this has the form
45c0fd36 499.IB yyyy-mm-dd
c65df279 500.IB hh:mm:ss
501.IR timezone ;
502in a binary file, it's a 64-bit integer representing the POSIX time.
503.TP
504.BR "expires: " (4)
505The expiry time of the signature, expressed as for
506.BR date: .
507A non-expiring signature is represented by the string
508.B forever
509in text files, or all-bits-set in binary.
510.TP
511.BR "file: " (5)
512A file hash. In text, this is two strings which are the Base-64-encoded
513hash and the file name; in binary, this is a 16-bit hash length, the raw
514hash, and the null-terminated filename. There can be any number of
515.B file:
516blocks.
517.TP
518.BR "signature: " (6)
519The signature. In text, this is the Base-64-encoded signature; in
520binary, it is a 16-bit length followed by the binary signature.
521.PP
522The signature covers the
523.I binary
524representations of the file's
525.BR date: ,
526.B expires:
527and
528.B file:
529blocks.
530.SH "SEE ALSO"
531.BR key (1),
532.BR hashsum (1),
533.BR catcrypt (1),
fa54fe1e 534.BR catsign (1),
c65df279 535.BR keyring (5).
536.SH AUTHOR
f387fcb1 537Mark Wooding, <mdw@distorted.org.uk>