]> Git Repo - secp256k1.git/log
secp256k1.git
3 years agoFix typo in explanation
Pieter Wuille [Mon, 29 Mar 2021 23:33:36 +0000 (16:33 -0700)]
Fix typo in explanation

3 years agoMerge #889: fix uninitialized read in tests
Jonas Nick [Wed, 7 Apr 2021 12:52:49 +0000 (12:52 +0000)]
Merge #889: fix uninitialized read in tests

99a1cfec1740a914aa416a87fd0acbde5426b969 print warnings for conditional-uninitialized (PiRK)
3d2cf6c5bd35b0d72716b47bdd7e3892388aafc4 initialize variable in tests (PiRK)

Pull request description:

ACKs for top commit:
  real-or-random:
    ACK 99a1cfec1740a914aa416a87fd0acbde5426b969 code inspection
  jonasnick:
    ACK 99a1cfec1740a914aa416a87fd0acbde5426b969

Tree-SHA512: 72f92f51c44210ab54f166920f540525db0e3d1f19a2fa56e4a6d157a38a582f9dc649d919cf3278482c9fd723021b07759284a8fccbc574b62a22aac0facf51

3 years agoMerge #903: Make argument of fe_normalizes_to_zero{_var} const
Jonas Nick [Fri, 26 Mar 2021 14:56:55 +0000 (14:56 +0000)]
Merge #903: Make argument of fe_normalizes_to_zero{_var} const

23c3fb629b905deebc4bcc9914bcfff7b9aedacd Make argument of fe_normalizes_to_zero{_var} const (Pieter Wuille)

Pull request description:

ACKs for top commit:
  real-or-random:
    ACK 23c3fb629b905deebc4bcc9914bcfff7b9aedacd diff looks good
  jonasnick:
    ACK 23c3fb629b905deebc4bcc9914bcfff7b9aedacd

Tree-SHA512: a51894a9e59851dc4854e92e4200ef6d12a11f6785b903c23585cfff5ef8d369216f4121260fe8789d46d3e215f3c2baa42decae99ab9328e8081f5274e67fab

3 years agoMerge #907: changed import to use brackets <> for openssl
Jonas Nick [Fri, 26 Mar 2021 14:01:47 +0000 (14:01 +0000)]
Merge #907: changed import to use brackets <> for openssl

4504472269df06b8765b134d41f86619cdcdf8f6 changed import to use brackets <> for openssl as they are not local to the project (William Bright)

Pull request description:

ACKs for top commit:
  real-or-random:
    ACK 4504472269df06b8765b134d41f86619cdcdf8f6
  jonasnick:
    ACK 4504472269df06b8765b134d41f86619cdcdf8f6

Tree-SHA512: e35c202835a82dab5fe9f2f75e7752e70b15d5d2ee7485790749f145b35e8e995c4978b4015c726387c24248a7efb636d28791fe882581a144a0ddfb27e14075

3 years agochanged import to use brackets <> for openssl as they are not local to the project
William Bright [Sat, 20 Mar 2021 23:59:51 +0000 (19:59 -0400)]
changed import to use brackets <> for openssl as they are not local to the project

3 years agoMerge #831: Safegcd inverses, drop Jacobi symbols, remove libgmp
Pieter Wuille [Thu, 18 Mar 2021 00:03:17 +0000 (17:03 -0700)]
Merge #831: Safegcd inverses, drop Jacobi symbols, remove libgmp

24ad04fc064e71abdf973e061c30eb1f3f78db39 Make scalar_inverse{,_var} benchmark scale with SECP256K1_BENCH_ITERS (Pieter Wuille)
ebc1af700f9ec6e96586152b7090a2a6494308c3 Optimization: track f,g limb count and pass to new variable-time update_fg_var (Peter Dettman)
b306935ac12bb24fd931d735b4dfc07f707e7447 Optimization: use formulas instead of lookup tables for cancelling g bits (Peter Dettman)
9164a1b6582e2fc833c760a3403d26b9b0b3b7b3 Optimization: special-case zero modulus limbs in modinv64 (Pieter Wuille)
1f233b3fa05eb29a744487e0682d925055fb0d4c Remove num/gmp support (Pieter Wuille)
20448b8d09a492afcfcae7721033c13a44a776fd Remove unused Jacobi symbol support (Pieter Wuille)
5437e7bdfbffddf69fdf7b4af7e997c78f5dafbf Remove unused scalar_sqr (Pieter Wuille)
aa9cc5218001f14f4312bde1058417d4b755fd11 Improve field/scalar inverse tests (Pieter Wuille)
1e0e885c8ac814c3621d9e43e66d60f25e324e8e Make field/scalar code use the new modinv modules for inverses (Pieter Wuille)
436281afdcb68991395f97338197d208212965e2 Move secp256k1_fe_inverse{_var} to per-impl files (Pieter Wuille)
aa404d53bef21d252a23171381d4bfda6e7e25c6 Move secp256k1_scalar_{inverse{_var},is_even} to per-impl files (Pieter Wuille)
08d54964e51f318ef0cc4ef09d64cfa5ec143c5c Improve bounds checks in modinv modules (Pieter Wuille)
151aac00d31ba5e94800376f6fda4193071168af Add tests for modinv modules (Pieter Wuille)
d8a92fcc4c65cf189ec7bd5298dad8479347c442 Add extensive comments on the safegcd algorithm and implementation (Pieter Wuille)
8e415acba25830da9c23a4dd5531ebfc6b65aae7 Add safegcd based modular inverse modules (Peter Dettman)
de0a643c3dc2c40a447e670cfa1c1683c79c9297 Add secp256k1_ctz{32,64}_var functions (Pieter Wuille)

