nettle.texinfo 101 KB
Newer Older
Niels Möller's avatar
Niels Möller committed
1
2
3
4
5
6
7
\input texinfo          @c -*-texinfo-*-

@c %**start of header
@setfilename nettle.info
@settitle The Nettle low-level cryptographic library.
@c %**end of header

8
9
@documentencoding ISO-8859-1

10
@footnotestyle end
Niels Möller's avatar
Niels Möller committed
11
12
13
14
15
16
17
@syncodeindex fn cp

@dircategory GNU Libraries
@direntry
* Nettle: (nettle).           A low-level cryptographics library.
@end direntry

18
@set COPYRIGHT-YEARS 2001, 2004, 2005
19
@set UPDATED-FOR 2.0
Niels Möller's avatar
Niels Möller committed
20

Niels Möller's avatar
Niels Möller committed
21
@c Latin-1 doesn't work with TeX output.
Niels Möller's avatar
Niels Möller committed
22
23
@c Also lookout for é characters.

24
25
26
27
@iftex
@set AUTHOR Niels M@"oller
@end iftex
@ifnottex
Niels Möller's avatar
Niels Möller committed
28
@set AUTHOR Niels Möller
29
30
@end ifnottex

Niels Möller's avatar
Niels Möller committed
31
@ifinfo
32
Manual for the Nettle library. This manual corresponds to version
Niels Möller's avatar
Niels Möller committed
33
34
@value{UPDATED-FOR}.

35
Copyright @value{COPYRIGHT-YEARS} @value{AUTHOR}
Niels Möller's avatar
Niels Möller committed
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77

Permission is granted to make and distribute verbatim
copies of this manual provided the copyright notice and
this permission notice are preserved on all copies.

@ignore
Permission is granted to process this file through TeX
and print the results, provided the printed document
carries a copying permission notice identical to this
one except for the removal of this paragraph (this
paragraph not being relevant to the printed manual).

@end ignore
Permission is granted to copy and distribute modified
versions of this manual under the conditions for
verbatim copying, provided also that the sections
entitled ``Copying'' and ``GNU General Public License''
are included exactly as in the original, and provided
that the entire resulting derived work is distributed
under the terms of a permission notice identical to this
one.

Permission is granted to copy and distribute
translations of this manual into another language,
under the above conditions for modified versions,
except that this permission notice may be stated in a
translation approved by the Free Software Foundation.

@end ifinfo

@titlepage
@sp 10
@c @center @titlefont{Nettle Manual}

@title Nettle Manual
@subtitle For the Nettle Library version @value{UPDATED-FOR}

@author @value{AUTHOR}

@c The following two commands start the copyright page.
@page
@vskip 0pt plus 1filll
78
Copyright @copyright{} @value{COPYRIGHT-YEARS} @value{AUTHOR}
Niels Möller's avatar
Niels Möller committed
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100

Permission is granted to make and distribute verbatim
copies of this manual provided the copyright notice and
this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified
versions of this manual under the conditions for
verbatim copying, provided also that the sections
entitled ``Copying'' and ``GNU General Public License''
are included exactly as in the original, and provided
that the entire resulting derived work is distributed
under the terms of a permission notice identical to this
one.

Permission is granted to copy and distribute
translations of this manual into another language,
under the above conditions for modified versions,
except that this permission notice may be stated in a
translation approved by the Free Software Foundation.

@end titlepage

101
102
@contents

Niels Möller's avatar
Niels Möller committed
103
104
105
@ifnottex
@node     Top, Introduction, (dir), (dir)
@comment  node-name,  next,  previous,  up
106
@top Nettle
Niels Möller's avatar
Niels Möller committed
107
108

This document describes the nettle low-level cryptographic library. You
Niels Möller's avatar
Niels Möller committed
109
can use the library directly from your C programs, or (recommended)
Niels Möller's avatar
Niels Möller committed
110
write or use an object-oriented wrapper for your favorite language or
Niels Möller's avatar
Niels Möller committed
111
112
application.

Niels Möller's avatar
Niels Möller committed
113
This manual corresponds to version @value{UPDATED-FOR} of the library.
Niels Möller's avatar
Niels Möller committed
114
115

@menu
Niels Möller's avatar
Niels Möller committed
116
117
* Introduction::                What is Nettle?
* Copyright::                   Your rights.
118
119
120
* Conventions::                 General interface conventions.
* Example::                     An example program.
* Linking::                     
Niels Möller's avatar
Niels Möller committed
121
122
123
* Reference::                   All Nettle functions and features.
* Nettle soup::                 For the serious nettle hacker.
* Installation::                How to install Nettle.
124
* Index::                       Function and concept index.
Niels Möller's avatar
Niels Möller committed
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
@end menu

@end ifnottex

@node Introduction, Copyright, Top, Top
@comment  node-name,  next,  previous,  up
@chapter Introduction

Nettle is a cryptographic library that is designed to fit easily in more
or less any context: In crypto toolkits for object-oriented languages
(C++, Python, Pike, ...), in applications like LSH or GNUPG, or even in
kernel space. In most contexts, you need more than the basic
cryptographic algorithms, you also need some way to keep track of available
algorithms, their properties and variants. You often have some algorithm
selection process, often dictated by a protocol you want to implement.

141
And as the requirements of applications differ in subtle and not so
Niels Möller's avatar
Niels Möller committed
142
143
144
145
146
147
148
149
150
151
subtle ways, an API that fits one application well can be a pain to use
in a different context. And that is why there are so many different
cryptographic libraries around.

Nettle tries to avoid this problem by doing one thing, the low-level
crypto stuff, and providing a @emph{simple} but general interface to it.
In particular, Nettle doesn't do algorithm selection. It doesn't do
memory allocation. It doesn't do any I/O.

