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