Commit Graph

1319 Commits

Author SHA1 Message Date
Tim Ruffing 6034a04fb1
Merge #778: secp256k1_gej_double_nonzero supports infinity
18d36327fd secp256k1_gej_double_nonzero supports infinity (Pieter Wuille)

Pull request description:

  Our existing function `secp256k1_gej_double_nonzero` actually supports infinity if only it wouldn't check that the input isn't infinity.

  Drop the check, rename it to `secp256k1_gej_double`, and adapt the tests.

ACKs for top commit:
  real-or-random:
    ACK 18d36327fd I looked at the diff and ran tests locally
  gmaxwell:
    ACK 18d36327fd

Tree-SHA512: 79dc42099c318f0bdfe7961495ab3fbbe87551c3cc373557a371914bb65638b129ddfd360e694959349f184e2d71a540abdbef04211e7eb70ee17b691632b915
2020-07-29 15:20:29 +02:00
Jonas Nick f60915906d
Merge #779: travis: Fix argument quoting for ./configure
9e49a9b255 travis: Fix argument quoting for ./configure (Tim Ruffing)

Pull request description:

ACKs for top commit:
  jonasnick:
    ACK 9e49a9b255

Tree-SHA512: 53efa7134de978912d604bc9685bc779f98e2d72e5f77636595676aa420c04fc934a6bb9d560d74b58197943ab86708d3b913e79bc3dfb856681b26dda8724b3
2020-07-29 13:06:25 +00:00
Tim Ruffing 9e49a9b255 travis: Fix argument quoting for ./configure
When $USE_HOST or $EXTRAFLAGS are empty, we pass (due to quoting) an
empty string as a parameter to ./configure, which then believes we want
to use a deprecated syntax for specifing a host or a target and yells at us:
> configure: WARNING: you should use --build, --host, --target

The fixes are:
 - $EXTRAFLAGS could contain multiple flags and should not be quoted at all.
 - We can get rid of $USE_HOST by specifying --host="$HOST" directly.
2020-07-29 08:50:42 +02:00
Pieter Wuille 18d36327fd secp256k1_gej_double_nonzero supports infinity 2020-07-28 18:12:30 -07:00
Tim Ruffing 214cb3c321
Merge #772: Improve constant-timeness on PowerPC
67a429f31f Suppress a harmless variable-time optimization by clang in _int_cmov (Tim Ruffing)
5b196338f0 Remove redundant "? 1 : 0" after comparisons in scalar code (Tim Ruffing)

Pull request description:

  Attempt at resolving #771 .

  This surprisingly seems to improve the situation at least for the compilers available on godbolt.

ACKs for top commit:
  gmaxwell:
    ACK 67a429f31f
  elichai:
    tACK 67a429f31f

Tree-SHA512: ee8b0c86831ec8c3d5a9abcad773ed8a0f267e5c47012e4e1423b10a64c26b4cf6e3c466c3df765ba7e636787a3fe134d633926d67b599287f12c51be924f478
2020-07-28 16:12:24 +02:00
Tim Ruffing 40412b1930
Merge #774: tests: Abort if malloc() fails during context cloning tests
2e1b9e0458 tests: Abort if malloc() fails during context cloning tests (Tim Ruffing)

Pull request description:

  Found by the clang static analyzer.

  This is the worst true positive that it found. I feel somewhat proud.

ACKs for top commit:
  elichai:
    tACK 2e1b9e0458

Tree-SHA512: bf9a3b6c2b8beaafd230ece00a9a69dd884a35b6d2243502ebfded3f77a454e80ef922791bd48c17aa4814a275550957071c045912080a616dd5ed704a70aab7
2020-07-28 12:35:54 +02:00
Tim Ruffing 2e1b9e0458 tests: Abort if malloc() fails during context cloning tests
Found by the clang static analyzer.

This is the worst true positive that it found. I feel somewhat proud.
2020-07-28 10:24:44 +02:00
Tim Ruffing 67a429f31f Suppress a harmless variable-time optimization by clang in _int_cmov
Follow up on 52a03512c1
2020-07-27 14:35:05 +02:00
Tim Ruffing 5b196338f0 Remove redundant "? 1 : 0" after comparisons in scalar code
This prevents GCC from generating branches on PowerPC in certain
cases.

Fixes #771.
2020-07-26 14:59:56 +02:00
Tim Ruffing 3e5cfc5c73
Merge #741: Remove unnecessary sign variable from wnaf_const
37dba329c6 Remove unnecessary sign variable from wnaf_const (Jonas Nick)
6bb0b77e15 Fix test_constant_wnaf for -1 and add a test for it. (Jonas Nick)