The idea is that one can build several application and context specific
Niels Möller's avatar
Niels Möller committed
152
interfaces on top of Nettle, and share the code, test cases, benchmarks,
Niels Möller's avatar
Niels Möller committed
153
154
155
documentation, etc. Examples are the Nettle module for the Pike
language, and LSH, which both use an object-oriented abstraction on top
of the library.
Niels Möller's avatar
Niels Möller committed
156

157
158
159
160
This manual explains how to use the Nettle library. It also tries to
provide some background on the cryptography, and advice on how to best
put it to use.

Niels Möller's avatar
Niels Möller committed
161
162
163
164
@node Copyright, Conventions, Introduction, Top
@comment  node-name,  next,  previous,  up
@chapter Copyright

165
166
167
168
169
170
171
172
Nettle is distributed under the GNU General Public License (GPL) (see
the file COPYING for details). However, most of the individual files
are dual licensed under less restrictive licenses like the GNU Lesser
General Public License (LGPL), or are in the public domain. This means
that if you don't use the parts of nettle that are GPL-only, you have
the option to use the Nettle library just as if it were licensed under
the LGPL. To find the current status of particular files, you have to
read the copyright notices at the top of the files.
Niels Möller's avatar
Niels Möller committed
173
174
175
176
177
178

A list of the supported algorithms, their origins and licenses:

@table @emph
@item AES
The implementation of the AES cipher (also known as rijndael) is written
179
180
181
by Rafael Sevilla. Assembler for x86 by Rafael Sevilla and
@value{AUTHOR}, Sparc assembler by @value{AUTHOR}. Released under the
LGPL.
Niels Möller's avatar
Niels Möller committed
182
183
184

@item ARCFOUR
The implementation of the ARCFOUR (also known as RC4) cipher is written
185
by @value{AUTHOR}. Released under the LGPL.
Niels Möller's avatar
Niels Möller committed
186

Niels Möller's avatar
Niels Möller committed
187
188
189
190
191
@item ARCTWO
The implementation of the ARCTWO (also known as RC2) cipher is written
by Nikos Mavroyanopoulos and modified by Werner Koch and Simon
Josefsson. Released under the LGPL.

Niels Möller's avatar
Niels Möller committed
192
193
194
@item BLOWFISH
The implementation of the BLOWFISH cipher is written by Werner Koch,
copyright owned by the Free Software Foundation. Also hacked by Ray
195
Dassen and @value{AUTHOR}. Released under the GPL.
Niels Möller's avatar
Niels Möller committed
196
197
198
199
200
201
202
203
204

@item CAST128
The implementation of the CAST128 cipher is written by Steve Reid.
Released into the public domain.

@item DES
The implementation of the DES cipher is written by Dana L. How, and
released under the LGPL.

205
206
@item MD2
The implementation of MD2 is written by Andrew Kuchling, and hacked
207
some by Andreas Sigfridsson and @value{AUTHOR}. Python Cryptography
208
209
210
211
212
213
Toolkit license (essentially public domain).

@item MD4
This is almost the same code as for MD5 below, with modifications by
Marcus Comstedt. Released into the public domain.

Niels Möller's avatar
Niels Möller committed
214
215
@item MD5
The implementation of the MD5 message digest is written by Colin Plumb.
216
It has been hacked some more by Andrew Kuchling and @value{AUTHOR}.
Niels Möller's avatar
Niels Möller committed
217
218
219
220
221
Released into the public domain.

@item SERPENT
The implementation of the SERPENT cipher is written by Ross Anderson,
Eli Biham, and Lars Knudsen, adapted to LSH by Rafael Sevilla, and to
222
Nettle by @value{AUTHOR}. Released under the GPL.
Niels Möller's avatar
Niels Möller committed
223
224

@item SHA1
225
226
227
228
The C implementation of the SHA1 message digest is written by Peter
Gutmann, and hacked some more by Andrew Kuchling and @value{AUTHOR}.
Released into the public domain. Assembler for x86 by @value{AUTHOR},
released under the LGPL.
Niels Möller's avatar
Niels Möller committed
229

Niels Möller's avatar
Niels Möller committed
230
231
232
233
@item SHA256
Written by @value{AUTHOR}, using Peter Gutmann's SHA1 code as a model. 
Released under the LGPL.

Niels Möller's avatar
Niels Möller committed
234
235
236
@item TWOFISH
The implementation of the TWOFISH cipher is written by Ruud de Rooij.
Released under the LGPL.
Niels Möller's avatar
Niels Möller committed
237
238
239
240
241
242
243
244

@item RSA
Written by @value{AUTHOR}, released under the LGPL. Uses the GMP library
for bignum operations.

@item DSA
Written by @value{AUTHOR}, released under the LGPL. Uses the GMP library
for bignum operations.
Niels Möller's avatar
Niels Möller committed
245
246
247
248
249
250
251
252
@end table

@node Conventions, Example, Copyright, Top
@comment  node-name,  next,  previous,  up
@chapter Conventions

For each supported algorithm, there is an include file that defines a
@emph{context struct}, a few constants, and declares functions for
253
operating on the context. The context struct encapsulates all information
Niels Möller's avatar
Niels Möller committed
254
255
256
needed by the algorithm, and it can be copied or moved in memory with no
unexpected effects.

257
258
For consistency, functions for different algorithms are very similar,
but there are some differences, for instance reflecting if the key setup
259
or encryption function differ for encryption and decryption, and whether
260
261
262
263
264
or not key setup can fail. There are also differences between algorithms
that don't show in function prototypes, but which the application must
nevertheless be aware of. There is no big difference between the
functions for stream ciphers and for block ciphers, although they should
be used quite differently by the application.
Niels Möller's avatar
Niels Möller committed
265
266
267
268
269
270
271
272
273
274
275

