Nettle Manual
For the Nettle Library version 3.4
Niels M¨oller
This manual is for the Nettle library (version 3.4), a low-level cryptographic library.
Originally written 2001 by Niels M¨oller, updated 2017.
This manual is placed i n the public domain. You may freely copy it, in whole
or in part, with or with out modification. Attribution is appreciated, but not
required.
i
Table of Contents
1 Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 Copyright . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3 Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5 Linking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
6 Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
7 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
7.1 Hash functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
7.1.1 Recommended hash functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
7.1.1.1 SHA256 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
7.1.1.2 SHA224. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
7.1.1.3 SHA512. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
7.1.1.4 SHA384 and other variants of SHA512 . . . . . . . . . . . . . . . . . . 11
7.1.1.5 SHA3-224 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
7.1.1.6 SHA3-256 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
7.1.1.7 SHA3-384 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
7.1.1.8 SHA3-512 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
7.1.1.9 SHAKE-256 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
7.1.2 Legacy hash functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
7.1.2.1 MD5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
7.1.2.2 MD2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
7.1.2.3 MD4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
7.1.2.4 RIPEMD160 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
7.1.2.5 SHA1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
7.1.2.6 GOSTHASH94 and GOSTHASH94CP . . . . . . . . . . . . . . . . . . 18
7.1.3 The struct nettle_hash abstraction . . . . . . . . . . . . . . . . . . . . 19
7.2 Cipher functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
7.2.1 AES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
7.2.2 ARCFOUR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
7.2.3 ARCTWO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
7.2.4 BLOWFISH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
7.2.5 Camellia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
7.2.6 CAST128 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
7.2.7 ChaCha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
7.2.7.1 32-bit counter variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
ii
7.2.8 DES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
7.2.9 DES3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
7.2.10 Salsa20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
7.2.11 SERPENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7.2.12 TWOFISH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.2.13 The struct nettle_cipher abstraction . . . . . . . . . . . . . . . . . 33
7.3 Cipher modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
7.3.1 Cipher Block Chaining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
7.3.2 Counter mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
7.3.3 Cipher Feedback mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
7.3.4 XEX-based tweaked-codebook mode with ci phe r te x t st eal i n g
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
7.3.4.1 General (XTS) interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
7.3.4.2 XTS-AES interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
7.4 Authenticated encryption with associated data . . . . . . . . . . . . . . . . 42
7.4.1 EAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
7.4.1.1 General EAX interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
7.4.1.2 EAX helper macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.4.1.3 EAX-AES128 interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
7.4.2 Galois counter mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
7.4.2.1 General GCM interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.4.2.2 GCM helper macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7.4.2.3 GCM-AES interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7.4.2.4 GCM-Camellia interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
7.4.3 Counter with CBC-MAC mode . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.4.3.1 General CCM interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7.4.3.2 CCM message interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7.4.3.3 CCM-AES interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7.4.4 ChaCha-Poly1305 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.4.5 Synthetic Initialization Vector AEAD . . . . . . . . . . . . . . . . . . . . . 56
7.4.5.1 General interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7.4.5.2 SIV-CMAC-AES interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7.4.6 The struct nettle_aead abstraction . . . . . . . . . . . . . . . . . . . . 57
7.5 Keyed Hash Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.5.1 HMAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.5.2 Concrete HMAC functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.5.2.1 HMAC-MD5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.5.2.2 HMAC-RIPEMD160 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.5.2.3 HMAC-SHA1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.5.2.4 HMAC-SHA256 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.5.2.5 HMAC-SHA512 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.5.3 UMAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.5.4 CMAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
7.5.5 Poly1305 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
7.6 Key derivation Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
7.6.1 HKDF: HMAC-based Extract-and-Expand. . . . . . . . . . . . . . . . 66
7.6.2 PBKDF2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.6.3 Concrete PBKDF2 functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
iii
7.6.3.1 PBKDF2-HMAC-SHA1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7.6.3.2 PBKDF2-HMAC-SHA256 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7.7 Public-key algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7.7.1 RSA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
7.7.1.1 Nettle’s RSA support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
7.7.2 DSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
7.7.2.1 Nettle’s DSA support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
7.7.2.2 Old, deprecated, DSA interface . . . . . . . . . . . . . . . . . . . . . . 79
7.7.3 Elliptic curves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
7.7.3.1 Side-channel silence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
7.7.3.2 ECDSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
7.7.3.3 GOSTDSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7.7.3.4 Curve25519 and Curve448 . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
7.7.3.5 EdDSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.8 Randomness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
7.8.1 Yarrow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
7.9 ASCII encoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
7.10 Miscellaneous functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
7.11 Compatibility functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
8 Traditional Nettle Soup . . . . . . . . . . . . . . . . . . . . . . . 96
9 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Function and Concept Index . . . . . . . . . . . . . . . . . . . . . 98