Pull request description:

  There currently is a single branch in the `ecmul_const` function that is not being exercised by the tests. This branch is unreachable and therefore I'm suggesting to remove it.

  For your convenience the paper the wnaf algorithm can be found [here (The Width-w NAF Method Provides Small Memory and Fast Elliptic Scalar Multiplications Secure against Side Channel Attacks)](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.563.1267&rep=rep1&type=pdf). Similarly, unless I'm missing something important, I don't see how their algorithm needs to consider `sign(u[i-1])` unless `d` can be negative - which doesn't make much sense to me either.

ACKs for top commit:
  real-or-random:
    ACK 37dba329c6 I verified the correctness of the change and claimed invariant by manual inspection. I tested the code, both with 32bit and 64bit scalars.

Tree-SHA512: 9db45f76bd881d00a81923b6d2ae1c3e0f49a82a5d55347f01e1ce4e924d9a3bf55483a0697f25039c327e33edca6796ba3205c068d9f2f99aa5d655e46b15be
2020-07-26 12:21:14 +02:00
Tim Ruffing 66bb9320c0
Merge #773: Fix some compile problems on weird/old compilers.
1309c03c45 Fix some compile problems on weird/old compilers. (Gregory Maxwell)

Pull request description:

  The visibility attribute is a GCC 4+ feature.
  GCC 2.95 also warns about the unsigned/signed comparision.

ACKs for top commit:
  real-or-random:
    ACK 1309c03c45 I inspected the diff

Tree-SHA512: b5a5175416b67b2619f68ad82a208052ad678955e59c2f3457799abd1dd6fd817c40f6bc2941b2bda207c6f58ad0fbe46221a2f92b726e824702c4c0b177377c
2020-07-26 11:06:33 +02:00
Gregory Maxwell 1309c03c45 Fix some compile problems on weird/old compilers.
The visibility attribute is a GCC 4+ feature.
GCC 2.95 also warns about the unsigned/signed comparision.
2020-07-26 05:26:56 +00:00
Jonas Nick 2309c7dd4a
Merge #769: Undef HAVE___INT128 in basic-config.h to fix gen_context compilation
22e578bb11 Undef HAVE___INT128 in basic-config.h to fix gen_context compilation (Tim Ruffing)

Pull request description:

ACKs for top commit:
  jonasnick:
    ACK 22e578bb11

Tree-SHA512: 91e11c3feade13923a01c30025b7f01d0cb6d7d88cd7a19d490373d2fb4552f2ca1ab0d9138096268999bcbfd51ef3c9af64ec8ab0dc8ee2fa60be16d2b5af64
2020-07-21 19:12:49 +00:00
Tim Ruffing 22e578bb11 Undef HAVE___INT128 in basic-config.h to fix gen_context compilation
Fixes #768.
2020-07-21 11:09:23 +02:00
Jonas Nick 3f4a5a10e4
Merge #765: remove dead store in ecdsa_signature_parse_der_lax
f00d6575ca remove dead store in ecdsa_signature_parse_der_lax (fanquake)

Pull request description:

ACKs for top commit:
  elichai:
    utACK f00d6575ca, it does look like we don't use that assignment
  jonasnick:
    ACK f00d6575ca

Tree-SHA512: 9aa54c901f299341c309411b0247720f5152a131dd346c19be7ee21865e3a822e8cf91b869e28ef6288adaf31660bc2e18874e304052468a9be6b7027674af30
2020-06-29 08:38:35 +00:00
fanquake f00d6575ca
remove dead store in ecdsa_signature_parse_der_lax
This change was made in bitcoin/bitcoin without upstreaming. So this is
a followup to the comment here:
https://github.com/bitcoin/bitcoin/pull/19228#issuecomment-641795558.

See also: https://github.com/bitcoin/bitcoin/pull/11073.
2020-06-29 13:23:26 +08:00
Tim Ruffing dbd41db16a
Merge #759: Fix uninitialized variables in ecmult_multi test
2e7fc5b537 Fix uninitialized variables in ecmult_multi test (Jonas Nick)

Pull request description:

  Fixes #756

ACKs for top commit:
  real-or-random:
    ACK 2e7fc5b537 I inspected the diff. I did not test it and I did not check whether if makes the warning go away
  elichai:
    tACK 2e7fc5b537