If your application uses more than one algorithm, you should probably
create an interface that is tailor-made for your needs, and then write a
few lines of glue code on top of Nettle.

By convention, for an algorithm named @code{foo}, the struct tag for the
context struct is @code{foo_ctx}, constants and functions uses prefixes
like @code{FOO_BLOCK_SIZE} (a constant) and @code{foo_set_key} (a
function).

In all functions, strings are represented with an explicit length, of
276
type @code{unsigned}, and a pointer of type @code{uint8_t *} or
Niels Möller's avatar
Niels Möller committed
277
278
279
280
@code{const uint8_t *}. For functions that transform one string to
another, the argument order is length, destination pointer and source
pointer. Source and destination areas are of the same length. Source and
destination may be the same, so that you can process strings in place,
281
but they @emph{must not} overlap in any other way.
Niels Möller's avatar
Niels Möller committed
282

283
284
@c FIXME: Say something about the name mangling.

285
@node Example, Linking, Conventions, Top
Niels Möller's avatar
Niels Möller committed
286
287
288
@comment  node-name,  next,  previous,  up
@chapter Example

289
290
291
A simple example program that reads a file from standard input and
writes its SHA1 checksum on standard output should give the flavor of
Nettle.
Niels Möller's avatar
Niels Möller committed
292
293

@example
294
@verbatiminclude sha-example.c
Niels Möller's avatar
Niels Möller committed
295
296
@end example

297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
On a typical Unix system, this program can be compiled and linked with
the command line 
@example
cc sha-example.c -o sha-example -lnettle
@end example

@node Linking, Reference, Example, Top
@comment  node-name,  next,  previous,  up
@chapter Linking

Nettle actually consists of two libraries, @file{libnettle} and
@file{libhogweed}. The @file{libhogweed} library contains those
functions of Nettle that uses bignum operations, and depends on the GMP
library. With this division, linking works the same for both static and
dynamic libraries.

If an application uses only the symmetric crypto algorithms of
Nettle (i.e., block ciphers, hash functions, and the like), it's
sufficient to link with @code{-lnettle}. If an application also uses
public-key algorithms, it must be linked with @code{-lhogweed -lnettle
-lgmp}.

@node Reference, Nettle soup, Linking, Top
Niels Möller's avatar
Niels Möller committed
320
321
322
323
324
325
326
327
@comment  node-name,  next,  previous,  up
@chapter Reference

This chapter describes all the Nettle functions, grouped by family.

@menu
* Hash functions::              
* Cipher functions::            
328
* Cipher modes::                
Niels Möller's avatar
Niels Möller committed
329
* Keyed hash functions::        
330
331
* Public-key algorithms::       
* Randomness::                  
Niels Möller's avatar
Niels Möller committed
332
* Miscellaneous functions::     
333
* Compatibility functions::     
Niels Möller's avatar
Niels Möller committed
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
@end menu

@node Hash functions, Cipher functions, Reference, Reference
@comment  node-name,  next,  previous,  up
@section Hash functions

A cryptographic @dfn{hash function} is a function that takes variable
size strings, and maps them to strings of fixed, short, length. There
are naturally lots of collisions, as there are more possible 1MB files
than 20 byte strings. But the function is constructed such that is hard
to find the collisions. More precisely, a cryptographic hash function
@code{H} should have the following properties:

@table @emph

@item One-way
Given a hash value @code{H(x)} it is hard to find a string @code{x}
that hashes to that value.

@item Collision-resistant
It is hard to find two different strings, @code{x} and @code{y}, such
that @code{H(x)} = @code{H(y)}.

@end table

Hash functions are useful as building blocks for digital signatures,
360
message authentication codes, pseudo random generators, association of
Niels Möller's avatar
Niels Möller committed
361
362
unique id:s to documents, and many other things.

Niels Möller's avatar
Niels Möller committed
363
364
365
366
367
368
The most commonly used hash functions are MD5 and SHA1. Unfortunately,
both these fail the collision-resistance requirement; cryptologists have
found ways to construct colliding inputs. The recommended hash function
for new applications is SHA256, even though it uses a structure similar
to MD5 and SHA1. Constructing better hash functions is an urgent research
problem.
369

Niels Möller's avatar
Niels Möller committed
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
@subsection @acronym{MD5}

MD5 is a message digest function constructed by Ronald Rivest, and
described in @cite{RFC 1321}. It outputs message digests of 128 bits, or
16 octets. Nettle defines MD5 in @file{<nettle/md5.h>}.

@deftp {Context struct} {struct md5_ctx}
@end deftp

@defvr Constant MD5_DIGEST_SIZE
The size of an MD5 digest, i.e. 16.
@end defvr

@defvr Constant MD5_DATA_SIZE
The internal block size of MD5. Useful for some special constructions,
in particular HMAC-MD5.
@end defvr

@deftypefun void md5_init (struct md5_ctx *@var{ctx})
Initialize the MD5 state.
@end deftypefun

@deftypefun void md5_update (struct md5_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{data})
Hash some more data.
@end deftypefun

@deftypefun void md5_digest (struct md5_ctx *@var{ctx}, unsigned @var{length}, uint8_t *@var{digest})
397
398
399
400
Performs final processing and extracts the message digest, writing it
to @var{digest}. @var{length} may be smaller than
@code{MD5_DIGEST_SIZE}, in which case only the first @var{length}
octets of the digest are written.
Niels Möller's avatar
Niels Möller committed
401

