From ac8dffbecb3025a66547fbe8479deb156f2ba64b Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 12 Dec 2017 14:35:08 +0100 Subject: [PATCH] Return -1 if the scalar is 0 in crypto_scalarmult_ed25519() For consistency with _base() --- .../ed25519/ref10/scalarmult_ed25519_ref10.c | 4 ++-- test/default/scalarmult_ed25519.c | 10 +++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/libsodium/crypto_scalarmult/ed25519/ref10/scalarmult_ed25519_ref10.c b/src/libsodium/crypto_scalarmult/ed25519/ref10/scalarmult_ed25519_ref10.c index 57c06a58..0e317cf7 100644 --- a/src/libsodium/crypto_scalarmult/ed25519/ref10/scalarmult_ed25519_ref10.c +++ b/src/libsodium/crypto_scalarmult/ed25519/ref10/scalarmult_ed25519_ref10.c @@ -47,8 +47,8 @@ crypto_scalarmult_ed25519(unsigned char *q, const unsigned char *n, _crypto_scalarmult_ed25519_clamp(t); ge25519_scalarmult(&Q, t, &P); ge25519_p3_tobytes(q, &Q); - if (_crypto_scalarmult_ed25519_is_inf(q) != 0) { - return -1; /* LCOV_EXCL_LINE */ + if (_crypto_scalarmult_ed25519_is_inf(q) != 0 || sodium_is_zero(n, 32)) { + return -1; } return 0; } diff --git a/test/default/scalarmult_ed25519.c b/test/default/scalarmult_ed25519.c index b1cf2ffd..3ad4bd09 100644 --- a/test/default/scalarmult_ed25519.c +++ b/test/default/scalarmult_ed25519.c @@ -43,10 +43,18 @@ main(void) memset(n, 0, crypto_scalarmult_ed25519_SCALARBYTES); if (crypto_scalarmult_ed25519_base(q, n) != -1) { + printf("crypto_scalarmult_ed25519_base(0) failed\n"); + } + if (crypto_scalarmult_ed25519(q2, n, p) != -1) { + printf("crypto_scalarmult_ed25519(0) passed\n"); + } + + n[0] = 1; + if (crypto_scalarmult_ed25519_base(q, n) != 0) { printf("crypto_scalarmult_ed25519_base() failed\n"); } if (crypto_scalarmult_ed25519(q2, n, p) != 0) { - printf("crypto_scalarmult_ed25519() failed\n"); + printf("crypto_scalarmult_ed25519() passed\n"); } if (crypto_scalarmult_ed25519(q, n, non_canonical_p) != -1) {