]> Git Repo - secp256k1.git/log
secp256k1.git
3 years agodont do self test master
Jesse [Tue, 24 Aug 2021 17:01:07 +0000 (13:01 -0400)]
dont do self test

3 years agoMerge bitcoin-core/secp256k1#969: ci: Fixes after Debian release
Jonas Nick [Fri, 20 Aug 2021 09:06:00 +0000 (09:06 +0000)]
Merge bitcoin-core/secp256k1#969: ci: Fixes after Debian release

5d5c74a057f3951677691113747952f4cbdde86b tests: Rewrite code to circument potential bug in clang (Tim Ruffing)
3d2f492ceb76eea93d3a9f85f80baec7b5842160 ci: Install libasan6 (instead of 5) after Debian upgrade (Tim Ruffing)

Pull request description:

ACKs for top commit:
  jonasnick:
    ACK 5d5c74a057f3951677691113747952f4cbdde86b

Tree-SHA512: 540ede482214bf9feaa607de52a69f6d34169dd98fb14bd3d003f4c8f722c1eebed56eb9d933e742f36d8886c25bfa9fa0ebbed5b0c3b161f04dc26180f5d214

3 years agotests: Rewrite code to circument potential bug in clang
Tim Ruffing [Thu, 19 Aug 2021 10:22:36 +0000 (12:22 +0200)]
tests: Rewrite code to circument potential bug in clang

clang 7 to 11 (and maybe earlier versions) warn about recid being
potentially unitiliazed in "CHECK(recid >= 0 [...]", which was mitigated
in commit 3d2cf6c5bd35b0d72716b47bdd7e3892388aafc4 by initializing recid
to make clang happy but VG_UNDEF'ing the variable after initializiation
in order to ensure valgrind's memcheck analysis will still be sound and
complain if recid is not actually written to when creating a signature.

However, it turns out that at least for binaries produced by clang 11
(but not clang 7), valgrind complains about a branch on unitialized data
in the recid variable in that line before *and* after the aforementioned
commit. While the complaint after the commit could be spurious (clang
knows that recid is initialized, so it's fine to access it even though
the access is stupid), the complaint before the commit indicates a real
problem: it might be the case that clang is performing a wrong
optimization that leads to a situation where recid is really not
guaranteed to be initialized when it's accessed. As a result, clang
warns about this and generates code that just accesses the variable.

I'm not going to bother with this further because this is fixed in
clang 12 and the problem is just in our test code, not in the tested
code.

This commit rewrites the code in a way that groups the signing together
with the CHECK such that it's very easy to figure out for clang that
recid will be initialized properly. This seems to circument the issue.

3 years agoci: Install libasan6 (instead of 5) after Debian upgrade
Tim Ruffing [Thu, 19 Aug 2021 10:11:11 +0000 (12:11 +0200)]
ci: Install libasan6 (instead of 5) after Debian upgrade

3 years agoMerge bitcoin-core/secp256k1#965: gen_context: Don't use any ASM
Tim Ruffing [Wed, 14 Jul 2021 16:41:06 +0000 (18:41 +0200)]
Merge bitcoin-core/secp256k1#965: gen_context: Don't use any ASM

aeece4459977b69962bcd1e1ee8845c18c74ff8f gen_context: Don't use any ASM (Tim Ruffing)

Pull request description:

  See https://github.com/bitcoin/bitcoin/issues/22441 , we need to wait for the testing results there.

ACKs for top commit:
  sipa:
    utACK aeece4459977b69962bcd1e1ee8845c18c74ff8f
  jonasnick:
    ACK aeece4459977b69962bcd1e1ee8845c18c74ff8f

Tree-SHA512: 52ff90f3dedda90124140de1c2c1c065a2f9374930d6b988d35c37f5eeae97f7d557b7ab0cf99d22add5a76ff8a3e06226572e43949e12d1048cb323d1b3d92b

3 years agogen_context: Don't use any ASM
Tim Ruffing [Wed, 14 Jul 2021 09:12:41 +0000 (11:12 +0200)]
gen_context: Don't use any ASM

3 years agoMerge bitcoin-core/secp256k1#963: "Schnorrsig API overhaul" fixups
Jonas Nick [Mon, 5 Jul 2021 20:58:00 +0000 (20:58 +0000)]
Merge bitcoin-core/secp256k1#963: "Schnorrsig API overhaul" fixups

90e83449b2c2e4046af755e35fdeee579a468f31 ci: Add C++ test (Tim Ruffing)
f698caaff6a263390d7ded5be4751dbc1c862b1e Use unsigned char consistently for byte arrays (Tim Ruffing)
b5b8e7b7190aed619a1fa83bf1794fddef90346d Don't declare constants twice (Tim Ruffing)
769528f30714a1e5503a7abefad25fd89f0ef237 Don't use string literals for char arrays without NUL termination (Tim Ruffing)
2cc3cfa58382582fc26eb91e3243153e1d06ce77 Fix -Wmissing-braces warning in clang (Tim Ruffing)

Pull request description:

ACKs for top commit:
  jonasnick:
    ACK 90e83449b2c2e4046af755e35fdeee579a468f31

Tree-SHA512: c26ba3db7514399c502f6c5c6f6ce6703459d83d831765042e331b051aeee282641197c3ae881c614f51ca714a818c5528410d288aadbd3e92361c1e9c129afe

3 years agoci: Add C++ test
Tim Ruffing [Mon, 5 Jul 2021 08:33:36 +0000 (10:33 +0200)]
ci: Add C++ test

3 years agoUse unsigned char consistently for byte arrays
Tim Ruffing [Sun, 4 Jul 2021 09:37:06 +0000 (11:37 +0200)]
Use unsigned char consistently for byte arrays

C++ does not allow initialization with string literals but we do it in other
places and -fpermissive will convince g++ to compile.

3 years agoDon't declare constants twice
Tim Ruffing [Sun, 4 Jul 2021 09:35:52 +0000 (11:35 +0200)]
Don't declare constants twice

This is forbidden in C++.

3 years agoDon't use string literals for char arrays without NUL termination
Tim Ruffing [Sun, 4 Jul 2021 00:03:18 +0000 (02:03 +0200)]
Don't use string literals for char arrays without NUL termination

unsigned char foo[4] = "abcd" is not valid C++ because the string
literal "abcd" does not fit into foo due to the terminating NUL
character. This is valid in C, it will just omit the NUL character.

Fixes #962.

3 years agoFix -Wmissing-braces warning in clang
Tim Ruffing [Sun, 4 Jul 2021 00:01:44 +0000 (02:01 +0200)]
Fix -Wmissing-braces warning in clang

3 years agoMerge #844: schnorrsig API overhaul
Tim Ruffing [Sat, 3 Jul 2021 09:43:47 +0000 (11:43 +0200)]
Merge #844: schnorrsig API overhaul