402
403
This function also resets the context in the same way as
@code{md5_init}.
Niels Möller's avatar
Niels Möller committed
404
405
406
@end deftypefun

The normal way to use MD5 is to call the functions in order: First
407
408
409
410
@code{md5_init}, then @code{md5_update} zero or more times, and finally
@code{md5_digest}. After @code{md5_digest}, the context is reset to
its initial state, so you can start over calling @code{md5_update} to
hash new data.
Niels Möller's avatar
Niels Möller committed
411
412
413

To start over, you can call @code{md5_init} at any time.

414
415
@subsection @acronym{MD2}

Niels Möller's avatar
Niels Möller committed
416
MD2 is another hash function of Ronald Rivest's, described in
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
@cite{RFC 1319}. It outputs message digests of 128 bits, or 16 octets.
Nettle defines MD2 in @file{<nettle/md2.h>}.

@deftp {Context struct} {struct md2_ctx}
@end deftp

@defvr Constant MD2_DIGEST_SIZE
The size of an MD2 digest, i.e. 16.
@end defvr

@defvr Constant MD2_DATA_SIZE
The internal block size of MD2.
@end defvr

@deftypefun void md2_init (struct md2_ctx *@var{ctx})
Initialize the MD2 state.
@end deftypefun

@deftypefun void md2_update (struct md2_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{data})
Hash some more data.
@end deftypefun

@deftypefun void md2_digest (struct md2_ctx *@var{ctx}, unsigned @var{length}, uint8_t *@var{digest})
Performs final processing and extracts the message digest, writing it
to @var{digest}. @var{length} may be smaller than
@code{MD2_DIGEST_SIZE}, in which case only the first @var{length}
octets of the digest are written.

This function also resets the context in the same way as
@code{md2_init}.
@end deftypefun

@subsection @acronym{MD4}

Niels Möller's avatar
Niels Möller committed
451
452
453
454
455
MD4 is a predecessor of MD5, described in @cite{RFC 1320}. Like MD5, it
is constructed by Ronald Rivest. It outputs message digests of 128 bits,
or 16 octets. Nettle defines MD4 in @file{<nettle/md4.h>}. Use of MD4 is
not recommended, but it is sometimes needed for compatibility with
existing applications and protocols.
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485

@deftp {Context struct} {struct md4_ctx}
@end deftp

@defvr Constant MD4_DIGEST_SIZE
The size of an MD4 digest, i.e. 16.
@end defvr

@defvr Constant MD4_DATA_SIZE
The internal block size of MD4.
@end defvr

@deftypefun void md4_init (struct md4_ctx *@var{ctx})
Initialize the MD4 state.
@end deftypefun

@deftypefun void md4_update (struct md4_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{data})
Hash some more data.
@end deftypefun

@deftypefun void md4_digest (struct md4_ctx *@var{ctx}, unsigned @var{length}, uint8_t *@var{digest})
Performs final processing and extracts the message digest, writing it
to @var{digest}. @var{length} may be smaller than
@code{MD4_DIGEST_SIZE}, in which case only the first @var{length}
octets of the digest are written.

This function also resets the context in the same way as
@code{md4_init}.
@end deftypefun

Niels Möller's avatar
Niels Möller committed
486
487
488
@subsection @acronym{SHA1}

SHA1 is a hash function specified by @dfn{NIST} (The U.S. National Institute
489
490
for Standards and Technology). It outputs hash values of 160 bits, or 20
octets. Nettle defines SHA1 in @file{<nettle/sha.h>}.
Niels Möller's avatar
Niels Möller committed
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513

The functions are analogous to the MD5 ones.

@deftp {Context struct} {struct sha1_ctx}
@end deftp

@defvr Constant SHA1_DIGEST_SIZE
The size of an SHA1 digest, i.e. 20.
@end defvr

@defvr Constant SHA1_DATA_SIZE
The internal block size of SHA1. Useful for some special constructions,
in particular HMAC-SHA1.
@end defvr

@deftypefun void sha1_init (struct sha1_ctx *@var{ctx})
Initialize the SHA1 state.
@end deftypefun

@deftypefun void sha1_update (struct sha1_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{data})
Hash some more data.
@end deftypefun

514
515
516
517
518
519
520
521
@deftypefun void sha1_digest (struct sha1_ctx *@var{ctx}, unsigned @var{length}, uint8_t *@var{digest})
Performs final processing and extracts the message digest, writing it
to @var{digest}. @var{length} may be smaller than
@code{SHA1_DIGEST_SIZE}, in which case only the first @var{length}
octets of the digest are written.

This function also resets the context in the same way as
@code{sha1_init}.
Niels Möller's avatar
Niels Möller committed
522
523
@end deftypefun

524
525
526
527
528
529
530
531
532
533
534
535
536
@subsection @acronym{SHA256}

SHA256 is another hash function specified by @dfn{NIST}, intended as a
replacement for @acronym{SHA1}, generating larger digests. It outputs
hash values of 256 bits, or 32 octets. Nettle defines SHA256 in
@file{<nettle/sha.h>}.

The functions are analogous to the MD5 ones.

@deftp {Context struct} {struct sha256_ctx}
@end deftp

@defvr Constant SHA256_DIGEST_SIZE
537
The size of an SHA256 digest, i.e. 32.
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
@end defvr

@defvr Constant SHA256_DATA_SIZE
The internal block size of SHA256. Useful for some special constructions,
in particular HMAC-SHA256.
@end defvr

@deftypefun void sha256_init (struct sha256_ctx *@var{ctx})
Initialize the SHA256 state.
@end deftypefun