Pull request description:

  This is a rebased and squashed version of #767, adding safegcd-based implementations of constant-time and variable-time modular inverses for scalars and field elements, by Peter Dettman. The PR is organized as follows:
  * **Add secp256k1_ctz{32,64}_var functions** Introduction of ctz functions to util.h (which use `__builtin_ctz` on recent GCC and Clang, but fall back to using a software emulation using de Bruijn on other platforms). This isn't used anywhere in this commit, but does include tests.
  * **Add safegcd based modular inverse modules** Add Peter Dettman's safegcd code from #767 (without some of his optimizations, which are moved to later commits), turned into separate modules by me.
  * **Add extensive comments on the safegcd algorithm and implementation** Add a long description of the algorithm and optimizations to `doc/safegcd_implementation.md`, as well as additional comments to the code itself. It is probably best to review this together with the previous commit (they're separated to keep authorship).
  * **Add tests for modinv modules** Adds tests on the modinv interface directly, for arbitrary moduli.
  * **Improve bounds checks in modinv modules** Adds a lot of sanity checking to the modinv modules.
  * **Move secp256k1_scalar_{inverse{_var},is_even} to per-impl files** A pure refactor to prepare for switching the field and scalar code to modinv.
  * **Make field/scalar code use the new modinv modules for inverses** Actually switch over.
  * **Add extra modular inverse tests** This adds modular inverse tests through the field/scalar interface, now that those use modinv.
  * **Remove unused Jacobi symbol support** No longer needed.
  * **Remove num/gmp support** Bye-bye.
  * 3 commits with further optimizations.

ACKs for top commit:
  gmaxwell:
    ACK 24ad04fc064e71abdf973e061c30eb1f3f78db39
  sanket1729:
    ACK 24ad04fc064e71abdf973e061c30eb1f3f78db39
  real-or-random:
    ACK 24ad04fc064e71abdf973e061c30eb1f3f78db39 careful code review, some testing

Tree-SHA512: 732fe29315965e43ec9a10ee8c71eceeb983c43fe443da9dc5380a5a11b5e40b06e98d6abf67b773b1de74571fd2014973c6376f3a0caeac85e0cf163ba2144b

3 years agoMake argument of fe_normalizes_to_zero{_var} const
Pieter Wuille [Fri, 12 Mar 2021 18:31:54 +0000 (10:31 -0800)]
Make argument of fe_normalizes_to_zero{_var} const

3 years agoMake scalar_inverse{,_var} benchmark scale with SECP256K1_BENCH_ITERS
Pieter Wuille [Fri, 22 Jan 2021 23:47:44 +0000 (15:47 -0800)]
Make scalar_inverse{,_var} benchmark scale with SECP256K1_BENCH_ITERS

3 years agoOptimization: track f,g limb count and pass to new variable-time update_fg_var
Peter Dettman [Wed, 16 Dec 2020 02:17:19 +0000 (18:17 -0800)]
Optimization: track f,g limb count and pass to new variable-time update_fg_var

The magnitude of the f and g variables generally goes down as the algorithm
progresses. Make use of this by keeping tracking how many limbs are used, and
when the number becomes small enough, make use of this to reduce the complexity
of arithmetic on them.

Refactored by: Pieter Wuille <[email protected]>

3 years agoOptimization: use formulas instead of lookup tables for cancelling g bits
Peter Dettman [Wed, 16 Dec 2020 00:19:08 +0000 (16:19 -0800)]
Optimization: use formulas instead of lookup tables for cancelling g bits

This only seems to be a win on 64-bit platforms, so only do it there.

Refactored by: Pieter Wuille <[email protected]>

3 years agoOptimization: special-case zero modulus limbs in modinv64
Pieter Wuille [Sat, 28 Nov 2020 23:58:22 +0000 (15:58 -0800)]
Optimization: special-case zero modulus limbs in modinv64

Both the field and scalar modulus can be written in signed{30,62} notation
with one or more zero limbs. Make use of this in the update_de function to
avoid a few wide multiplications when that is the case.

This doesn't appear to be a win in the 32-bit implementation, so only
do it for the 64-bit one.

3 years agoRemove num/gmp support
Pieter Wuille [Sun, 11 Oct 2020 23:04:58 +0000 (16:04 -0700)]
Remove num/gmp support

The whole "num" API and its libgmp-based implementation are now unused. Remove them.

3 years agoRemove unused Jacobi symbol support
Pieter Wuille [Sun, 11 Oct 2020 22:56:17 +0000 (15:56 -0700)]
Remove unused Jacobi symbol support

No exposed functions rely on Jacobi symbol computation anymore. Remove it; it can always
be brough back later if needed.

3 years agoRemove unused scalar_sqr
Pieter Wuille [Sun, 24 Jan 2021 03:24:33 +0000 (19:24 -0800)]
Remove unused scalar_sqr

3 years agoImprove field/scalar inverse tests
Pieter Wuille [Mon, 12 Oct 2020 06:20:32 +0000 (23:20 -0700)]
Improve field/scalar inverse tests

Add a new run_inverse_tests that replaces all existing field/scalar inverse tests,
and tests a few identities for fixed inputs, small numbers (-999...999), random
inputs (structured and unstructured), as well as comparing with the output of
secp256k1_fe_inv_all_var.

3 years agoMake field/scalar code use the new modinv modules for inverses
Pieter Wuille [Sun, 29 Nov 2020 22:02:01 +0000 (14:02 -0800)]
Make field/scalar code use the new modinv modules for inverses

3 years agoMove secp256k1_fe_inverse{_var} to per-impl files
Pieter Wuille [Sun, 11 Oct 2020 22:41:54 +0000 (15:41 -0700)]
Move secp256k1_fe_inverse{_var} to per-impl files

This temporarily duplicates the inversion code across the 5x52 and 10x26
implementations. Those implementations will be replaced in a next commit.

3 years agoMove secp256k1_scalar_{inverse{_var},is_even} to per-impl files
Pieter Wuille [Sun, 11 Oct 2020 22:30:37 +0000 (15:30 -0700)]
Move secp256k1_scalar_{inverse{_var},is_even} to per-impl files

This temporarily duplicates the inversion code across the 4x64 and 8x32
implementations. Those implementations will be replaced in a later commit.

3 years agoImprove bounds checks in modinv modules
Pieter Wuille [Wed, 23 Dec 2020 19:13:57 +0000 (11:13 -0800)]
Improve bounds checks in modinv modules

This commit adds functions to verify and compare numbers in signed{30,62} notation,
and uses that to do more extensive bounds checking on various variables in the modinv
code.

3 years agoAdd tests for modinv modules
Pieter Wuille [Wed, 23 Dec 2020 02:24:36 +0000 (18:24 -0800)]
Add tests for modinv modules

This adds tests for the modinv{32,64}_impl.h directly (before the functions are used
inside the field/scalar code). It uses a naive implementation of modular multiplication
and gcds in order to verify the modular inverses themselves.

3 years agoAdd extensive comments on the safegcd algorithm and implementation
Pieter Wuille [Fri, 4 Dec 2020 00:26:58 +0000 (16:26 -0800)]
Add extensive comments on the safegcd algorithm and implementation

This adds a long comment explaining the algorithm and implementation choices by building
it up step by step in Python.

Comments in the code are also reworked/added, with references to the long explanation.

3 years agoAdd safegcd based modular inverse modules
Peter Dettman [Sun, 29 Nov 2020 22:01:03 +0000 (14:01 -0800)]
Add safegcd based modular inverse modules

Refactored by: Pieter Wuille <[email protected]>

3 years agoAdd secp256k1_ctz{32,64}_var functions
Pieter Wuille [Mon, 12 Oct 2020 02:10:58 +0000 (19:10 -0700)]
Add secp256k1_ctz{32,64}_var functions

These functions count the number of trailing zeroes in non-zero integers.

3 years agoMerge #901: ci: Switch all Linux builds to Debian and more improvements
Tim Ruffing [Sun, 7 Mar 2021 21:16:20 +0000 (22:16 +0100)]
Merge #901: ci: Switch all Linux builds to Debian and more improvements

9361f360bb04156c7a0fa8f2664680b74d463ed5 ci: Select number of parallel make jobs depending on CI environment (Tim Ruffing)
28eccdf80641f71fada0ee4065c8127468162176 ci: Split output of logs into multiple sections (Tim Ruffing)
c7f754fe4d5e032fd150c4b9b985855e9fcaa521 ci: Run PRs on merge result instead of on the source branch (Tim Ruffing)
b994a8be3cf8ab0fc6a622980a9845bb82cc17db ci: Print information about binaries using "file" (Tim Ruffing)
f24e122d13db7061b1086ddfd21d3a1c5294213b ci: Switch all Linux builds to Debian (Tim Ruffing)

Pull request description:

  Best reviewed commit by commit

ACKs for top commit:
  jonasnick:
    ACK 9361f360bb04156c7a0fa8f2664680b74d463ed5
  sipa:
    utACK 9361f360bb04156c7a0fa8f2664680b74d463ed5

Tree-SHA512: fc754e8b57dc58058cebbf63a60ca76e08dbaefea1508ea27b7f962bce697c10033da3f57a35f731bc7cf3e210eb00e3b8985ae8b729d7bd83faee085b878b9c

3 years agoci: Select number of parallel make jobs depending on CI environment
Tim Ruffing [Wed, 3 Mar 2021 00:21:18 +0000 (01:21 +0100)]
ci: Select number of parallel make jobs depending on CI environment

This should improve compilation times on macOS. Things can certainly
be improved further, e.g., by running the benchmarks in parallel.

3 years agoci: Split output of logs into multiple sections
Tim Ruffing [Mon, 1 Mar 2021 23:09:05 +0000 (00:09 +0100)]
ci: Split output of logs into multiple sections

3 years agoci: Run PRs on merge result instead of on the source branch
Tim Ruffing [Mon, 1 Mar 2021 22:50:54 +0000 (23:50 +0100)]
ci: Run PRs on merge result instead of on the source branch

This is taken from Bitcoin Core's .cirrus.yml

3 years agoci: Print information about binaries using "file"
Tim Ruffing [Fri, 26 Feb 2021 16:36:34 +0000 (17:36 +0100)]
ci: Print information about binaries using "file"

3 years agoci: Switch all Linux builds to Debian
Tim Ruffing [Fri, 26 Feb 2021 14:52:40 +0000 (15:52 +0100)]
ci: Switch all Linux builds to Debian

The experiment of using Nix Shell was not really successful. Most
notably, Nix uses a bunch of wrapper scripts around compilers, which
make the build much less "pure". This may be useful but it's exactly
not what we want for CI. In particular, this resulted in gcc being used
for the "clang" builds because a wrapper script redefined the CC env
variable.

This now builds a single docker image (Debian) for all architectures
that we test in CI on Linux.

3 years agoMerge #891: build: Add workaround for automake 1.13 and older
Tim Ruffing [Tue, 2 Mar 2021 14:25:00 +0000 (15:25 +0100)]
Merge #891: build: Add workaround for automake 1.13 and older

f329bba244264fb5f2c952c11e614987519d0dbc build: Add workaround for automake 1.13 and older (Tim Ruffing)

Pull request description:

  Fixes #890.

ACKs for top commit:
  michaelfolkson:
    ACK f329bba244264fb5f2c952c11e614987519d0dbc

Tree-SHA512: 1ae3d1587abb402c2d3bb28d3a48aeff056f061e755d65d482204bb502b8427aad376c7319b4a694a5bf79c193acd3c88cb65928f0bc0e5c7587222e1315b6d0

3 years agoMerge #894: ctime_test: move context randomization test to the end
Jonas Nick [Mon, 22 Feb 2021 22:05:43 +0000 (22:05 +0000)]
Merge #894: ctime_test: move context randomization test to the end

7d3497cdc4c747bdd51db70f42fe218622c3169f ctime_test: move context randomization test to the end (Jonas Nick)

Pull request description:

ACKs for top commit:
  real-or-random:
    ACK 7d3497cdc4c747bdd51db70f42fe218622c3169f diff looks good

Tree-SHA512: aef006c43df4cab254ee7de79cdd34c4e2f7a463f29d1da6d285006b32bb4e18d0b914a305f371b8b5f5a20594c37ee464eb1e59d1978db9b06bf6b642e651d8

3 years agoctime_test: move context randomization test to the end
Jonas Nick [Thu, 4 Feb 2021 23:17:09 +0000 (23:17 +0000)]
ctime_test: move context randomization test to the end

3 years agoprint warnings for conditional-uninitialized
PiRK [Sun, 31 Jan 2021 17:41:35 +0000 (18:41 +0100)]
print warnings for conditional-uninitialized

This compiler flag is available for clang but not gcc.

Test plan:

```
autogen.sh
./configure
make check
CC=clang ./configure
make check
```

If a variable is used uninitialized, the warning should look something
like:
```
  CC       src/tests-tests.o
src/tests.c:4336:15: warning: variable 'recid' may be uninitialized when used here [-Wconditional-uninitialized]
        CHECK(recid >= 0 && recid < 4);
              ^~~~~
./src/util.h:54:18: note: expanded from macro 'CHECK'
    if (EXPECT(!(cond), 0)) { \
                 ^~~~
./src/util.h:41:39: note: expanded from macro 'EXPECT'
                                      ^
src/tests.c:4327:14: note: initialize the variable 'recid' to silence this warning
    int recid;
             ^
              = 0
1 warning generated.
```

3 years agoinitialize variable in tests
PiRK [Fri, 29 Jan 2021 10:49:51 +0000 (11:49 +0100)]
initialize variable in tests

This was detected while running the tests with the `-Wconditional-uninitialized` flag

```
./autogen.sh
CC=clang CFLAGS="-Wconditional-uninitialized" ./configure
make check
```

The resulting warning is a false positive, but setting the value to -1
ensures that the CHECK below will fail if recid is never written to.

3 years agobuild: Add workaround for automake 1.13 and older
Tim Ruffing [Mon, 1 Feb 2021 21:54:09 +0000 (22:54 +0100)]
build: Add workaround for automake 1.13 and older

Fixes #890.

3 years agoMerge #882: Use bit ops instead of int mult for constant-time logic in gej_add_ge
Jonas Nick [Mon, 1 Feb 2021 10:23:05 +0000 (10:23 +0000)]
Merge #882: Use bit ops instead of int mult for constant-time logic in gej_add_ge

e491d06b98c9caa5eab74e38ba8419b9fb3b5015 Use bit ops instead of int mult for constant-time logic in gej_add_ge (Tim Ruffing)

Pull request description:

ACKs for top commit:
  sipa:
    utACK e491d06b98c9caa5eab74e38ba8419b9fb3b5015. Seems obviously better.
  elichai:
    ACK e491d06b98c9caa5eab74e38ba8419b9fb3b5015
  jonasnick:
    ACK e491d06b98c9caa5eab74e38ba8419b9fb3b5015

Tree-SHA512: 65977d3405e3b6c184c736d46898b615689b56f7562165114429dea49c0f9feb81d021cbe196c8a813b6239254b394cc24ac8d278dab37e521843a1bb0f70c47

3 years agoUse bit ops instead of int mult for constant-time logic in gej_add_ge
Tim Ruffing [Thu, 28 Jan 2021 15:57:17 +0000 (16:57 +0100)]
Use bit ops instead of int mult for constant-time logic in gej_add_ge

3 years agoMerge #864: Add support for Cirrus CI
Jonas Nick [Sat, 30 Jan 2021 10:07:45 +0000 (10:07 +0000)]
Merge #864: Add support for Cirrus CI

cc2a5451dc8ac8a3a9368e1a5b3a1488b15a8bc3 ci: Refactor Nix shell files (Jonas Nick)
2480e55c8f365eb15b703c75153766218ef8795f ci: Remove support for Travis CI (Tim Ruffing)
2b359f1c1d8f497629284864780d0684681e44dc ci: Enable simple cache for brewing valgrind on macOS (Tim Ruffing)
8c02e465c5ac2c8c35ce3aec45f88401df165ad0 ci: Add support for Cirrus CI (Tim Ruffing)

Pull request description:

ACKs for top commit:
  sipa:
    ACK cc2a5451dc8ac8a3a9368e1a5b3a1488b15a8bc3. Tested by introducing bugs: #883, #884, #885, #886, #887.
  jonasnick:
    ACK cc2a5451dc8ac8a3a9368e1a5b3a1488b15a8bc3

Tree-SHA512: c9e8a891c9bda48b3fc307c2a85d2e4aa180531d084edd778d41c034769661627538ab397efac3abfc1a71c2f0730a45350dd212d499fe475c90a2a1b3c61ac8

3 years agoci: Refactor Nix shell files
Jonas Nick [Fri, 29 Jan 2021 21:04:10 +0000 (21:04 +0000)]
ci: Refactor Nix shell files

3 years agoci: Remove support for Travis CI
Tim Ruffing [Thu, 28 Jan 2021 16:32:36 +0000 (17:32 +0100)]
ci: Remove support for Travis CI

So long, and thanks for all fish!

3 years agoci: Enable simple cache for brewing valgrind on macOS
Tim Ruffing [Thu, 14 Jan 2021 10:05:20 +0000 (11:05 +0100)]
ci: Enable simple cache for brewing valgrind on macOS

3 years agoci: Add support for Cirrus CI
Tim Ruffing [Tue, 22 Dec 2020 15:42:08 +0000 (16:42 +0100)]
ci: Add support for Cirrus CI

3 years agoMerge #880: Add parens around ROUND_TO_ALIGN's parameter.
Tim Ruffing [Tue, 26 Jan 2021 08:36:14 +0000 (09:36 +0100)]
Merge #880: Add parens around ROUND_TO_ALIGN's parameter.

b6f649889ae78573f1959f04172a8e1fe15beab7 Add parens around ROUND_TO_ALIGN's parameter. This makes the macro robust against a hypothetical ROUND_TO_ALIGN(foo ? sizeA : size B) invocation. (Russell O'Connor)

