rbnacl-libsodium 0.5.0.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +4 -0
- data/lib/rbnacl/libsodium/version.rb +1 -1
- data/vendor/libsodium/AUTHORS +62 -81
- data/vendor/libsodium/ChangeLog +31 -1
- data/vendor/libsodium/README.markdown +15 -364
- data/vendor/libsodium/THANKS +6 -0
- data/vendor/libsodium/autom4te.cache/output.0 +67 -36
- data/vendor/libsodium/autom4te.cache/output.1 +67 -36
- data/vendor/libsodium/autom4te.cache/output.2 +67 -36
- data/vendor/libsodium/autom4te.cache/traces.0 +52 -51
- data/vendor/libsodium/autom4te.cache/traces.1 +137 -133
- data/vendor/libsodium/autom4te.cache/traces.2 +52 -51
- data/vendor/libsodium/builds/msvc/version.h +2 -2
- data/vendor/libsodium/builds/msvc/vs2010/libsodium/libsodium.vcxproj +365 -345
- data/vendor/libsodium/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters +1114 -1037
- data/vendor/libsodium/builds/msvc/vs2010/test/test.props +8 -2
- data/vendor/libsodium/builds/msvc/vs2012/libsodium/libsodium.vcxproj +364 -344
- data/vendor/libsodium/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters +1113 -1036
- data/vendor/libsodium/builds/msvc/vs2012/test/test.props +8 -2
- data/vendor/libsodium/builds/msvc/vs2013/libsodium/libsodium.vcxproj +365 -345
- data/vendor/libsodium/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters +1114 -1037
- data/vendor/libsodium/builds/msvc/vs2013/test/test.props +8 -2
- data/vendor/libsodium/configure +66 -35
- data/vendor/libsodium/configure.ac +25 -14
- data/vendor/libsodium/dist-build/ios.sh +1 -1
- data/vendor/libsodium/dist-build/msys2-win64.sh +1 -1
- data/vendor/libsodium/libsodium.vcxproj +29 -14
- data/vendor/libsodium/libsodium.vcxproj.filters +77 -28
- data/vendor/libsodium/msvc-scripts/process.bat +3 -3
- data/vendor/libsodium/packaging/nuget/package.config +1 -1
- data/vendor/libsodium/packaging/nuget/package.gsl +6 -1
- data/vendor/libsodium/packaging/nuget/package.nuspec +1 -1
- data/vendor/libsodium/src/libsodium/Makefile.am +31 -13
- data/vendor/libsodium/src/libsodium/Makefile.in +406 -155
- data/vendor/libsodium/src/libsodium/crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c +146 -0
- data/vendor/libsodium/src/libsodium/crypto_box/crypto_box.c +13 -0
- data/vendor/libsodium/src/libsodium/crypto_box/crypto_box_easy.c +39 -73
- data/vendor/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305_api.c +5 -0
- data/vendor/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/ref/api.h +2 -0
- data/vendor/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/ref/keypair_curve25519xsalsa20poly1305.c +15 -0
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-ref.c +6 -5
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2s-ref.c +6 -5
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/crypto_onetimeauth.c +25 -0
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/auth_poly1305_donna.c +76 -47
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.h +30 -7
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna32.h +3 -16
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna64.h +3 -10
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/verify_poly1305_donna.c +11 -6
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.c +23 -1
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305_try.c +1 -1
- data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256 → scryptsalsa208sha256}/crypto_scrypt-common.c +7 -7
- data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256 → scryptsalsa208sha256}/crypto_scrypt.h +6 -20
- data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256/nosse/pwhash_scryptxsalsa208sha256_nosse.c → scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c} +0 -0
- data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256 → scryptsalsa208sha256}/pbkdf2-sha256.c +1 -11
- data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256 → scryptsalsa208sha256}/pbkdf2-sha256.h +0 -0
- data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256/pwhash_scryptxsalsa208sha256.c → scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c} +50 -25
- data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256 → scryptsalsa208sha256}/scrypt_platform.c +4 -0
- data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256/sse/pwhash_scryptxsalsa208sha256_sse.c → scryptsalsa208sha256/sse/pwhash_scryptsalsa208sha256_sse.c} +0 -0
- data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256 → scryptsalsa208sha256}/sysendian.h +0 -0
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/donna_c64/smult_curve25519_donna_c64.c +1 -1
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/{ref → ref10}/api.h +0 -3
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/base_curve25519_ref10.c +14 -0
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe.h +44 -0
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_0_curve25519_ref10.c +23 -0
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_1_curve25519_ref10.c +23 -0
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_add_curve25519_ref10.c +61 -0
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_copy_curve25519_ref10.c +33 -0
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_cswap_curve25519_ref10.c +77 -0
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_frombytes_curve25519_ref10.c +73 -0
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_invert_curve25519_ref10.c +18 -0
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_mul121666_curve25519_ref10.c +74 -0
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_mul_curve25519_ref10.c +257 -0
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_sq_curve25519_ref10.c +153 -0
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_sub_curve25519_ref10.c +61 -0
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c +123 -0
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/montgomery.h +140 -0
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/pow225521.h +160 -0
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/scalarmult_curve25519_ref10.c +54 -0
- data/vendor/libsodium/src/libsodium/crypto_secretbox/crypto_secretbox_easy.c +92 -61
- data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_scalarmult_base.c +3 -3
- data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/pow22523.h +2 -2
- data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/pow225521.h +2 -2
- data/vendor/libsodium/src/libsodium/crypto_sign/edwards25519sha512batch/ref/sc25519_edwards25519sha512batch.c +8 -4
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/consts_aes128ctr.c +3 -3
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/int128.h +6 -3
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/int128_aes128ctr.c +23 -23
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/ref/api.h +12 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/ref/stream_chacha20_ref.c +275 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/stream_chacha20_api.c +36 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/amd64_xmm6/stream_salsa20_amd64_xmm6.S +11 -10
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/ref/xor_salsa20_ref.c +8 -3
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/stream_salsa20_api.c +8 -0
- data/vendor/libsodium/src/libsodium/include/Makefile.am +3 -2
- data/vendor/libsodium/src/libsodium/include/Makefile.in +3 -2
- data/vendor/libsodium/src/libsodium/include/sodium.h +3 -1
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_aead_chacha20poly1305.h +55 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_box.h +21 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_box_curve25519xsalsa20poly1305.h +11 -1
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_hash.h +7 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_hash_sha256.h +7 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_hash_sha512.h +7 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_onetimeauth.h +15 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_onetimeauth_poly1305.h +25 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_pwhash_scryptsalsa208sha256.h +80 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_scalarmult_curve25519.h +2 -2
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_secretbox.h +14 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_sign_edwards25519sha512batch.h +11 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_stream_aes256estream.h +11 -6
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_stream_chacha20.h +49 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_stream_salsa20.h +6 -0
- data/vendor/libsodium/src/libsodium/include/sodium/randombytes.h +7 -7
- data/vendor/libsodium/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c +10 -14
- data/vendor/libsodium/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c +10 -13
- data/vendor/libsodium/src/libsodium/sodium/compat.c +55 -4
- data/vendor/libsodium/src/libsodium/sodium/utils.c +18 -0
- data/vendor/libsodium/test/default/Makefile.am +24 -12
- data/vendor/libsodium/test/default/Makefile.in +116 -73
- data/vendor/libsodium/test/default/aead_chacha20poly1305.c +97 -0
- data/vendor/libsodium/test/default/aead_chacha20poly1305.exp +8 -0
- data/vendor/libsodium/test/default/box_easy.c +1 -1
- data/vendor/libsodium/test/default/box_seed.c +28 -0
- data/vendor/libsodium/test/default/box_seed.exp +8 -0
- data/vendor/libsodium/test/default/chacha20.c +45 -0
- data/vendor/libsodium/test/default/chacha20.exp +5 -0
- data/vendor/libsodium/test/default/pwhash.c +83 -15
- data/vendor/libsodium/test/default/pwhash.exp +10 -1
- data/vendor/libsodium/test/default/pwhash_scrypt_ll.c +67 -0
- data/vendor/libsodium/test/default/pwhash_scrypt_ll.exp +15 -0
- data/vendor/libsodium/test/default/secretbox_easy.c +13 -1
- data/vendor/libsodium/test/default/secretbox_easy.exp +19 -0
- data/vendor/libsodium/test/default/secretbox_easy2.c +5 -0
- data/vendor/libsodium/test/default/secretbox_easy2.exp +1 -0
- data/vendor/libsodium/test/default/sign.c +7 -3
- metadata +44 -21
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/api.h +0 -8
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref/base_curve25519_ref.c +0 -20
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref/smult_curve25519_ref.c +0 -268
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_onetimeauth_poly1305_donna.h +0 -37
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_pwhash_scryptxsalsa208sha256.h +0 -48
- data/vendor/libsodium/test/default/scalarmult7.c +0 -32
- data/vendor/libsodium/test/default/scalarmult7.exp +0 -1
- data/vendor/libsodium/test/default/scalarmult8.c +0 -32
- data/vendor/libsodium/test/default/scalarmult8.exp +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5cb069040837f0e3b04341b168a355dd6e969bae
|
4
|
+
data.tar.gz: 31e229a06aacbda9d0a507a1ea92bd58371239e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff6905fa1b20ed8541561347d2fd1cc7a8969e08c121dfc0d63bc3f3bee84413c423dd1a0e4fdf4ebc9dfd6c207bddf02684ba69a1a595e2a7fe278c96e53724
|
7
|
+
data.tar.gz: 89d77a27b2a5c140867221ec4836f77c96d52bf01ddce6095e2e22cd16f4fa79dc31342d0f28fdae62e57521aaae2a70b3a51bffe689e2bffb3fa919d3869469
|
data/CHANGES.md
CHANGED
data/vendor/libsodium/AUTHORS
CHANGED
@@ -1,106 +1,87 @@
|
|
1
|
+
|
1
2
|
Designers
|
2
3
|
=========
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
blake2 Jean-Philippe Aumasson
|
6
|
+
Christian Winnerlein
|
7
|
+
Samuel Neves
|
8
|
+
Zooko Wilcox-O'Hearn
|
9
|
+
|
10
|
+
chacha20 Daniel J. Bernstein
|
11
|
+
salsa20
|
12
|
+
|
13
|
+
chacha20poly1305 Adam Langley
|
14
|
+
|
15
|
+
curve25519 Daniel J. Bernstein
|
16
|
+
|
17
|
+
curve25519xsalsa20poly1305 Daniel J. Bernstein
|
18
|
+
|
19
|
+
ed25519 Daniel J. Bernstein
|
20
|
+
Bo-Yin Yang
|
21
|
+
Niels Duif
|
22
|
+
Peter Schwabe
|
23
|
+
Tanja Lange
|
24
|
+
|
25
|
+
poly1305 Daniel J. Bernstein
|
26
|
+
|
27
|
+
siphash Jean-Philippe Aumasson
|
28
|
+
Daniel J. Bernstein
|
29
|
+
|
30
|
+
scrypt Colin Percival
|
11
31
|
|
12
32
|
Implementors
|
13
33
|
============
|
14
34
|
|
15
|
-
|
16
|
-
--------------------
|
17
|
-
Daniel J. Bernstein
|
35
|
+
crypto_aead/chacha20poly1305 Frank Denis
|
18
36
|
|
19
|
-
|
20
|
-
--------------------
|
21
|
-
Daniel J. Bernstein
|
37
|
+
crypto_box/curve25519xsalsa20poly1305 Daniel J. Bernstein
|
22
38
|
|
39
|
+
crypto_core/hsalsa20 Daniel J. Bernstein
|
40
|
+
crypto_core/salsa20
|
23
41
|
crypto_core/salsa2012
|
24
|
-
-------------------
|
25
|
-
Daniel J. Bernstein
|
26
|
-
|
27
42
|
crypto_core/salsa208
|
28
|
-
---------------------
|
29
|
-
Daniel J. Bernstein
|
30
|
-
|
31
|
-
crypto_hash/sha256
|
32
|
-
------------------
|
33
|
-
Colin Percival
|
34
43
|
|
44
|
+
crypto_hash/sha256 Colin Percival
|
35
45
|
crypto_hash/sha512
|
36
|
-
|
37
|
-
Colin Percival
|
38
|
-
|
39
|
-
crypto_auth/hmacsha256
|
40
|
-
------------------
|
41
|
-
Colin Percival
|
46
|
+
crypto_hash/sha512256
|
42
47
|
|
48
|
+
crypto_auth/hmacsha256 Colin Percival
|
43
49
|
crypto_auth/hmacsha512
|
44
|
-
|
45
|
-
Colin Percival
|
50
|
+
crypto_auth/hmacsha512256
|
46
51
|
|
47
|
-
crypto_scalarmult/curve25519/
|
48
|
-
--------------------------------
|
49
|
-
Matthew Dempsky (Mochi Media)
|
52
|
+
crypto_scalarmult/curve25519/ref10 Daniel J. Bernstein
|
50
53
|
|
51
|
-
crypto_scalarmult/curve25519/donna_c64
|
52
|
-
--------------------------------------
|
53
|
-
Adam Langley (Google)
|
54
|
+
crypto_scalarmult/curve25519/donna_c64 Adam Langley
|
54
55
|
|
55
|
-
|
56
|
-
-------------------
|
57
|
-
Daniel J. Bernstein
|
58
|
-
Niels Duif
|
59
|
-
Tanja Lange
|
60
|
-
lead: Peter Schwabe
|
61
|
-
Bo-Yin Yang
|
56
|
+
crypto_secretbox/xsalsa20poly1305 Daniel J. Bernstein
|
62
57
|
|
63
|
-
|
64
|
-
|
65
|
-
|
58
|
+
crypto_sign/ed25519 Peter Schwabe
|
59
|
+
Daniel J. Bernstein
|
60
|
+
Niels Duif
|
61
|
+
Tanja Lange
|
62
|
+
Bo-Yin Yang
|
66
63
|
|
67
|
-
crypto_stream/
|
68
|
-
---------------------------
|
69
|
-
Hongjun Wu
|
64
|
+
crypto_stream/aes128ctr Peter Schwabe
|
70
65
|
|
71
|
-
crypto_stream/
|
72
|
-
|
73
|
-
Daniel J. Bernstein
|
66
|
+
crypto_stream/aes256estream Hongjun Wu
|
67
|
+
Frank Denis
|
74
68
|
|
75
|
-
crypto_stream/
|
76
|
-
-----------------------
|
77
|
-
Daniel J. Bernstein
|
69
|
+
crypto_stream/chacha20 Daniel J. Bernstein
|
78
70
|
|
71
|
+
crypto_stream/salsa20 Daniel J. Bernstein
|
72
|
+
crypto_stream/salsa2012
|
79
73
|
crypto_stream/salsa208
|
80
|
-
----------------------
|
81
|
-
Daniel J. Bernstein
|
82
|
-
|
83
74
|
crypto_stream/xsalsa20
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
Christian Winnerlein
|
98
|
-
|
99
|
-
crypto_onetimeauth/poly1305/donna
|
100
|
-
---------------------------------
|
101
|
-
Andrew "floodyberry" Moon.
|
102
|
-
|
103
|
-
crypto_pwhash/scryptxsalsa208sha256
|
104
|
-
--------------------------------
|
105
|
-
Colin Percival
|
106
|
-
Alexander Peslyak
|
75
|
+
|
76
|
+
crypto_shorthash/siphash24 Jean-Philippe Aumasson
|
77
|
+
Daniel J. Bernstein
|
78
|
+
|
79
|
+
crypto_generichash/blake2b Jean-Philippe Aumasson
|
80
|
+
Christian Winnerlein
|
81
|
+
Samuel Neves
|
82
|
+
Zooko Wilcox-O'Hearn
|
83
|
+
|
84
|
+
crypto_onetimeauth/poly1305/donna Andrew "floodyberry" Moon.
|
85
|
+
|
86
|
+
crypto_pwhash/scryptsalsa208sha256 Colin Percival
|
87
|
+
Alexander Peslyak
|
data/vendor/libsodium/ChangeLog
CHANGED
@@ -1,4 +1,34 @@
|
|
1
1
|
|
2
|
+
* Version 0.6.0
|
3
|
+
- The ChaCha20 stream cipher has been added, as crypto_stream_chacha20_*
|
4
|
+
- The ChaCha20Poly1305 AEAD construction has been implemented, as
|
5
|
+
crypto_aead_chacha20poly1305_*
|
6
|
+
- The _easy API does not require any heap allocations any more and
|
7
|
+
does not have any overhead over the NaCl API. With the password
|
8
|
+
hashing function being an obvious exception, the library doesn't
|
9
|
+
allocate and will not allocate heap memory ever.
|
10
|
+
- crypto_box and crypto_secretbox have a new _detached API to store
|
11
|
+
the authentication tag and the encrypted message separately.
|
12
|
+
- crypto_pwhash_scryptxsalsa208sha256*() functions have been renamed
|
13
|
+
crypto_pwhash_scryptsalsa208sha256*().
|
14
|
+
- The low-level crypto_pwhash_scryptsalsa208sha256_ll() function
|
15
|
+
allows setting individual parameters of the scrypt function.
|
16
|
+
- New macros and functions for recommended crypto_pwhash_* parameters
|
17
|
+
have been added.
|
18
|
+
- Similarly to crypto_sign_seed_keypair(), crypto_box_seed_keypair()
|
19
|
+
has been introduced to deterministically generate a key pair from a seed.
|
20
|
+
- crypto_onetimeauth() now provides a streaming interface.
|
21
|
+
- crypto_stream_chacha20_xor_ic() and crypto_stream_salsa20_xor_ic()
|
22
|
+
have been added to use a non-zero initial block counter.
|
23
|
+
- On Windows, CryptGenRandom() was replaced by RtlGenRandom(), which
|
24
|
+
doesn't require the Crypt API.
|
25
|
+
- The high bit in curve25519 is masked instead of processing the key as
|
26
|
+
a 256-bit value.
|
27
|
+
- The curve25519 ref implementation was replaced by the latest ref10
|
28
|
+
implementation from Supercop.
|
29
|
+
- sodium_mlock() now prevents memory from being included in coredumps
|
30
|
+
on Linux 3.4+
|
31
|
+
|
2
32
|
* Version 0.5.0
|
3
33
|
- sodium_mlock()/sodium_munlock() have been introduced to lock pages
|
4
34
|
in memory before storing sensitive data, and to zero them before
|
@@ -6,7 +36,7 @@ unlocking them.
|
|
6
36
|
- High-level wrappers for crypto_box and crypto_secretbox
|
7
37
|
(crypto_box_easy and crypto_secretbox_easy) can be used to avoid
|
8
38
|
dealing with the specific memory layout regular functions depend on.
|
9
|
-
-
|
39
|
+
- crypto_pwhash_scryptsalsa208sha256* functions have been added
|
10
40
|
to derive a key from a password, and for password storage.
|
11
41
|
- Salsa20 and ed25519 implementations now support overlapping
|
12
42
|
inputs/keys/outputs (changes imported from supercop-20140505).
|
@@ -1,385 +1,36 @@
|
|
1
1
|
[![Build Status](https://travis-ci.org/jedisct1/libsodium.png?branch=master)](https://travis-ci.org/jedisct1/libsodium?branch=master)
|
2
|
+
[![Coverity Scan Build Status](https://scan.coverity.com/projects/2397/badge.svg)](https://scan.coverity.com/projects/2397)
|
2
3
|
|
3
4
|
![libsodium](https://raw.github.com/jedisct1/libsodium/master/logo.png)
|
4
5
|
============
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
decryption, signatures, etc.
|
7
|
+
Sodium is a new, easy-to-use software library for encryption,
|
8
|
+
decryption, signatures, password hashing and more.
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
Sodium is a portable, cross-compilable, installable, packageable
|
14
|
-
fork of NaCl (based on the latest released upstream version [nacl-20110221](http://hyperelliptic.org/nacl/nacl-20110221.tar.bz2)), with a compatible API.
|
15
|
-
|
16
|
-
The design choices, particularly in regard to the Curve25519
|
17
|
-
Diffie-Hellman function, emphasize security (whereas NIST curves
|
18
|
-
emphasize "performance" at the cost of security), and "magic
|
19
|
-
constants" in NaCl/Sodium have clear rationales.
|
20
|
-
|
21
|
-
The same cannot be said of NIST curves, where the specific origins of
|
22
|
-
certain constants are not described by the standards.
|
23
|
-
|
24
|
-
And despite the emphasis on higher security, primitives are faster
|
25
|
-
across-the-board than most implementations of the NIST standards.
|
26
|
-
|
27
|
-
## Portability
|
10
|
+
It is a portable, cross-compilable, installable, packageable
|
11
|
+
fork of [NaCl](http://nacl.cr.yp.to/), with a compatible API, and an
|
12
|
+
extended API to improve usability even further.
|
28
13
|
|
29
|
-
|
30
|
-
|
31
|
-
resulting library is not guaranteed to work on different hardware.
|
32
|
-
|
33
|
-
Sodium performs tests at run-time, so that the same binary package can
|
34
|
-
still run everywhere.
|
14
|
+
Its goal is to provide all of the core operations needed to build
|
15
|
+
higher-level cryptographic tools.
|
35
16
|
|
36
|
-
Sodium
|
17
|
+
Sodium supports a variety of compilers and operating systems,
|
37
18
|
including Windows (with MingW or Visual Studio, x86 and x64), iOS and Android.
|
38
19
|
|
39
|
-
##
|
40
|
-
|
41
|
-
Sodium is a shared library with a machine-independent set of
|
42
|
-
headers, so that it can easily be used by 3rd party projects.
|
43
|
-
|
44
|
-
The library is built using autotools, making it easy to package.
|
45
|
-
|
46
|
-
Installation is trivial, and both compilation and testing can take
|
47
|
-
advantage of multiple CPU cores.
|
48
|
-
|
49
|
-
Download a
|
50
|
-
[tarball of libsodium](https://download.libsodium.org/libsodium/releases/),
|
51
|
-
then follow the ritual:
|
52
|
-
|
53
|
-
./configure
|
54
|
-
make && make check && make install
|
55
|
-
|
56
|
-
Pre-compiled Win32 packages are available for download at the same
|
57
|
-
location.
|
58
|
-
|
59
|
-
Integrity of source tarballs can currently be checked using PGP or
|
60
|
-
verified DNS queries (`dig +dnssec +short txt <file>.download.libsodium.org`
|
61
|
-
returns the SHA256 of any file available for download).
|
62
|
-
|
63
|
-
## Pre-built binaries
|
64
|
-
|
65
|
-
Pre-built libraries for Visual studio 2010, 2012 and 2013, both for
|
66
|
-
x86 and x64, are available for download at
|
67
|
-
https://download.libsodium.org/libsodium/releases/ , courtesy of
|
68
|
-
Samuel Neves (@sneves).
|
69
|
-
|
70
|
-
## Bindings for other languages
|
71
|
-
|
72
|
-
* C++: [sodiumpp](https://github.com/rubendv/sodiumpp)
|
73
|
-
* Erlang: [Erlang-NaCl](https://github.com/tonyg/erlang-nacl)
|
74
|
-
* Erlang: [Salt](https://github.com/freza/salt)
|
75
|
-
* Haskell: [Saltine](https://github.com/tel/saltine)
|
76
|
-
* Idris: [Idris-Sodium](https://github.com/edwinb/sodium-idris)
|
77
|
-
* Java: [Kalium](https://github.com/abstractj/kalium)
|
78
|
-
* Java JNI: [Kalium-JNI](https://github.com/joshjdevl/kalium-jni)
|
79
|
-
* Julia: [Sodium.jl](https://github.com/amitmurthy/Sodium.jl)
|
80
|
-
* LUA: [lua-sodium](https://github.com/morfoh/lua-sodium)
|
81
|
-
* .NET: [libsodium-net](https://github.com/adamcaudill/libsodium-net)
|
82
|
-
* NodeJS: [node-sodium](https://github.com/paixaop/node-sodium)
|
83
|
-
* Objective C: [NAChloride](https://github.com/gabriel/NAChloride)
|
84
|
-
* OCaml: [ocaml-sodium](https://github.com/dsheets/ocaml-sodium)
|
85
|
-
* Perl: [Crypto-Sodium](https://github.com/mgregoro/Crypt-Sodium)
|
86
|
-
* Pharo/Squeak: [Crypto-NaCl](http://www.eighty-twenty.org/index.cgi/tech/smalltalk/nacl-for-squeak-and-pharo-20130601.html)
|
87
|
-
* PHP: [PHP-Sodium](https://github.com/alethia7/php-sodium)
|
88
|
-
* PHP: [libsodium-php](https://github.com/jedisct1/libsodium-php)
|
89
|
-
* Python: [PyNaCl](https://github.com/dstufft/pynacl)
|
90
|
-
* Python: [PySodium](https://github.com/stef/pysodium)
|
91
|
-
* Racket: part of [CRESTaceans](https://github.com/mgorlick/CRESTaceans/tree/master/bindings/libsodium)
|
92
|
-
* Ruby: [RbNaCl](https://github.com/cryptosphere/rbnacl)
|
93
|
-
* Ruby: [Sodium](https://github.com/stouset/sodium)
|
94
|
-
* Rust: [Sodium Oxide](https://github.com/dnaq/sodiumoxide)
|
95
|
-
|
96
|
-
## Comparison with vanilla NaCl
|
97
|
-
|
98
|
-
Sodium does not ship C++ bindings. These might be part of a distinct
|
99
|
-
package.
|
100
|
-
|
101
|
-
The default public-key signature system in NaCl was a prototype that
|
102
|
-
shouldn't be used any more.
|
103
|
-
|
104
|
-
Sodium ships with the SUPERCOP reference implementation of
|
105
|
-
[Ed25519](http://ed25519.cr.yp.to/), and uses this system by default
|
106
|
-
for `crypto_sign*` operations.
|
107
|
-
|
108
|
-
For backward compatibility, the previous system is still compiled in,
|
109
|
-
as `crypto_sign_edwards25519sha512batch*`.
|
110
|
-
|
111
|
-
## Additional features
|
112
|
-
|
113
|
-
The Sodium library provides some convenience functions in order to retrieve
|
114
|
-
the current version of the package and of the shared library:
|
115
|
-
|
116
|
-
const char *sodium_version_string(void);
|
117
|
-
const int sodium_library_version_major(void);
|
118
|
-
const int sodium_library_version_minor(void);
|
119
|
-
|
120
|
-
Headers are installed in `${prefix}/include/sodium`.
|
121
|
-
|
122
|
-
A convenience header includes everything you need to use the library:
|
123
|
-
|
124
|
-
#include <sodium.h>
|
125
|
-
|
126
|
-
This is not required, however, before any other libsodium functions, it
|
127
|
-
is recommended to call:
|
128
|
-
|
129
|
-
sodium_init();
|
130
|
-
|
131
|
-
This will pick optimized implementations of some primitives, if they
|
132
|
-
appear to work as expected after running some tests, and these will be
|
133
|
-
used for subsequent operations.
|
134
|
-
It will also initialize the pseudorandom number generator.
|
135
|
-
This function should only be called once, and before performing any other
|
136
|
-
operations.
|
137
|
-
Doing so is required to ensure thread safety of all the functions provided by
|
138
|
-
the library.
|
139
|
-
|
140
|
-
Sodium also provides helper functions to generate random numbers,
|
141
|
-
leveraging `/dev/urandom` or `/dev/random` on *nix and the cryptographic
|
142
|
-
service provider on Windows. The interface is similar to
|
143
|
-
`arc4random(3)`. It is `fork(2)`-safe but not thread-safe. This holds
|
144
|
-
true for `crypto_sign_keypair()` and `crypto_box_keypair()` as well.
|
145
|
-
|
146
|
-
uint32_t randombytes_random(void);
|
147
|
-
|
148
|
-
Return a random 32-bit unsigned value.
|
149
|
-
|
150
|
-
void randombytes_stir(void);
|
151
|
-
|
152
|
-
Generate a new key for the pseudorandom number generator. The file
|
153
|
-
descriptor for the entropy source is kept open, so that the generator
|
154
|
-
can be reseeded even in a chroot() jail.
|
155
|
-
|
156
|
-
uint32_t randombytes_uniform(const uint32_t upper_bound);
|
157
|
-
|
158
|
-
Return a value between 0 and upper_bound using a uniform distribution.
|
159
|
-
|
160
|
-
void randombytes_buf(void * const buf, const size_t size);
|
161
|
-
|
162
|
-
Fill the buffer `buf` with `size` random bytes.
|
163
|
-
|
164
|
-
int randombytes_close(void);
|
165
|
-
|
166
|
-
Close the file descriptor or the handle for the cryptographic service
|
167
|
-
provider.
|
168
|
-
|
169
|
-
A custom implementation of these functions can be registered with
|
170
|
-
`randombytes_set_implementation()`.
|
171
|
-
|
172
|
-
In addition, Sodium provides a function to securely wipe a memory
|
173
|
-
region:
|
174
|
-
|
175
|
-
void sodium_memzero(void * const pnt, const size_t size);
|
176
|
-
|
177
|
-
Warning: if a region has been allocated on the heap, you still have
|
178
|
-
to make sure that it can't get swapped to disk, possibly using
|
179
|
-
`mlock(2)`.
|
20
|
+
## Documentation
|
180
21
|
|
181
|
-
|
22
|
+
The documentation is a work-in-progress, and is being written using
|
23
|
+
Gitbook:
|
182
24
|
|
183
|
-
|
184
|
-
size_t size);
|
25
|
+
[libsodium documentation](http://doc.libsodium.org)
|
185
26
|
|
186
|
-
|
187
|
-
equal, another value if they are not. Unlike `memcmp()`,
|
188
|
-
`sodium_memcmp()` cannot be used to put `b1_` and `b2_` into a defined
|
189
|
-
order.
|
190
|
-
|
191
|
-
And a convenience function for converting a binary buffer to a
|
192
|
-
hexadecimal string:
|
193
|
-
|
194
|
-
char * sodium_bin2hex(char * const hex, const size_t hexlen,
|
195
|
-
const unsigned char *bin, const size_t binlen);
|
196
|
-
|
197
|
-
Sensitive data should not be swapped out to disk, especially if swap
|
198
|
-
partitions are not encrypted. Libsodium provides the `sodium_mlock()`
|
199
|
-
function to lock pages in memory before writing sensitive content to
|
200
|
-
them:
|
201
|
-
|
202
|
-
int sodium_mlock(void *addr, size_t len);
|
203
|
-
|
204
|
-
Once done with these pages, they can be unlocked with
|
205
|
-
`sodium_munlock()`. This function will zero the data before unlocking
|
206
|
-
the pages.
|
207
|
-
|
208
|
-
int sodium_munlock(void * addr, size_t len);
|
209
|
-
|
210
|
-
## Easy interfaces to `crypto_box` and `crypto_secretbox`
|
211
|
-
|
212
|
-
`crypto_box` and `crypto_secretbox` require prepending
|
213
|
-
`crypto_box_ZEROBYTES` or `crypto_secretbox_ZEROBYTE` extra bytes to the
|
214
|
-
message, and making sure that these are all zeros.
|
215
|
-
A similar padding is required to decrypt the ciphertext. And this
|
216
|
-
padding is actually larger than the MAC size,
|
217
|
-
`crypto_box_MACBYTES`/`crypto_secretbox_MACBYTES`.
|
218
|
-
|
219
|
-
This API, as defined by NaCl, can be confusing. And while using a
|
220
|
-
larger buffer and two pointers is not an issue for native C
|
221
|
-
applications, this might not be an option when another runtime is
|
222
|
-
controlling the allocations.
|
223
|
-
|
224
|
-
Libsodium provides an easy, higher-level interface to these operations.
|
225
|
-
|
226
|
-
int crypto_box_easy(unsigned char *c, const unsigned char *m,
|
227
|
-
unsigned long long mlen, const unsigned char *n,
|
228
|
-
const unsigned char *pk, const unsigned char *sk);
|
229
|
-
|
230
|
-
This function encrypts and authenticates a message `m` using the
|
231
|
-
sender's secret key `sk`, the receiver's public key `pk` and a nonce
|
232
|
-
`n`, which should be `crypto_box_NONCEBYTES` bytes long.
|
233
|
-
The ciphertext, including the MAC, will be copied to `c`, whose length
|
234
|
-
should be `len(m) + crypto_box_MACBYTES`, and that doesn't require to be
|
235
|
-
initialized.
|
236
|
-
|
237
|
-
int crypto_box_open_easy(unsigned char *m, const unsigned char *c,
|
238
|
-
unsigned long long clen, const unsigned char *n,
|
239
|
-
const unsigned char *pk, const unsigned char *sk);
|
240
|
-
|
241
|
-
This function verifies and decrypts a ciphertext `c` as returned by
|
242
|
-
`crypto_box_easy()`, whose length is `clen`, using the nonce `n`, the
|
243
|
-
receiver's secret key `sk`, and the sender's public key `pk`. The
|
244
|
-
message is stored to `m`, whose length should be at least `len(c) -
|
245
|
-
crypto_box_MACBYTES` and that doesn't require to be initialized.
|
246
|
-
|
247
|
-
Similarily, secret-key authenticated encryption provide "easy" wrappers:
|
248
|
-
|
249
|
-
int crypto_secretbox_easy(unsigned char *c, const unsigned char *m,
|
250
|
-
unsigned long long mlen, const unsigned char *n,
|
251
|
-
const unsigned char *k);
|
252
|
-
|
253
|
-
int crypto_secretbox_open_easy(unsigned char *m, const unsigned char *c,
|
254
|
-
unsigned long long clen,
|
255
|
-
const unsigned char *n,
|
256
|
-
const unsigned char *k);
|
257
|
-
|
258
|
-
The length of the ciphertext, which will include the MAC, is
|
259
|
-
`len(m) + crypto_secretbox_MACBYTES`, and the length of the buffer for
|
260
|
-
the decrypted message doesn't have to be more than `len(c) -
|
261
|
-
crypto_secretbox_MACBYTES`.
|
262
|
-
|
263
|
-
The "easy" interface currently requires allocations and copying, which
|
264
|
-
makes it slower than using the traditional NaCl interface. This
|
265
|
-
shouldn't make any sensible difference in most use cases, and future
|
266
|
-
versions of the library may not require extra copy operations any
|
267
|
-
more. Unless speed is absolutely critical, you are welcome to use the
|
268
|
-
"easy" interface, especially if you are new to NaCl/Sodium.
|
269
|
-
|
270
|
-
## New operations
|
271
|
-
|
272
|
-
### crypto_shorthash
|
273
|
-
|
274
|
-
A lot of applications and programming language implementations have
|
275
|
-
been recently found to be vulnerable to denial-of-service attacks when
|
276
|
-
a hash function with weak security guarantees, like Murmurhash 3, was
|
277
|
-
used to construct a hash table.
|
278
|
-
|
279
|
-
In order to address this, Sodium provides the “shorthash” function,
|
280
|
-
currently implemented using SipHash-2-4. This very fast hash function
|
281
|
-
outputs short, but unpredictable (without knowing the secret key)
|
282
|
-
values suitable for picking a list in a hash table for a given key.
|
283
|
-
|
284
|
-
See `crypto_shorthash.h` for details.
|
285
|
-
|
286
|
-
### crypto_generichash
|
287
|
-
|
288
|
-
This hash function provides:
|
289
|
-
|
290
|
-
* A variable output length (up to `crypto_generichash_BYTES_MAX` bytes)
|
291
|
-
* A variable key length (from no key at all to
|
292
|
-
`crypto_generichash_KEYBYTES_MAX` bytes)
|
293
|
-
* A simple interface as well as a streaming interface.
|
294
|
-
|
295
|
-
`crypto_generichash` is currently being implemented using
|
296
|
-
[Blake2](https://blake2.net/).
|
297
|
-
|
298
|
-
### crypto_pwhash (scrypt)
|
299
|
-
|
300
|
-
High-level functions for password hashing are not defined yet: they will
|
301
|
-
eventually be wrappers for the winning function of the ongoing
|
302
|
-
[Password Hashing Competition](https://password-hashing.net/).
|
303
|
-
|
304
|
-
Meanwhile, the [scrypt](http://www.tarsnap.com/scrypt.html) function is
|
305
|
-
available through explicitly-named functions, and will remain available
|
306
|
-
in the library even after the PHC.
|
307
|
-
|
308
|
-
int crypto_pwhash_scryptxsalsa208sha256(unsigned char *out,
|
309
|
-
unsigned long long outlen,
|
310
|
-
const char *passwd,
|
311
|
-
unsigned long long passwdlen,
|
312
|
-
const unsigned char *salt,
|
313
|
-
unsigned long long opslimit,
|
314
|
-
size_t memlimit);
|
315
|
-
|
316
|
-
This function derives `outlen` bytes from a password `passwd` and a
|
317
|
-
salt `salt` that has to be `crypto_pwhash_scryptxsalsa208sha256_SALTBYTES`
|
318
|
-
bytes long.
|
319
|
-
|
320
|
-
The function will use at most `memlimit` bytes of memory and `opslimit`
|
321
|
-
is the maximum number of iterations to perform. Making the function
|
322
|
-
memory-hard and CPU intensive by increasing these parameters might increase
|
323
|
-
security.
|
324
|
-
|
325
|
-
Although password storage was not the primary goal of the scrypt
|
326
|
-
function, it can still be used for this purpose:
|
327
|
-
|
328
|
-
int crypto_pwhash_scryptxsalsa208sha256_str
|
329
|
-
(char out[crypto_pwhash_scryptxsalsa208sha256_STRBYTES],
|
330
|
-
const char *passwd,
|
331
|
-
unsigned long long passwdlen,
|
332
|
-
unsigned long long opslimit,
|
333
|
-
size_t memlimit);
|
334
|
-
|
335
|
-
This function returns a `crypto_pwhash_scryptxsalsa208sha256_STRBYTES`
|
336
|
-
bytes C string (the length includes the final `\0`) suitable for storage.
|
337
|
-
The string is guaranteed to only include ASCII characters.
|
338
|
-
|
339
|
-
The function will use at most `memlimit` bytes of memory and `opslimit`
|
340
|
-
is the maximum number of iterations to perform. These parameters are
|
341
|
-
included in the output string, and do not need to be stored separately.
|
342
|
-
|
343
|
-
The function automatically generates a random salt, which is also
|
344
|
-
included in the output string.
|
345
|
-
|
346
|
-
int crypto_pwhash_scryptxsalsa208sha256_str_verify
|
347
|
-
(const char str[crypto_pwhash_scryptxsalsa208sha256_STRBYTES],
|
348
|
-
const char *passwd,
|
349
|
-
unsigned long long passwdlen);
|
350
|
-
|
351
|
-
This function verifies that hashing the plaintext password `passwd`
|
352
|
-
results in the stored hash value included in `str` when using the same
|
353
|
-
parameters.
|
354
|
-
|
355
|
-
`0` is returned if the passwords are matching, `-1` is they are not.
|
356
|
-
The plaintext password should be locked in memory using
|
357
|
-
`sodium_mlock()` and immediately zeroed out and unlocked after this
|
358
|
-
function returns, using `sodium_munlock()`.
|
359
|
-
|
360
|
-
## Constants available as functions
|
361
|
-
|
362
|
-
In addition to constants for key sizes, output sizes and block sizes,
|
363
|
-
Sodium provides these values through function calls, so that using
|
364
|
-
them from different languages is easier.
|
365
|
-
|
366
|
-
## CurveCP
|
367
|
-
|
368
|
-
CurveCP tools are part of a different project,
|
369
|
-
[libchloride](https://github.com/jedisct1/libchloride).
|
370
|
-
If you are interested in an embeddable CurveCP implementation, take a
|
371
|
-
look at [libcurvecpr](https://github.com/impl/libcurvecpr).
|
372
|
-
|
373
|
-
## Mailing list
|
27
|
+
## Community
|
374
28
|
|
375
29
|
A mailing-list is available to discuss libsodium.
|
376
30
|
|
377
31
|
In order to join, just send a random mail to `sodium-subscribe` {at}
|
378
|
-
`pureftpd`{dot}`org`.
|
32
|
+
`pureftpd` {dot} `org`.
|
379
33
|
|
380
34
|
## License
|
381
35
|
|
382
36
|
[ISC license](http://en.wikipedia.org/wiki/ISC_license).
|
383
|
-
|
384
|
-
See the `COPYING` file for details, `AUTHORS` for designers and
|
385
|
-
implementors, and `THANKS` for contributors.
|