@deftypefun void sha256_update (struct sha256_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{data})
Hash some more data.
@end deftypefun

@deftypefun void sha256_digest (struct sha256_ctx *@var{ctx}, unsigned @var{length}, uint8_t *@var{digest})
Performs final processing and extracts the message digest, writing it
to @var{digest}. @var{length} may be smaller than
@code{SHA256_DIGEST_SIZE}, in which case only the first @var{length}
octets of the digest are written.
Niels Möller's avatar
Niels Möller committed
558

559
560
This function also resets the context in the same way as
@code{sha256_init}.
Niels Möller's avatar
Niels Möller committed
561
562
@end deftypefun

Niels Möller's avatar
Niels Möller committed
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
@subsection @code{struct nettle_hash}

Nettle includes a struct including information about the supported hash
functions. It is defined in @file{<nettle/nettle-meta.h>}, and is used
by Nettle's implementation of @acronym{HMAC} @pxref{Keyed hash
functions}.

@deftp {Meta struct} @code{struct nettle_hash} name context_size digest_size block_size init update digest
The last three attributes are function pointers, of types
@code{nettle_hash_init_func}, @code{nettle_hash_update_func}, and
@code{nettle_hash_digest_func}. The first argument to these functions is
@code{void *} pointer so a context struct, which is of size
@code{context_size}. 
@end deftp

Niels Möller's avatar
Niels Möller committed
578
579
580
@deftypevr {Constant Struct} {struct nettle_cipher} nettle_md2
@deftypevrx {Constant Struct} {struct nettle_cipher} nettle_md4
@deftypevrx {Constant Struct} {struct nettle_cipher} nettle_md5
Niels Möller's avatar
Niels Möller committed
581
582
583
584
585
586
@deftypevrx {Constant Struct} {struct nettle_cipher} nettle_sha1
@deftypevrx {Constant Struct} {struct nettle_cipher} nettle_sha256

These are all the hash functions that Nettle implements.
@end deftypevr

587
@node Cipher functions, Cipher modes, Hash functions, Reference
Niels Möller's avatar
Niels Möller committed
588
589
590
591
592
593
@comment  node-name,  next,  previous,  up
@section Cipher functions

A @dfn{cipher} is a function that takes a message or @dfn{plaintext}
and a secret @dfn{key} and transforms it to a @dfn{ciphertext}. Given
only the ciphertext, but not the key, it should be hard to find the
Niels Möller's avatar
Niels Möller committed
594
plaintext. Given matching pairs of plaintext and ciphertext, it should
Niels Möller's avatar
Niels Möller committed
595
596
597
598
599
600
601
602
603
604
be hard to find the key.

There are two main classes of ciphers: Block ciphers and stream ciphers.

A block cipher can process data only in fixed size chunks, called
@dfn{blocks}. Typical block sizes are 8 or 16 octets. To encrypt
arbitrary messages, you usually have to pad it to an integral number of
blocks, split it into blocks, and then process each block. The simplest
way is to process one block at a time, independent of each other. That
mode of operation is called @dfn{ECB}, Electronic Code Book mode.
605
However, using @acronym{ECB} is usually a bad idea. For a start, plaintext blocks
Niels Möller's avatar
Niels Möller committed
606
607
that are equal are transformed to ciphertext blocks that are equal; that
leaks information about the plaintext. Usually you should apply the
608
609
610
611
cipher is some ``feedback mode'', @dfn{CBC} (Cipher Block Chaining) and
@dfn{CTR} (Counter mode) being two of
of the most popular. See @xref{Cipher modes}, for information on
how to apply @acronym{CBC} and @acronym{CTR} with Nettle.
Niels Möller's avatar
Niels Möller committed
612

Niels Möller's avatar
Niels Möller committed
613
A stream cipher can be used for messages of arbitrary length. A typical
Niels Möller's avatar
Niels Möller committed
614
stream cipher is a keyed pseudo-random generator. To encrypt a plaintext
Niels Möller's avatar
Niels Möller committed
615
message of @var{n} octets, you key the generator, generate @var{n}
Niels Möller's avatar
Niels Möller committed
616
octets of pseudo-random data, and XOR it with the plaintext. To decrypt,
Niels Möller's avatar
Niels Möller committed
617
618
619
620
621
622
623
624
regenerate the same stream using the key, XOR it to the ciphertext, and
the plaintext is recovered.

@strong{Caution:} The first rule for this kind of cipher is the
same as for a One Time Pad: @emph{never} ever use the same key twice.

A common misconception is that encryption, by itself, implies
authentication. Say that you and a friend share a secret key, and you
Niels Möller's avatar
Niels Möller committed
625
receive an encrypted message. You apply the key, and get a plaintext
626
message that makes sense to you. Can you then be sure that it really was
Niels Möller's avatar
Niels Möller committed
627
your friend that wrote the message you're reading? The answer is no. For
Niels Möller's avatar
Niels Möller committed
628
629
630
631
example, if you were using a block cipher in ECB mode, an attacker may
pick up the message on its way, and reorder, delete or repeat some of
the blocks. Even if the attacker can't decrypt the message, he can
change it so that you are not reading the same message as your friend
Niels Möller's avatar
Niels Möller committed
632
633
634
635
wrote. If you are using a block cipher in @acronym{CBC} mode rather than
ECB, or are using a stream cipher, the possibilities for this sort of
attack are different, but the attacker can still make predictable
changes to the message.
Niels Möller's avatar
Niels Möller committed
636
637
638

It is recommended to @emph{always} use an authentication mechanism in
addition to encrypting the messages. Popular choices are Message
Niels Möller's avatar
Niels Möller committed
639
Authentication Codes like @acronym{HMAC-SHA1} @pxref{Keyed hash
640
functions}, or digital signatures like @acronym{RSA}.
Niels Möller's avatar
Niels Möller committed
641

