rbnacl-libsodium 1.0.15.1 → 1.0.16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -6
- data/CHANGES.md +50 -42
- data/Gemfile +1 -1
- data/README.md +3 -1
- data/Rakefile +46 -0
- data/ext/rbnacl/extconf.rb +16 -1
- data/lib/rbnacl/libsodium.rb +16 -8
- data/lib/rbnacl/libsodium/version.rb +1 -1
- data/rbnacl-libsodium.gemspec +3 -0
- data/vendor/libsodium/AUTHORS +20 -5
- data/vendor/libsodium/ChangeLog +25 -0
- data/vendor/libsodium/Makefile.in +3 -1
- data/vendor/libsodium/README.markdown +2 -1
- data/vendor/libsodium/aclocal.m4 +1 -0
- data/vendor/libsodium/autom4te.cache/output.1 +836 -123
- data/vendor/libsodium/autom4te.cache/output.4 +21342 -0
- data/vendor/libsodium/autom4te.cache/requests +801 -554
- data/vendor/libsodium/autom4te.cache/traces.1 +717 -596
- data/vendor/libsodium/autom4te.cache/traces.4 +4355 -0
- data/vendor/libsodium/builds/Makefile.in +3 -1
- data/vendor/libsodium/builds/msvc/resource.h +1 -1
- data/vendor/libsodium/builds/msvc/resource.rc +2 -2
- data/vendor/libsodium/builds/msvc/version.h +2 -2
- data/vendor/libsodium/builds/msvc/vs2010/libsodium/libsodium.vcxproj +17 -8
- data/vendor/libsodium/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters +60 -24
- data/vendor/libsodium/builds/msvc/vs2012/libsodium/libsodium.vcxproj +17 -8
- data/vendor/libsodium/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters +60 -24
- data/vendor/libsodium/builds/msvc/vs2013/libsodium/libsodium.vcxproj +17 -8
- data/vendor/libsodium/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters +60 -24
- data/vendor/libsodium/builds/msvc/vs2015/libsodium/libsodium.vcxproj +17 -8
- data/vendor/libsodium/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters +60 -24
- data/vendor/libsodium/builds/msvc/vs2017/libsodium/libsodium.vcxproj +17 -8
- data/vendor/libsodium/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters +60 -24
- data/vendor/libsodium/configure +834 -121
- data/vendor/libsodium/configure.ac +55 -13
- data/vendor/libsodium/contrib/Findsodium.cmake +22 -3
- data/vendor/libsodium/contrib/Makefile.in +3 -1
- data/vendor/libsodium/dist-build/Makefile.in +3 -1
- data/vendor/libsodium/dist-build/android-build.sh +2 -2
- data/vendor/libsodium/dist-build/emscripten-symbols.def +38 -26
- data/vendor/libsodium/dist-build/emscripten.sh +23 -8
- data/vendor/libsodium/dist-build/msys2-win32.sh +1 -1
- data/vendor/libsodium/dist-build/msys2-win64.sh +1 -1
- data/vendor/libsodium/libsodium.vcxproj +17 -8
- data/vendor/libsodium/libsodium.vcxproj.filters +41 -14
- data/vendor/libsodium/m4/ax_tls.m4 +74 -0
- data/vendor/libsodium/msvc-scripts/Makefile.in +3 -1
- data/vendor/libsodium/msvc-scripts/process.bat +2 -2
- data/vendor/libsodium/packaging/dotnet-core/README.md +5 -5
- data/vendor/libsodium/packaging/dotnet-core/prepare.py +7 -7
- data/vendor/libsodium/packaging/nuget/package.config +1 -1
- data/vendor/libsodium/regen-msvc/libsodium.vcxproj +326 -0
- data/vendor/libsodium/regen-msvc/libsodium.vcxproj.filters +23 -0
- data/vendor/libsodium/regen-msvc/libsodium.vcxproj.filters.tpl +35 -0
- data/vendor/libsodium/regen-msvc/libsodium.vcxproj.tpl +93 -0
- data/vendor/libsodium/regen-msvc/regen-msvc.py +136 -0
- data/vendor/libsodium/regen-msvc/tl_libsodium.vcxproj.filters.tpl +23 -0
- data/vendor/libsodium/regen-msvc/tl_libsodium.vcxproj.tpl +331 -0
- data/vendor/libsodium/src/Makefile.in +3 -1
- data/vendor/libsodium/src/libsodium/Makefile.am +40 -24
- data/vendor/libsodium/src/libsodium/Makefile.in +238 -180
- data/vendor/libsodium/src/libsodium/crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c +10 -2
- data/vendor/libsodium/src/libsodium/crypto_core/ed25519/core_ed25519.c +79 -0
- data/vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/ed25519_ref10.c +2031 -0
- data/vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/base.h +1344 -0
- data/vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/base2.h +40 -0
- data/vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/constants.h +20 -0
- data/vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/fe.h +220 -0
- data/vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/fe_51/base.h +1344 -0
- data/vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/fe_51/base2.h +40 -0
- data/vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/fe_51/constants.h +21 -0
- data/vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/fe_51/fe.h +116 -0
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2.h +1 -1
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ref.c +2 -1
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-ref.c +14 -82
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/generichash_blake2b.c +1 -0
- data/vendor/libsodium/src/libsodium/crypto_hash/sha256/cp/hash_sha256_cp.c +3 -3
- data/vendor/libsodium/src/libsodium/crypto_hash/sha512/cp/hash_sha512_cp.c +3 -3
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna64.h +1 -7
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.c +1 -0
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/sse2/poly1305_sse2.c +0 -6
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-core.c +19 -92
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-core.h +72 -4
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2.c +5 -1
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2.h +1 -1
- data/vendor/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c +10 -7
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/x25519_ref10.c +108 -231
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/x25519_ref10.h +1 -1
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c +27 -27
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_invert.c +2 -1
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c +6 -3
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/scalarmult_curve25519.c +3 -11
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/ed25519/ref10/scalarmult_ed25519_ref10.c +86 -0
- data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/keypair.c +28 -26
- data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/obsolete.c +32 -30
- data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/open.c +14 -115
- data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/sign.c +56 -13
- data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/{ed25519_ref10.h → sign_ed25519_ref10.h} +2 -5
- data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/sign_ed25519.c +1 -1
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/stream_chacha20.c +1 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/stream_salsa20.c +1 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/u8.h +1 -1
- data/vendor/libsodium/src/libsodium/include/Makefile.am +2 -0
- data/vendor/libsodium/src/libsodium/include/Makefile.in +13 -9
- data/vendor/libsodium/src/libsodium/include/sodium.h +2 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_core_ed25519.h +37 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_scalarmult.h +8 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_scalarmult_curve25519.h +8 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_scalarmult_ed25519.h +41 -0
- data/vendor/libsodium/src/libsodium/include/sodium/private/common.h +18 -0
- data/vendor/libsodium/src/libsodium/include/sodium/private/ed25519_ref10.h +125 -0
- data/vendor/libsodium/src/libsodium/include/sodium/private/ed25519_ref10_fe_25_5.h +1050 -0
- data/vendor/libsodium/src/libsodium/include/sodium/private/ed25519_ref10_fe_51.h +518 -0
- data/vendor/libsodium/src/libsodium/include/sodium/runtime.h +3 -0
- data/vendor/libsodium/src/libsodium/include/sodium/utils.h +3 -0
- data/vendor/libsodium/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c +182 -102
- data/vendor/libsodium/src/libsodium/sodium/core.c +30 -2
- data/vendor/libsodium/src/libsodium/sodium/runtime.c +14 -0
- data/vendor/libsodium/src/libsodium/sodium/utils.c +46 -0
- data/vendor/libsodium/test/Makefile.in +3 -1
- data/vendor/libsodium/test/default/Makefile.am +16 -0
- data/vendor/libsodium/test/default/Makefile.in +71 -23
- data/vendor/libsodium/test/default/aead_aes256gcm.c +1 -1
- data/vendor/libsodium/test/default/cmptest.h +4 -0
- data/vendor/libsodium/test/default/core3.c +44 -4
- data/vendor/libsodium/test/default/core3.exp +2 -0
- data/vendor/libsodium/test/default/core4.c +1 -1
- data/vendor/libsodium/test/default/core_ed25519.c +151 -0
- data/vendor/libsodium/test/default/core_ed25519.exp +1 -0
- data/vendor/libsodium/test/default/ed25519_convert.c +9 -1
- data/vendor/libsodium/test/default/index.html.tpl +17 -3
- data/vendor/libsodium/test/default/kdf.c +4 -2
- data/vendor/libsodium/test/default/metamorphic.c +8 -8
- data/vendor/libsodium/test/default/misuse.c +29 -1
- data/vendor/libsodium/test/default/pwhash_argon2i.c +9 -3
- data/vendor/libsodium/test/default/pwhash_argon2i.exp +2 -2
- data/vendor/libsodium/test/default/pwhash_argon2id.c +7 -2
- data/vendor/libsodium/test/default/pwhash_argon2id.exp +2 -2
- data/vendor/libsodium/test/default/scalarmult.c +0 -2
- data/vendor/libsodium/test/default/scalarmult.exp +0 -1
- data/vendor/libsodium/test/default/scalarmult_ed25519.c +90 -0
- data/vendor/libsodium/test/default/scalarmult_ed25519.exp +1 -0
- data/vendor/libsodium/test/default/secretbox_easy2.c +1 -1
- data/vendor/libsodium/test/default/secretstream.c +52 -3
- data/vendor/libsodium/test/default/sign.c +16 -0
- data/vendor/libsodium/test/default/sodium_core.c +1 -0
- data/vendor/libsodium/test/default/sodium_utils.c +2 -1
- data/vendor/libsodium/test/default/xchacha20.c +2 -1
- metadata +63 -12
- data/vendor/libsodium/src/libsodium/crypto_core/curve25519/ref10/base.h +0 -1344
- data/vendor/libsodium/src/libsodium/crypto_core/curve25519/ref10/base2.h +0 -40
- data/vendor/libsodium/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c +0 -2797
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/donna_c64/curve25519_donna_c64.c +0 -545
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/donna_c64/curve25519_donna_c64.h +0 -10
- data/vendor/libsodium/src/libsodium/include/sodium/private/curve25519_ref10.h +0 -132
- data/vendor/libsodium/test/default/index-wasm.html.tpl +0 -118
data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c
CHANGED
@@ -25,22 +25,22 @@ static int
|
|
25
25
|
crypto_scalarmult_curve25519_sandy2x(unsigned char *q, const unsigned char *n,
|
26
26
|
const unsigned char *p)
|
27
27
|
{
|
28
|
-
unsigned char
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
28
|
+
unsigned char *t = q;
|
29
|
+
fe var[3];
|
30
|
+
fe51 x_51;
|
31
|
+
fe51 z_51;
|
32
|
+
unsigned int i;
|
33
|
+
|
34
|
+
for (i = 0; i < 32; i++) {
|
35
|
+
t[i] = n[i];
|
36
|
+
}
|
37
|
+
t[0] &= 248;
|
38
|
+
t[31] &= 127;
|
39
|
+
t[31] |= 64;
|
40
40
|
|
41
41
|
fe_frombytes(x1, p);
|
42
42
|
|
43
|
-
ladder(var,
|
43
|
+
ladder(var, t);
|
44
44
|
|
45
45
|
z_51.v[0] = (z2[1] << 26) + z2[0];
|
46
46
|
z_51.v[1] = (z2[3] << 26) + z2[2];
|
@@ -71,20 +71,20 @@ static int
|
|
71
71
|
crypto_scalarmult_curve25519_sandy2x_base(unsigned char *q,
|
72
72
|
const unsigned char *n)
|
73
73
|
{
|
74
|
-
unsigned char
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
ladder_base(var,
|
74
|
+
unsigned char *t = q;
|
75
|
+
fe var[3];
|
76
|
+
fe51 x_51;
|
77
|
+
fe51 z_51;
|
78
|
+
unsigned int i;
|
79
|
+
|
80
|
+
for (i = 0;i < 32; i++) {
|
81
|
+
t[i] = n[i];
|
82
|
+
}
|
83
|
+
t[0] &= 248;
|
84
|
+
t[31] &= 127;
|
85
|
+
t[31] |= 64;
|
86
|
+
|
87
|
+
ladder_base(var, t);
|
88
88
|
|
89
89
|
z_51.v[0] = (z2[1] << 26) + z2[0];
|
90
90
|
z_51.v[1] = (z2[3] << 26) + z2[2];
|
data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c
CHANGED
@@ -6,7 +6,8 @@
|
|
6
6
|
|
7
7
|
#ifdef HAVE_AVX_ASM
|
8
8
|
|
9
|
-
static uint64_t
|
9
|
+
static uint64_t
|
10
|
+
load_3(const unsigned char *in)
|
10
11
|
{
|
11
12
|
uint64_t result;
|
12
13
|
result = (uint64_t) in[0];
|
@@ -15,7 +16,8 @@ static uint64_t load_3(const unsigned char *in)
|
|
15
16
|
return result;
|
16
17
|
}
|
17
18
|
|
18
|
-
static uint64_t
|
19
|
+
static uint64_t
|
20
|
+
load_4(const unsigned char *in)
|
19
21
|
{
|
20
22
|
uint64_t result;
|
21
23
|
result = (uint64_t) in[0];
|
@@ -25,7 +27,8 @@ static uint64_t load_4(const unsigned char *in)
|
|
25
27
|
return result;
|
26
28
|
}
|
27
29
|
|
28
|
-
void
|
30
|
+
void
|
31
|
+
fe_frombytes(fe h, const unsigned char *s)
|
29
32
|
{
|
30
33
|
uint64_t h0 = load_4(s);
|
31
34
|
uint64_t h1 = load_3(s + 4) << 6;
|
@@ -1,20 +1,15 @@
|
|
1
1
|
|
2
2
|
#include "crypto_scalarmult_curve25519.h"
|
3
|
+
#include "private/implementations.h"
|
3
4
|
#include "scalarmult_curve25519.h"
|
4
5
|
#include "runtime.h"
|
5
6
|
|
6
7
|
#ifdef HAVE_AVX_ASM
|
7
8
|
# include "sandy2x/curve25519_sandy2x.h"
|
8
9
|
#endif
|
9
|
-
#
|
10
|
-
# include "donna_c64/curve25519_donna_c64.h"
|
11
|
-
static const crypto_scalarmult_curve25519_implementation *implementation =
|
12
|
-
&crypto_scalarmult_curve25519_donna_c64_implementation;
|
13
|
-
#else
|
14
|
-
# include "ref10/x25519_ref10.h"
|
10
|
+
#include "ref10/x25519_ref10.h"
|
15
11
|
static const crypto_scalarmult_curve25519_implementation *implementation =
|
16
12
|
&crypto_scalarmult_curve25519_ref10_implementation;
|
17
|
-
#endif
|
18
13
|
|
19
14
|
int
|
20
15
|
crypto_scalarmult_curve25519(unsigned char *q, const unsigned char *n,
|
@@ -53,11 +48,8 @@ crypto_scalarmult_curve25519_scalarbytes(void)
|
|
53
48
|
int
|
54
49
|
_crypto_scalarmult_curve25519_pick_best_implementation(void)
|
55
50
|
{
|
56
|
-
#ifdef HAVE_TI_MODE
|
57
|
-
implementation = &crypto_scalarmult_curve25519_donna_c64_implementation;
|
58
|
-
#else
|
59
51
|
implementation = &crypto_scalarmult_curve25519_ref10_implementation;
|
60
|
-
|
52
|
+
|
61
53
|
#ifdef HAVE_AVX_ASM
|
62
54
|
if (sodium_runtime_has_avx()) {
|
63
55
|
implementation = &crypto_scalarmult_curve25519_sandy2x_implementation;
|
data/vendor/libsodium/src/libsodium/crypto_scalarmult/ed25519/ref10/scalarmult_ed25519_ref10.c
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
|
2
|
+
#include <string.h>
|
3
|
+
|
4
|
+
#include "crypto_scalarmult_ed25519.h"
|
5
|
+
#include "private/ed25519_ref10.h"
|
6
|
+
#include "utils.h"
|
7
|
+
|
8
|
+
static int
|
9
|
+
_crypto_scalarmult_ed25519_is_inf(const unsigned char s[32])
|
10
|
+
{
|
11
|
+
unsigned char c;
|
12
|
+
unsigned int i;
|
13
|
+
|
14
|
+
c = s[0] ^ 0x01;
|
15
|
+
for (i = 1; i < 31; i++) {
|
16
|
+
c |= s[i];
|
17
|
+
}
|
18
|
+
c |= s[31] & 0x7f;
|
19
|
+
|
20
|
+
return ((((unsigned int) c) - 1U) >> 8) & 1;
|
21
|
+
}
|
22
|
+
|
23
|
+
static inline void
|
24
|
+
_crypto_scalarmult_ed25519_clamp(unsigned char k[32])
|
25
|
+
{
|
26
|
+
k[0] &= 248;
|
27
|
+
k[31] &= 127;
|
28
|
+
k[31] |= 64;
|
29
|
+
}
|
30
|
+
|
31
|
+
int
|
32
|
+
crypto_scalarmult_ed25519(unsigned char *q, const unsigned char *n,
|
33
|
+
const unsigned char *p)
|
34
|
+
{
|
35
|
+
unsigned char *t = q;
|
36
|
+
ge25519_p3 Q;
|
37
|
+
ge25519_p3 P;
|
38
|
+
unsigned int i;
|
39
|
+
|
40
|
+
if (ge25519_is_canonical(p) == 0 || ge25519_has_small_order(p) != 0 ||
|
41
|
+
ge25519_frombytes(&P, p) != 0 || ge25519_is_on_main_subgroup(&P) == 0) {
|
42
|
+
return -1;
|
43
|
+
}
|
44
|
+
for (i = 0; i < 32; ++i) {
|
45
|
+
t[i] = n[i];
|
46
|
+
}
|
47
|
+
_crypto_scalarmult_ed25519_clamp(t);
|
48
|
+
ge25519_scalarmult(&Q, t, &P);
|
49
|
+
ge25519_p3_tobytes(q, &Q);
|
50
|
+
if (_crypto_scalarmult_ed25519_is_inf(q) != 0 || sodium_is_zero(n, 32)) {
|
51
|
+
return -1;
|
52
|
+
}
|
53
|
+
return 0;
|
54
|
+
}
|
55
|
+
|
56
|
+
int
|
57
|
+
crypto_scalarmult_ed25519_base(unsigned char *q,
|
58
|
+
const unsigned char *n)
|
59
|
+
{
|
60
|
+
unsigned char *t = q;
|
61
|
+
ge25519_p3 Q;
|
62
|
+
unsigned int i;
|
63
|
+
|
64
|
+
for (i = 0; i < 32; ++i) {
|
65
|
+
t[i] = n[i];
|
66
|
+
}
|
67
|
+
_crypto_scalarmult_ed25519_clamp(t);
|
68
|
+
ge25519_scalarmult_base(&Q, t);
|
69
|
+
ge25519_p3_tobytes(q, &Q);
|
70
|
+
if (sodium_is_zero(n, 32) != 0) {
|
71
|
+
return -1;
|
72
|
+
}
|
73
|
+
return 0;
|
74
|
+
}
|
75
|
+
|
76
|
+
size_t
|
77
|
+
crypto_scalarmult_ed25519_bytes(void)
|
78
|
+
{
|
79
|
+
return crypto_scalarmult_ed25519_BYTES;
|
80
|
+
}
|
81
|
+
|
82
|
+
size_t
|
83
|
+
crypto_scalarmult_ed25519_scalarbytes(void)
|
84
|
+
{
|
85
|
+
return crypto_scalarmult_ed25519_SCALARBYTES;
|
86
|
+
}
|
@@ -4,8 +4,8 @@
|
|
4
4
|
#include "crypto_hash_sha512.h"
|
5
5
|
#include "crypto_scalarmult_curve25519.h"
|
6
6
|
#include "crypto_sign_ed25519.h"
|
7
|
-
#include "
|
8
|
-
#include "private/
|
7
|
+
#include "sign_ed25519_ref10.h"
|
8
|
+
#include "private/ed25519_ref10.h"
|
9
9
|
#include "randombytes.h"
|
10
10
|
#include "utils.h"
|
11
11
|
|
@@ -13,15 +13,19 @@ int
|
|
13
13
|
crypto_sign_ed25519_seed_keypair(unsigned char *pk, unsigned char *sk,
|
14
14
|
const unsigned char *seed)
|
15
15
|
{
|
16
|
-
|
16
|
+
ge25519_p3 A;
|
17
17
|
|
18
|
+
#ifdef ED25519_NONDETERMINISTIC
|
19
|
+
memmove(sk, seed, 32);
|
20
|
+
#else
|
18
21
|
crypto_hash_sha512(sk, seed, 32);
|
22
|
+
#endif
|
19
23
|
sk[0] &= 248;
|
20
|
-
sk[31] &=
|
24
|
+
sk[31] &= 127;
|
21
25
|
sk[31] |= 64;
|
22
26
|
|
23
|
-
|
24
|
-
|
27
|
+
ge25519_scalarmult_base(&A, sk);
|
28
|
+
ge25519_p3_tobytes(pk, &A);
|
25
29
|
|
26
30
|
memmove(sk, seed, 32);
|
27
31
|
memmove(sk + 32, pk, 32);
|
@@ -46,26 +50,22 @@ int
|
|
46
50
|
crypto_sign_ed25519_pk_to_curve25519(unsigned char *curve25519_pk,
|
47
51
|
const unsigned char *ed25519_pk)
|
48
52
|
{
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
fe one_minus_y;
|
53
|
+
ge25519_p3 A;
|
54
|
+
fe25519 x;
|
55
|
+
fe25519 one_minus_y;
|
53
56
|
|
54
|
-
if (
|
55
|
-
|
56
|
-
|
57
|
-
}
|
58
|
-
ge_mul_l(&pl, &A);
|
59
|
-
if (fe_isnonzero(pl.X)) {
|
57
|
+
if (ge25519_has_small_order(ed25519_pk) != 0 ||
|
58
|
+
ge25519_frombytes_negate_vartime(&A, ed25519_pk) != 0 ||
|
59
|
+
ge25519_is_on_main_subgroup(&A) == 0) {
|
60
60
|
return -1;
|
61
61
|
}
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
62
|
+
fe25519_1(one_minus_y);
|
63
|
+
fe25519_sub(one_minus_y, one_minus_y, A.Y);
|
64
|
+
fe25519_invert(one_minus_y, one_minus_y);
|
65
|
+
fe25519_1(x);
|
66
|
+
fe25519_add(x, x, A.Y);
|
67
|
+
fe25519_mul(x, x, one_minus_y);
|
68
|
+
fe25519_tobytes(curve25519_pk, x);
|
69
69
|
|
70
70
|
return 0;
|
71
71
|
}
|
@@ -76,9 +76,11 @@ crypto_sign_ed25519_sk_to_curve25519(unsigned char *curve25519_sk,
|
|
76
76
|
{
|
77
77
|
unsigned char h[crypto_hash_sha512_BYTES];
|
78
78
|
|
79
|
-
|
80
|
-
|
81
|
-
|
79
|
+
#ifdef ED25519_NONDETERMINISTIC
|
80
|
+
memcpy(h, ed25519_sk, 32);
|
81
|
+
#else
|
82
|
+
crypto_hash_sha512(h, ed25519_sk, 32);
|
83
|
+
#endif
|
82
84
|
h[0] &= 248;
|
83
85
|
h[31] &= 127;
|
84
86
|
h[31] |= 64;
|
@@ -6,7 +6,7 @@
|
|
6
6
|
#include "crypto_hash_sha512.h"
|
7
7
|
#include "crypto_sign_edwards25519sha512batch.h"
|
8
8
|
#include "crypto_verify_32.h"
|
9
|
-
#include "private/
|
9
|
+
#include "private/ed25519_ref10.h"
|
10
10
|
#include "randombytes.h"
|
11
11
|
#include "utils.h"
|
12
12
|
|
@@ -14,15 +14,15 @@ int
|
|
14
14
|
crypto_sign_edwards25519sha512batch_keypair(unsigned char *pk,
|
15
15
|
unsigned char *sk)
|
16
16
|
{
|
17
|
-
|
17
|
+
ge25519_p3 A;
|
18
18
|
|
19
19
|
randombytes_buf(sk, 32);
|
20
20
|
crypto_hash_sha512(sk, sk, 32);
|
21
21
|
sk[0] &= 248;
|
22
|
-
sk[31] &=
|
22
|
+
sk[31] &= 127;
|
23
23
|
sk[31] |= 64;
|
24
|
-
|
25
|
-
|
24
|
+
ge25519_scalarmult_base(&A, sk);
|
25
|
+
ge25519_p3_tobytes(pk, &A);
|
26
26
|
|
27
27
|
return 0;
|
28
28
|
}
|
@@ -38,24 +38,24 @@ crypto_sign_edwards25519sha512batch(unsigned char *sm,
|
|
38
38
|
unsigned char nonce[64];
|
39
39
|
unsigned char hram[64];
|
40
40
|
unsigned char sig[64];
|
41
|
-
|
42
|
-
|
41
|
+
ge25519_p3 A;
|
42
|
+
ge25519_p3 R;
|
43
43
|
|
44
44
|
crypto_hash_sha512_init(&hs);
|
45
45
|
crypto_hash_sha512_update(&hs, sk + 32, 32);
|
46
46
|
crypto_hash_sha512_update(&hs, m, mlen);
|
47
47
|
crypto_hash_sha512_final(&hs, nonce);
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
48
|
+
ge25519_scalarmult_base(&A, sk);
|
49
|
+
ge25519_p3_tobytes(sig + 32, &A);
|
50
|
+
sc25519_reduce(nonce);
|
51
|
+
ge25519_scalarmult_base(&R, nonce);
|
52
|
+
ge25519_p3_tobytes(sig, &R);
|
53
53
|
crypto_hash_sha512_init(&hs);
|
54
54
|
crypto_hash_sha512_update(&hs, sig, 32);
|
55
55
|
crypto_hash_sha512_update(&hs, m, mlen);
|
56
56
|
crypto_hash_sha512_final(&hs, hram);
|
57
|
-
|
58
|
-
|
57
|
+
sc25519_reduce(hram);
|
58
|
+
sc25519_muladd(sig + 32, hram, nonce, sk);
|
59
59
|
sodium_memzero(hram, sizeof hram);
|
60
60
|
memmove(sm + 32, m, (size_t) mlen);
|
61
61
|
memcpy(sm, sig, 32);
|
@@ -75,12 +75,12 @@ crypto_sign_edwards25519sha512batch_open(unsigned char *m,
|
|
75
75
|
unsigned char h[64];
|
76
76
|
unsigned char t1[32], t2[32];
|
77
77
|
unsigned long long mlen;
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
78
|
+
ge25519_cached Ai;
|
79
|
+
ge25519_p1p1 csa;
|
80
|
+
ge25519_p2 cs;
|
81
|
+
ge25519_p3 A;
|
82
|
+
ge25519_p3 R;
|
83
|
+
ge25519_p3 cs3;
|
84
84
|
|
85
85
|
*mlen_p = 0;
|
86
86
|
if (smlen < 64 || smlen - 64 > crypto_sign_edwards25519sha512batch_MESSAGEBYTES_MAX) {
|
@@ -90,20 +90,22 @@ crypto_sign_edwards25519sha512batch_open(unsigned char *m,
|
|
90
90
|
if (sm[smlen - 1] & 224) {
|
91
91
|
return -1;
|
92
92
|
}
|
93
|
-
if (
|
94
|
-
|
93
|
+
if (ge25519_has_small_order(pk) != 0 ||
|
94
|
+
ge25519_frombytes_negate_vartime(&A, pk) != 0 ||
|
95
|
+
ge25519_has_small_order(sm) != 0 ||
|
96
|
+
ge25519_frombytes_negate_vartime(&R, sm) != 0) {
|
95
97
|
return -1;
|
96
98
|
}
|
97
|
-
|
99
|
+
ge25519_p3_to_cached(&Ai, &A);
|
98
100
|
crypto_hash_sha512(h, sm, mlen + 32);
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
101
|
+
sc25519_reduce(h);
|
102
|
+
ge25519_scalarmult(&cs3, h, &R);
|
103
|
+
ge25519_add(&csa, &cs3, &Ai);
|
104
|
+
ge25519_p1p1_to_p2(&cs, &csa);
|
105
|
+
ge25519_tobytes(t1, &cs);
|
104
106
|
t1[31] ^= 1 << 7;
|
105
|
-
|
106
|
-
|
107
|
+
ge25519_scalarmult_base(&R, sm + 32 + mlen);
|
108
|
+
ge25519_p3_tobytes(t2, &R);
|
107
109
|
if (crypto_verify_32(t1, t2) != 0) {
|
108
110
|
return -1;
|
109
111
|
}
|
@@ -6,107 +6,10 @@
|
|
6
6
|
#include "crypto_hash_sha512.h"
|
7
7
|
#include "crypto_sign_ed25519.h"
|
8
8
|
#include "crypto_verify_32.h"
|
9
|
-
#include "
|
10
|
-
#include "private/
|
9
|
+
#include "sign_ed25519_ref10.h"
|
10
|
+
#include "private/ed25519_ref10.h"
|
11
11
|
#include "utils.h"
|
12
12
|
|
13
|
-
#ifndef ED25519_COMPAT
|
14
|
-
static int
|
15
|
-
crypto_sign_check_S_lt_L(const unsigned char *S)
|
16
|
-
{
|
17
|
-
/* 2^252+27742317777372353535851937790883648493 */
|
18
|
-
static const unsigned char L[32] = {
|
19
|
-
0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7,
|
20
|
-
0xa2, 0xde, 0xf9, 0xde, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
21
|
-
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10
|
22
|
-
};
|
23
|
-
unsigned char c = 0;
|
24
|
-
unsigned char n = 1;
|
25
|
-
unsigned int i = 32;
|
26
|
-
|
27
|
-
do {
|
28
|
-
i--;
|
29
|
-
c |= ((S[i] - L[i]) >> 8) & n;
|
30
|
-
n &= ((S[i] ^ L[i]) - 1) >> 8;
|
31
|
-
} while (i != 0);
|
32
|
-
|
33
|
-
return -(c == 0);
|
34
|
-
}
|
35
|
-
|
36
|
-
int
|
37
|
-
_crypto_sign_ed25519_small_order(const unsigned char p[32])
|
38
|
-
{
|
39
|
-
CRYPTO_ALIGN(16)
|
40
|
-
static const unsigned char blacklist[][32] = {
|
41
|
-
/* 0 (order 4) */
|
42
|
-
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
43
|
-
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
44
|
-
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
45
|
-
/* 1 (order 1) */
|
46
|
-
{ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
47
|
-
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
48
|
-
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
49
|
-
/* 2707385501144840649318225287225658788936804267575313519463743609750303402022
|
50
|
-
(order 8) */
|
51
|
-
{ 0x26, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0, 0x45, 0xc3, 0xf4,
|
52
|
-
0x89, 0xf2, 0xef, 0x98, 0xf0, 0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6,
|
53
|
-
0x33, 0x39, 0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x05 },
|
54
|
-
/* 55188659117513257062467267217118295137698188065244968500265048394206261417927
|
55
|
-
(order 8) */
|
56
|
-
{ 0xc7, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f, 0xba, 0x3c, 0x0b,
|
57
|
-
0x76, 0x0d, 0x10, 0x67, 0x0f, 0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39,
|
58
|
-
0xcc, 0xc6, 0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0x7a },
|
59
|
-
/* p-1 (order 2) */
|
60
|
-
{ 0x13, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0, 0x45, 0xc3, 0xf4,
|
61
|
-
0x89, 0xf2, 0xef, 0x98, 0xf0, 0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6,
|
62
|
-
0x33, 0x39, 0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x85 },
|
63
|
-
/* p (order 4) */
|
64
|
-
{ 0xb4, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f, 0xba, 0x3c, 0x0b,
|
65
|
-
0x76, 0x0d, 0x10, 0x67, 0x0f, 0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39,
|
66
|
-
0xcc, 0xc6, 0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0xfa },
|
67
|
-
/* p+1 (order 1) */
|
68
|
-
{ 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
69
|
-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
70
|
-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
|
71
|
-
/* p+2707385501144840649318225287225658788936804267575313519463743609750303402022
|
72
|
-
(order 8) */
|
73
|
-
{ 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
74
|
-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
75
|
-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
|
76
|
-
/* p+55188659117513257062467267217118295137698188065244968500265048394206261417927
|
77
|
-
(order 8) */
|
78
|
-
{ 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
79
|
-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
80
|
-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
|
81
|
-
/* 2p-1 (order 2) */
|
82
|
-
{ 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
83
|
-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
84
|
-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
|
85
|
-
/* 2p (order 4) */
|
86
|
-
{ 0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
87
|
-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
88
|
-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
|
89
|
-
/* 2p+1 (order 1) */
|
90
|
-
{ 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
91
|
-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
92
|
-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }
|
93
|
-
};
|
94
|
-
size_t i, j;
|
95
|
-
unsigned char c;
|
96
|
-
|
97
|
-
for (i = 0; i < sizeof blacklist / sizeof blacklist[0]; i++) {
|
98
|
-
c = 0;
|
99
|
-
for (j = 0; j < 32; j++) {
|
100
|
-
c |= p[j] ^ blacklist[i][j];
|
101
|
-
}
|
102
|
-
if (c == 0) {
|
103
|
-
return 1;
|
104
|
-
}
|
105
|
-
}
|
106
|
-
return 0;
|
107
|
-
}
|
108
|
-
#endif
|
109
|
-
|
110
13
|
int
|
111
14
|
_crypto_sign_ed25519_verify_detached(const unsigned char *sig,
|
112
15
|
const unsigned char *m,
|
@@ -117,14 +20,15 @@ _crypto_sign_ed25519_verify_detached(const unsigned char *sig,
|
|
117
20
|
crypto_hash_sha512_state hs;
|
118
21
|
unsigned char h[64];
|
119
22
|
unsigned char rcheck[32];
|
120
|
-
|
121
|
-
|
122
|
-
ge_p3 A;
|
123
|
-
ge_p2 R;
|
23
|
+
ge25519_p3 A;
|
24
|
+
ge25519_p2 R;
|
124
25
|
|
125
26
|
#ifndef ED25519_COMPAT
|
126
|
-
if (
|
127
|
-
|
27
|
+
if (sc25519_is_canonical(sig + 32) == 0 ||
|
28
|
+
ge25519_has_small_order(sig) != 0) {
|
29
|
+
return -1;
|
30
|
+
}
|
31
|
+
if (ge25519_is_canonical(pk) == 0) {
|
128
32
|
return -1;
|
129
33
|
}
|
130
34
|
#else
|
@@ -132,13 +36,8 @@ _crypto_sign_ed25519_verify_detached(const unsigned char *sig,
|
|
132
36
|
return -1;
|
133
37
|
}
|
134
38
|
#endif
|
135
|
-
if (
|
136
|
-
|
137
|
-
}
|
138
|
-
for (i = 0; i < 32; ++i) {
|
139
|
-
d |= pk[i];
|
140
|
-
}
|
141
|
-
if (d == 0) {
|
39
|
+
if (ge25519_has_small_order(pk) != 0 ||
|
40
|
+
ge25519_frombytes_negate_vartime(&A, pk) != 0) {
|
142
41
|
return -1;
|
143
42
|
}
|
144
43
|
_crypto_sign_ed25519_ref10_hinit(&hs, prehashed);
|
@@ -146,10 +45,10 @@ _crypto_sign_ed25519_verify_detached(const unsigned char *sig,
|
|
146
45
|
crypto_hash_sha512_update(&hs, pk, 32);
|
147
46
|
crypto_hash_sha512_update(&hs, m, mlen);
|
148
47
|
crypto_hash_sha512_final(&hs, h);
|
149
|
-
|
48
|
+
sc25519_reduce(h);
|
150
49
|
|
151
|
-
|
152
|
-
|
50
|
+
ge25519_double_scalarmult_vartime(&R, h, &A, sig + 32);
|
51
|
+
ge25519_tobytes(rcheck, &R);
|
153
52
|
|
154
53
|
return crypto_verify_32(rcheck, sig) | (-(rcheck == sig)) |
|
155
54
|
sodium_memcmp(sig, rcheck, 32);
|