Tree-SHA512: 674400134f5487236f5b6e8b3020b346d43662511628cdf6dd1bd7ba1de985bf93f5be11f5650f250ff37b5f87eb4b01d90ed53d41193c05a420d3f5a2d63470
2020-06-15 16:07:12 +02:00
Jonas Nick 2e7fc5b537 Fix uninitialized variables in ecmult_multi test 2020-06-15 09:02:54 +00:00
Tim Ruffing 2ed54da18a
Merge #755: Recovery signing: add to constant time test, and eliminate non ct operators
28609507e7 Add tests for the cmov implementations (Elichai Turkel)
73596a85a2 Add ecdsa_sign_recoverable to the ctime tests (Elichai Turkel)
2876af4f8d Split ecdsa_sign logic into a new function and use it from ecdsa_sign and recovery (Elichai Turkel)

Pull request description:

  Hi,
  The recovery module was overlooked in #708 and #710, so this adds it to the `valgrind_ctime_test` and replaces the secret dependent branching with the cmovs,
  I created a new function `secp256k1_ecdsa_sign_inner` (feel free to bikeshed) which does the logic both for ecdsa_sign and for ecdsa_sign_recoverable, such that next time when things get changed/improved in ecdsa it will affect the recoverable signing too.

ACKs for top commit:
  jonasnick:
    ACK 28609507e7
  real-or-random:
    ACK 28609507e7 read the diff, tested with valgrind including ctime tests

Tree-SHA512: 4730301dcb62241d79f18eb8fed7e9ab0e20d1663a788832cb6cf4126baa7075807dc31896764b6f82d52742fdb636abc6b75e4344c6f117305904c628a5ad59
2020-06-08 15:45:58 +02:00
Elichai Turkel 28609507e7
Add tests for the cmov implementations 2020-06-03 13:19:12 +03:00
Elichai Turkel 73596a85a2
Add ecdsa_sign_recoverable to the ctime tests 2020-06-03 13:19:11 +03:00
Elichai Turkel 2876af4f8d
Split ecdsa_sign logic into a new function and use it from ecdsa_sign and recovery 2020-06-03 13:19:09 +03:00
Tim Ruffing 5e1c885efb
Merge #754: Fix uninit values passed into cmov
f79a7adcf5 Add valgrind uninit check to cmovs output (Elichai Turkel)
a39c2b09de Fixed UB(arithmetics on uninit values) in cmovs (Elichai Turkel)

Pull request description:

  This should fix #753.
  Used @peterdettman's solution here for the `ECMULT_CONST_TABLE_GET_GE` https://github.com/bitcoin-core/secp256k1/issues/753#issuecomment-631316091
  and in ecdsa_sign I initialize `s` and `r` to a zero scalar.

  The second commit adds a valgrind check to the cmovs that could've caught this (in ecdsa_sign, not in ecmult_const because there's a scalar clear there under `VERIFY_SETUP`)

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

Tree-SHA512: 6fd7b7c84f392bda733a973f4dcfc12bf1478aac2591e2c87b69e637847d3b063c4243cc8feccaffc3a5824c18183a5e66bd4251c2322abaf63bb6439b38defe
2020-06-02 18:06:44 +02:00
Elichai Turkel f79a7adcf5
Add valgrind uninit check to cmovs output 2020-05-26 23:30:56 +03:00
Tim Ruffing 05d315affe
Merge #752: autoconf: Use ":" instead of "dnl" as a noop
5e8747ae2a autoconf: Use ":" instead of "dnl" as a noop (Tim Ruffing)

Pull request description:

  Fixes #424.

Top commit has no ACKs.

Tree-SHA512: a83664afbc6ca1254c4767161bfbec82f3489a8a248ba7a5a46ed9ec2a39232cf92f504accadd4dbb1a6ea4791dbf7f0e1f030e51f02f49eb9a38a2e509ee6c2
2020-05-22 13:31:45 +02:00
Elichai Turkel a39c2b09de
Fixed UB(arithmetics on uninit values) in cmovs 2020-05-22 13:25:26 +03:00
Jonas Nick 3a6fd7f636
Merge #750: Add macOS to the CI
71757da5cc Explictly pass SECP256K1_BENCH_ITERS to the benchmarks in travis.sh (Elichai Turkel)
99bd661d71 Replace travis_wait with a loop printing "\a" to stdout every minute (Elichai Turkel)
bc818b160c Bump travis Ubuntu from xenial(16.04) to bionic(18.04) (Elichai Turkel)
0c5ff9066e Add macOS support to travis (Elichai Turkel)
b6807d91d8 Move travis script into a standalone sh file (Elichai Turkel)

Pull request description:

ACKs for top commit:
  real-or-random:
    ACK 71757da5cc I inspected the diff
  jonasnick:
    ACK 71757da5cc