642
Some ciphers have so called ``weak keys'', keys that results in
Niels Möller's avatar
Niels Möller committed
643
644
645
646
647
648
649
650
undesirable structure after the key setup processing, and should be
avoided. In Nettle, the presence of weak keys for a cipher mean that the
key setup function can fail, so you have to check its return value. In
addition, the context struct has a field @code{status}, that is set to a
non-zero value if key setup fails. When possible, avoid algorithm that
have weak keys. There are several good ciphers that don't have any weak
keys.

651
652
653
654
655
656
657
658
To encrypt a message, you first initialize a cipher context for
encryption or decryption with a particular key. You then use the context
to process plaintext or ciphertext messages. The initialization is known
as called @dfn{key setup}. With Nettle, it is recommended to use each
context struct for only one direction, even if some of the ciphers use a
single key setup function that can be used for both encryption and
decryption.

Niels Möller's avatar
Niels Möller committed
659
@subsection AES
660
AES is a block cipher, specified by NIST as a replacement for
Niels Möller's avatar
Niels Möller committed
661
the older DES standard. The standard is the result of a competition
662
663
between cipher designers. The winning design, also known as RIJNDAEL,
was constructed by Joan Daemen and Vincent Rijnmen.
Niels Möller's avatar
Niels Möller committed
664
665

Like all the AES candidates, the winning design uses a block size of 128
Niels Möller's avatar
Niels Möller committed
666
bits, or 16 octets, and variable key-size, 128, 192 and 256 bits (16, 24
Niels Möller's avatar
Niels Möller committed
667
668
669
670
671
672
673
and 32 octets) being the allowed key sizes. It does not have any weak
keys. Nettle defines AES in @file{<nettle/aes.h>}.
 
@deftp {Context struct} {struct aes_ctx}
@end deftp

@defvr Constant AES_BLOCK_SIZE
Niels Möller's avatar
Niels Möller committed
674
The AES block-size, 16
Niels Möller's avatar
Niels Möller committed
675
676
677
678
679
680
681
682
683
684
685
686
@end defvr

@defvr Constant AES_MIN_KEY_SIZE
@end defvr

@defvr Constant AES_MAX_KEY_SIZE
@end defvr

@defvr Constant AES_KEY_SIZE
Default AES key size, 32
@end defvr

687
688
689
@deftypefun void aes_set_encrypt_key (struct aes_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{key})
@deftypefunx void aes_set_decrypt_key (struct aes_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{key})
Initialize the cipher, for encryption or decryption, respectively.
Niels Möller's avatar
Niels Möller committed
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
@end deftypefun

@deftypefun void aes_encrypt (struct aes_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{dst}, uint8_t *@var{src})
Encryption function. @var{length} must be an integral multiple of the
block size. If it is more than one block, the data is processed in ECB
mode. @code{src} and @code{dst} may be equal, but they must not overlap
in any other way.
@end deftypefun

@deftypefun void aes_decrypt (struct aes_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{dst}, uint8_t *@var{src})
Analogous to @code{aes_encrypt}
@end deftypefun

@subsection ARCFOUR
ARCFOUR is a stream cipher, also known under the trade marked name RC4,
and it is one of the fastest ciphers around. A problem is that the key
setup of ARCFOUR is quite weak, you should never use keys with
structure, keys that are ordinary passwords, or sequences of keys like
708
``secret:1'', ``secret:2'', @enddots{}. If you have keys that don't look
Niels Möller's avatar
Niels Möller committed
709
like random bit strings, and you want to use ARCFOUR, always hash the
Niels Möller's avatar
Niels Möller committed
710
711
712
key before feeding it to ARCFOUR. Furthermore, the initial bytes of the
generated key stream leak information about the key; for this reason, it
is recommended to discard the first 512 bytes of the key stream.
Niels Möller's avatar
Niels Möller committed
713
714
715
716

@example
/* A more robust key setup function for ARCFOUR */
void
717
718
arcfour_set_key_hashed(struct arcfour_ctx *ctx,
                       unsigned length, const uint8_t *key)
Niels Möller's avatar
Niels Möller committed
719
@{
Niels Möller's avatar
Niels Möller committed
720
721
722
  struct sha256_ctx hash;
  uint8_t digest[SHA256_DIGEST_SIZE];
  uint8_t buffer[0x200];
Niels Möller's avatar
Niels Möller committed
723

Niels Möller's avatar
Niels Möller committed
724
725
726
  sha256_init(&hash);
  sha256_update(&hash, length, key);
  sha256_digest(&hash, SHA256_DIGEST_SIZE, digest);
Niels Möller's avatar
Niels Möller committed
727

Niels Möller's avatar
Niels Möller committed
728
729
  arcfour_set_key(ctx, SHA256_DIGEST_SIZE, digest);
  arcfour_crypt(ctx, sizeof(buffer), buffer, buffer);
Niels Möller's avatar
Niels Möller committed
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
@}
@end example

Nettle defines ARCFOUR in @file{<nettle/arcfour.h>}.

@deftp {Context struct} {struct arcfour_ctx}
@end deftp

@defvr Constant ARCFOUR_MIN_KEY_SIZE
Minimum key size, 1
@end defvr

@defvr Constant ARCFOUR_MAX_KEY_SIZE
Maximum key size, 256
@end defvr

@defvr Constant ARCFOUR_KEY_SIZE
Default ARCFOUR key size, 16
@end defvr

