mirror of
https://github.com/jedisct1/libsodium.git
synced 2026-08-25 08:37:13 +09:00
Merge branch 'master' of github.com:jedisct1/libsodium
* 'master' of github.com:jedisct1/libsodium: Print something after auto* are done libtoolize copy Always copy aux files Don't use autoreconf Move AC_USE_SYSTEM_EXTENSIONS up Shorten Faster sc25519 inversion, with one less squaring Update prototypes Replace the multiplication by the group order with an addition chain. Travis CI: use autogen -d Add extra box_seal() tests crypto_box_seal(): copy the key after encryption to support in-place encryption
This commit is contained in:
+1
-1
@@ -11,7 +11,7 @@ compiler:
|
||||
- g++
|
||||
|
||||
install:
|
||||
- ./autogen.sh -f
|
||||
- ./autogen.sh -s
|
||||
- env CC=tcc CFLAGS='-w' CPPFLAGS="-DDEV_MODE=1" ./configure --prefix=/tmp --disable-dependency-tracking --disable-shared || cat config.log
|
||||
- make -j $(nproc) && make check && make install
|
||||
- env CC=tcc CPPFLAGS='-I/tmp/include' LDFLAGS='-L/tmp/lib' LD_LIBRARY_PATH='/tmp/lib' ./test/constcheck.sh
|
||||
|
||||
+4
-8
@@ -84,14 +84,10 @@ if [ "$overwrite_config" = false ]; then
|
||||
mv build-aux/config.sub build-aux/config.sub.stable
|
||||
fi
|
||||
fi
|
||||
if autoreconf --version >/dev/null 2>&1; then
|
||||
autoreconf -ivf
|
||||
else
|
||||
$LIBTOOLIZE &&
|
||||
aclocal &&
|
||||
automake --add-missing --force-missing --include-deps &&
|
||||
autoconf
|
||||
fi
|
||||
$LIBTOOLIZE --copy --install &&
|
||||
aclocal &&
|
||||
automake --add-missing --copy --force-missing --include-deps &&
|
||||
autoconf && echo Done.
|
||||
if [ "$overwrite_config" = false ]; then
|
||||
if [ -f build-aux/config.guess.stable ]; then
|
||||
mv build-aux/config.guess.stable build-aux/config.guess
|
||||
|
||||
+4
-3
@@ -44,6 +44,10 @@ AS_IF([pwd | fgrep ' ' > /dev/null 2>&1],
|
||||
[AC_MSG_ERROR([The build directory contains whitespaces - This can cause tests/installation to fail due to limitations of some libtool versions])]
|
||||
)
|
||||
|
||||
AC_PROG_CC_C99
|
||||
AM_PROG_AS
|
||||
AC_USE_SYSTEM_EXTENSIONS
|
||||
|
||||
dnl Switches
|
||||
|
||||
AC_ARG_ENABLE(ssp,
|
||||
@@ -210,9 +214,6 @@ AX_VALGRIND_CHECK
|
||||
|
||||
dnl Checks
|
||||
|
||||
AC_PROG_CC_C99
|
||||
AM_PROG_AS
|
||||
AC_USE_SYSTEM_EXTENSIONS
|
||||
AC_C_VARARRAYS
|
||||
|
||||
AC_CHECK_DEFINE([__wasi__], [WASI="yes"], [])
|
||||
|
||||
@@ -32,10 +32,10 @@ crypto_box_seal(unsigned char *c, const unsigned char *m,
|
||||
if (crypto_box_keypair(epk, esk) != 0) {
|
||||
return -1; /* LCOV_EXCL_LINE */
|
||||
}
|
||||
memcpy(c, epk, crypto_box_PUBLICKEYBYTES);
|
||||
_crypto_box_seal_nonce(nonce, epk, pk);
|
||||
ret = crypto_box_easy(c + crypto_box_PUBLICKEYBYTES, m, mlen,
|
||||
nonce, pk, esk);
|
||||
memcpy(c, epk, crypto_box_PUBLICKEYBYTES);
|
||||
sodium_memzero(esk, sizeof esk);
|
||||
sodium_memzero(epk, sizeof epk);
|
||||
sodium_memzero(nonce, sizeof nonce);
|
||||
|
||||
+1
-1
@@ -38,11 +38,11 @@ crypto_box_curve25519xchacha20poly1305_seal(unsigned char *c, const unsigned cha
|
||||
if (crypto_box_curve25519xchacha20poly1305_keypair(epk, esk) != 0) {
|
||||
return -1; /* LCOV_EXCL_LINE */
|
||||
}
|
||||
memcpy(c, epk, crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES);
|
||||
_crypto_box_curve25519xchacha20poly1305_seal_nonce(nonce, epk, pk);
|
||||
ret = crypto_box_curve25519xchacha20poly1305_easy(
|
||||
c + crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES, m, mlen,
|
||||
nonce, pk, esk);
|
||||
memcpy(c, epk, crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES);
|
||||
sodium_memzero(esk, sizeof esk);
|
||||
sodium_memzero(epk, sizeof epk);
|
||||
sodium_memzero(nonce, sizeof nonce);
|
||||
|
||||
@@ -38,7 +38,7 @@ crypto_core_ed25519_add(unsigned char *r,
|
||||
return -1;
|
||||
}
|
||||
ge25519_p3_to_cached(&q_cached, &q_p3);
|
||||
ge25519_add(&r_p1p1, &p_p3, &q_cached);
|
||||
ge25519_add_cached(&r_p1p1, &p_p3, &q_cached);
|
||||
ge25519_p1p1_to_p3(&r_p3, &r_p1p1);
|
||||
ge25519_p3_tobytes(r, &r_p3);
|
||||
|
||||
@@ -58,7 +58,7 @@ crypto_core_ed25519_sub(unsigned char *r,
|
||||
return -1;
|
||||
}
|
||||
ge25519_p3_to_cached(&q_cached, &q_p3);
|
||||
ge25519_sub(&r_p1p1, &p_p3, &q_cached);
|
||||
ge25519_sub_cached(&r_p1p1, &p_p3, &q_cached);
|
||||
ge25519_p1p1_to_p3(&r_p3, &r_p1p1);
|
||||
ge25519_p3_tobytes(r, &r_p3);
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ crypto_core_ristretto255_add(unsigned char *r,
|
||||
return -1;
|
||||
}
|
||||
ge25519_p3_to_cached(&q_cached, &q_p3);
|
||||
ge25519_add(&r_p1p1, &p_p3, &q_cached);
|
||||
ge25519_add_cached(&r_p1p1, &p_p3, &q_cached);
|
||||
ge25519_p1p1_to_p3(&r_p3, &r_p1p1);
|
||||
ristretto255_p3_tobytes(r, &r_p3);
|
||||
|
||||
@@ -52,7 +52,7 @@ crypto_core_ristretto255_sub(unsigned char *r,
|
||||
return -1;
|
||||
}
|
||||
ge25519_p3_to_cached(&q_cached, &q_p3);
|
||||
ge25519_sub(&r_p1p1, &p_p3, &q_cached);
|
||||
ge25519_sub_cached(&r_p1p1, &p_p3, &q_cached);
|
||||
ge25519_p1p1_to_p3(&r_p3, &r_p1p1);
|
||||
ristretto255_p3_tobytes(r, &r_p3);
|
||||
|
||||
|
||||
@@ -213,7 +213,7 @@ fe25519_sqrt(fe25519 x, const fe25519 x2)
|
||||
*/
|
||||
|
||||
void
|
||||
ge25519_add(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_cached *q)
|
||||
ge25519_add_cached(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_cached *q)
|
||||
{
|
||||
fe25519 t0;
|
||||
|
||||
@@ -368,7 +368,7 @@ ge25519_frombytes_negate_vartime(ge25519_p3 *h, const unsigned char *s)
|
||||
*/
|
||||
|
||||
static void
|
||||
ge25519_madd(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_precomp *q)
|
||||
ge25519_add_precomp(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_precomp *q)
|
||||
{
|
||||
fe25519 t0;
|
||||
|
||||
@@ -389,7 +389,7 @@ ge25519_madd(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_precomp *q)
|
||||
*/
|
||||
|
||||
static void
|
||||
ge25519_msub(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_precomp *q)
|
||||
ge25519_sub_precomp(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_precomp *q)
|
||||
{
|
||||
fe25519 t0;
|
||||
|
||||
@@ -657,7 +657,7 @@ ge25519_cmov8_cached(ge25519_cached *t, const ge25519_cached cached[8], const si
|
||||
*/
|
||||
|
||||
void
|
||||
ge25519_sub(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_cached *q)
|
||||
ge25519_sub_cached(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_cached *q)
|
||||
{
|
||||
fe25519 t0;
|
||||
|
||||
@@ -724,31 +724,31 @@ ge25519_double_scalarmult_vartime(ge25519_p2 *r, const unsigned char *a,
|
||||
ge25519_p3_dbl(&t, A);
|
||||
ge25519_p1p1_to_p3(&A2, &t);
|
||||
|
||||
ge25519_add(&t, &A2, &Ai[0]);
|
||||
ge25519_add_cached(&t, &A2, &Ai[0]);
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_p3_to_cached(&Ai[1], &u);
|
||||
|
||||
ge25519_add(&t, &A2, &Ai[1]);
|
||||
ge25519_add_cached(&t, &A2, &Ai[1]);
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_p3_to_cached(&Ai[2], &u);
|
||||
|
||||
ge25519_add(&t, &A2, &Ai[2]);
|
||||
ge25519_add_cached(&t, &A2, &Ai[2]);
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_p3_to_cached(&Ai[3], &u);
|
||||
|
||||
ge25519_add(&t, &A2, &Ai[3]);
|
||||
ge25519_add_cached(&t, &A2, &Ai[3]);
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_p3_to_cached(&Ai[4], &u);
|
||||
|
||||
ge25519_add(&t, &A2, &Ai[4]);
|
||||
ge25519_add_cached(&t, &A2, &Ai[4]);
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_p3_to_cached(&Ai[5], &u);
|
||||
|
||||
ge25519_add(&t, &A2, &Ai[5]);
|
||||
ge25519_add_cached(&t, &A2, &Ai[5]);
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_p3_to_cached(&Ai[6], &u);
|
||||
|
||||
ge25519_add(&t, &A2, &Ai[6]);
|
||||
ge25519_add_cached(&t, &A2, &Ai[6]);
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_p3_to_cached(&Ai[7], &u);
|
||||
|
||||
@@ -765,18 +765,18 @@ ge25519_double_scalarmult_vartime(ge25519_p2 *r, const unsigned char *a,
|
||||
|
||||
if (aslide[i] > 0) {
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_add(&t, &u, &Ai[aslide[i] / 2]);
|
||||
ge25519_add_cached(&t, &u, &Ai[aslide[i] / 2]);
|
||||
} else if (aslide[i] < 0) {
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_sub(&t, &u, &Ai[(-aslide[i]) / 2]);
|
||||
ge25519_sub_cached(&t, &u, &Ai[(-aslide[i]) / 2]);
|
||||
}
|
||||
|
||||
if (bslide[i] > 0) {
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_madd(&t, &u, &Bi[bslide[i] / 2]);
|
||||
ge25519_add_precomp(&t, &u, &Bi[bslide[i] / 2]);
|
||||
} else if (bslide[i] < 0) {
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_msub(&t, &u, &Bi[(-bslide[i]) / 2]);
|
||||
ge25519_sub_precomp(&t, &u, &Bi[(-bslide[i]) / 2]);
|
||||
}
|
||||
|
||||
ge25519_p1p1_to_p2(r, &t);
|
||||
@@ -812,7 +812,7 @@ ge25519_scalarmult(ge25519_p3 *h, const unsigned char *a, const ge25519_p3 *p)
|
||||
ge25519_p1p1_to_p3(&p2, &t2);
|
||||
ge25519_p3_to_cached(&pi[2 - 1], &p2); /* 2p = 2*p */
|
||||
|
||||
ge25519_add(&t3, p, &pi[2 - 1]);
|
||||
ge25519_add_cached(&t3, p, &pi[2 - 1]);
|
||||
ge25519_p1p1_to_p3(&p3, &t3);
|
||||
ge25519_p3_to_cached(&pi[3 - 1], &p3); /* 3p = 2p+p */
|
||||
|
||||
@@ -820,7 +820,7 @@ ge25519_scalarmult(ge25519_p3 *h, const unsigned char *a, const ge25519_p3 *p)
|
||||
ge25519_p1p1_to_p3(&p4, &t4);
|
||||
ge25519_p3_to_cached(&pi[4 - 1], &p4); /* 4p = 2*2p */
|
||||
|
||||
ge25519_add(&t5, p, &pi[4 - 1]);
|
||||
ge25519_add_cached(&t5, p, &pi[4 - 1]);
|
||||
ge25519_p1p1_to_p3(&p5, &t5);
|
||||
ge25519_p3_to_cached(&pi[5 - 1], &p5); /* 5p = 4p+p */
|
||||
|
||||
@@ -828,7 +828,7 @@ ge25519_scalarmult(ge25519_p3 *h, const unsigned char *a, const ge25519_p3 *p)
|
||||
ge25519_p1p1_to_p3(&p6, &t6);
|
||||
ge25519_p3_to_cached(&pi[6 - 1], &p6); /* 6p = 2*3p */
|
||||
|
||||
ge25519_add(&t7, p, &pi[6 - 1]);
|
||||
ge25519_add_cached(&t7, p, &pi[6 - 1]);
|
||||
ge25519_p1p1_to_p3(&p7, &t7);
|
||||
ge25519_p3_to_cached(&pi[7 - 1], &p7); /* 7p = 6p+p */
|
||||
|
||||
@@ -857,7 +857,7 @@ ge25519_scalarmult(ge25519_p3 *h, const unsigned char *a, const ge25519_p3 *p)
|
||||
|
||||
for (i = 63; i != 0; i--) {
|
||||
ge25519_cmov8_cached(&t, pi, e[i]);
|
||||
ge25519_add(&r, h, &t);
|
||||
ge25519_add_cached(&r, h, &t);
|
||||
|
||||
ge25519_p1p1_to_p2(&s, &r);
|
||||
ge25519_p2_dbl(&r, &s);
|
||||
@@ -871,7 +871,7 @@ ge25519_scalarmult(ge25519_p3 *h, const unsigned char *a, const ge25519_p3 *p)
|
||||
ge25519_p1p1_to_p3(h, &r); /* *16 */
|
||||
}
|
||||
ge25519_cmov8_cached(&t, pi, e[i]);
|
||||
ge25519_add(&r, h, &t);
|
||||
ge25519_add_cached(&r, h, &t);
|
||||
|
||||
ge25519_p1p1_to_p3(h, &r);
|
||||
}
|
||||
@@ -917,7 +917,7 @@ ge25519_scalarmult_base(ge25519_p3 *h, const unsigned char *a)
|
||||
|
||||
for (i = 1; i < 64; i += 2) {
|
||||
ge25519_cmov8_base(&t, i / 2, e[i]);
|
||||
ge25519_madd(&r, h, &t);
|
||||
ge25519_add_precomp(&r, h, &t);
|
||||
ge25519_p1p1_to_p3(h, &r);
|
||||
}
|
||||
|
||||
@@ -932,64 +932,97 @@ ge25519_scalarmult_base(ge25519_p3 *h, const unsigned char *a)
|
||||
|
||||
for (i = 0; i < 64; i += 2) {
|
||||
ge25519_cmov8_base(&t, i / 2, e[i]);
|
||||
ge25519_madd(&r, h, &t);
|
||||
ge25519_add_precomp(&r, h, &t);
|
||||
ge25519_p1p1_to_p3(h, &r);
|
||||
}
|
||||
}
|
||||
|
||||
/* r = 2p */
|
||||
static void
|
||||
ge25519_p3p3_dbl(ge25519_p3 *r, const ge25519_p3 *p)
|
||||
{
|
||||
ge25519_p1p1 p1p1;
|
||||
|
||||
ge25519_p3_dbl(&p1p1, p);
|
||||
ge25519_p1p1_to_p3(r, &p1p1);
|
||||
}
|
||||
|
||||
/* r = p+q */
|
||||
static void
|
||||
ge25519_p3_add(ge25519_p3 *r, const ge25519_p3 *p, const ge25519_p3 *q)
|
||||
{
|
||||
ge25519_cached q_cached;
|
||||
ge25519_p1p1 p1p1;
|
||||
|
||||
ge25519_p3_to_cached(&q_cached, q);
|
||||
ge25519_add_cached(&p1p1, p, &q_cached);
|
||||
ge25519_p1p1_to_p3(r, &p1p1);
|
||||
}
|
||||
|
||||
/* r = r*(2^n)+q */
|
||||
static void
|
||||
ge25519_p3_dbladd(ge25519_p3 *r, const int n, const ge25519_p3 *q)
|
||||
{
|
||||
ge25519_p2 p2;
|
||||
ge25519_p1p1 p1p1;
|
||||
int i;
|
||||
|
||||
ge25519_p3_to_p2(&p2, r);
|
||||
for (i = 0; i < n; i++) {
|
||||
ge25519_p2_dbl(&p1p1, &p2);
|
||||
ge25519_p1p1_to_p2(&p2, &p1p1);
|
||||
}
|
||||
ge25519_p1p1_to_p3(r, &p1p1);
|
||||
ge25519_p3_add(r, r, q);
|
||||
}
|
||||
|
||||
/* multiply by the order of the main subgroup l = 2^252+27742317777372353535851937790883648493 */
|
||||
static void
|
||||
ge25519_mul_l(ge25519_p3 *r, const ge25519_p3 *A)
|
||||
ge25519_mul_l(ge25519_p3 *r, const ge25519_p3 *p)
|
||||
{
|
||||
static const signed char aslide[253] = {
|
||||
13, 0, 0, 0, 0, -1, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, -13, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, -13, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, -13, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 3, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
|
||||
};
|
||||
ge25519_cached Ai[8];
|
||||
ge25519_p1p1 t;
|
||||
ge25519_p3 u;
|
||||
ge25519_p3 A2;
|
||||
int i;
|
||||
ge25519_p3 _10, _11, _100, _110, _1000, _1011, _10000, _100000, _100110,
|
||||
_1000000, _1010000, _1010011, _1100011, _1100111, _1101011, _10010011,
|
||||
_10010111, _10111101, _11010011, _11100111, _11101101, _11110101;
|
||||
|
||||
ge25519_p3_to_cached(&Ai[0], A);
|
||||
ge25519_p3_dbl(&t, A);
|
||||
ge25519_p1p1_to_p3(&A2, &t);
|
||||
ge25519_add(&t, &A2, &Ai[0]);
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_p3_to_cached(&Ai[1], &u);
|
||||
ge25519_add(&t, &A2, &Ai[1]);
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_p3_to_cached(&Ai[2], &u);
|
||||
ge25519_add(&t, &A2, &Ai[2]);
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_p3_to_cached(&Ai[3], &u);
|
||||
ge25519_add(&t, &A2, &Ai[3]);
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_p3_to_cached(&Ai[4], &u);
|
||||
ge25519_add(&t, &A2, &Ai[4]);
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_p3_to_cached(&Ai[5], &u);
|
||||
ge25519_add(&t, &A2, &Ai[5]);
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_p3_to_cached(&Ai[6], &u);
|
||||
ge25519_add(&t, &A2, &Ai[6]);
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_p3_to_cached(&Ai[7], &u);
|
||||
ge25519_p3p3_dbl(&_10, p);
|
||||
ge25519_p3_add(&_11, p, &_10);
|
||||
ge25519_p3_add(&_100, p, &_11);
|
||||
ge25519_p3_add(&_110, &_10, &_100);
|
||||
ge25519_p3_add(&_1000, &_10, &_110);
|
||||
ge25519_p3_add(&_1011, &_11, &_1000);
|
||||
ge25519_p3p3_dbl(&_10000, &_1000);
|
||||
ge25519_p3p3_dbl(&_100000, &_10000);
|
||||
ge25519_p3_add(&_100110, &_110, &_100000);
|
||||
ge25519_p3p3_dbl(&_1000000, &_100000);
|
||||
ge25519_p3_add(&_1010000, &_10000, &_1000000);
|
||||
ge25519_p3_add(&_1010011, &_11, &_1010000);
|
||||
ge25519_p3_add(&_1100011, &_10000, &_1010011);
|
||||
ge25519_p3_add(&_1100111, &_100, &_1100011);
|
||||
ge25519_p3_add(&_1101011, &_100, &_1100111);
|
||||
ge25519_p3_add(&_10010011, &_1000000, &_1010011);
|
||||
ge25519_p3_add(&_10010111, &_100, &_10010011);
|
||||
ge25519_p3_add(&_10111101, &_100110, &_10010111);
|
||||
ge25519_p3_add(&_11010011, &_1000000, &_10010011);
|
||||
ge25519_p3_add(&_11100111, &_1010000, &_10010111);
|
||||
ge25519_p3_add(&_11101101, &_110, &_11100111);
|
||||
ge25519_p3_add(&_11110101, &_1000, &_11101101);
|
||||
|
||||
ge25519_p3_0(r);
|
||||
|
||||
for (i = 252; i >= 0; --i) {
|
||||
ge25519_p3_dbl(&t, r);
|
||||
|
||||
if (aslide[i] > 0) {
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_add(&t, &u, &Ai[aslide[i] / 2]);
|
||||
} else if (aslide[i] < 0) {
|
||||
ge25519_p1p1_to_p3(&u, &t);
|
||||
ge25519_sub(&t, &u, &Ai[(-aslide[i]) / 2]);
|
||||
}
|
||||
|
||||
ge25519_p1p1_to_p3(r, &t);
|
||||
}
|
||||
ge25519_p3_add(r, &_1011, &_11110101);
|
||||
ge25519_p3_dbladd(r, 126, &_1010011);
|
||||
ge25519_p3_dbladd(r, 9, &_10);
|
||||
ge25519_p3_add(r, r, &_11110101);
|
||||
ge25519_p3_dbladd(r, 7, &_1100111);
|
||||
ge25519_p3_dbladd(r, 9, &_11110101);
|
||||
ge25519_p3_dbladd(r, 11, &_10111101);
|
||||
ge25519_p3_dbladd(r, 8, &_11100111);
|
||||
ge25519_p3_dbladd(r, 9, &_1101011);
|
||||
ge25519_p3_dbladd(r, 6, &_1011);
|
||||
ge25519_p3_dbladd(r, 14, &_10010011);
|
||||
ge25519_p3_dbladd(r, 10, &_1100011);
|
||||
ge25519_p3_dbladd(r, 9, &_10010111);
|
||||
ge25519_p3_dbladd(r, 10, &_11110101);
|
||||
ge25519_p3_dbladd(r, 8, &_11010011);
|
||||
ge25519_p3_dbladd(r, 8, &_11101101);
|
||||
}
|
||||
|
||||
int
|
||||
@@ -2100,46 +2133,52 @@ sc25519_sqmul(unsigned char s[32], const int n, const unsigned char a[32])
|
||||
void
|
||||
sc25519_invert(unsigned char recip[32], const unsigned char s[32])
|
||||
{
|
||||
unsigned char _10[32], _100[32], _11[32], _101[32], _111[32],
|
||||
_1001[32], _1011[32], _1111[32];
|
||||
unsigned char _10[32], _100[32], _1000[32], _10000[32], _100000[32],
|
||||
_1000000[32], _10010011[32], _10010111[32], _100110[32], _1010[32],
|
||||
_1010000[32], _1010011[32], _1011[32], _10110[32], _10111101[32],
|
||||
_11[32], _1100011[32], _1100111[32], _11010011[32], _1101011[32],
|
||||
_11100111[32], _11101011[32], _11110101[32];
|
||||
|
||||
sc25519_sq(_10, s);
|
||||
sc25519_sq(_100, _10);
|
||||
sc25519_mul(_11, _10, s);
|
||||
sc25519_mul(_101, _10, _11);
|
||||
sc25519_mul(_111, _10, _101);
|
||||
sc25519_mul(_1001, _10, _111);
|
||||
sc25519_mul(_1011, _10, _1001);
|
||||
sc25519_mul(_1111, _100, _1011);
|
||||
sc25519_mul(recip, _1111, s);
|
||||
sc25519_mul(_11, s, _10);
|
||||
sc25519_mul(_100, s, _11);
|
||||
sc25519_sq(_1000, _100);
|
||||
sc25519_mul(_1010, _10, _1000);
|
||||
sc25519_mul(_1011, s, _1010);
|
||||
sc25519_sq(_10000, _1000);
|
||||
sc25519_sq(_10110, _1011);
|
||||
sc25519_mul(_100000, _1010, _10110);
|
||||
sc25519_mul(_100110, _10000, _10110);
|
||||
sc25519_sq(_1000000, _100000);
|
||||
sc25519_mul(_1010000, _10000, _1000000);
|
||||
sc25519_mul(_1010011, _11, _1010000);
|
||||
sc25519_mul(_1100011, _10000, _1010011);
|
||||
sc25519_mul(_1100111, _100, _1100011);
|
||||
sc25519_mul(_1101011, _100, _1100111);
|
||||
sc25519_mul(_10010011, _1000000, _1010011);
|
||||
sc25519_mul(_10010111, _100, _10010011);
|
||||
sc25519_mul(_10111101, _100110, _10010111);
|
||||
sc25519_mul(_11010011, _10110, _10111101);
|
||||
sc25519_mul(_11100111, _1010000, _10010111);
|
||||
sc25519_mul(_11101011, _100, _11100111);
|
||||
sc25519_mul(_11110101, _1010, _11101011);
|
||||
|
||||
sc25519_sqmul(recip, 123 + 3, _101);
|
||||
sc25519_sqmul(recip, 2 + 2, _11);
|
||||
sc25519_sqmul(recip, 1 + 4, _1111);
|
||||
sc25519_sqmul(recip, 1 + 4, _1111);
|
||||
sc25519_sqmul(recip, 4, _1001);
|
||||
sc25519_sqmul(recip, 2, _11);
|
||||
sc25519_sqmul(recip, 1 + 4, _1111);
|
||||
sc25519_sqmul(recip, 1 + 3, _101);
|
||||
sc25519_sqmul(recip, 3 + 3, _101);
|
||||
sc25519_sqmul(recip, 3, _111);
|
||||
sc25519_sqmul(recip, 1 + 4, _1111);
|
||||
sc25519_sqmul(recip, 2 + 3, _111);
|
||||
sc25519_sqmul(recip, 2 + 2, _11);
|
||||
sc25519_sqmul(recip, 1 + 4, _1011);
|
||||
sc25519_sqmul(recip, 2 + 4, _1011);
|
||||
sc25519_sqmul(recip, 6 + 4, _1001);
|
||||
sc25519_sqmul(recip, 2 + 2, _11);
|
||||
sc25519_sqmul(recip, 3 + 2, _11);
|
||||
sc25519_sqmul(recip, 3 + 2, _11);
|
||||
sc25519_sqmul(recip, 1 + 4, _1001);
|
||||
sc25519_sqmul(recip, 1 + 3, _111);
|
||||
sc25519_sqmul(recip, 2 + 4, _1111);
|
||||
sc25519_sqmul(recip, 1 + 4, _1011);
|
||||
sc25519_sqmul(recip, 3, _101);
|
||||
sc25519_sqmul(recip, 2 + 4, _1111);
|
||||
sc25519_sqmul(recip, 3, _101);
|
||||
sc25519_sqmul(recip, 1 + 2, _11);
|
||||
sc25519_mul(recip, _1011, _11110101);
|
||||
sc25519_sqmul(recip, 126, _1010011);
|
||||
sc25519_sqmul(recip, 9, _10);
|
||||
sc25519_mul(recip, recip, _11110101);
|
||||
sc25519_sqmul(recip, 7, _1100111);
|
||||
sc25519_sqmul(recip, 9, _11110101);
|
||||
sc25519_sqmul(recip, 11, _10111101);
|
||||
sc25519_sqmul(recip, 8, _11100111);
|
||||
sc25519_sqmul(recip, 9, _1101011);
|
||||
sc25519_sqmul(recip, 6, _1011);
|
||||
sc25519_sqmul(recip, 14, _10010011);
|
||||
sc25519_sqmul(recip, 10, _1100011);
|
||||
sc25519_sqmul(recip, 9, _10010111);
|
||||
sc25519_sqmul(recip, 10, _11110101);
|
||||
sc25519_sqmul(recip, 8, _11010011);
|
||||
sc25519_sqmul(recip, 8, _11101011);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2949,7 +2988,7 @@ ristretto255_from_hash(unsigned char s[32], const unsigned char h[64])
|
||||
ristretto255_elligator(&p0, r0);
|
||||
ristretto255_elligator(&p1, r1);
|
||||
ge25519_p3_to_cached(&p1_cached, &p1);
|
||||
ge25519_add(&p_p1p1, &p0, &p1_cached);
|
||||
ge25519_add_cached(&p_p1p1, &p0, &p1_cached);
|
||||
ge25519_p1p1_to_p3(&p, &p_p1p1);
|
||||
ristretto255_p3_tobytes(s, &p);
|
||||
}
|
||||
|
||||
@@ -89,9 +89,9 @@ void ge25519_p1p1_to_p2(ge25519_p2 *r, const ge25519_p1p1 *p);
|
||||
|
||||
void ge25519_p1p1_to_p3(ge25519_p3 *r, const ge25519_p1p1 *p);
|
||||
|
||||
void ge25519_add(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_cached *q);
|
||||
void ge25519_add_cached(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_cached *q);
|
||||
|
||||
void ge25519_sub(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_cached *q);
|
||||
void ge25519_sub_cached(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_cached *q);
|
||||
|
||||
void ge25519_scalarmult_base(ge25519_p3 *h, const unsigned char *a);
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
#define fe25519_frombytes _sodium_fe25519_frombytes
|
||||
#define fe25519_invert _sodium_fe25519_invert
|
||||
#define fe25519_tobytes _sodium_fe25519_tobytes
|
||||
#define ge25519_add _sodium_ge25519_add
|
||||
#define ge25519_add_cached _sodium_ge25519_add_cached
|
||||
#define ge25519_double_scalarmult_vartime _sodium_ge25519_double_scalarmult_vartime
|
||||
#define ge25519_from_hash _sodium_ge25519_from_hash
|
||||
#define ge25519_from_uniform _sodium_ge25519_from_uniform
|
||||
@@ -66,7 +66,7 @@
|
||||
#define ge25519_p3_tobytes _sodium_ge25519_p3_tobytes
|
||||
#define ge25519_scalarmult _sodium_ge25519_scalarmult
|
||||
#define ge25519_scalarmult_base _sodium_ge25519_scalarmult_base
|
||||
#define ge25519_sub _sodium_ge25519_sub
|
||||
#define ge25519_sub_cached _sodium_ge25519_sub_cached
|
||||
#define ge25519_tobytes _sodium_ge25519_tobytes
|
||||
#define ristretto255_from_hash _sodium_ristretto255_from_hash
|
||||
#define ristretto255_frombytes _sodium_ristretto255_frombytes
|
||||
|
||||
+66
-2
@@ -41,9 +41,38 @@ void tv1(void)
|
||||
assert(crypto_box_sealbytes() == crypto_box_SEALBYTES);
|
||||
}
|
||||
|
||||
#ifndef SODIUM_LIBRARY_MINIMAL
|
||||
static
|
||||
void tv2(void)
|
||||
{
|
||||
unsigned char pk[crypto_box_PUBLICKEYBYTES];
|
||||
unsigned char sk[crypto_box_SECRETKEYBYTES];
|
||||
unsigned char *cm;
|
||||
unsigned char *m2;
|
||||
size_t m_len;
|
||||
size_t cm_len;
|
||||
|
||||
crypto_box_keypair(pk, sk);
|
||||
m_len = (size_t) randombytes_uniform(1000);
|
||||
cm_len = crypto_box_SEALBYTES + m_len;
|
||||
m2 = (unsigned char *) sodium_malloc(m_len);
|
||||
cm = (unsigned char *) sodium_malloc(cm_len);
|
||||
randombytes_buf(cm, m_len);
|
||||
if (crypto_box_seal(cm, cm, m_len, pk) != 0) {
|
||||
printf("crypto_box_seal() failure\n");
|
||||
return;
|
||||
}
|
||||
if (crypto_box_seal_open(m2, cm, cm_len, pk, sk) != 0) {
|
||||
printf("crypto_box_seal_open() failure\n");
|
||||
return;
|
||||
}
|
||||
assert(memcmp(cm, m2, m_len) != 0);
|
||||
sodium_free(cm);
|
||||
sodium_free(m2);
|
||||
}
|
||||
|
||||
#ifndef SODIUM_LIBRARY_MINIMAL
|
||||
static
|
||||
void tv3(void)
|
||||
{
|
||||
unsigned char pk[crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES];
|
||||
unsigned char sk[crypto_box_curve25519xchacha20poly1305_SECRETKEYBYTES];
|
||||
@@ -82,13 +111,46 @@ void tv2(void)
|
||||
crypto_box_curve25519xchacha20poly1305_SEALBYTES);
|
||||
}
|
||||
|
||||
static
|
||||
void tv4(void)
|
||||
{
|
||||
unsigned char pk[crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES];
|
||||
unsigned char sk[crypto_box_curve25519xchacha20poly1305_SECRETKEYBYTES];
|
||||
unsigned char *cm;
|
||||
unsigned char *m2;
|
||||
size_t m_len;
|
||||
size_t cm_len;
|
||||
|
||||
crypto_box_curve25519xchacha20poly1305_keypair(pk, sk);
|
||||
m_len = (size_t) randombytes_uniform(1000);
|
||||
cm_len = crypto_box_curve25519xchacha20poly1305_SEALBYTES + m_len;
|
||||
m2 = (unsigned char *) sodium_malloc(m_len);
|
||||
cm = (unsigned char *) sodium_malloc(cm_len);
|
||||
randombytes_buf(cm, m_len);
|
||||
if (crypto_box_curve25519xchacha20poly1305_seal(cm, cm, m_len, pk) != 0) {
|
||||
printf("crypto_box_curve25519xchacha20poly1305_seal() failure\n");
|
||||
return;
|
||||
}
|
||||
if (crypto_box_curve25519xchacha20poly1305_seal_open(m2, cm, cm_len, pk, sk) != 0) {
|
||||
printf("crypto_box_curve25519xchacha20poly1305_seal_open() failure\n");
|
||||
return;
|
||||
}
|
||||
assert(memcmp(cm, m2, m_len) != 0);
|
||||
sodium_free(cm);
|
||||
sodium_free(m2);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static
|
||||
void tv2(void)
|
||||
void tv3(void)
|
||||
{
|
||||
printf("0\n-1\n-1\n-1\n");
|
||||
}
|
||||
|
||||
static
|
||||
void tv4(void)
|
||||
{ }
|
||||
#endif
|
||||
|
||||
int
|
||||
@@ -96,6 +158,8 @@ main(void)
|
||||
{
|
||||
tv1();
|
||||
tv2();
|
||||
tv3();
|
||||
tv4();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -637,7 +637,7 @@ escrypt_r
|
||||
fe25519_frombytes
|
||||
fe25519_invert
|
||||
fe25519_tobytes
|
||||
ge25519_add
|
||||
ge25519_add_cached
|
||||
ge25519_double_scalarmult_vartime
|
||||
ge25519_from_hash
|
||||
ge25519_from_uniform
|
||||
@@ -653,7 +653,7 @@ ge25519_p3_to_cached
|
||||
ge25519_p3_tobytes
|
||||
ge25519_scalarmult
|
||||
ge25519_scalarmult_base
|
||||
ge25519_sub
|
||||
ge25519_sub_cached
|
||||
ge25519_tobytes
|
||||
randombytes
|
||||
randombytes_buf
|
||||
|
||||
Reference in New Issue
Block a user