math/Makefile.am, symm/Makefile.am: Use `--no-install' on oddball tests.
[catacomb] / progs / catcrypt.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 catcrypt 1 "30 September 2004" "Straylight/Edgeware" "Catacomb cryptographic library"
28.SH NAME
29catcrypt \- encrypt and decrypt messages
30.SH SYNOPSIS
31.B catcrypt
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 encrypt
cd6eca43 47.RB [ \-apC ]
c65df279 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 decrypt
cd6eca43 57.RB [ \-apqvC ]
c65df279 58.RB [ \-f
59.IR format ]
60.RB [ \-o
61.IR output ]
62.RI [ file ]
63.br
64.B encode
cd6eca43 65.RB [ \-p ]
c65df279 66.RB [ \-f
67.IR format ]
68.RB [ \-b
69.IR boundary ]
70.RB [ \-o
71.IR output ]
72.RI [ file ]
73.br
fa54fe1e 74.B decode
cd6eca43 75.RB [ \-p ]
c65df279 76.RB [ \-f
77.IR format ]
78.RB [ \-b
79.IR boundary ]
80.RB [ \-o
81.IR output ]
82.RI [ file ]
83.SH "DESCRIPTION"
84The
85.B catcrypt
86command encrypts and decrypts messages. It also works as a simple PEM
87encoder and decoder. It provides a number of subcommands, by which the
88various operations may be carried out.
89.SS "Global options"
90Before the command name,
91.I "global options"
92may be given. The following global options are supported:
93.TP
94.BR "\-h, \-\-help " [ \fIcommand ...]
95Writes a brief summary of
96.BR catcrypt 's
97various options to standard output, and returns a successful exit
98status. With command names, gives help on those commands.
99.TP
100.B "\-v, \-\-version"
101Writes the program's version number to standard output, and returns a
102successful exit status.
103.TP
104.B "\-u, \-\-usage"
105Writes a very terse command line summary to standard output, and returns
106a successful exit status.
107.TP
108.BI "\-k, \-\-keyring " file
109Names the keyring file which
110.B key
111is to process. The default keyring, used if this option doesn't specify
112one, is the file named
113.B keyring
114in the current directory. See
115.BR key (1)
116and
117.BR keyring (5)
118for more details about keyring files.
119.SH "KEY SETUP"
120Algorithms to be used with a particular key are described by attributes
121on the key, or its type. The
122.B catcrypt
fa54fe1e 123command deals with both signing and key-encapsulation keys. (Note that
124.B catcrypt
45c0fd36 125uses signing keys in the same way as
fa54fe1e 126.BR catsign (1).)
c65df279 127.SS "Key-encapsulation keys"
128(Key encapsulation is a means of transmitting a short, known, random
129secret to a recipient. It differs from encryption in technical ways
130which are largely uninteresting at this point.)
131.PP
132A
133.I kemalgspec
134has the syntax
135.IR kem \c
136.RB [ / \c
66ff643c
MW
137.IR bulk \c
138.RB [ \- \c
139.IR cipher ] \c
140.RB [ / \c
141.IR hash ]]
142or
143.IR kem \c
144.RB [ / \c
c65df279 145.IR cipher \c
146.RB [ / \c
147.IR hash ]].
148If a
149.B kem
150attribute is present on the key, then it must have this form; otherwise,
151the key's type must have the form
152.BR cckem- \c
153.IR kemalgspec .
154Algorithm selections are taken from appropriately-named attributes, or,
155failing that, from the
156.IR kemalgspec .
157.PP
158The key-encapsulation mechanism is chosen according to the setting of
159.I kem
160as follows. Run
161.B catcrypt show kem
162for a list of supported KEMs.
163.TP
164.B rsa
165This is Shoup's RSA-KEM (formerly Simple RSA); see
166.I
167A proposal for an ISO standard for public key encryption (version 2.0)
168available at
169.BR http://eprint.iacr.org/2000/060/ .
170Use the
171.B rsa
172algorithm of the
173.B key add
174command (see
175.BR key (1))
176to generate the key.
177.TP
178.B dh
179This is standard Diffie-Hellman key exchange, hashing the resulting
180shared secret to form the key, as used in, e.g., DLIES (P1363a).
181Use the
182.B dh
183algorithm of the
184.B key add
185command, preferably with the
186.B \-LS
187options, to generate the key.
188.TP
189.B ec
190This is the elliptic-curve analogue of
b98200ad 191.BR dh .
192Use the
c65df279 193.B ec
194algorithm of the
195.BR key (1))
196command to generate the key.
02dfbd5b
MW
197.TP
198.B symm
199This is a simple symmetric encapsulation scheme. It works by hashing a
200binary key with a randomly-generated salt. Use the
201.B binary
202algorithm of the
203.B key add
204command (see
205.BR key (1))
206to generate the key.
fc2d44af
MW
207.TP
208.B x25519
209This is Bernstein's Curve25519, a fast Diffie-Hellman using a specific
210elliptic curve.
211Use the
212.B x25519
213algorithm of the
214.B key add
215command
216(see
217.BR key (1))
218to generate the key.
643eb1bb
MW
219.TP
220.B x448
221This is Hamburg's Curve25519, a strong Diffie-Hellman using a specific
222elliptic curve.
223Use the
224.B x448
225algorithm of the
226.B key add
227command
228(see
229.BR key (1))
230to generate the key.
c65df279 231.PP
66ff643c
MW
232The bulk crypto transform is chosen based on the
233.B bulk
234attribute on the key, or, failing that,
235from the
236.I bulk
237stated in the
238.IR kemalgspec .
239Run
240.B catcrypt show bulk
241for a list of supported bulk crypto transforms.
242.TP
243.B gencomp
244A generic composition of
245a cipher secure against chosen-plaintext attack,
246and a message authentication code.
247Makes use of
248.B cipher
249and
250.B mac
251attributes.
252This is the default transform.
d9d419b0
MW
253.TP
254.B naclbox
255Use Salsa20 or ChaCha and Poly1305 to secure the bulk data.
256This is nearly the same as the NaCl
257.B crypto_secretbox
258construction,
259except that
260.B catcrypt
261uses Salsa20 or ChaCha rather than XSalsa20,
262because it doesn't need the latter's extended nonce.
263The
264.B cipher
265attribute may be set to one of
266.BR salsa20 ,
267.BR salsa20/12 ,
268.BR salsa20/8 ,
269.BR chacha20 ,
270.BR chacha12 ,
271or
272.BR chacha8 ;
273the default is
274.BR salsa20 .
66ff643c 275.PP
c65df279 276As well as the KEM itself, a number of supporting algorithms are used.
277These are taken from appropriately named attributes on the key or,
278failing that, derived from other attributes as described below.
279.TP
280.B cipher
66ff643c
MW
281This is the symmetric encryption algorithm
282used by the bulk data transform.
283If there is no
c65df279 284.B cipher
285attribute then the
66ff643c 286.I bulk
c65df279 287in the
288.I kemalgspec
289is used; if that it absent, then the default of
290.B blowfish-cbc
291is used. Run
292.B catcrypt show cipher
293for a list of supported symmetric encryption algorithms.
294.TP
295.B hash
296This is the hash function used to distil entropy from the shared secret
297constructed by the raw KEM. If there is no
298.B hash
299attribute then the
300.I hash
301in the
b98200ad 302.I kemalgspec
303is used; if that is absent then the default of
c65df279 304.B rmd160
305is used. Run
306.B catcrypt show hash
307for a list of supported symmetric encryption algorithms.
308.TP
309.B mac
66ff643c
MW
310This is the message authentication algorithm
311used by the
312.B gencomp
313bulk data transform
314to ensure integrity of the encrypted message and
315defend against chosen-ciphertext attacks.
316If there is no
c65df279 317.B mac
318attribute then
319.IB hash -hmac
320is chosen as a default. Run
321.B catcrypt show mac
322for a list of supported message authentication algorithms.
323.TP
324.B kdf
325This is the key derivation function used to stretch the hashed shared
326secret to a sufficient length to select symmetric encryption and
327authentication keys, initialization vectors and other necessary
328pseudorandom quantities. If there is no
329.B kdf
330attribute then
331.IB hash -mgf
332is chosen as a default. Run
333.B catcrypt show kdf
334for a list of supported key derivation functions.
335.B Caution!
336Not all supported functions have the required security features: don't
337override the default choice unless you know what you're doing.
338.SS "Signing keys"
339A
340.I sigalgspec
341has the form
342.IR sig \c
343.RB [ / \c
344.IR hash ].
345If a
346.B sig
347attribute is present on the key, then it must have this form; otherwise,
348the key's type must have the form
349.BI ccsig- \c
350.IR sigalgspec .
351Algorithm selections are taken from appropriately-named attributes, or,
352failing that, from the
353.IR sigalgspec .
354.PP
355The signature algorithm is chosen according to the setting of
356.I sig
357as follows. Run
358.B catcrypt show sig
359for a list of supported signature algorithms.
360.TP
361.B rsapkcs1
362This is almost the same as the RSASSA-PKCS1-v1_5 algorithm described in
363RFC3447; the difference is that the hash is left bare rather than being
45c0fd36 364wrapped in a DER-encoded
c65df279 365.B DigestInfo
366structure. This doesn't affect security since the key can only be used
367with the one hash function anyway, and dropping the DER wrapping permits
368rapid adoption of new hash functions. Regardless, use of this algorithm
369is not recommended, since the padding method has been shown vulnerable
370to attack. Use the
371.B rsa
372algorithm of the
373.B key add
374command (see
375.BR key (1))
376to generate the key.
377.TP
378.B rsapss
379This is the RSASSA-PSS algorithm described in RFC3447. It is the
380preferred RSA-based signature scheme. Use the
381.B rsa
382algorithm of the
383.B key add
384command (see
385.BR key (1))
386to generate the key.
387.TP
388.B dsa
45c0fd36 389This is the DSA algorithm described in FIPS180-1 and FIPS180-2. Use the
c65df279 390.B dsa
391algorithm of the
392.B key add
393command (see
394.BR key (1))
395to generate the key.
396.TP
397.B ecdsa
398This is the ECDSA algorithm described in ANSI X9.62 and FIPS180-2. Use
399the
400.B ec
401algorithm of the
402.B key add
403command (see
404.BR key (1))
405to generate the key.
406.TP
407.B kcdsa
408This is the revised KCDSA (Korean Certificate-based Digital Signature
409Algorithm) described in
410.I The Revised Version of KCDSA
411.RB ( http://dasan.sejong.ac.kr/~chlim/pub/kcdsa1.ps ).
412Use the
413.B dh
414algorithm of the
415.B key add
416command with the
417.B \-LS
418options (see
419.BR key (1))
420to generate the key.
421.TP
422.B eckcdsa
423This is an unofficial elliptic-curve analogue of the KCDSA algorithm.
424Use the
425.B ec
426algorithm of the
427.B key add
428command (see
429.BR key (1))
430to generate the key.
02dfbd5b 431.TP
d56fd9d1
MW
432.B ed25519
433This is Bernstein, Duif, Lange, Schwabe, and Yang's Ed25519 algorithm.
434More specifically, this is HashEd25519
435using the selected
436.B hash
437algorithm \(en by default
438.BR sha512 .
439Use the
440.B ed25519
441algorithm of the
442.B key add
443command
444(see
445.BR key (1))
446to generate the key.
447.TP
c578d5d8
MW
448.B ed448
449This is Bernstein, Duif, Lange, Schwabe, and Yang's EdDSA algorithm,
450using Hamburg's Ed448-Goldilocks elliptic curve,
451as specified in RFC8032.
452More specifically, this is HashEd448
453using the selected
454.B hash
455algorithm \(en by default
456.BR sha3-512 .
457Use the
458.B ed448
459algorithm of the
460.B key add
461command
462(see
463.BR key (1))
464to generate the key.
465.TP
02dfbd5b
MW
466.B mac
467This uses a symmetric message-authentication algorithm rather than a
468digital signature. The precise message-authentication scheme used is
469determined by the
470.B mac
471attribute on the key, which defaults to
472.IB hash -hmac
473if unspecified. Use the
474.B binary
475algorithm of the
476.B key add
477command (see
478.BR key (1))
479to generate the key.
c65df279 480.PP
481As well as the signature algorithm itself, a hash function is used.
482This is taken from the
483.B hash
484attribute on the key, or, failing that, from the
485.I hash
486specified in the
487.IR sigalgspec ,
488or, if that is absent, determined by the signature algorithm as follows.
489.hP \*o
490For
491.BR rsapkcs1 ,
492.BR rsapss ,
493.BR dsa ,
494and
495.BR ecdsa ,
496the default hash function is
497.BR sha .
498.hP \*o
499For
45c0fd36 500.BR kcdsa
c65df279 501and
502.BR eckcdsa ,
503the default hash function is
504.BR has160 .
df8800f1
MW
505For
506.BR ed25519 ,
507the default hash function is
508.BR sha512 .
c578d5d8
MW
509For
510.BR ed448 ,
511the default hash function is
512.BR shake256 .
c65df279 513.PP
514Run
515.B catcrypt show hash
516for a list of supported hash functions.
517.SH "ENCODINGS"
518Two encodings for the ciphertext are supported.
519.TP
520.B binary
521The raw format, which has the benefit of being smaller, but needs to be
522attached to mail messages and generally handled with care.
523.TP
524.B pem
525PEM-encapsulated Base-64 encoded text. This format can be included
526directly in email and picked out again automatically; but there is a
5274-to-3 data expansion as a result.
528.SH "COMMAND REFERENCE"
529.SS help
530The
531.B help
532command behaves exactly as the
533.B \-\-help
534option. With no arguments, it shows an overview of
535.BR catcrypt 's
536options; with arguments, it describes the named subcommands.
537.SS show
538The
539.B show
540command prints various lists of tokens understood by
541.BR catcrypt .
542With no arguments, it prints all of the lists; with arguments, it prints
543just the named lists, in order. The recognized lists can be enumerated
544using the
545.VS
546catcrypt show list
547.VE
548command. The lists are as follows.
549.TP
550.B list
551The lists which can be enumerated by the
552.B show
553command.
554.TP
555.B kem
556The key-encapsulation algorithms which can be used in a
557key-encapsulation key's
558.B kem
559attribute.
560.TP
561.B cipher
562The symmetric encryption algorithms which can be used in a
563key-encapsulation key's
564.B cipher
565attribute.
566.TP
567.B mac
568The message authentication algorithms which can be used in a
569key-encapsulation key's
570.B mac
571attribute.
572.TP
573.B sig
574The signature algorithms which can be used in a signing key's
575.B sig
576attribute.
577.TP
578.B hash
579The hash functions which can be used in a key's
580.B hash
581attribute.
582.TP
583.B enc
45c0fd36 584The encodings which can be applied to encrypted messages; see
c65df279 585.B ENCODINGS
586above.
587.SS encrypt
588The
589.B encrypt
590command encrypts a file and writes out the appropriately-encoded
591ciphertext. By default, it reads from standard input and writes to
592standard output. If a filename argument is given, this file is read
593instead (as binary data).
594.PP
595The following options are recognized.
596.TP
597.B "\-a, \-\-armour"
598Produce ASCII-armoured output. This is equivalent to specifying
599.BR "\-f pem" .
600The variant spelling
601.B "\-\-armor"
602is also accepted.
603.TP
604.BI "\-f, \-\-format " format
605Produce output encoded according to
606.IR format .
607.TP
608.BI "\-k, \-\-key " tag
609Use the key-encapsulation key named
610.I tag
611in the current keyring; the default key is
612.BR ccrypt .
613.TP
cd6eca43
MW
614.BI "\-p, \-\-progress"
615Write a progress meter to standard error while processing large files.
616.TP
c65df279 617.BI "\-s, \-\-sign-key " tag
618Use the signature key named
619.I tag
620in the current keyring; the default is not to sign the ciphertext.
621.TP
622.BI "\-o, \-\-ouptut " file
623Write output to
624.I file
625rather than to standard output.
946c3f72 626.TP
627.B "\-C, \-\-nocheck"
628Don't check the public key for validity. This makes encryption go much
629faster, but at the risk of using a duff key.
c65df279 630.SS decrypt
631The
632.B decrypt
633command decrypts a ciphertext and writes out the plaintext. By default,
634it reads from standard input and writes to standard output. If a
635filename argument is given, this file is read instead.
636.PP
637The following options are recognized.
638.TP
639.B "\-a, \-\-armour"
fa54fe1e 640Read ASCII-armoured input. This is equivalent to specifying
c65df279 641.BR "\-f pem" .
642The variant spelling
643.B "\-\-armor"
644is also accepted.
645.TP
fa54fe1e 646.B "\-b, \-\-buffer"
647Buffer plaintext data until we're sure we've got it all. This is forced
648on if output is to stdout, but is always available as an option.
649.TP
c65df279 650.BI "\-f, \-\-format " format
651Read input encoded according to
652.IR format .
653.TP
cd6eca43
MW
654.BI "\-p, \-\-progress"
655Write a progress meter to standard error while processing large files.
656.TP
c65df279 657.B "\-v, \-\-verbose"
658Produce more verbose messages. See below for the messages produced
659during decryption. The default verbosity level is 1. (Currently this
660is the most verbose setting. This might not be the case always.)
661.TP
662.B "\-q, \-\-quiet"
663Produce fewer messages.
664.TP
665.BI "\-o, \-\-output " file
666Write output to
667.I file
668instead of to standard output. The file is written in binary mode.
669Fixing line-end conventions is your problem; there are lots of good
670tools for dealing with it.
946c3f72 671.TP
672.B "\-C, \-\-nocheck"
673Don't check the private key for validity. This makes decryption go much
674faster, but at the risk of using a duff key, and possibly leaking
675information about the private key.
c65df279 676.PP
677Output is written to standard output in a machine-readable format.
678Major problems cause the program to write a diagnostic to standard error
679and exit nonzero as usual. The quantity of output varies depending on
680the verbosity level and whether the plaintext is also being written to
fa54fe1e 681standard output. Output lines begin with a keyword:
c65df279 682.TP
683.BI "FAIL " reason
684An error prevented decryption. The program will exit nonzero.
685.TP
686.BI "WARN " reason
687.B catcrypt
688encountered a situation which may or may not invalidate the decryption.
45c0fd36 689.TP
c65df279 690.BI "OK " message
691Decryption was successful. This is only produced if main output is
692being sent somewhere other than standard output.
693.TP
694.B "DATA"
695The plaintext follows, starting just after the next newline character or
b98200ad 696sequence. This is only produced if main output is also being sent to
fa54fe1e 697standard output.
c65df279 698.TP
699.BI "INFO " note
700Any other information.
701.PP
702The information written at the various verbosity levels is as follows.
703.hP 0.
704No output. Watch the exit status.
705.hP 1.
706All messages.
707.PP
708.B Warning!
fa54fe1e 709All output written has been checked for authenticity. However, output
77e4471a 710can fail midway through for many reasons, and the resulting message may
45c0fd36 711therefore be truncated. Don't rely on the output being complete until
4224d0b9 712.B OK
713is printed or
c65df279 714.B catcrypt decrypt
fa54fe1e 715exits successfully.
c65df279 716.SS "encode"
717The
718.B encode
719command encodes an input file according to one of the encodings
720described above in
721.BR ENCODINGS .
45c0fd36 722The input is read from the
c65df279 723.I file
724given on the command line, or from standard input if none is specified.
725Options provided are:
726.TP
cd6eca43
MW
727.BI "\-p, \-\-progress"
728Write a progress meter to standard error while processing large files.
729.TP
c65df279 730.BI "\-f, \-\-format " format
731Produce output in
732.IR format .
733Run
734.B catcrypt show enc
735for a list of encoding formats.
736.TP
737.BI "\-b, \-\-boundary " label
738Set the PEM boundary string to
739.IR label ;
740i.e., assuming we're encoding in PEM format, the output will have
741.BI "\-\-\-\-\-BEGIN " label "\-\-\-\-\-"
742at the top and
743.BI "\-\-\-\-\-END " label "\-\-\-\-\-"
744at the bottom. The default
745.I label
746is
747.BR MESSAGE .
748.TP
749.BI "\-o, \-\-output " file
750Write output to
751.I file
752instead of to standard output.
753.SS "decode"
754The
755.B decode
756command decodes an input file encoded according to one of the encodings
757described above in
758.BR ENCODINGS .
45c0fd36 759The input is read from the
c65df279 760.I file
761given on the command line, or from standard input if none is specified.
762Options provided are:
763.TP
764.BI "\-f, \-\-format " format
765Decode input in
766.IR format .
767Run
768.B catcrypt show enc
769for a list of encoding formats.
770.TP
771.BI "\-b, \-\-boundary " label
772Set the PEM boundary string to
773.IR label ;
774i.e., assuming we're encoding in PEM format, start processing input
775between
776.BI "\-\-\-\-\-BEGIN " label "\-\-\-\-\-"
45c0fd36 777and
c65df279 778.BI "\-\-\-\-\-END " label "\-\-\-\-\-"
779lines. Without this option,
780.B catcrypt
781will start reading at the first plausible boundary string, and continue
782processing until it reaches the matching end boundary.
783.TP
cd6eca43
MW
784.BI "\-p, \-\-progress"
785Write a progress meter to standard error while processing large files.
786.TP
c65df279 787.BI "\-o, \-\-output " file
788Write output to
789.I file
790instead of to standard output.
791.SH "SECURITY PROPERTIES"
792Assuming the security of the underlying primitive algorithms, the
793following security properties of the ciphertext hold.
794.hP \*o
795An adversary given the public key-encapsulation key and capable of
796requesting encryption of arbitrary plaintexts of his own devising is
797unable to decide whether he is given ciphertexts corresponding to his
798chosen plaintexts or random plaintexts of the same length. This holds
799even if the adversary is permitted to request decryption of any
800ciphertext other than one produced as a result of an encryption request.
801This property is called
802.BR IND-CCA2 .
803.hP \*o
804An adversary given the public key-encapsulation and verification keys,
805and capable of requesting encryption of arbitrary plaintext of his own
806devising is unable to produce a new ciphertext which will be accepted as
807genuine. This property is called
808.BR INT-CTXT .
809.hP \*o
810An adversary given the public key-encapsulation and verification keys,
811and capable of requesting encryption of arbitrary plaintext of his own
812devising is unable to decide whether the ciphertexts he is given are
813correctly signed. This property doesn't seem to have a name.
814.PP
815Not all is rosy. If you leak intermediate values during decryption then
816an adversary can construct a new correctly-signed message. Don't do
817that, then \(en leaking intermediate values often voids security
818warranties. But it does avoid the usual problem with separate signing
819and encryption that a careful leak by the recipient can produce evidence
820that you signed some incriminating message.
4224d0b9 821.PP
822Note that
823.BR catcrypt 's
824signatures do
825.I not
826provide `non-repudiation' in any useful way. This is deliberate: the
827purpose of signing is to convince the recipient of the sender's
828identity, rather than to allow the recipient to persuade anyone else.
829Indeed, given an encrypted and signed message, the recipient can
830straightforwardly construct a new message, apparently from the same
831sender, and whose signature still verifies, but with arbitrarily chosen
832content.
c65df279 833.SH "CRYPTOGRAPHIC THEORY"
834Encryption of a message proceeds as follows.
835.hP 0.
836Emit a header packet containing the key-ids for the key-encapsulation
837key, and signature key if any.
838.hP 1.
839Use the KEM to produce a public value and a shared secret the recipient
840will be able to extract from the public value using his private key.
841Emit a packet containing the public value.
842.hP 2.
843Hash the shared secret. Use the KDF to produce a pseudorandom keystream
844of indefinite length.
845.hP 3.
846Use the first bits of the keystream to key a symmetric encryption
847scheme; use the next bits to key a message authentication code.
848.hP 4.
849If we're signing the message then extract 1024 bytes from the keystream,
f9e51332 850sign the header and public value, and the keystream bytes; emit a packet
851containing the signature. The signature packet doesn't contain the
852signed message, just the signature.
c65df279 853.hP 5.
854Split the message into blocks. For each block, pick a random IV from
855the keystream, encrypt the block and emit a packet containing the
aaa2361e 856IV, ciphertext, and a MAC tag over the ciphertext and a sequence number.
857.hP 6.
858The last chunk is the encryption of an empty plaintext block. No
859previous plaintext block is empty. This lets us determine the
860difference between a complete file and one that's been maliciously
861truncated.
c65df279 862.PP
863That's it. Nothing terribly controversial, really.
864.SH "SEE ALSO"
865.BR key (1),
fa54fe1e 866.BR catsign (1),
c65df279 867.BR dsig (1),
868.BR hashsum (1),
869.BR keyring (5).
870.SH AUTHOR
f387fcb1 871Mark Wooding, <mdw@distorted.org.uk>