@deftypefun void arcfour_set_key (struct arcfour_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{key})
Initialize the cipher. The same function is used for both encryption and
decryption. 
@end deftypefun

755
@deftypefun void arcfour_crypt (struct arcfour_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{dst}, uint8_t *@var{src})
Niels Möller's avatar
Niels Möller committed
756
757
758
759
760
761
762
Encrypt some data. The same function is used for both encryption and
decryption. Unlike the block ciphers, this function modifies the
context, so you can split the data into arbitrary chunks and encrypt
them one after another. The result is the same as if you had called
@code{arcfour_crypt} only once with all the data.
@end deftypefun

Niels Möller's avatar
Niels Möller committed
763
764
765
766
@subsection ARCTWO
ARCTWO (also known as the trade marked name RC2) is a block cipher
specified in RFC 2268. Nettle also include a variation of the ARCTWO
set key operation that lack one step, to be compatible with the
767
reverse engineered RC2 cipher description, as described in a Usenet
Niels Möller's avatar
Niels Möller committed
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
post to @code{sci.crypt} by Peter Gutmann.

ARCTWO uses a block size of 64 bits, and variable key-size ranging
from 1 to 128 octets. Besides the key, ARCTWO also has a second
parameter to key setup, the number of effective key bits, @code{ekb}.
This parameter can be used to artificially reduce the key size. In
practice, @code{ekb} is usually set equal to the input key size.
Nettle defines ARCTWO in @file{<nettle/arctwo.h>}.

We do not recommend the use of ARCTWO; the Nettle implementation is
provided primarily for interoperability with existing applications and
standards.

@deftp {Context struct} {struct arctwo_ctx}
@end deftp

@defvr Constant ARCTWO_BLOCK_SIZE
The AES block-size, 8
@end defvr

@defvr Constant ARCTWO_MIN_KEY_SIZE
@end defvr

@defvr Constant ARCTWO_MAX_KEY_SIZE
@end defvr

@defvr Constant ARCTWO_KEY_SIZE
Default ARCTWO key size, 8
@end defvr

@deftypefun void arctwo_set_key_ekb (struct arctwo_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{key}, unsigned @var{ekb})
@deftypefunx void arctwo_set_key (struct arctwo_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{key})
@deftypefunx void arctwo_set_key_gutmann (struct arctwo_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{key})
Initialize the cipher. The same function is used for both encryption
and decryption. The first function is the most general one, which lets
you provide both the variable size key, and the desired effective key
size (in bits). The maximum value for @var{ekb} is 1024, and for
convenience, @code{ekb = 0} has the same effect as @code{ekb = 1024}.

@code{arctwo_set_key(ctx, length, key)} is equivalent to
@code{arctwo_set_key_ekb(ctx, length, key, 8*length)}, and
@code{arctwo_set_key_gutmann(ctx, length, key)} is equivalent to
@code{arctwo_set_key_ekb(ctx, length, key, 1024)}
@end deftypefun

@deftypefun void arctwo_encrypt (struct arctwo_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{dst}, uint8_t *@var{src})
Encryption function. @var{length} must be an integral multiple of the
block size. If it is more than one block, the data is processed in ECB
mode. @code{src} and @code{dst} may be equal, but they must not
overlap in any other way.
@end deftypefun

@deftypefun void arctwo_decrypt (struct arctwo_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{dst}, uint8_t *@var{src})
Analogous to @code{arctwo_encrypt}
@end deftypefun

Niels Möller's avatar
Niels Möller committed
824
825
@subsection CAST128

826
827
828
829
830
831
832
833
CAST-128 is a block cipher, specified in @cite{RFC 2144}. It uses a 64
bit (8 octets) block size, and a variable key size of up to 128 bits.
Nettle defines cast128 in @file{<nettle/cast128.h>}.

@deftp {Context struct} {struct cast128_ctx}
@end deftp

@defvr Constant CAST128_BLOCK_SIZE
Niels Möller's avatar
Niels Möller committed
834
The CAST128 block-size, 8
835
836
837
@end defvr

@defvr Constant CAST128_MIN_KEY_SIZE
Niels Möller's avatar
Niels Möller committed
838
Minimum CAST128 key size, 5
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
@end defvr

@defvr Constant CAST128_MAX_KEY_SIZE
Maximum CAST128 key size, 16
@end defvr

@defvr Constant CAST128_KEY_SIZE
Default CAST128 key size, 16
@end defvr

@deftypefun void cast128_set_key (struct cast128_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{key})
Initialize the cipher. The same function is used for both encryption and
decryption. 
@end deftypefun

@deftypefun void cast128_encrypt (struct cast128_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{dst}, uint8_t *@var{src})
Encryption function. @var{length} must be an integral multiple of the
block size. If it is more than one block, the data is processed in ECB
mode. @code{src} and @code{dst} may be equal, but they must not overlap
in any other way.
@end deftypefun

@deftypefun void cast128_decrypt (struct cast128_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{dst}, uint8_t *@var{src})
Analogous to @code{cast128_encrypt}
@end deftypefun

Niels Möller's avatar
Niels Möller committed
865
866
@subsection BLOWFISH

867
868
869
870
871
872
873
874
BLOWFISH is a block cipher designed by Bruce Schneier. It uses a block
size of 64 bits (8 octets), and a variable key size, up to 448 bits. It
has some weak keys. Nettle defines BLOWFISH in @file{<nettle/blowfish.h>}.

@deftp {Context struct} {struct blowfish_ctx}
@end deftp

@defvr Constant BLOWFISH_BLOCK_SIZE
Niels Möller's avatar
Niels Möller committed
875
The BLOWFISH block-size, 8
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
@end defvr