Pull request description:

  This makes the macro robust against a hypothetical `ROUND_TO_ALIGN(foo ? sizeA : size B)` invocation.

  See also <https://wiki.sei.cmu.edu/confluence/display/c/PRE01-C.+Use+parentheses+within+macros+around+parameter+names>.

ACKs for top commit:
  sipa:
    ACK b6f649889ae78573f1959f04172a8e1fe15beab7. This is the way.
  jonasnick:
    utACK b6f649889ae78573f1959f04172a8e1fe15beab7
  real-or-random:
    utACK b6f649889ae78573f1959f04172a8e1fe15beab7

Tree-SHA512: 6a2685f959e8ae472259e5ea75fe12e8e6213f56f5aec7603a896c294e6a8833caae25c412607d9c9a3125370a7765a3e506127b101a1b87203f95e326f6c6c6

3 years agoAdd parens around ROUND_TO_ALIGN's parameter.
Russell O'Connor [Mon, 25 Jan 2021 16:43:45 +0000 (11:43 -0500)]
Add parens around ROUND_TO_ALIGN's parameter.
This makes the macro robust against a hypothetical ROUND_TO_ALIGN(foo ? sizeA : size B) invocation.

3 years agoMerge #877: Add missing secp256k1_ge_set_gej_var decl.
Jonas Nick [Mon, 25 Jan 2021 14:00:41 +0000 (14:00 +0000)]
Merge #877: Add missing secp256k1_ge_set_gej_var decl.