Tree-SHA512: e8fab725ef5ed98c795f39d7f26b5d967a6bd730d40eb7d9793986858bf34770b0350c1b7b1d14ae608dfff9375a0750ec67c8e6d0d4b562ab917f5e645aa67b
2020-05-18 19:38:47 +00:00
Tim Ruffing 5e8747ae2a autoconf: Use ":" instead of "dnl" as a noop
Fixes #424.
2020-05-18 12:30:01 +02:00
Elichai Turkel 71757da5cc
Explictly pass SECP256K1_BENCH_ITERS to the benchmarks in travis.sh 2020-05-18 12:01:07 +03:00
Elichai Turkel 99bd661d71
Replace travis_wait with a loop printing "\a" to stdout every minute 2020-05-11 16:02:25 +03:00
Elichai Turkel bc818b160c
Bump travis Ubuntu from xenial(16.04) to bionic(18.04) 2020-05-11 16:01:20 +03:00
Elichai Turkel 0c5ff9066e
Add macOS support to travis 2020-05-11 16:01:20 +03:00
Elichai Turkel b6807d91d8
Move travis script into a standalone sh file 2020-05-11 16:01:16 +03:00
Tim Ruffing f39f99be0e
Merge #701: Make ec_ arithmetic more consistent and add documentation
7e3952ae82 Clarify documentation of tweak functions. (Jonas Nick)
89853a0f2e Make tweak function documentation more consistent. (Jonas Nick)
41fc785602 Make ec_privkey functions aliases for ec_seckey_negate, ec_seckey_tweak_add and ec_seckey_mul (Jonas Nick)
22911ee6da Rename private key to secret key in public API (with the exception of function names) (Jonas Nick)
5a73f14d6c Mention that value is unspecified for In/Out parameters if the function returns 0 (Jonas Nick)
f03df0e6d7 Define valid ECDSA keys in the documentation of seckey_verify (Jonas Nick)
5894e1f1df Return 0 if the given seckey is invalid in privkey_negate, privkey_tweak_add and privkey_tweak_mul (Jonas Nick)
8f814cddb9 Add test for boundary conditions of scalar_set_b32 with respect to overflows (Jonas Nick)
3fec982608 Use scalar_set_b32_seckey in ecdsa_sign, pubkey_create and seckey_verify (Jonas Nick)
9ab2cbe0eb Add scalar_set_b32_seckey which does the same as scalar_set_b32 and also returns whether it's a valid secret key (Jonas Nick)

Pull request description:

  Fixes #671. Supersedes #668.

  This PR unifies handling of invalid secret keys by introducing a new function `scalar_set_b32_secret` which returns false if the b32 overflows or is 0. By using this in `privkey_{negate, tweak_add, tweak_mul}` these function will now return 0 if the secret key is invalid which matches the behavior of `ecdsa_sign` and `pubkey_create`.

  Instead of deciding whether to zeroize the secret key on failure, I only added documentation for now that the value is undefined on failure.

ACKs for top commit:
  real-or-random:
    ACK 7e3952ae82 I read the diff carefully and tested the changes
  apoelstra:
    ACK 7e3952ae82

Tree-SHA512: 8e9a66799cd3b6ec1c3acb731d6778035417e3dca9300d840e2437346ff0ac94f0c9be4de20aa2fac9bb4ae2f8a36d4e6a34795a640b9cfbfee8311decb102f0
2020-04-30 18:13:55 +02:00
Jonas Nick 37dba329c6 Remove unnecessary sign variable from wnaf_const 2020-04-29 12:38:23 +00:00
Jonas Nick 6bb0b77e15 Fix test_constant_wnaf for -1 and add a test for it.
Before, test_constant_wnaf used scalar_cadd_bit to correct for the skew. But
this function does not correctly deal with overflows which is why num = -1
couldn't be tested.

This commit also adds tests for 0, 1/2 and 1/2-1 as they are corner cases
in constant_wnaf.
2020-04-29 12:38:23 +00:00
Jonas Nick 39198a03ea
Merge #732: Retry if r is zero during signing
37ed51a7ea Make ecdsa_sig_sign constant-time again after reverting 25e3cfb (Tim Ruffing)
93d343bfc5 Revert "ecdsa_impl: replace scalar if-checks with VERIFY_CHECKs in ecdsa_sig_sign" (Tim Ruffing)

Pull request description:

ACKs for top commit:
  elichai:
    ACK 37ed51a7ea makes sense.
  jonasnick:
    ACK 37ed51a7ea