5f6ceafcfa46a69e901bed87e2c5f323b03b1e8c schnorrsig: allow setting MSGLEN != 32 in benchmark (Jonas Nick)
fdd06b7967196a3b34f73a5b19632637b4bde90a schnorrsig: add tests for sign_custom and varlen msg verification (Jonas Nick)
d8d806aaf386c7ead9431649f899ff82b0185aae schnorrsig: add extra parameter struct for sign_custom (Jonas Nick)
a0c3fc177f7f435e593962504182c3861c47d1be schnorrsig: allow signing and verification of variable length msgs (Jonas Nick)
5a8e4991ad443cc0cc613d80380a2db802a4cbce Add secp256k1_tagged_sha256 as defined in BIP-340 (Jonas Nick)
b6c0b72fb06e3c31121f1ef4403d2a229a31ec1c schnorrsig: remove noncefp args from sign; add sign_custom function (Jonas Nick)
442cee5bafbd7419acadf203ca11569e371f1f85 schnorrsig: add algolen argument to nonce_function_hardened (Jonas Nick)
df3bfa12c3b728241d3e61d13f8c976719a3de41 schnorrsig: clarify result of calling nonce_function_bip340 without data (Jonas Nick)
99e8614812bf23798a48c53649957e26e5b12f4a README: mention schnorrsig module (Jonas Nick)