@defvr Constant BLOWFISH_MIN_KEY_SIZE
Minimum BLOWFISH key size, 8
@end defvr

@defvr Constant BLOWFISH_MAX_KEY_SIZE
Maximum BLOWFISH key size, 56
@end defvr

@defvr Constant BLOWFISH_KEY_SIZE
Default BLOWFISH key size, 16
@end defvr

@deftypefun int blowfish_set_key (struct blowfish_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{key})
Initialize the cipher. The same function is used for both encryption and
decryption. Returns 1 on success, and 0 if the key was weak. Calling
@code{blowfish_encrypt} or @code{blowfish_decrypt} with a weak key will
crash with an assert violation.
@end deftypefun

@deftypefun void blowfish_encrypt (struct blowfish_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{dst}, uint8_t *@var{src})
Encryption function. @var{length} must be an integral multiple of the
block size. If it is more than one block, the data is processed in ECB
mode. @code{src} and @code{dst} may be equal, but they must not overlap
in any other way.
@end deftypefun

@deftypefun void blowfish_decrypt (struct blowfish_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{dst}, uint8_t *@var{src})
Analogous to @code{blowfish_encrypt}
@end deftypefun

Niels Möller's avatar
Niels Möller committed
908
@subsection DES
909
910
911
912
913
914
915
916
917
918
DES is the old Data Encryption Standard, specified by NIST. It uses a
block size of 64 bits (8 octets), and a key size of 56 bits. However,
the key bits are distributed over 8 octets, where the least significant
bit of each octet is used for parity. A common way to use DES is to
generate 8 random octets in some way, then set the least significant bit
of each octet to get odd parity, and initialize DES with the resulting
key.

The key size of DES is so small that keys can be found by brute force,
using specialized hardware or lots of ordinary work stations in
Niels Möller's avatar
Niels Möller committed
919
parallel. One shouldn't be using plain DES at all today, if one uses
Niels Möller's avatar
Niels Möller committed
920
DES at all one should be using ``triple DES'', see DES3 below.
921
922
923
924
925
926
927

DES also has some weak keys. Nettle defines DES in @file{<nettle/des.h>}.

@deftp {Context struct} {struct des_ctx}
@end deftp

@defvr Constant DES_BLOCK_SIZE
Niels Möller's avatar
Niels Möller committed
928
The DES block-size, 8
929
930
931
932
933
934
@end defvr

@defvr Constant DES_KEY_SIZE
DES key size, 8
@end defvr

935
@deftypefun int des_set_key (struct des_ctx *@var{ctx}, const uint8_t *@var{key})
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
Initialize the cipher. The same function is used for both encryption and
decryption. Returns 1 on success, and 0 if the key was weak or had bad
parity. Calling @code{des_encrypt} or @code{des_decrypt} with a bad key
will crash with an assert violation.
@end deftypefun

@deftypefun void des_encrypt (struct des_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{dst}, uint8_t *@var{src})
Encryption function. @var{length} must be an integral multiple of the
block size. If it is more than one block, the data is processed in ECB
mode. @code{src} and @code{dst} may be equal, but they must not overlap
in any other way.
@end deftypefun

@deftypefun void des_decrypt (struct des_ctx *@var{ctx}, unsigned @var{length}, const uint8_t *@var{dst}, uint8_t *@var{src})
Analogous to @code{des_encrypt}
@end deftypefun
Niels Möller's avatar
Niels Möller committed
952

953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
@deftypefun void des_fix_parity (unsigned @var{length}, uint8_t *@var{dst}, const uint8_t *@var{src})
Adjusts the parity bits to match DES's requirements. You need this
function if you have created a random-looking string by a key agreement
protocol, and want to use it as a DES key. @var{dst} and @var{src} may
be equal.
@end deftypefun

@subsection DES3
The inadequate key size of DES has already been mentioned. One way to
increase the key size is to pipe together several DES boxes with
independent keys. It turns out that using two DES ciphers is not as
secure as one might think, even if the key size of the combination is a
respectable 112 bits.

The standard way to increase DES's key size is to use three DES boxes.
The mode of operation is a little peculiar: the middle DES box is wired
in the reverse direction. To encrypt a block with DES3, you encrypt it
using the first 56 bits of the key, then @emph{decrypt} it using the
middle 56 bits of the key, and finally encrypt it again using the last
972
973
56 bits of the key. This is known as ``ede'' triple-DES, for
``encrypt-decrypt-encrypt''.
974

975
The ``ede'' construction provides some backward compatibility, as you get
976
977
978
979
980
981
982
plain single DES simply by feeding the same key to all three boxes. That
should help keeping down the gate count, and the price, of hardware
circuits implementing both plain DES and DES3.

DES3 has a key size of 168 bits, but just like plain DES, useless parity
bits are inserted, so that keys are represented as 24 octets (192 bits).
As a 112 bit key is large enough to make brute force attacks
983
impractical, some applications uses a ``two-key'' variant of triple-DES.
984
985
986
987
988
989
In this mode, the same key bits are used for the first and the last DES
box in the pipe, while the middle box is keyed independently. The
two-key variant is believed to be secure, i.e. there are no known
attacks significantly better than brute force.

Naturally, it's simple to implement triple-DES on top of Nettle's DES
990
functions. Nettle includes an implementation of three-key ``ede''
991
992
993
994
995
996
997
triple-DES, it is defined in the same place as plain DES,
@file{<nettle/des.h>}.

@deftp {Context struct} {struct des3_ctx}
@end deftp

@defvr Constant DES3_BLOCK_SIZE
Niels Möller's avatar
Niels Möller committed
998
The DES3 block-size is the same as DES_BLOCK_SIZE, 8
999
1000
@end defvr