482e4a9cfcecad28c3b7e601667b3b41949f47fe Add missing secp256k1_ge_set_gej_var decl. (Russell O'Connor)

Pull request description:

ACKs for top commit:
  sipa:
    utACK 482e4a9cfcecad28c3b7e601667b3b41949f47fe
  real-or-random:
    utACK https://github.com/bitcoin-core/secp256k1/pull/877/commits/482e4a9cfcecad28c3b7e601667b3b41949f47fe
  jonasnick:
    ACK 482e4a9cfcecad28c3b7e601667b3b41949f47fe

Tree-SHA512: 02195390fb79f08bcfd655dc56115ea37df42c1ad8f1123b26e7426e387d9658a3bb18fe9951140fc4dd78ce222b84d8b75ce77aec884675e0c26a2005dd2ddc

3 years agoMerge #874: Remove underscores from header defs.
Jonas Nick [Mon, 25 Jan 2021 13:57:35 +0000 (13:57 +0000)]
Merge #874: Remove underscores from header defs.

fb390c5299e999e06b7dff9e77e373600fae9fdf Remove underscores from header defs. This makes them consistent with other files and avoids reserved identifiers. (Russell O'Connor)

Pull request description:

ACKs for top commit:
  real-or-random:
    utACK fb390c5299e999e06b7dff9e77e373600fae9fdf
  jonasnick:
    ACK fb390c5299e999e06b7dff9e77e373600fae9fdf

Tree-SHA512: f49da79c0a90d1e82494821e7cf6f61c66bc377a3f37b2d4787ef19d2126e000627bfe4a76aa1c5bfffeb1382054aa824a7e9ab5d73c19d876b0828722c73854

3 years agoMerge #878: Remove unused secp256k1_fe_inv_all_var
Jonas Nick [Mon, 25 Jan 2021 13:39:48 +0000 (13:39 +0000)]
Merge #878: Remove unused secp256k1_fe_inv_all_var

75d2ae149ef37d3aa42fdefd1529aad89859816c Remove unused secp256k1_fe_inv_all_var (Pieter Wuille)

Pull request description:

ACKs for top commit:
  practicalswift:
    cr ACK 75d2ae149ef37d3aa42fdefd1529aad89859816c: patch looks correct
  real-or-random:
    utACK https://github.com/bitcoin-core/secp256k1/commit/75d2ae149ef37d3aa42fdefd1529aad89859816c
  jonasnick:
    utACK 75d2ae149ef37d3aa42fdefd1529aad89859816c

Tree-SHA512: 6f548a436c6dcb275493e73e6afa23fd1b79392cc3071878f98735732ac9c93971e5c92736c3fe50eaae90a200e1a435e9be9f14d1a69251c83876a6e3c46d41

3 years agoMerge #875: Avoid casting (void**) values.
Jonas Nick [Mon, 25 Jan 2021 13:35:53 +0000 (13:35 +0000)]
Merge #875: Avoid casting (void**) values.

27306186045955803ca4070783c6a28853003e6a Avoid casting (void**) values. Replaced with an expression that only casts (void*) values. (Russell O'Connor)

Pull request description:

ACKs for top commit:
  sipa:
    utACK 27306186045955803ca4070783c6a28853003e6a
  real-or-random:
    utACK https://github.com/bitcoin-core/secp256k1/pull/875/commits/27306186045955803ca4070783c6a28853003e6a
  jonasnick:
    utACK 27306186045955803ca4070783c6a28853003e6a

Tree-SHA512: bdc1e9eefa10f79b744ef6ae83f379faff7bce9fb428c3bcfcc3f6e4e252e5c6543efbe0f84760709850948cbc8a432772c76a6c5f6b8cd18cb2d862b324912d

3 years agoRemove unused secp256k1_fe_inv_all_var
Pieter Wuille [Sun, 24 Jan 2021 04:16:51 +0000 (20:16 -0800)]
Remove unused secp256k1_fe_inv_all_var

3 years agoAdd missing secp256k1_ge_set_gej_var decl.
Russell O'Connor [Sun, 24 Jan 2021 00:12:19 +0000 (19:12 -0500)]
Add missing secp256k1_ge_set_gej_var decl.

3 years agoAvoid casting (void**) values.
Russell O'Connor [Sat, 23 Jan 2021 20:22:54 +0000 (15:22 -0500)]
Avoid casting (void**) values.
Replaced with an expression that only casts (void*) values.

3 years agoRemove underscores from header defs.
Russell O'Connor [Sat, 23 Jan 2021 19:48:35 +0000 (14:48 -0500)]
Remove underscores from header defs.
This makes them consistent with other files and avoids reserved identifiers.

4 years agoMerge #862: Autoconf improvements
Tim Ruffing [Tue, 12 Jan 2021 14:34:33 +0000 (15:34 +0100)]
Merge #862: Autoconf improvements

3c15130709da26a6d2f25a483aa45e14bf1e4feb Improve CC_FOR_BUILD detection (Tim Ruffing)
47802a476246b67360bc24df78fe5fad6b93c296 Restructure and tidy configure.ac (Tim Ruffing)
252c19dfc654dbb10a35579fa36edb3466904758 Ask brew for valgrind include path (Tim Ruffing)

Pull request description:

  See individual commit messages. These are improvements in preparation of the switch to Cirrus CI. (Maybe I'll just open a PR on top of this one.)

  The first commit made the difference between successful build https://cirrus-ci.com/task/6740575057608704 and unsuccessful build https://cirrus-ci.com/task/4909571074424832.

  I've tested the second commit without cross-compilation and with cross-compilation for android (https://github.com/bitcoin-core/secp256k1/issues/621#issuecomment-495703399)

  When working on the autoconf stuff, I noticed two things that I just want to write down here:
   - At some point we should update [build-aux/m4/ax_prog_cc_for_build.m4](https://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html). This is outdated, and [there have been a lot of fixes](https://github.com/autoconf-archive/autoconf-archive/pull/207) But the latest version is [broken](https://lists.gnu.org/archive/html/autoconf-archive-maintainers/2020-06/msg00002.html), so now is probably not the time.
   - The latest autoconf 2.70 deprecates `AC_PROG_CC_C89`. It's not needed anymore because `AC_PROG_CC` cares about testing for version support. This makes autoconf 2.70 output a warning that we should probably just ignore. We don't want to force users onto 2.70...

ACKs for top commit:
  sipa:
    utACK 3c15130709da26a6d2f25a483aa45e14bf1e4feb
  jonasnick:
    utACK 3c15130 makes sense (with my very basic understanding of autoconf)

Tree-SHA512: 595b9de316374c2213f1340cddaa22eb3190b01fa99aa6ae26e77804df41e7ecf96a09e03c28e8f8b9fd04e211e4ee2f78f1e5a7995143c84f99d2e16d4f0260

4 years agoMerge #845: Extract the secret key from a keypair
Tim Ruffing [Tue, 12 Jan 2021 09:54:51 +0000 (10:54 +0100)]
Merge #845: Extract the secret key from a keypair

33cb3c2b1fc3f3fe46c6d0eab118248ea86c1f06 Add secret key extraction from keypair to constant time tests (Elichai Turkel)
36d9dc1e8e6e3b15d805f04c973a8784a78880f6 Add seckey extraction from keypair to the extrakeys tests (Elichai Turkel)
fc96aa73f5c7f62452847a31821890ff1f72a5a4 Add a function to extract the secretkey from a keypair (Elichai Turkel)

Pull request description:

  With schnorrsig if you need to tweak the secret key (for BIP32) you must use the keypair API to get compatible secret/public keys which you do by calling `secp256k1_keypair_xonly_tweak_add()`, but after that there's no currently a way to extract the secret key back for storage.
  so I added a `secp256k1_keypair_seckey` function to extract the key

ACKs for top commit:
  jonasnick:
    ACK 33cb3c2b1fc3f3fe46c6d0eab118248ea86c1f06
  real-or-random:
    ACK 33cb3c2b1fc3f3fe46c6d0eab118248ea86c1f06 code inspection, tests pass

Tree-SHA512: 11212db38c8b87a87e2dc35c4d6993716867b45215b94b20522b1b3164ca63d4c6bf5192a6bff0e9267b333779cc8164844c56669a94e9be72df9ef025ffcfd4

4 years agoImprove CC_FOR_BUILD detection
Tim Ruffing [Sat, 2 Jan 2021 14:15:21 +0000 (15:15 +0100)]
Improve CC_FOR_BUILD detection

This commits simply uses CC as CC_FOR_BUILD and the same for
corresponding flags if we're not cross-compiling. This has a number of
benefits in this common case:
 - It avoids strange cases where very old compilers are used (#768).
 - Flags are consistently set for CC and CC_FOR_BUILD.
 - ./configure is faster.
 - You get compiler x consistently if you set CC=x; we got this wrong
   in CI in the past.

./configure warns if a _FOR_BUILD variable is set but ignored because
we're not cross-compiling.

The change exposed that //-style comments are used in gen_context.c,
which is also fixed by this commit.

This commit also reorganizes code in configure.ac to have a cleaner
separation of sections.

4 years agoRestructure and tidy configure.ac
Tim Ruffing [Fri, 8 Jan 2021 14:18:08 +0000 (15:18 +0100)]
Restructure and tidy configure.ac

No behavioral changes.

4 years agoAsk brew for valgrind include path
Tim Ruffing [Wed, 23 Dec 2020 21:08:03 +0000 (22:08 +0100)]
Ask brew for valgrind include path

Valgrind is typically installed using brew on macOS. This commit
makes ./configure detect this case set the appropriate include
directory (in the same way as we already do for openssl and gmp).

4 years agoMerge #860: fixed trivial typo
Tim Ruffing [Fri, 8 Jan 2021 13:15:40 +0000 (14:15 +0100)]
Merge #860: fixed trivial typo

b7bc3a4aaa5d89c9a9cf2d914362e69ca91a8678 fixed typo (Ferdinando M. Ametrano)

Pull request description:

ACKs for top commit:
  real-or-random:
    ACK b7bc3a4aaa5d89c9a9cf2d914362e69ca91a8678
  elichai:
    ACK b7bc3a4aaa5d89c9a9cf2d914362e69ca91a8678

Tree-SHA512: 6c1889f095607a2f293ffe00359c03e63cfca572b0a17388b83ece54f24ec61ac12d6eb967a47d2dccd54de991383923a07c5cced320c0a96a36a28674cf739c

4 years agofixed typo
Ferdinando M. Ametrano [Tue, 22 Dec 2020 21:31:29 +0000 (22:31 +0100)]
fixed typo

4 years agoAdd secret key extraction from keypair to constant time tests
Elichai Turkel [Sat, 19 Dec 2020 08:56:51 +0000 (10:56 +0200)]
Add secret key extraction from keypair to constant time tests

4 years agoAdd seckey extraction from keypair to the extrakeys tests
Elichai Turkel [Thu, 5 Nov 2020 14:49:07 +0000 (16:49 +0200)]
Add seckey extraction from keypair to the extrakeys tests

4 years agoAdd a function to extract the secretkey from a keypair
Elichai Turkel [Thu, 5 Nov 2020 14:48:48 +0000 (16:48 +0200)]
Add a function to extract the secretkey from a keypair

4 years agoMerge #858: Fix insecure links
Jonas Nick [Fri, 18 Dec 2020 18:32:56 +0000 (18:32 +0000)]
Merge #858: Fix insecure links

07aa4c70ffb96d21e496854f823c3ea3353b9086 Fix insecure links (Dimitris Apostolou)

Pull request description:

ACKs for top commit:
  sipa:
    ACK 07aa4c70ffb96d21e496854f823c3ea3353b9086. Verified all the modified links.
  jonasnick:
    ACK 07aa4c70ffb96d21e496854f823c3ea3353b9086

Tree-SHA512: d1240aab5e40a204c75fca1049b99af9890684df7dbce4167b1904f73424c8a4f84ed85a8cc315501f1b7cf1674d744232b9f2126dff31e3d47e4f3fc65764d4

4 years agoFix insecure links
Dimitris Apostolou [Thu, 17 Dec 2020 06:33:49 +0000 (08:33 +0200)]
Fix insecure links

4 years agoMerge #857: docs: fix simple typo, dependecy -> dependency
Tim Ruffing [Wed, 9 Dec 2020 16:59:07 +0000 (17:59 +0100)]
Merge #857: docs: fix simple typo, dependecy -> dependency

18aadf9d288a54533376cb94f655d059eb1f098e docs: fix simple typo, dependecy -> dependency (Tim Gates)

Pull request description:

  There is a small typo in src/group_impl.h.

  Should read `dependency` rather than `dependecy`.

ACKs for top commit:
  real-or-random:
    ACK 18aadf9d288a54533376cb94f655d059eb1f098e

Tree-SHA512: 3529f43bcc87ea8940ecf5af765951f61d97d1efa86fd8abc29e32b600fd449165a94a2fa525bc6b3d9a7d8aa6e691cc4d42033537b196ba166a867e6db7f397

4 years agodocs: fix simple typo, dependecy -> dependency
Tim Gates [Tue, 8 Dec 2020 10:45:13 +0000 (21:45 +1100)]
docs: fix simple typo, dependecy -> dependency

There is a small typo in src/group_impl.h.

Should read `dependency` rather than `dependecy`.

4 years agoMerge #852: Add sage script for generating scalar_split_lambda constants
Jonas Nick [Mon, 7 Dec 2020 21:48:54 +0000 (21:48 +0000)]
Merge #852: Add sage script for generating scalar_split_lambda constants

329a2e0a3f2d9e936179cbf079773538f95bee33 sage: Add script for generating scalar_split_lambda constants (Tim Ruffing)
f554dfc7088c6ca8d4aff927a51bd889b29dc186 sage: Reorganize files (Tim Ruffing)

Pull request description:

ACKs for top commit:
  sipa:
    ACK 329a2e0a3f2d9e936179cbf079773538f95bee33

Tree-SHA512: d41fe5eba332f48af0b800778aa076925c4e8e95ec21c4371a500ddd6088b6d52961bdb93f7ce2b127e18095667dbb966a0d14191177f0d0e78dfaf55271d5e2

4 years agoMerge #854: Rename msg32 to msghash32 in ecdsa_sign/verify and add explanation
Tim Ruffing [Mon, 7 Dec 2020 19:10:20 +0000 (20:10 +0100)]
Merge #854: Rename msg32 to msghash32 in ecdsa_sign/verify and add explanation

6e85d675aaf9dc17842096f9cbf8cfab216c9331 Rename tweak to tweak32 in public API (Jonas Nick)
f587f04e35719883546afd54cb491ead18eb6fc7 Rename msg32 to msghash32 in ecdsa_sign/verify and add explanation (Jonas Nick)

Pull request description:

  This fixes #307 if there's nothing else that's confusing.

ACKs for top commit:
  real-or-random:
    ACK 6e85d675aaf9dc17842096f9cbf8cfab216c9331 I inspected the diff

Tree-SHA512: 1b0dc9dfffd497058dc39c962a512ed6d7f89218020fef9d2c03aaae1aefbf272b918c4fe6503434b62547714855fe1b8b89f2366f3ae6cde16143207c9e6b86

4 years agoRename tweak to tweak32 in public API
Jonas Nick [Fri, 4 Dec 2020 14:16:43 +0000 (14:16 +0000)]
Rename tweak to tweak32 in public API

4 years agoRename msg32 to msghash32 in ecdsa_sign/verify and add explanation
Jonas Nick [Thu, 3 Dec 2020 15:53:31 +0000 (15:53 +0000)]
Rename msg32 to msghash32 in ecdsa_sign/verify and add explanation

4 years agosage: Add script for generating scalar_split_lambda constants
Tim Ruffing [Wed, 25 Nov 2020 13:12:27 +0000 (14:12 +0100)]
sage: Add script for generating scalar_split_lambda constants

4 years agoMerge #851: make test count iteration configurable by environment variable
Jonas Nick [Tue, 1 Dec 2020 08:31:08 +0000 (08:31 +0000)]
Merge #851: make test count iteration configurable by environment variable

f4fa8d226a95e42b252c07edb425c446370e01c0 forbid a test iteration of 0 or less (Andrew Poelstra)
0ce45548813709d828cb3abcc7db4c9ce6e26907 make test count iteration configurable by environment variable (Andrew Poelstra)

Pull request description:

ACKs for top commit:
  jonasnick:
    ACK f4fa8d226a95e42b252c07edb425c446370e01c0
  real-or-random:
    ACK f4fa8d226a95e42b252c07edb425c446370e01c0

Tree-SHA512: 087771402c8e9536c07446baa7d02da5104d2b691f40c1dd04737329534422d895d3b692f485990d5791af8ccc124305b4f8b19be75e27b6b04cfb2337b28beb

4 years agoforbid a test iteration of 0 or less
Andrew Poelstra [Wed, 25 Nov 2020 00:05:13 +0000 (00:05 +0000)]
forbid a test iteration of 0 or less

4 years agosage: Reorganize files
Tim Ruffing [Wed, 25 Nov 2020 12:50:40 +0000 (13:50 +0100)]
sage: Reorganize files

 * Move curve parameters to separate file
 * Rename main prover script for clarity

4 years agoMerge #849: Convert Sage code to Python 3 (as used by Sage >= 9)
Jonas Nick [Mon, 23 Nov 2020 20:15:16 +0000 (20:15 +0000)]
Merge #849: Convert Sage code to Python 3 (as used by Sage >= 9)

13c88efed0005eb6745a222963ee74564054eafb Convert Sage code to Python 3 (as used by Sage >= 9) (Frédéric Chapoton)

Pull request description:

ACKs for top commit:
  jonasnick:
    ACK 13c88efed0005eb6745a222963ee74564054eafb

Tree-SHA512: 6b8a32c35554b7e881841c17fe21323035014d25003f14e399f03ec017ea1bae1c68eee18a4d0315fc0f3b40d8252b5c8790f6c355d7d074a8ebc5e1ca832795

4 years agoConvert Sage code to Python 3 (as used by Sage >= 9)
Frédéric Chapoton [Fri, 20 Nov 2020 10:28:28 +0000 (11:28 +0100)]
Convert Sage code to Python 3 (as used by Sage >= 9)

Co-authored-by: Tim Ruffing <[email protected]>
4 years agomake test count iteration configurable by environment variable
Andrew Poelstra [Mon, 23 Nov 2020 01:05:31 +0000 (01:05 +0000)]
make test count iteration configurable by environment variable

4 years agoMerge #835: Don't use reserved identifiers memczero and benchmark_verify_t
Pieter Wuille [Wed, 4 Nov 2020 23:28:11 +0000 (15:28 -0800)]
Merge #835: Don't use reserved identifiers memczero and benchmark_verify_t

1f4dd0383807bfb7fef884601357b4c629dfb566 Typedef (u)int128_t only when they're not provided by the compiler (Tim Ruffing)
e89278f211a526062745c391d48a7baf782b4b2b Don't use reserved identifiers memczero and benchmark_verify_t (Tim Ruffing)

Pull request description:

  As identified in #829 and #833. Fixes #829.

  Since we touch this anyway, this commit additionally makes the
  identifiers in the benchmark files a little bit more consistent.

  This is necessary before we can merge #833. I preferred a separate PR because it makes it easier to see the results of Travis in #833.

ACKs for top commit:
  sipa:
    utACK 1f4dd0383807bfb7fef884601357b4c629dfb566
  jonasnick:
    ACK 1f4dd0383807bfb7fef884601357b4c629dfb566

Tree-SHA512: c0ec92798f3c94f3ef6ac69b3f0f39a39257a32be9d9a068832cece1ebe64c89848b70e44652fc397004b8b240883ac4bc0c8f95abbe4ba4b028de120e6734bf

4 years agoMerge #839: Prevent arithmetic on NULL pointer if the scratch space is too small
Jonas Nick [Wed, 4 Nov 2020 14:52:56 +0000 (14:52 +0000)]
Merge #839: Prevent arithmetic on NULL pointer if the scratch space is too small

29a299e373d5f0e326be74c514c7c70ddf50cce1 Run the undefined behaviour sanitizer on Travis (Fabien)
7506e064d791e529d2e57bb52c156deb33b897ef Prevent arithmetic on NULL pointer if the scratch space is too small (Fabien)

Pull request description:

ACKs for top commit:
  sipa:
    ACK 29a299e373d5f0e326be74c514c7c70ddf50cce1. Reviewed the code changes and verified that building with these sanitizer flags catches the existing error, as well as a signed integer overflow if introduced.
  real-or-random:
    ACK 29a299e373d5f0e326be74c514c7c70ddf50cce1 code inspection
  jonasnick:
    utACK 29a299e373d5f0e326be74c514c7c70ddf50cce1

Tree-SHA512: 4d788f12f3d7b48018e884910adb9b530a05d88f504de83dadeab8a22d75da83c05a1518f7317de5f536c4dd243ea7b347b1eaddb2ca1d804c663e41b85db69d

4 years agoMerge #840: Return NULL early in context_preallocated_create if flags invalid
Jonas Nick [Fri, 30 Oct 2020 17:48:40 +0000 (17:48 +0000)]
Merge #840: Return NULL early in context_preallocated_create if flags invalid

ebfa2058e9cc2999dada47d2f1e1e5c0f4bcf619 Return NULL early in context_preallocated_create if flags invalid (Tim Ruffing)

Pull request description:

ACKs for top commit:
  sipa:
    ACK ebfa2058e9cc2999dada47d2f1e1e5c0f4bcf619
  jonasnick:
    ACK ebfa2058e9cc2999dada47d2f1e1e5c0f4bcf619

Tree-SHA512: 61310539046e015e5c9e6b5702ac7b542fda854a23915ef5dd549361c8ec6e70aa6d509e02b30fd859b24dfaf2250721bb55270767323d6e94854067b7d7e9a6

4 years agoTypedef (u)int128_t only when they're not provided by the compiler
Tim Ruffing [Tue, 27 Oct 2020 14:58:04 +0000 (15:58 +0100)]
Typedef (u)int128_t only when they're not provided by the compiler

4 years agoMerge #838: Make autotools check for all the used openssl functions
Tim Ruffing [Tue, 27 Oct 2020 19:12:41 +0000 (20:12 +0100)]
Merge #838: Make autotools check for all the used openssl functions

3734b68200ee37f5eea80f47d611e9b5a65548fe Configure echo if openssl tests are enabled (Elichai Turkel)
e6692778d3f6507eb1325785cdd424073a945ff7 Modify bitcoin_secp.m4's openssl check to call all the functions that we use in the tests/benchmarks. That way linking will fail if those symbols are missing (Elichai Turkel)

Pull request description:

  I added all the openssl functions that we call in `tests.c` and in `bench_verify.c` to the m4 check, that way if any of them are missing it won't enable openssl.
  I also modified it a little to prevent a segmentation fault when running that program (not that it really matters for autotools)

  This should fix #836

ACKs for top commit:
  sipa:
    ACK 3734b68200ee37f5eea80f47d611e9b5a65548fe
  real-or-random:
    ACK 3734b68200ee37f5eea80f47d611e9b5a65548fe

Tree-SHA512: c82aa96a4176061284dfa5fdb87ca874a25aa2e11f75c4ec6d1edebcc8a19e2bc940990f8a5cfa64776fd295b6fd3a140fa2afede29326564504bc8d1a3a6b69

4 years agoConfigure echo if openssl tests are enabled
Elichai Turkel [Tue, 27 Oct 2020 11:09:15 +0000 (13:09 +0200)]
Configure echo if openssl tests are enabled

4 years agoReturn NULL early in context_preallocated_create if flags invalid
Tim Ruffing [Mon, 26 Oct 2020 13:38:30 +0000 (14:38 +0100)]
Return NULL early in context_preallocated_create if flags invalid

If the user passes invalid flags to _context_create, and the default
illegal callback does not abort the program (which is possible), then we
work with the result of malloc(0), which may be undefined behavior. This
violates the promise that a library function won't crash after the
illegal callback has been called.

This commit fixes this issue by returning NULL early in _context_create
in that case.

4 years agoMerge #841: Avoids a potentially shortening size_t to int cast in strauss_wnaf_
Jonas Nick [Tue, 27 Oct 2020 13:24:17 +0000 (13:24 +0000)]
Merge #841: Avoids a potentially shortening size_t to int cast in strauss_wnaf_

8893f42438ac75838a9dc7df7e98b29e9a1a085f Avoids a potentially shortening size_t to int cast in strauss_wnaf_ (Tim Ruffing)

Pull request description:

ACKs for top commit:
  sipa:
    ACK 8893f42438ac75838a9dc7df7e98b29e9a1a085f. `np` and `no` shouldn't ever take on negative values.
  jonasnick:
    ACK 8893f42438ac75838a9dc7df7e98b29e9a1a085f
  elichai:
    ACK 8893f42438ac75838a9dc7df7e98b29e9a1a085f

Tree-SHA512: 431a6b88c8db8c8883b35c9bc03c90e37ecd0b06c7ee01c5d83cca4a7f6fc1f3cfbbaa871a4a23374ce4cc5bcfb9502c7f2e2540f9f9db9535e47e48827b6af6

4 years agoRun the undefined behaviour sanitizer on Travis
Fabien [Tue, 27 Oct 2020 07:43:10 +0000 (08:43 +0100)]
Run the undefined behaviour sanitizer on Travis

Run UBSAN with both GCC and Clang, on Linux and macOS.
The `halt_on_error=1` option is required to make the build fail if the
sanitizer finds an issue.

4 years agoPrevent arithmetic on NULL pointer if the scratch space is too small
Fabien [Mon, 26 Oct 2020 11:29:00 +0000 (12:29 +0100)]
Prevent arithmetic on NULL pointer if the scratch space is too small

If the scratch space is too small when calling
`secp256k1_ecmult_strauss_batch()`, the `state.pre_a` allocation will
fail and the pointer will be `NULL`. This causes `state.pre_a_lam` to be
computed from the `NULL` pointer.

It is also possible that the first allocation to fail is for `state.ps`,
which will cause the failure to occur when in
`secp256k1_ecmult_strauss_wnaf()`.

The issue has been detected by UBSAN using Clang 10:
```
CC=clang \
CFLAGS="-fsanitize=undefined -fno-omit-frame-pointer" \
LDFLAGS="-fsanitize=undefined -fno-omit-frame-pointer" \
../configure

UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 make check
```

4 years agoAvoids a potentially shortening size_t to int cast in strauss_wnaf_
Tim Ruffing [Wed, 21 Oct 2020 07:30:30 +0000 (09:30 +0200)]
Avoids a potentially shortening size_t to int cast in strauss_wnaf_

Fixes #834.

4 years agoModify bitcoin_secp.m4's openssl check to call all the functions that we
Elichai Turkel [Wed, 21 Oct 2020 11:39:52 +0000 (14:39 +0300)]
Modify bitcoin_secp.m4's openssl check to call all the functions that we
use in the tests/benchmarks.
That way linking will fail if those symbols are missing

4 years agoMerge #809: Stop treating ECDH as experimental
Tim Ruffing [Wed, 21 Oct 2020 07:58:45 +0000 (09:58 +0200)]
Merge #809: Stop treating ECDH as experimental

e6e3d5da2f92f327019a62dc5f62f9335b2d0975 travis: add schnorrsig to valgrind and big endian platform test (Jonas Nick)
353dff156f1ed43a93c14a3686dc0649713d2997 Stop treating ECDH as experimental (Jonas Nick)

Pull request description:

  Fixes #665

ACKs for top commit:
  real-or-random:
    ACK e6e3d5da2f92f327019a62dc5f62f9335b2d0975
  elichai:
    ACK e6e3d5d

Tree-SHA512: 07379429ee159aad011c7cefcea35423602e9d119d994e11c78a89fcc74c2c65835b3d55f6f781fe28b4e3622db9ee470e48a223037a20baf94c0263b1c60105

4 years agotravis: add schnorrsig to valgrind and big endian platform test
Jonas Nick [Sat, 12 Sep 2020 12:20:22 +0000 (12:20 +0000)]
travis: add schnorrsig to valgrind and big endian platform test

4 years agoStop treating ECDH as experimental
Jonas Nick [Mon, 7 Sep 2020 17:35:09 +0000 (17:35 +0000)]
Stop treating ECDH as experimental

4 years agoDon't use reserved identifiers memczero and benchmark_verify_t
Tim Ruffing [Tue, 20 Oct 2020 12:53:50 +0000 (14:53 +0200)]
Don't use reserved identifiers memczero and benchmark_verify_t

As identified in #829 and #833. Fixes #829.

Since we touch this anyway, this commit additionally makes the
identifiers in the benchmark files a little bit more consistent.

4 years agoMerge #830: Rip out non-endomorphism code + dependencies
Pieter Wuille [Wed, 14 Oct 2020 18:06:06 +0000 (11:06 -0700)]
Merge #830: Rip out non-endomorphism code + dependencies

c582abade1c50ef50dc7ee9f7b7af8e06e22065d Consistency improvements to the comments (Pieter Wuille)
63c6b71616816b19bec9cb3ab6b45ae5afd955f0 Reorder comments/function around scalar_split_lambda (Pieter Wuille)
2edc514c90293af8f602e4376e832773779c9426 WNAF of lambda_split output has max size 129 (Pieter Wuille)
4232e5b7da0a68adc14fa4b481f7e106403c200d Rip out non-endomorphism code (Pieter Wuille)
ebad8414b0e68041568d0b5ebe0bd395dbfbed9e Check correctness of lambda split without -DVERIFY (Gregory Maxwell)
fe7fc1fda8675aa9d79dae54a1b8b3cd06abcf81 Make lambda constant accessible (Pieter Wuille)
9d2f2b44d895509e8c4e7831fa917f13fa69f054 Add tests to exercise lambda split near bounds (Pieter Wuille)
9aca2f7f07b0563f8c65fcc22a0a91325cf6273b Add secp256k1_split_lambda_verify (Russell O'Connor)
acab934d24ff26289ab9930587c3fc51c30c6a2f Detailed comments for secp256k1_scalar_split_lambda (Russell O'Connor)
76ed922a5f09d63e0622825ca83d9301c1ef3efe Increase precision of g1 and g2 (Russell O'Connor)
6173839c90553385171d560be8a17cbe167e3bef Switch to our own memcmp function (Tim Ruffing)

Pull request description:

  This is a rebased/combined version of the following pull requests/commits with minor changes:
  * #825 Switch to our own memcmp function
    * Modification: `secp256k1_memcmp_var` is marked static inline
    * Modification: also replace `memcmp` with `secp256k1_memcmp_var` in exhaustive tests
    * Modification: add reference to GCC bug 95189
  * #822 Increase precision of g1 and g2
    * Modification: use the new `secp256k1_memcmp_var` function instead of `memcmp` (see https://github.com/bitcoin-core/secp256k1/pull/822#issuecomment-706610361)
    * Modification: drop the " Allow secp256k1_split_lambda_verify to pass even in the presence of GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95189." commit, as it's dealt with using `secp256k1_memcmp_var`.
    * Modification: rename secp256k1_gej_mul_lambda -> secp256k1_ge_mul_lambda
  * A new commit that moves the `lambda` constant out of `secp256k1_scalar_split_lambda` and (`_verify`).
  * The test commit suggested here: https://github.com/bitcoin-core/secp256k1/pull/822#issuecomment-706610276
    * Modification: use the new accessible `secp256k1_const_lambda` instead of duplicating it.
  * #826 Rip out non-endomorphism code
  * A new commit that reduces the size of the WNAF output to 129, as we now have proof that the split output is always 128 bits or less.
  * A new commit to more consistently use input:`k`, integer outputs:`k1`,`k2`, modulo n outputs:`r1`,`r2`

ACKs for top commit:
  real-or-random:
    ACK c582abade1c50ef50dc7ee9f7b7af8e06e22065d code inspection, some tests, verified the new g1/g2 constants
  jonasnick:
    ACK c582abade1c50ef50dc7ee9f7b7af8e06e22065d didn't verify the proof

Tree-SHA512: 323a3ee3884b7ac4fa85c8e7b785111b5c0638d718bc1c805a38963c87411e81a746c98e9a42a3e2197ab34a874544de5cc51326955d1c4d0ea45afd418e819f

4 years agoConsistency improvements to the comments
Pieter Wuille [Tue, 13 Oct 2020 19:19:52 +0000 (12:19 -0700)]
Consistency improvements to the comments

4 years agoReorder comments/function around scalar_split_lambda
Pieter Wuille [Tue, 13 Oct 2020 18:29:36 +0000 (11:29 -0700)]
Reorder comments/function around scalar_split_lambda

4 years agoWNAF of lambda_split output has max size 129
Pieter Wuille [Sun, 11 Oct 2020 17:59:29 +0000 (10:59 -0700)]
WNAF of lambda_split output has max size 129

4 years agoRip out non-endomorphism code
Pieter Wuille [Sat, 26 Sep 2020 03:06:36 +0000 (20:06 -0700)]
Rip out non-endomorphism code

4 years agoCheck correctness of lambda split without -DVERIFY
Gregory Maxwell [Sat, 10 Oct 2020 20:46:36 +0000 (20:46 +0000)]
Check correctness of lambda split without -DVERIFY

The VERIFY macro turns on various paranoid consistency checks, but
 the complete functionality should still be tested without it.

This also adds a couple of static test points for extremely small
 split inputs/outputs.  The existing bounds vectors already check
 extremely large outputs.

4 years agoMake lambda constant accessible
Pieter Wuille [Sun, 11 Oct 2020 17:49:54 +0000 (10:49 -0700)]
Make lambda constant accessible

This page took 0.087068 seconds and 4 git commands to generate.