Pull request description:

  This is a work in progress because I wanted to put this up for discussion before writing tests. It addresses the TODOs that didn't make it in the schnorrsig PR and changes the APIs of `schnorrsig_sign`, `schnorrsig_verify` and `hardened_nonce_function`.

  - Ideally, the new `aux_rand32` argument for `sign` would be const, but didn't find a solution I was happy with.
  - Support for variable length message signing and verification supports the [suggested BIP amendment](https://github.com/sipa/bips/issues/207#issuecomment-673681901) for such messages.
  - ~~`sign_custom` with its opaque config object allows adding more arguments later without having to change the API again. Perhaps there are other sensible customization options, but I'm thinking of [sign-to-contract/covert-channel](https://github.com/bitcoin-core/secp256k1/pull/590) in particular. It would require adding the fields `unsigned char *s2c_data32` and `secp256k1_s2c_opening *s2c_opening` to the config struct. The former is the data to commit to and the latter is written to by `sign_custom`.~~ (EDIT: see below)

ACKs for top commit:
  ariard:
    utACK 5f6ceaf
  LLFourn:
    utACK 5f6ceafcfa46a69e901bed87e2c5f323b03b1e8c

Tree-SHA512: cf1716dddf4f29bcacf542ed22622a817d0ec9c20d0592333cb7e6105902c77d819952e776b9407fae1333cbd03d63fded492d3a5df7769dcc5b450d91bb4761

3 years agoMerge #960: tests_exhaustive: check the result of secp256k1_ecdsa_sign
Tim Ruffing [Sat, 3 Jul 2021 09:20:02 +0000 (11:20 +0200)]
Merge #960: tests_exhaustive: check the result of secp256k1_ecdsa_sign

a1ee83c6546c65d8f5b32acc4a0e1740858ee7d6 tests_exhaustive: check the result of secp256k1_ecdsa_sign (Nicolas Iooss)

Pull request description:

  Hello,

  In `test_exhaustive_sign`, if `secp256k1_ecdsa_sign` fails, the signature which is then loaded by `secp256k1_ecdsa_signature_load` is garbage. Exit early with an error when this occurs.

  By the way, I am wondering whether attribute `SECP256K1_WARN_UNUSED_RESULT` should be added to function `secp256k1_ecdsa_sign`: as (according to the documentation of this function) the nonce generation function may fail, it seems to be a good idea to force callers to check the value returned by this function. What do you think about this?

ACKs for top commit:
  sipa:
    ACK a1ee83c6546c65d8f5b32acc4a0e1740858ee7d6
  real-or-random:
    utACK a1ee83c6546c65d8f5b32acc4a0e1740858ee7d6

Tree-SHA512: d8c186afecbd95522e909c269255e8879695bf9df2de91f0f9303e575e18f03cafc66683d863e6cf9892fe61b668eab00d586861c39013292b71484a962f846d

3 years agotests_exhaustive: check the result of secp256k1_ecdsa_sign
Nicolas Iooss [Mon, 28 Jun 2021 13:44:19 +0000 (15:44 +0200)]
tests_exhaustive: check the result of secp256k1_ecdsa_sign

If `secp256k1_ecdsa_sign` fails, the signature which is then loaded by
`secp256k1_ecdsa_signature_load` is garbage. Exit early with an error
when this occurs.

3 years agoMerge bitcoin-core/secp256k1#951: configure: replace AC_PATH_PROG to AC_CHECK_PROG
Jonas Nick [Fri, 2 Jul 2021 12:07:52 +0000 (12:07 +0000)]
Merge bitcoin-core/secp256k1#951: configure: replace AC_PATH_PROG to AC_CHECK_PROG

a4642fa15ee731b0a620a3f089826d556e5405f0 configure: replace AC_PATH_PROG to AC_CHECK_PROG (UdjinM6)

Pull request description:

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

Tree-SHA512: 55a431633ca45ea78be3887cda2e94f6ec9e8a937bc60cf04f14d7e3be11acb7ee861bd356070e3b1f6ccdeff28c6f9ab7048a58f920681c09fe3a976621a187

3 years agoMerge bitcoin-core/secp256k1#944: Various improvements related to CFLAGS
Jonas Nick [Thu, 1 Jul 2021 21:33:58 +0000 (21:33 +0000)]
Merge bitcoin-core/secp256k1#944: Various improvements related to CFLAGS

0302138f7508414e9e5212bc45b4ca4c0e5f081c ci: Make compiler warning into errors on CI (Tim Ruffing)
b924e1e605dcf9f9b362531184d16d643cc3baa9 build: Ensure that configure's compile checks default to -O2 (Tim Ruffing)
7939cd571c7a236f0d46e5cd7b6529ae29757c5a build: List *CPPFLAGS before *CFLAGS like on the compiler command line (Tim Ruffing)
595e8a35d80c932f91e810ce889c48b6efbaf890 build: Enable -Wcast-align=strict warning (Tim Ruffing)
07256267ffa9fb37609ec46260e9990bccd35dc5 build: Use own variable SECP_CFLAGS instead of touching user CFLAGS (Tim Ruffing)

Pull request description:

ACKs for top commit:
  jonasnick:
    ACK 0302138f7508414e9e5212bc45b4ca4c0e5f081c

Tree-SHA512: 619eb6b512ae0eb8c51134f5bb1b7bc7a397321dc51073ae3117f9433505ec19b407518b47a181163e1a841216b20487c7a50c6f5045faffa5cfa7fad0b8c906

3 years agoci: Make compiler warning into errors on CI
Tim Ruffing [Thu, 6 May 2021 12:02:00 +0000 (14:02 +0200)]
ci: Make compiler warning into errors on CI

This also tidies the list of environment variables in .cirrus.yml.

3 years agobuild: Ensure that configure's compile checks default to -O2
Tim Ruffing [Thu, 13 May 2021 17:34:16 +0000 (19:34 +0200)]
build: Ensure that configure's compile checks default to -O2

Fixes #896.

3 years agobuild: List *CPPFLAGS before *CFLAGS like on the compiler command line
Tim Ruffing [Thu, 13 May 2021 16:54:37 +0000 (18:54 +0200)]
build: List *CPPFLAGS before *CFLAGS like on the compiler command line

3 years agobuild: Enable -Wcast-align=strict warning
Tim Ruffing [Thu, 13 May 2021 15:14:56 +0000 (17:14 +0200)]
build: Enable -Wcast-align=strict warning

3 years agobuild: Use own variable SECP_CFLAGS instead of touching user CFLAGS
Tim Ruffing [Thu, 13 May 2021 15:06:16 +0000 (17:06 +0200)]
build: Use own variable SECP_CFLAGS instead of touching user CFLAGS

Fixes one of the items in #923, namely the warnings of the form
    '_putenv' redeclared without dllimport attribute:
    previous dllimport ignored [-Wattributes]

This also cleans up the way we add CFLAGS, in particular flags enabling
warnings. Now we perform some more fine-grained checking for flag
support, which is not strictly necessary but the changes also help to
document autoconf.ac.

3 years agoMerge bitcoin-core/secp256k1#955: Add random field multiply/square tests
Jonas Nick [Wed, 30 Jun 2021 16:44:57 +0000 (16:44 +0000)]
Merge bitcoin-core/secp256k1#955: Add random field multiply/square tests

bdf19f105c64a48ae607304ea6483b3286093f24 Add random field multiply/square tests (Pieter Wuille)

Pull request description:

ACKs for top commit:
  real-or-random:
    ACK https://github.com/bitcoin-core/secp256k1/pull/955/commits/bdf19f105c64a48ae607304ea6483b3286093f24
  jonasnick:
    ACK bdf19f105c64a48ae607304ea6483b3286093f24

Tree-SHA512: e78ce25f5440e87ad2cad0d4a87e5d95c983bc0be3a3e53d97f9cf6d8b3c3db9a830cb5f2f8c62f2f6dc9c6703c2a507cc23fa18d60bb624716e024539db5c21

3 years agoMerge bitcoin-core/secp256k1#959: tests: really test the non-var scalar inverse
Jonas Nick [Mon, 28 Jun 2021 15:32:28 +0000 (15:32 +0000)]
Merge bitcoin-core/secp256k1#959: tests: really test the non-var scalar inverse

41ed13942bd722ff0ee4d2eb8bef55155549afd6 tests: really test the non-var scalar inverse (Nicolas Iooss)

Pull request description:

ACKs for top commit:
  real-or-random:
    ACK 41ed13942bd722ff0ee4d2eb8bef55155549afd6
  jonasnick:
    ACK 41ed13942bd722ff0ee4d2eb8bef55155549afd6

Tree-SHA512: d501300fea3f24af669556317ca899f6d184a2b1b64a3705417fce7c028288348555942604672eafa3ec59884849655a55cd9aacdd9ca8e34edf21b081702438

3 years agotests: really test the non-var scalar inverse
Nicolas Iooss [Mon, 28 Jun 2021 13:21:00 +0000 (15:21 +0200)]
tests: really test the non-var scalar inverse

Function `test_inverse_scalar` contains:

    (var ? secp256k1_scalar_inverse_var : secp256k1_scalar_inverse_var)(&l, x);  /* l = 1/x */

The two sides of the condition are the same function. This seems to be
an error, as there also exists a non-var function, named
`secp256k1_scalar_inverse`.

Make `test_inverse_scalar` use this other function when `var` is false.

This issue was found using clang's static analyzer, which reported a
"Logic error: Identical expressions in conditional expression" (with
checker `alpha.core.IdenticalExpr`).

3 years agoschnorrsig: allow setting MSGLEN != 32 in benchmark
Jonas Nick [Thu, 18 Mar 2021 22:43:54 +0000 (22:43 +0000)]
schnorrsig: allow setting MSGLEN != 32 in benchmark

3 years agoschnorrsig: add tests for sign_custom and varlen msg verification
Jonas Nick [Thu, 21 Jan 2021 22:23:04 +0000 (22:23 +0000)]
schnorrsig: add tests for sign_custom and varlen msg verification

3 years agoschnorrsig: add extra parameter struct for sign_custom
Jonas Nick [Mon, 2 Nov 2020 14:41:25 +0000 (14:41 +0000)]
schnorrsig: add extra parameter struct for sign_custom

This simplifies the interface of sign_custom and allows adding more parameters
later in a backward compatible way.

3 years agoschnorrsig: allow signing and verification of variable length msgs
Jonas Nick [Fri, 15 Jan 2021 21:19:34 +0000 (21:19 +0000)]
schnorrsig: allow signing and verification of variable length msgs

Varlen message support for the default sign function comes from recommending
tagged_sha256. sign_custom on the other hand gets the ability to directly sign
message of any length. This also implies signing and verification support for
the empty message (NULL) with msglen 0.

Tests for variable lengths follow in a later commit.

3 years agoAdd secp256k1_tagged_sha256 as defined in BIP-340
Jonas Nick [Fri, 15 Jan 2021 20:58:01 +0000 (20:58 +0000)]
Add secp256k1_tagged_sha256 as defined in BIP-340

Gives users the ability to hash messages to 32 byte before they are signed while
allowing efficient domain separation through the tag.

3 years agoschnorrsig: remove noncefp args from sign; add sign_custom function
Jonas Nick [Fri, 30 Oct 2020 17:48:16 +0000 (17:48 +0000)]
schnorrsig: remove noncefp args from sign; add sign_custom function

This makes the default sign function easier to use while allowing more granular
control through sign_custom.

Tests for sign_custom follow in a later commit.

3 years agoAdd random field multiply/square tests
Pieter Wuille [Mon, 21 Jun 2021 23:19:00 +0000 (16:19 -0700)]
Add random field multiply/square tests

3 years agoMerge #879: Avoid passing out-of-bound pointers to 0-size memcpy
Tim Ruffing [Wed, 16 Jun 2021 08:20:38 +0000 (10:20 +0200)]
Merge #879: Avoid passing out-of-bound pointers to 0-size memcpy

9570f674cc729cafcba65f4cce03552d9a6108f4 Avoid passing out-of-bound pointers to 0-size memcpy (Pieter Wuille)

Pull request description:

  Doing so could be considered UB in a pedantic interpretation of the standard. Avoid it.

  Closes #876.

ACKs for top commit:
  practicalswift:
    cr ACK 9570f674cc729cafcba65f4cce03552d9a6108f4: patch looks correct
  real-or-random:
    ACK 9570f674cc729cafcba65f4cce03552d9a6108f4

Tree-SHA512: f991462d72e39f14e609021b8427c2e6756009bc8cd21efca2da46ec9410250725a4fed662df20fcdcfd10a4dc59038f13e8c166362b2eadde4366586b9ca72b

3 years agoconfigure: replace AC_PATH_PROG to AC_CHECK_PROG
UdjinM6 [Tue, 15 Jun 2021 16:33:57 +0000 (19:33 +0300)]
configure: replace AC_PATH_PROG to AC_CHECK_PROG

Bitcoin Core's `configure` script uses `AC_CHECK_PROG` to find brew in the `PATH` [1]. If found, this macro will set `BREW=brew`. When building with dependencies however the `BREW` variable is set to `no` on macOS via `depends/<host_prefix>/share/config.site` [2] and this overrides `AC_CHECK_PROG` results [3]. Ideally, secp256k1's `configure` script should follow the same logic but this is not what happens because secp256k1's `configure` uses `AC_PATH_PROG` instead which respects preset variable values (in this case for variable `BREW`) only if they are a valid path (i.e., they match `[\\/*] | ?:[\\/]*` [4]), and `no` is not a path.

This commit changes `AC_PATH_PROG` to `AC_CHECK_PROG` to be consistent with Core's `AC_CHECK_PROG`. Both of these macros are supposed to find executables in the `PATH` but the difference is that former is supposed to return the full path whereas the latter is supposed to find only the program. As a result, the latter will accept even non-paths `no` as an override. Not knowing the full path is not an issue for the `configure` script because it will only execute `BREW` immediately afterwards, which works fine without the full path. (In particular, `PATH` cannot have changed in between [5].)

[1] https://github.com/bitcoin/bitcoin/blob/master/configure.ac#L684
[2] https://github.com/bitcoin/bitcoin/blob/master/depends/config.site.in#L73-L76
[3] https://github.com/autotools-mirror/autoconf/blob/6d38e9fa2b39b3c3a8e4d6d7da38c59909d3f39d/lib/autoconf/programs.m4#L47
[4] https://github.com/autotools-mirror/autoconf/blob/6d38e9fa2b39b3c3a8e4d6d7da38c59909d3f39d/lib/autoconf/programs.m4#L127
[5] [3ab1178](https://github.com/bitcoin-core/secp256k1/commit/3ab1178d54029745219d67e6c305df4d7564e278)

3 years agoMerge #950: ci: Add ppc64le build
Jonas Nick [Wed, 9 Jun 2021 13:32:32 +0000 (13:32 +0000)]
Merge #950: ci: Add ppc64le build

c58c4ea4707ec5934e49890db881914df3a341b4 ci: Add ppc64le build (Tim Ruffing)

Pull request description:

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

Tree-SHA512: 8f58783d07b34241619051c8375749699b1bd447de56541b3aea3d2e9546c6eb22fbcae55ad57bff614b8c3455933d74031162d00e5eabe6d1d55d56b4aaca16

3 years agoci: Add ppc64le build
Tim Ruffing [Tue, 8 Jun 2021 15:03:53 +0000 (17:03 +0200)]
ci: Add ppc64le build

3 years agoMerge #662: Add ecmult_gen, ecmult_const and ecmult to benchmark
Tim Ruffing [Sun, 6 Jun 2021 11:55:07 +0000 (13:55 +0200)]
Merge #662: Add ecmult_gen, ecmult_const and ecmult to benchmark

8f879c2887e166da2ec959ce78078f7b84ebfdf9 Fix array size in bench_ecmult (Jonas Nick)
2fe1b50df16c9f41ea77b151634d734b930eeddd Add ecmult_gen, ecmult_const and ecmult to benchmark (Jonas Nick)
593e6bad9c5cda05dd72a5bd8266c4880113b4af Clean up ecmult_bench to make space for more benchmarks (Jonas Nick)

Pull request description:

  I was trying to determine the impact of ecmult_gen in schnorrsig signing and noticed that there is no way to bench this right now. The new benchmarks look like this:
  ```
  $ ./bench_ecmult
  ecmult_gen: min 20.9us / avg 21.2us / max 21.7us
  ecmult_const: min 63.9us / avg 64.3us / max 64.8us
  ecmult 1: min 49.4us / avg 49.7us / max 50.3us
  ecmult 1g: min 39.8us / avg 40.0us / max 40.3us
  ecmult 2g: min 27.2us / avg 27.3us / max 27.8us
  ecmult_multi 1g: min 39.8us / avg 40.0us / max 40.2us
  ecmult_multi 2g: min 27.2us / avg 27.4us / max 27.7us
  ecmult_multi 3g: min 22.8us / avg 22.9us / max 23.1us
  ecmult_multi 4g: min 20.6us / avg 20.8us / max 21.1us
  ecmult_multi 5g: min 19.3us / avg 19.5us / max 19.7us
  ```

  (Turns out ecmult_gen is 37% of the 55.8us that schnorrsig sign takes)

ACKs for top commit:
  real-or-random:
    ACK 8f879c2887e166da2ec959ce78078f7b84ebfdf9
  elichai:
    tACK 8f879c2887e166da2ec959ce78078f7b84ebfdf9

Tree-SHA512: 8a739f5de1e2c0467c8d1c3ceeaf453b396a470ea0e8e5bef15fe1b32f3f9633b6b1c7e2ce1d94d736cf3e9adecd8f4f983ad4ba37450cd5991767f1a95db85c

3 years agoFix array size in bench_ecmult
Jonas Nick [Tue, 29 Oct 2019 08:20:11 +0000 (08:20 +0000)]
Fix array size in bench_ecmult

3 years agoAdd ecmult_gen, ecmult_const and ecmult to benchmark
Jonas Nick [Thu, 5 Sep 2019 17:26:12 +0000 (17:26 +0000)]
Add ecmult_gen, ecmult_const and ecmult to benchmark

3 years agoClean up ecmult_bench to make space for more benchmarks
Jonas Nick [Thu, 5 Sep 2019 17:25:37 +0000 (17:25 +0000)]
Clean up ecmult_bench to make space for more benchmarks

3 years agoMerge #947: ci: Run PRs on merge result even for i686
Jonas Nick [Mon, 31 May 2021 20:14:43 +0000 (20:14 +0000)]
Merge #947: ci: Run PRs on merge result even for i686

a35fdd3478f7556dfb9b83f32aaa319ccadff9a9 ci: Run PRs on merge result even for i686 (Tim Ruffing)

Pull request description:

ACKs for top commit:
  jonasnick:
    ACK a35fdd3478f7556dfb9b83f32aaa319ccadff9a9

Tree-SHA512: 9b800b1136da2ecdaff7fcffaac92d91623c682abed1fa5c2a1fe4384f20d2ff1079786f7216c39f58f5dd025e4ed32237e7aff29f7658a74554f0c298e9148e

3 years agoci: Run PRs on merge result even for i686
Tim Ruffing [Mon, 31 May 2021 16:11:27 +0000 (18:11 +0200)]
ci: Run PRs on merge result even for i686

This line should have been added in c7f754fe4d5e032fd150c4b9b985855e9fcaa521.

This mistake caused some i686 builds to fail when the PR was not
rebased, see https://cirrus-ci.com/build/5156197872435200.

3 years agoschnorrsig: add algolen argument to nonce_function_hardened
Jonas Nick [Fri, 15 Jan 2021 21:43:23 +0000 (21:43 +0000)]
schnorrsig: add algolen argument to nonce_function_hardened

This avoids having to remove trailing NUL bytes in the nonce function

3 years agoschnorrsig: clarify result of calling nonce_function_bip340 without data
Jonas Nick [Fri, 30 Oct 2020 20:39:48 +0000 (20:39 +0000)]
schnorrsig: clarify result of calling nonce_function_bip340 without data

3 years agoREADME: mention schnorrsig module
Jonas Nick [Fri, 30 Oct 2020 20:36:18 +0000 (20:36 +0000)]
README: mention schnorrsig module

3 years agoMerge #846: ci: Run ASan/LSan and reorganize sanitizer and Valgrind jobs
Jonas Nick [Fri, 21 May 2021 21:57:57 +0000 (21:57 +0000)]
Merge #846: ci: Run ASan/LSan and reorganize sanitizer and Valgrind jobs

02dcea1ad9441f857c7768e2b7d304bb19fd2a0c ci: Make test iterations configurable and tweak for sanitizer builds (Tim Ruffing)
489ff5c20a1457d0e7d765c8f05856c50c4777a8 tests: Treat empty SECP2561_TEST_ITERS as if it was unset (Tim Ruffing)
fcfcb97e74b55a107290d44c81c049d6168e954f ci: Simplify to use generic wrapper for QEMU, Valgrind, etc (Tim Ruffing)
de4157f13acc43d521e3133ff1d2e7d67484f0ac ci: Run ASan/LSan and reorganize sanitizer and Valgrind jobs (Tim Ruffing)

Pull request description:

ACKs for top commit:
  sipa:
    utACK 02dcea1ad9441f857c7768e2b7d304bb19fd2a0c
  jonasnick:
    ACK 02dcea1ad9441f857c7768e2b7d304bb19fd2a0c spot-checked ci output, checked that when `valgrind ./tests` crashes then `LOG_COMPILER=valgrind make check` also crashes.

Tree-SHA512: 5f4a2fe186eca0b4ca29190eb18e20d0804934df614cdc8eb8cf0145ff36ded43194325572bb77eaaeba85c369f6effe69b7bdf7df97ba418d72cf36c9749a8c

3 years agoci: Make test iterations configurable and tweak for sanitizer builds
Tim Ruffing [Mon, 17 May 2021 18:41:15 +0000 (20:41 +0200)]
ci: Make test iterations configurable and tweak for sanitizer builds

3 years agotests: Treat empty SECP2561_TEST_ITERS as if it was unset
Tim Ruffing [Fri, 21 May 2021 09:24:30 +0000 (11:24 +0200)]
tests: Treat empty SECP2561_TEST_ITERS as if it was unset

3 years agoci: Simplify to use generic wrapper for QEMU, Valgrind, etc
Tim Ruffing [Mon, 17 May 2021 15:19:01 +0000 (17:19 +0200)]
ci: Simplify to use generic wrapper for QEMU, Valgrind, etc

3 years agoci: Run ASan/LSan and reorganize sanitizer and Valgrind jobs
Tim Ruffing [Mon, 9 Nov 2020 16:52:12 +0000 (17:52 +0100)]
ci: Run ASan/LSan and reorganize sanitizer and Valgrind jobs

3 years agoMerge #941: Clean up git tree
Jonas Nick [Fri, 14 May 2021 20:04:07 +0000 (20:04 +0000)]
Merge #941: Clean up git tree

09b3bb8648fec903e4ac2ec1d047503d5f0f48d7 Clean up git tree (Tim Ruffing)

Pull request description:

ACKs for top commit:
  jonasnick:
    ACK 09b3bb8648fec903e4ac2ec1d047503d5f0f48d7

Tree-SHA512: 70db146f4475e9618ecd68cf678d09a351e8da6c4fd4aa937c3f2fa30e3f6a9480ff24ac6301785fc2463bb5f8ff974091f8e9292ae7674ca9632b449a7034d5

3 years agoClean up git tree
Tim Ruffing [Wed, 12 May 2021 09:49:36 +0000 (11:49 +0200)]
Clean up git tree

This removes the ununsed `obj` directory. It also suggests in the README
to create the "coverage" files in a separate directory and adds the
coverage files to .gitignore.

readme: Improve instructions for coverage reports

3 years agoMerge #930: Add ARM32/ARM64 CI
Jonas Nick [Thu, 13 May 2021 19:31:49 +0000 (19:31 +0000)]
Merge #930: Add ARM32/ARM64 CI

8bbad7a18e5dc5054b27ae44ea0c8dffe050f6bf Add asm build to ARM32 CI (Pieter Wuille)
7d65ed5214273275841f5aa272ad561df7ea7f21 Add ARM32/ARM64 CI (Pieter Wuille)

Pull request description:

ACKs for top commit:
  real-or-random:
    ACK 8bbad7a18e5dc5054b27ae44ea0c8dffe050f6bf CI output looks fine
  jonasnick:
    ACK 8bbad7a18e5dc5054b27ae44ea0c8dffe050f6bf

Tree-SHA512: 090a52af6914cf9fb659f9626a8224d82c8da81f6e628b7300e34851e198d8299dfd25789c0f1d6f2c79f58b5413be498f9fba43bc50238480fe6524b640538a

3 years agoMerge #850: add `secp256k1_ec_pubkey_cmp` method
Jonas Nick [Thu, 13 May 2021 19:17:35 +0000 (19:17 +0000)]
Merge #850: add `secp256k1_ec_pubkey_cmp` method

6eceec6d566898a5c157630e47f95b260767026b add `secp256k1_xonly_pubkey_cmp` method (Andrew Poelstra)
0d9561ae879848191a14bcc67db87cbfd44fb69a add `secp256k1_ec_pubkey_cmp` method (Andrew Poelstra)

Pull request description:

ACKs for top commit:
  elichai:
    Code review ACK 6eceec6d566898a5c157630e47f95b260767026b
  jonasnick:
    ACK 6eceec6d566898a5c157630e47f95b260767026b
  real-or-random:
    ACK 6eceec6d566898a5c157630e47f95b260767026b

Tree-SHA512: f95cbf65f16c88a4adfa1ea7cc6ddabab14baa3b68fa069e78e6faad4852cdbfaea42ee72590d2e0b8f3159cf9b37969511550eb6b2d256b101e2147711cc817

3 years agoMerge bitcoin-core/secp256k1#940: contrib: Explain explicit header guards
Pieter Wuille [Wed, 12 May 2021 03:10:00 +0000 (20:10 -0700)]
Merge bitcoin-core/secp256k1#940: contrib: Explain explicit header guards

22a9ea154a280987be7cf8322156c8738c41c3c5 contrib: Explain explicit header guards (Tim Ruffing)

Pull request description:

  They were added in #925 and deserve a comment.

ACKs for top commit:
  gmaxwell:
    ACK 22a9ea154a280987be7cf8322156c8738c41c3c5
  sipa:
    ACK 22a9ea154a280987be7cf8322156c8738c41c3c5

Tree-SHA512: 832e28d71857d52912dae7e6c0e08a3183bb788996bb2470616c6fbbac6ba601cc74bb51a4c908aec7df9ae4f4cbf2cbb1b451cefde1b5a7359dc93299840278

3 years agoMerge #926: secp256k1.h: clarify that by default arguments must be != NULL
Tim Ruffing [Fri, 7 May 2021 21:20:05 +0000 (23:20 +0200)]
Merge #926: secp256k1.h: clarify that by default arguments must be != NULL

0881633dfd0c530a915cf63be295f00841c94cc4 secp256k1.h: clarify that by default arguments must be != NULL (Jonas Nick)

Pull request description:

  The same file says that the illegal callback will only triger for violations
  explicitly mentioned, which is not true without this commit because we often
  don't mention that an argument is not allowed to be NULL.

  This line is extracted from #783 in the hope that it gets merged faster because other PRs depend on it.

ACKs for top commit:
  gmaxwell:
    ACK 0881633dfd0c530a915cf63be295f00841c94cc4
  real-or-random:
    ACK 0881633dfd0c530a915cf63be295f00841c94cc4

Tree-SHA512: ecdc6954a1c21c333da5b03db51f50a0e53984aaef69cc697adaddc96b276da23e342037f476d21742632f6ec02bfa0574f837a5b5791f5985f4c355037176fa

3 years agoadd `secp256k1_xonly_pubkey_cmp` method
Andrew Poelstra [Mon, 30 Nov 2020 18:42:32 +0000 (18:42 +0000)]
add `secp256k1_xonly_pubkey_cmp` method

3 years agoadd `secp256k1_ec_pubkey_cmp` method
Andrew Poelstra [Sun, 22 Nov 2020 17:33:46 +0000 (17:33 +0000)]
add `secp256k1_ec_pubkey_cmp` method

3 years agocontrib: Explain explicit header guards
Tim Ruffing [Thu, 6 May 2021 15:12:11 +0000 (17:12 +0200)]
contrib: Explain explicit header guards

They were added in #925 and deserve a comment.

3 years agoMerge #937: Have ge_set_gej_var, gej_double_var and ge_set_all_gej_var initialize...
Tim Ruffing [Thu, 6 May 2021 07:38:18 +0000 (09:38 +0200)]
Merge #937: Have ge_set_gej_var, gej_double_var and ge_set_all_gej_var initialize all fields of their outputs.

14c9739a1fb485bb56dbe3447132a37bcbef4e22 tests: Improve secp256k1_ge_set_all_gej_var for some infinity inputs (Tim Ruffing)
4a19668c37bc77d0165f4a1c0e626e321e9c4a09 tests: Test secp256k1_ge_set_all_gej_var for all infinity inputs (Tim Ruffing)
45b6468d7e3ed9849ed474c71e9a9479de1a77db Have secp256k1_ge_set_all_gej_var initialize all fields. Previous behaviour would not initialize r->y values in the case where infinity is passed in. Furthermore, the previous behaviour wouldn't initialize anything in the case where all inputs were infinity. (Russell O'Connor)
31c0f6de413e521731ad0e63424431b3dd49cec8 Have secp256k1_gej_double_var initialize all fields. Previous behaviour would not initialize r->x and r->y values in the case where infinity is passed in. (Russell O'Connor)
dd6c3de322740a3054cf6a1994a38dc8f201b473 Have secp256k1_ge_set_gej_var initialize all fields. Previous behaviour would not initialize r->x and r->y values in the case where infinity is passed in. (Russell O'Connor)

Pull request description:

  Previous behaviour would not initialize `r->x` and `r->y` values in the case where infinity is passed in.

ACKs for top commit:
  gmaxwell:
    ACK 14c9739a1fb485bb56dbe3447132a37bcbef4e22
  sipa:
    utACK 14c9739a1fb485bb56dbe3447132a37bcbef4e22
  real-or-random:
    ACK 14c9739a1fb485bb56dbe3447132a37bcbef4e22

Tree-SHA512: 2e779b767f02e348af4bbc62aa9871c3d1d29e61a6c643c879c49f2de27556a3588850acd2f7c7483790677597d01064025e14befdbf29e783f57996fe4430f9

3 years agoMerge #925: changed include statements without prefix 'include/'
Tim Ruffing [Wed, 5 May 2021 18:14:39 +0000 (20:14 +0200)]
Merge #925: changed include statements without prefix 'include/'

3c90bdda95aa4e79ff33bfbbbe91872417650ae9 change local lib headers to be relative for those pointing at "include/" dir (William Bright)

Pull request description:

  Referencing #924 , this PR splits the two issues brought on to a smaller to digest change. What this does is removes the prefix "include/" when referencing the local library header files.

  e.g:
  from:
  ```cpp
  #include "include/secp256k1.h"
  ```
  to:
  ```cpp
  #include "secp256k1.h"
  ```

  Rationale besides styling and consistency across other files in the repo, it makes it easier for outside builds to properly locate the headers.

  A live example seen here when attempting to build this library within bitcoin repo:
  ```sh
  [ 14%] Building CXX object leveldb/CMakeFiles/leveldb.dir/util/bloom.cc.o
  /tmp/bitcoin/src/secp256k1/src/secp256k1.c:7:10: fatal error: include/secp256k1.h: No such file or directory
      7 | #include "include/secp256k1.h"
        |          ^~~~~~~~~~~~~~~~~~~~~
  compilation terminated.
  make[2]: *** [secp256k1/CMakeFiles/Secp256k1.dir/build.make:76: secp256k1/CMakeFiles/Secp256k1.dir/src/secp256k1.c.o] Error 1
  make[1]: *** [CMakeFiles/Makefile2:537: secp256k1/CMakeFiles/Secp256k1.dir/all] Error 2
  make[1]: *** Waiting for unfinished jobs....

  ```

ACKs for top commit:
  gmaxwell:
    ACK 3c90bdda95aa4e79ff33bfbbbe91872417650ae9
  real-or-random:
    ACK 3c90bdda95aa4e79ff33bfbbbe91872417650ae9 code looks good and even the tests compile fine now without `-I` args

Tree-SHA512: 94d212718c6f4901f1c310aff504b7afedda91268143ffe1b45e9883cd517c0599e40ac798a51b54d66cd31646fe8cb1a489f1776612cfb5963654f4a1cee757

3 years agotests: Improve secp256k1_ge_set_all_gej_var for some infinity inputs
Tim Ruffing [Wed, 5 May 2021 07:38:22 +0000 (09:38 +0200)]
tests: Improve secp256k1_ge_set_all_gej_var for some infinity inputs

3 years agotests: Test secp256k1_ge_set_all_gej_var for all infinity inputs
Tim Ruffing [Wed, 5 May 2021 07:38:22 +0000 (09:38 +0200)]
tests: Test secp256k1_ge_set_all_gej_var for all infinity inputs

3 years agochange local lib headers to be relative for those pointing at "include/" dir
William Bright [Tue, 4 May 2021 17:19:33 +0000 (13:19 -0400)]
change local lib headers to be relative for those pointing at "include/" dir

added relative paths to header files imported from src directory

added include guards for contrib/ files when referring to secp256k1.h

3 years agoHave secp256k1_ge_set_all_gej_var initialize all fields.
Russell O'Connor [Tue, 4 May 2021 20:17:00 +0000 (16:17 -0400)]
Have secp256k1_ge_set_all_gej_var initialize all fields.
Previous behaviour would not initialize r->y values in the case where infinity is passed in.
Furthermore, the previous behaviour wouldn't initialize anything in the case where all inputs were infinity.

3 years agoHave secp256k1_gej_double_var initialize all fields.
Russell O'Connor [Tue, 4 May 2021 19:49:48 +0000 (15:49 -0400)]
Have secp256k1_gej_double_var initialize all fields.
Previous behaviour would not initialize r->x and r->y values in the case where infinity is passed in.

3 years agoHave secp256k1_ge_set_gej_var initialize all fields.
Russell O'Connor [Tue, 4 May 2021 18:59:47 +0000 (14:59 -0400)]
Have secp256k1_ge_set_gej_var initialize all fields.
Previous behaviour would not initialize r->x and r->y values in the case where infinity is passed in.

3 years agoMerge bitcoin-core/secp256k1#936: Fix gen_context/ASM build on ARM
Pieter Wuille [Tue, 4 May 2021 18:30:32 +0000 (11:30 -0700)]
Merge bitcoin-core/secp256k1#936: Fix gen_context/ASM build on ARM

c8483520c9077905a1dc8b9adb88b6ea2a3bd9ef Makefile.am: Don't pass a variable twice (Tim Ruffing)
2161f31785e66e4e46471208610b5e3e98331849 Makefile.am: Honor config when building gen_context (Tim Ruffing)
99f47c20ec41279075d6b3ae64c9c1a84b40a6f8 gen_context: Don't use external ASM because it complicates the build (Tim Ruffing)

Pull request description:

  Obsoletes #935.

ACKs for top commit:
  gmaxwell:
    ACK c8483520c9077905a1dc8b9adb88b6ea2a3bd9ef   looks good and works here. Undefign is kinda yuck, but it is already doing it and it's cleaner than the obvious alternatives.
  sipa:
    utACK c8483520c9077905a1dc8b9adb88b6ea2a3bd9ef. I verified that building still works on ARM64, but without asm of course.

Tree-SHA512: fc5500688b2aecc4238e21c32f65559bcbfd1e83d1ae4d2c8e15573e94613667731064d8b5f2b9e4209016d88118263802ff4b9a73c1f37c224ccf2a4a1d6536

3 years agoAdd asm build to ARM32 CI
Pieter Wuille [Sun, 2 May 2021 20:39:22 +0000 (13:39 -0700)]
Add asm build to ARM32 CI

3 years agoAdd ARM32/ARM64 CI
Pieter Wuille [Sun, 2 May 2021 19:48:38 +0000 (12:48 -0700)]
Add ARM32/ARM64 CI

3 years agoMakefile.am: Don't pass a variable twice
Tim Ruffing [Mon, 3 May 2021 12:11:38 +0000 (14:11 +0200)]
Makefile.am: Don't pass a variable twice

3 years agoMakefile.am: Honor config when building gen_context
Tim Ruffing [Mon, 3 May 2021 11:05:33 +0000 (13:05 +0200)]
Makefile.am: Honor config when building gen_context

This passes $(DEFS) (which should literally be "-DHAVE_CONFIG_H") to the
compiler when building gen_context.

This has currently no effect because gen_context.c does not check for
this macro but it's conceivable that it may do so in the future.

3 years agogen_context: Don't use external ASM because it complicates the build
Tim Ruffing [Mon, 3 May 2021 12:11:08 +0000 (14:11 +0200)]
gen_context: Don't use external ASM because it complicates the build

Fixes #931.

3 years agoMerge #933: Avoids a missing brace warning in schnorrsig/tests_impl.h on old compilers
Jonas Nick [Mon, 3 May 2021 09:51:28 +0000 (09:51 +0000)]
Merge #933: Avoids a missing brace warning in schnorrsig/tests_impl.h on old compilers

99e2d5be0dba938b7701d157cba86252db9eb61c Avoids a missing brace warning in schnorrsig/tests_impl.h on old compilers. (Gregory Maxwell)

Pull request description:

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

Tree-SHA512: f3f9cfcd62830d7accca74dfce40abb091dec0990a66bad5d2a9599f2533121d8d1422499d511512bfb8d7c57da96e29e012dbc210e2e97ad55ad18de0869735

3 years agoAvoids a missing brace warning in schnorrsig/tests_impl.h on old compilers.
Gregory Maxwell [Sun, 2 May 2021 20:02:12 +0000 (20:02 +0000)]
Avoids a missing brace warning in schnorrsig/tests_impl.h on old compilers.

GCC 4.9.2, at least, emits "warning: missing braces around initializer"
 without this.

3 years agoMerge #922: Add mingw32-w64/wine CI build
Jonas Nick [Sun, 2 May 2021 12:57:34 +0000 (12:57 +0000)]
Merge #922: Add mingw32-w64/wine CI build

ed5a199bed65bf084f34ce18d35807d31a1c75bb tests: fopen /dev/urandom in binary mode (Tim Ruffing)
4dc37bf81b55b9a3ffcf09f7a212436d25844710 Add mingw32-w64/wine CI build (Pieter Wuille)

Pull request description:

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

Tree-SHA512: 45afc394e3a200f7c020426a66f78df8d12827b9dc91bb04dc1708c3ad5cdc4e7d20554d6d5c046d288552f4e722d4fe8a0f3234b662e7351a4d27aaaeb0d5c0

3 years agoMerge #928: Define SECP256K1_BUILD in secp256k1.c directly.
Tim Ruffing [Sun, 2 May 2021 09:40:34 +0000 (11:40 +0200)]
Merge #928: Define SECP256K1_BUILD in secp256k1.c directly.

ae9e648526ceaf7cd97ba4dfe3c105db8e226c35 Define SECP256K1_BUILD in secp256k1.c directly. (Gregory Maxwell)

Pull request description:

  This avoids building without it and makes it safer to use a custom
   building environment.  Test harnesses need to #include secp256k1.c
   first now.

  Fixes #927

ACKs for top commit:
  sipa:
    utACK ae9e648526ceaf7cd97ba4dfe3c105db8e226c35
  real-or-random:
    ACK ae9e648526ceaf7cd97ba4dfe3c105db8e226c35

Tree-SHA512: 65ccc15c18f111ba926db1bb25f06c2beb2997c6f42c6d3ebc371ca84f4b5918379efd25c30556cedfd2e4275758bd79d733e80a11159c6ec013dd4707a683ad

3 years agotests: fopen /dev/urandom in binary mode
Tim Ruffing [Sat, 1 May 2021 11:06:55 +0000 (13:06 +0200)]
tests: fopen /dev/urandom in binary mode

This makes a difference with mingw builds on Wine, where the subsequent
fread() may abort early in the default text mode.

The Microsoft C docs say:
"In text mode, CTRL+Z is interpreted as an EOF character on input."

3 years agoDefine SECP256K1_BUILD in secp256k1.c directly.
Gregory Maxwell [Sat, 1 May 2021 17:08:52 +0000 (17:08 +0000)]
Define SECP256K1_BUILD in secp256k1.c directly.

This avoids building without it and makes it safer to use a custom
 building environment.  Test harnesses need to #include secp256k1.c
 first now.

3 years agoAdd mingw32-w64/wine CI build
Pieter Wuille [Sat, 17 Apr 2021 17:57:16 +0000 (10:57 -0700)]
Add mingw32-w64/wine CI build

3 years agosecp256k1.h: clarify that by default arguments must be != NULL
Jonas Nick [Wed, 28 Apr 2021 16:57:49 +0000 (16:57 +0000)]
secp256k1.h: clarify that by default arguments must be != NULL

The same file says that the illegal callback will only triger for violations
explicitly mentioned, which is not true without this commit because we often
don't mention that an argument is not allowed to be NULL.

3 years agoMerge #906: Use modified divsteps with initial delta=1/2 for constant-time
Tim Ruffing [Thu, 22 Apr 2021 18:11:51 +0000 (20:11 +0200)]
Merge #906: Use modified divsteps with initial delta=1/2 for constant-time

be0609fd54af95a15b76cea150e6907d581318dd Add unit tests for edge cases with delta=1/2 variant of divsteps (Pieter Wuille)
cd393ce2283e0e7234ea39a15c4931715f4dde1e Optimization: only do 59 hddivsteps per iteration instead of 62 (Pieter Wuille)
277b224b6aba942efbac4a6aae1054035a68d8dd Use modified divsteps with initial delta=1/2 for constant-time (Pieter Wuille)
376ca366db0469f39b93af0af762090986ea75f2 Fix typo in explanation (Pieter Wuille)

Pull request description:

  This updates the divsteps-based modular inverse code to use the modified version which starts with delta=1/2. For variable time, the delta=1 variant is still used as it appears to be faster.

  See https://github.com/sipa/safegcd-bounds/tree/master/coq and https://medium.com/blockstream/a-formal-proof-of-safegcd-bounds-695e1735a348 for a proof of correctness of this variant.

  TODO:
  * [x] Update unit tests to include edge cases specific to this variant

  I'm still running the Coq proof verification for the 590 bound in non-native mode. It's unclear how long this will take.

ACKs for top commit:
  gmaxwell:
    ACK be0609fd54af95a15b76cea150e6907d581318dd
  sanket1729:
    crACK be0609fd54af95a15b76cea150e6907d581318dd
  real-or-random:
    ACK be0609fd54af95a15b76cea150e6907d581318dd careful code review and some testing

Tree-SHA512: 2f8f400ba3ac8dbd08622d564c3b3e5ff30768bd0eb559f2c4279c6c813e17cdde71b1c16f05742c5657b5238b4d592b48306f9f47d7dbdb57907e58dd99b47a

3 years agoMerge #918: Clean up configuration in gen_context
Jonas Nick [Mon, 19 Apr 2021 16:59:03 +0000 (16:59 +0000)]
Merge #918: Clean up configuration in gen_context

07067967ee9dcc4af10fd3a565ffb846a2593e92 add ECMULT_GEN_PREC_BITS to basic_config.h (Aaron Voisine)
a3aa2628c7b675814157556d774872755c9f1aba gen_context: Don't include basic-config.h (Tim Ruffing)

Pull request description:

ACKs for top commit:
  sipa:
    utACK 07067967ee9dcc4af10fd3a565ffb846a2593e92
  jonasnick:
    ACK 07067967ee9dcc4af10fd3a565ffb846a2593e92

Tree-SHA512: 4889b483a33ac54f6038a5a5db1ccd225b03e752c5724243db7345389372ecf043433fd5441199043fc8b74c963f13cbf6a7c8068367f9a105e2be93392f24e9

3 years agoadd ECMULT_GEN_PREC_BITS to basic_config.h
Aaron Voisine [Sat, 10 Apr 2021 18:37:08 +0000 (11:37 -0700)]
add ECMULT_GEN_PREC_BITS to basic_config.h

set ECMULT_GEN_PREC_BITS to the "auto" value of 4 in basic_config.h, so libsecp can be used without autoconf

3 years agogen_context: Don't include basic-config.h
Tim Ruffing [Thu, 15 Apr 2021 14:17:53 +0000 (16:17 +0200)]
gen_context: Don't include basic-config.h

Before this commit, gen_context.c both included libsecp256k1-config.h
and basic-config.h: The former only to obtain ECMULT_GEN_PREC_BITS
and the latter to obtain a basic working configuration to be able to
use the library.

This was inelegant and confusing: It meant that basic-config.h needs
to #undef all the macros defined in libsecp256k1-config.h. Moreover,
it meant that basic-config.h cannot define ECMULT_GEN_PREC_BITS,
essentially making this file specific for use in gen_context.c.

After this commit, gen_context.c include only libsecp256k1-config.h.
basic-config.h is not necessary anymore for the modules used in
gen_context.c because 79f1f7a made the preprocessor detect all the
relevant config options.

On the way, we remove an unused #define in basic-config.h.

3 years agoAdd unit tests for edge cases with delta=1/2 variant of divsteps
Pieter Wuille [Fri, 26 Mar 2021 05:50:15 +0000 (22:50 -0700)]
Add unit tests for edge cases with delta=1/2 variant of divsteps

3 years agoOptimization: only do 59 hddivsteps per iteration instead of 62
Pieter Wuille [Fri, 15 Jan 2021 23:20:39 +0000 (15:20 -0800)]
Optimization: only do 59 hddivsteps per iteration instead of 62

3 years agoUse modified divsteps with initial delta=1/2 for constant-time
Pieter Wuille [Fri, 1 Jan 2021 19:15:10 +0000 (11:15 -0800)]
Use modified divsteps with initial delta=1/2 for constant-time

Instead of using eta=-delta, use zeta=-(delta+1/2) to represent
delta. This variant only needs at most 590 iterations for 256-bit
inputs rather than 724 (by convex hull bounds analysis).

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.

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