Tree-SHA512: 82b5b8e29f48e84fd7a0681b62923d3bd87d724b38ef18e8c7969b0dcc5a405ebb26c14b5c5f4c7ba0ccabd152d1531d217809d1daf40872fe0c1e079b55c64b
2020-04-18 12:23:05 +00:00
Tim Ruffing 59a8de8f64
Merge #742: Fix typo in ecmult_const_impl.h
4e284655d9 Fix typo in ecmult_const_impl.h (f-daniel)

Pull request description:

  Fix small typo in the reference given for the wNAF method ( `secp256k1_wnaf_const`)

ACKs for top commit:
  real-or-random:
    ACK 4e284655d9 trivial

Tree-SHA512: d6c3daa0384fc1bba36a46933641c97661b18e88c711343e2c8f91f39aa707eddd0ba77c8d5c43aaead883eeed7f4458ed1dec228d692d713572231aa6010fb0
2020-04-18 13:20:41 +02:00
f-daniel 4e284655d9
Fix typo in ecmult_const_impl.h
Fix small typo in the reference given for the wNAF method
2020-04-18 12:53:06 +02:00
Tim Ruffing f862b4ca13
Merge #740: Make recovery/main_impl.h non-executable
ffef45c98a Make recovery/main_impl.h non-executable (Elichai Turkel)

Pull request description:

  Opened it because of https://github.com/bitcoin/bitcoin/pull/18650

  I assume it doesn't matter?
  But because I'm not sure I preferred to open this then let the info go away in case someone thinks it does matter.

ACKs for top commit:
  real-or-random:
    ACK ffef45c98a

Tree-SHA512: 381aed7f99fd739f4059b2e526ba9cd75b55b4fa86c9cc040fbf6b93055ce8558cc69c4ccf5d8a422b17022ca376cc9a608cf5af8d5841d62c5953f40825f5ff
2020-04-15 22:38:03 +02:00
Elichai Turkel ffef45c98a
Make recovery/main_impl.h non-executable 2020-04-15 23:14:06 +03:00
Jonas Nick 2361b3719a
Merge #735: build: fix OpenSSL EC detection on macOS
3b7d26b23c build: add SECP_TEST_INCLUDES to bench_verify CPPFLAGS (fanquake)
84b5fc5bc3 build: fix OpenSSL EC detection on macOS (fanquake)

Pull request description:

ACKs for top commit:
  real-or-random:
    ACK 3b7d26b23c the diff looks good to me
  jonasnick:
    ACK 3b7d26b23c

Tree-SHA512: 381aed7f99fd739f4059b2e526ba9cd75b55b4fa86c9cc040fbf6b93055ce8558cc69c4ccf5d8a422b17022ca376cc9a608cf5af8d5841d62c5953f40825f5ff
2020-04-13 19:52:17 +00:00
fanquake 3b7d26b23c
build: add SECP_TEST_INCLUDES to bench_verify CPPFLAGS
This is needed so that bench_verify gets CRYPTO_CPPFLAGS, which would
otherwise not be included, at least on macOS.
2020-04-09 17:22:56 +08:00
fanquake 84b5fc5bc3
build: fix OpenSSL EC detection on macOS 2020-04-09 17:14:06 +08:00
Tim Ruffing 37ed51a7ea Make ecdsa_sig_sign constant-time again after reverting 25e3cfb 2020-03-31 15:03:58 +02:00
Tim Ruffing 93d343bfc5 Revert "ecdsa_impl: replace scalar if-checks with VERIFY_CHECKs in ecdsa_sig_sign"
This reverts commit 25e3cfbf9b. The reverted
commit was probably based on the assumption that this is about the touched
checks cover the secret nonce k instead of r, which is the x-coord of the public
nonce. A signature with a zero r is invalid by the spec, so we should return 0
to make the caller retry with a different nonce. Overflow is not an issue.

Fixes #720.
2020-03-31 14:58:58 +02:00
Jonas Nick 7e3952ae82 Clarify documentation of tweak functions.
In particular, mention that the functions return 0 if seckey or tweak are
invalid (as opposed to saying "should" or "must" be valid).
2020-03-30 20:51:47 +00:00
Jonas Nick 89853a0f2e Make tweak function documentation more consistent.
Do this by adding a newline after the first sentence and aligning the rest.
2020-03-30 20:51:47 +00:00
Jonas Nick 41fc785602 Make ec_privkey functions aliases for ec_seckey_negate, ec_seckey_tweak_add and ec_seckey_mul 2020-03-30 20:51:47 +00:00
Jonas Nick 22911ee6da Rename private key to secret key in public API (with the exception of function names) 2020-03-30 20:51:47 +00:00