Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upstream PRs 831, 907, 903, 889, 918, 906, 928, 922, 933, Merge bitcoin-core/secp256k1#936: Fix gen_context/ASM build on ARM, 925, 937, 926, Merge bitcoin-core/secp256k1#940: contrib: Explain explicit header guards, 850, 930, 941, 846, 947, 662, 950 #132

Merged
merged 81 commits into from
Jul 13, 2021

Commits on Feb 4, 2021

  1. 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.
    PiRK committed Feb 4, 2021
    Configuration menu
    Copy the full SHA
    3d2cf6c View commit details
    Browse the repository at this point in the history
  2. 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.
    ```
    PiRK committed Feb 4, 2021
    Configuration menu
    Copy the full SHA
    99a1cfe View commit details
    Browse the repository at this point in the history

Commits on Mar 8, 2021

  1. Add secp256k1_ctz{32,64}_var functions

    These functions count the number of trailing zeroes in non-zero integers.
    sipa committed Mar 8, 2021
    Configuration menu
    Copy the full SHA
    de0a643 View commit details
    Browse the repository at this point in the history
  2. Add safegcd based modular inverse modules

    Refactored by: Pieter Wuille <[email protected]>
    peterdettman authored and sipa committed Mar 8, 2021
    Configuration menu
    Copy the full SHA
    8e415ac View commit details
    Browse the repository at this point in the history
  3. 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.
    sipa committed Mar 8, 2021
    Configuration menu
    Copy the full SHA
    d8a92fc View commit details
    Browse the repository at this point in the history
  4. 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.
    sipa committed Mar 8, 2021
    Configuration menu
    Copy the full SHA
    151aac0 View commit details
    Browse the repository at this point in the history

Commits on Mar 11, 2021

  1. 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.
    sipa committed Mar 11, 2021
    Configuration menu
    Copy the full SHA
    08d5496 View commit details
    Browse the repository at this point in the history
  2. 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.
    sipa committed Mar 11, 2021
    Configuration menu
    Copy the full SHA
    aa404d5 View commit details
    Browse the repository at this point in the history
  3. 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.
    sipa committed Mar 11, 2021
    Configuration menu
    Copy the full SHA
    436281a View commit details
    Browse the repository at this point in the history

Commits on Mar 12, 2021

  1. Configuration menu
    Copy the full SHA
    1e0e885 View commit details
    Browse the repository at this point in the history
  2. 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.
    sipa committed Mar 12, 2021
    Configuration menu
    Copy the full SHA
    aa9cc52 View commit details
    Browse the repository at this point in the history
  3. Remove unused scalar_sqr

    sipa committed Mar 12, 2021
    Configuration menu
    Copy the full SHA
    5437e7b View commit details
    Browse the repository at this point in the history
  4. 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.
    sipa committed Mar 12, 2021
    Configuration menu
    Copy the full SHA
    20448b8 View commit details
    Browse the repository at this point in the history

Commits on Mar 15, 2021

  1. Remove num/gmp support

    The whole "num" API and its libgmp-based implementation are now unused. Remove them.
    sipa committed Mar 15, 2021
    Configuration menu
    Copy the full SHA
    1f233b3 View commit details
    Browse the repository at this point in the history
  2. 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.
    sipa committed Mar 15, 2021
    Configuration menu
    Copy the full SHA
    9164a1b View commit details
    Browse the repository at this point in the history
  3. 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]>
    peterdettman authored and sipa committed Mar 15, 2021
    Configuration menu
    Copy the full SHA
    b306935 View commit details
    Browse the repository at this point in the history
  4. Optimization: track f,g limb count and pass to new variable-time upda…

    …te_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]>
    peterdettman authored and sipa committed Mar 15, 2021
    Configuration menu
    Copy the full SHA
    ebc1af7 View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    24ad04f View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    23c3fb6 View commit details
    Browse the repository at this point in the history

Commits on Mar 18, 2021

  1. Merge #831: Safegcd inverses, drop Jacobi symbols, remove libgmp

    24ad04f Make scalar_inverse{,_var} benchmark scale with SECP256K1_BENCH_ITERS (Pieter Wuille)
    ebc1af7 Optimization: track f,g limb count and pass to new variable-time update_fg_var (Peter Dettman)
    b306935 Optimization: use formulas instead of lookup tables for cancelling g bits (Peter Dettman)
    9164a1b Optimization: special-case zero modulus limbs in modinv64 (Pieter Wuille)
    1f233b3 Remove num/gmp support (Pieter Wuille)
    20448b8 Remove unused Jacobi symbol support (Pieter Wuille)
    5437e7b Remove unused scalar_sqr (Pieter Wuille)
    aa9cc52 Improve field/scalar inverse tests (Pieter Wuille)
    1e0e885 Make field/scalar code use the new modinv modules for inverses (Pieter Wuille)
    436281a Move secp256k1_fe_inverse{_var} to per-impl files (Pieter Wuille)
    aa404d5 Move secp256k1_scalar_{inverse{_var},is_even} to per-impl files (Pieter Wuille)
    08d5496 Improve bounds checks in modinv modules (Pieter Wuille)
    151aac0 Add tests for modinv modules (Pieter Wuille)
    d8a92fc Add extensive comments on the safegcd algorithm and implementation (Pieter Wuille)
    8e415ac Add safegcd based modular inverse modules (Peter Dettman)
    de0a643 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 24ad04f
      sanket1729:
        ACK 24ad04f
      real-or-random:
        ACK 24ad04f careful code review, some testing
    
    Tree-SHA512: 732fe29315965e43ec9a10ee8c71eceeb983c43fe443da9dc5380a5a11b5e40b06e98d6abf67b773b1de74571fd2014973c6376f3a0caeac85e0cf163ba2144b
    sipa committed Mar 18, 2021
    Configuration menu
    Copy the full SHA
    26de4df View commit details
    Browse the repository at this point in the history

Commits on Mar 20, 2021

  1. Configuration menu
    Copy the full SHA
    4504472 View commit details
    Browse the repository at this point in the history

Commits on Mar 26, 2021

  1. Merge #907: changed import to use brackets <> for openssl

    4504472 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 4504472
      jonasnick:
        ACK 4504472
    
    Tree-SHA512: e35c202835a82dab5fe9f2f75e7752e70b15d5d2ee7485790749f145b35e8e995c4978b4015c726387c24248a7efb636d28791fe882581a144a0ddfb27e14075
    jonasnick committed Mar 26, 2021
    Configuration menu
    Copy the full SHA
    6e89853 View commit details
    Browse the repository at this point in the history
  2. Merge #903: Make argument of fe_normalizes_to_zero{_var} const

    23c3fb6 Make argument of fe_normalizes_to_zero{_var} const (Pieter Wuille)
    
    Pull request description:
    
    ACKs for top commit:
      real-or-random:
        ACK 23c3fb6 diff looks good
      jonasnick:
        ACK 23c3fb6
    
    Tree-SHA512: a51894a9e59851dc4854e92e4200ef6d12a11f6785b903c23585cfff5ef8d369216f4121260fe8789d46d3e215f3c2baa42decae99ab9328e8081f5274e67fab
    jonasnick committed Mar 26, 2021
    Configuration menu
    Copy the full SHA
    c083cc6 View commit details
    Browse the repository at this point in the history

Commits on Apr 7, 2021

  1. Merge #889: fix uninitialized read in tests

    99a1cfe print warnings for conditional-uninitialized (PiRK)
    3d2cf6c initialize variable in tests (PiRK)
    
    Pull request description:
    
    ACKs for top commit:
      real-or-random:
        ACK 99a1cfe code inspection
      jonasnick:
        ACK 99a1cfe
    
    Tree-SHA512: 72f92f51c44210ab54f166920f540525db0e3d1f19a2fa56e4a6d157a38a582f9dc649d919cf3278482c9fd723021b07759284a8fccbc574b62a22aac0facf51
    jonasnick committed Apr 7, 2021
    Configuration menu
    Copy the full SHA
    1e5d50f View commit details
    Browse the repository at this point in the history

Commits on Apr 13, 2021

  1. Fix typo in explanation

    sipa committed Apr 13, 2021
    Configuration menu
    Copy the full SHA
    376ca36 View commit details
    Browse the repository at this point in the history
  2. 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).
    sipa committed Apr 13, 2021
    Configuration menu
    Copy the full SHA
    277b224 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    cd393ce View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    be0609f View commit details
    Browse the repository at this point in the history

Commits on Apr 15, 2021

  1. 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.
    real-or-random committed Apr 15, 2021
    Configuration menu
    Copy the full SHA
    a3aa262 View commit details
    Browse the repository at this point in the history
  2. 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
    voisine authored and real-or-random committed Apr 15, 2021
    Configuration menu
    Copy the full SHA
    0706796 View commit details
    Browse the repository at this point in the history

Commits on Apr 19, 2021

  1. Merge #918: Clean up configuration in gen_context

    0706796 add ECMULT_GEN_PREC_BITS to basic_config.h (Aaron Voisine)
    a3aa262 gen_context: Don't include basic-config.h (Tim Ruffing)
    
    Pull request description:
    
    ACKs for top commit:
      sipa:
        utACK 0706796
      jonasnick:
        ACK 0706796
    
    Tree-SHA512: 4889b483a33ac54f6038a5a5db1ccd225b03e752c5724243db7345389372ecf043433fd5441199043fc8b74c963f13cbf6a7c8068367f9a105e2be93392f24e9
    jonasnick committed Apr 19, 2021
    Configuration menu
    Copy the full SHA
    cc2c09e View commit details
    Browse the repository at this point in the history

Commits on Apr 22, 2021

  1. Merge #906: Use modified divsteps with initial delta=1/2 for constant…

    …-time
    
    be0609f Add unit tests for edge cases with delta=1/2 variant of divsteps (Pieter Wuille)
    cd393ce Optimization: only do 59 hddivsteps per iteration instead of 62 (Pieter Wuille)
    277b224 Use modified divsteps with initial delta=1/2 for constant-time (Pieter Wuille)
    376ca36 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 be0609f
      sanket1729:
        crACK be0609f
      real-or-random:
        ACK be0609f careful code review and some testing
    
    Tree-SHA512: 2f8f400ba3ac8dbd08622d564c3b3e5ff30768bd0eb559f2c4279c6c813e17cdde71b1c16f05742c5657b5238b4d592b48306f9f47d7dbdb57907e58dd99b47a
    real-or-random committed Apr 22, 2021
    Configuration menu
    Copy the full SHA
    efad350 View commit details
    Browse the repository at this point in the history

Commits on Apr 29, 2021

  1. 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.
    jonasnick committed Apr 29, 2021
    Configuration menu
    Copy the full SHA
    0881633 View commit details
    Browse the repository at this point in the history

Commits on Apr 30, 2021

  1. Add mingw32-w64/wine CI build

    sipa committed Apr 30, 2021
    Configuration menu
    Copy the full SHA
    4dc37bf View commit details
    Browse the repository at this point in the history

Commits on May 1, 2021

  1. 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.
    gmaxwell committed May 1, 2021
    Configuration menu
    Copy the full SHA
    ae9e648 View commit details
    Browse the repository at this point in the history

Commits on May 2, 2021

  1. 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."
    real-or-random authored and sipa committed May 2, 2021
    Configuration menu
    Copy the full SHA
    ed5a199 View commit details
    Browse the repository at this point in the history
  2. Merge #928: Define SECP256K1_BUILD in secp256k1.c directly.

    ae9e648 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 ae9e648
      real-or-random:
        ACK ae9e648
    
    Tree-SHA512: 65ccc15c18f111ba926db1bb25f06c2beb2997c6f42c6d3ebc371ca84f4b5918379efd25c30556cedfd2e4275758bd79d733e80a11159c6ec013dd4707a683ad
    real-or-random committed May 2, 2021
    Configuration menu
    Copy the full SHA
    7012a18 View commit details
    Browse the repository at this point in the history
  3. Merge #922: Add mingw32-w64/wine CI build

    ed5a199 tests: fopen /dev/urandom in binary mode (Tim Ruffing)
    4dc37bf Add mingw32-w64/wine CI build (Pieter Wuille)
    
    Pull request description:
    
    ACKs for top commit:
      real-or-random:
        ACK ed5a199
      jonasnick:
        utACK ed5a199
    
    Tree-SHA512: 45afc394e3a200f7c020426a66f78df8d12827b9dc91bb04dc1708c3ad5cdc4e7d20554d6d5c046d288552f4e722d4fe8a0f3234b662e7351a4d27aaaeb0d5c0
    jonasnick committed May 2, 2021
    Configuration menu
    Copy the full SHA
    34388af View commit details
    Browse the repository at this point in the history
  4. Avoids a missing brace warning in schnorrsig/tests_impl.h on old comp…

    …ilers.
    
    GCC 4.9.2, at least, emits "warning: missing braces around initializer"
     without this.
    gmaxwell committed May 2, 2021
    Configuration menu
    Copy the full SHA
    99e2d5b View commit details
    Browse the repository at this point in the history

Commits on May 3, 2021

  1. Merge #933: Avoids a missing brace warning in schnorrsig/tests_impl.h…

    … on old compilers
    
    99e2d5b 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 99e2d5b
      jonasnick:
        utACK 99e2d5b
    
    Tree-SHA512: f3f9cfcd62830d7accca74dfce40abb091dec0990a66bad5d2a9599f2533121d8d1422499d511512bfb8d7c57da96e29e012dbc210e2e97ad55ad18de0869735
    jonasnick committed May 3, 2021
    Configuration menu
    Copy the full SHA
    98e0358 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    99f47c2 View commit details
    Browse the repository at this point in the history
  3. 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.
    real-or-random committed May 3, 2021
    Configuration menu
    Copy the full SHA
    2161f31 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    c848352 View commit details
    Browse the repository at this point in the history
  5. Add ARM32/ARM64 CI

    sipa committed May 3, 2021
    Configuration menu
    Copy the full SHA
    7d65ed5 View commit details
    Browse the repository at this point in the history
  6. Add asm build to ARM32 CI

    sipa committed May 3, 2021
    Configuration menu
    Copy the full SHA
    8bbad7a View commit details
    Browse the repository at this point in the history

Commits on May 4, 2021

  1. Merge bitcoin-core/secp256k1#936: Fix gen_context/ASM build on ARM

    c848352 Makefile.am: Don't pass a variable twice (Tim Ruffing)
    2161f31 Makefile.am: Honor config when building gen_context (Tim Ruffing)
    99f47c2 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 c848352   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 c848352. I verified that building still works on ARM64, but without asm of course.
    
    Tree-SHA512: fc5500688b2aecc4238e21c32f65559bcbfd1e83d1ae4d2c8e15573e94613667731064d8b5f2b9e4209016d88118263802ff4b9a73c1f37c224ccf2a4a1d6536
    sipa committed May 4, 2021
    Configuration menu
    Copy the full SHA
    d0bd269 View commit details
    Browse the repository at this point in the history
  2. 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.
    roconnor-blockstream committed May 4, 2021
    Configuration menu
    Copy the full SHA
    dd6c3de View commit details
    Browse the repository at this point in the history
  3. 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.
    roconnor-blockstream committed May 4, 2021
    Configuration menu
    Copy the full SHA
    31c0f6d View commit details
    Browse the repository at this point in the history
  4. 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.
    roconnor-blockstream committed May 4, 2021
    Configuration menu
    Copy the full SHA
    45b6468 View commit details
    Browse the repository at this point in the history

Commits on May 5, 2021

  1. change local lib headers to be relative for those pointing at "includ…

    …e/" dir
    
    added relative paths to header files imported from src directory
    
    added include guards for contrib/ files when referring to secp256k1.h
    whb07 committed May 5, 2021
    Configuration menu
    Copy the full SHA
    3c90bdd View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    4a19668 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    14c9739 View commit details
    Browse the repository at this point in the history
  4. Merge #925: changed include statements without prefix 'include/'

    3c90bdd 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 3c90bdd
      real-or-random:
        ACK 3c90bdd code looks good and even the tests compile fine now without `-I` args
    
    Tree-SHA512: 94d212718c6f4901f1c310aff504b7afedda91268143ffe1b45e9883cd517c0599e40ac798a51b54d66cd31646fe8cb1a489f1776612cfb5963654f4a1cee757
    real-or-random committed May 5, 2021
    Configuration menu
    Copy the full SHA
    185a6af View commit details
    Browse the repository at this point in the history

Commits on May 6, 2021

  1. Merge #937: Have ge_set_gej_var, gej_double_var and ge_set_all_gej_va…

    …r initialize all fields of their outputs.
    
    14c9739 tests: Improve secp256k1_ge_set_all_gej_var for some infinity inputs (Tim Ruffing)
    4a19668 tests: Test secp256k1_ge_set_all_gej_var for all infinity inputs (Tim Ruffing)
    45b6468 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)
    31c0f6d 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)
    dd6c3de 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 14c9739
      sipa:
        utACK 14c9739
      real-or-random:
        ACK 14c9739
    
    Tree-SHA512: 2e779b767f02e348af4bbc62aa9871c3d1d29e61a6c643c879c49f2de27556a3588850acd2f7c7483790677597d01064025e14befdbf29e783f57996fe4430f9
    real-or-random committed May 6, 2021
    Configuration menu
    Copy the full SHA
    6c52ae8 View commit details
    Browse the repository at this point in the history
  2. contrib: Explain explicit header guards

    They were added in #925 and deserve a comment.
    real-or-random committed May 6, 2021
    Configuration menu
    Copy the full SHA
    22a9ea1 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    0d9561a View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    6eceec6 View commit details
    Browse the repository at this point in the history

Commits on May 7, 2021

  1. Merge #926: secp256k1.h: clarify that by default arguments must be !=…

    … NULL
    
    0881633 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 0881633
      real-or-random:
        ACK 0881633
    
    Tree-SHA512: ecdc6954a1c21c333da5b03db51f50a0e53984aaef69cc697adaddc96b276da23e342037f476d21742632f6ec02bfa0574f837a5b5791f5985f4c355037176fa
    real-or-random committed May 7, 2021
    Configuration menu
    Copy the full SHA
    6939487 View commit details
    Browse the repository at this point in the history

Commits on May 12, 2021

  1. Merge bitcoin-core/secp256k1#940: contrib: Explain explicit header gu…

    …ards
    
    22a9ea1 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 22a9ea1
      sipa:
        ACK 22a9ea1
    
    Tree-SHA512: 832e28d71857d52912dae7e6c0e08a3183bb788996bb2470616c6fbbac6ba601cc74bb51a4c908aec7df9ae4f4cbf2cbb1b451cefde1b5a7359dc93299840278
    sipa committed May 12, 2021
    Configuration menu
    Copy the full SHA
    1e78c18 View commit details
    Browse the repository at this point in the history

Commits on May 13, 2021

  1. Merge #850: add secp256k1_ec_pubkey_cmp method

    6eceec6 add `secp256k1_xonly_pubkey_cmp` method (Andrew Poelstra)
    0d9561a add `secp256k1_ec_pubkey_cmp` method (Andrew Poelstra)
    
    Pull request description:
    
    ACKs for top commit:
      elichai:
        Code review ACK 6eceec6
      jonasnick:
        ACK 6eceec6
      real-or-random:
        ACK 6eceec6
    
    Tree-SHA512: f95cbf65f16c88a4adfa1ea7cc6ddabab14baa3b68fa069e78e6faad4852cdbfaea42ee72590d2e0b8f3159cf9b37969511550eb6b2d256b101e2147711cc817
    jonasnick committed May 13, 2021
    Configuration menu
    Copy the full SHA
    202a030 View commit details
    Browse the repository at this point in the history
  2. Merge #930: Add ARM32/ARM64 CI

    8bbad7a Add asm build to ARM32 CI (Pieter Wuille)
    7d65ed5 Add ARM32/ARM64 CI (Pieter Wuille)
    
    Pull request description:
    
    ACKs for top commit:
      real-or-random:
        ACK 8bbad7a CI output looks fine
      jonasnick:
        ACK 8bbad7a
    
    Tree-SHA512: 090a52af6914cf9fb659f9626a8224d82c8da81f6e628b7300e34851e198d8299dfd25789c0f1d6f2c79f58b5413be498f9fba43bc50238480fe6524b640538a
    jonasnick committed May 13, 2021
    Configuration menu
    Copy the full SHA
    bf0ac46 View commit details
    Browse the repository at this point in the history

Commits on May 14, 2021

  1. 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
    real-or-random committed May 14, 2021
    Configuration menu
    Copy the full SHA
    09b3bb8 View commit details
    Browse the repository at this point in the history
  2. Merge #941: Clean up git tree

    09b3bb8 Clean up git tree (Tim Ruffing)
    
    Pull request description:
    
    ACKs for top commit:
      jonasnick:
        ACK 09b3bb8
    
    Tree-SHA512: 70db146f4475e9618ecd68cf678d09a351e8da6c4fd4aa937c3f2fa30e3f6a9480ff24ac6301785fc2463bb5f8ff974091f8e9292ae7674ca9632b449a7034d5
    jonasnick committed May 14, 2021
    Configuration menu
    Copy the full SHA
    399722a View commit details
    Browse the repository at this point in the history

Commits on May 21, 2021

  1. Configuration menu
    Copy the full SHA
    de4157f View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    fcfcb97 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    489ff5c View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    02dcea1 View commit details
    Browse the repository at this point in the history
  5. Merge #846: ci: Run ASan/LSan and reorganize sanitizer and Valgrind jobs

    02dcea1 ci: Make test iterations configurable and tweak for sanitizer builds (Tim Ruffing)
    489ff5c tests: Treat empty SECP2561_TEST_ITERS as if it was unset (Tim Ruffing)
    fcfcb97 ci: Simplify to use generic wrapper for QEMU, Valgrind, etc (Tim Ruffing)
    de4157f ci: Run ASan/LSan and reorganize sanitizer and Valgrind jobs (Tim Ruffing)
    
    Pull request description:
    
    ACKs for top commit:
      sipa:
        utACK 02dcea1
      jonasnick:
        ACK 02dcea1 spot-checked ci output, checked that when `valgrind ./tests` crashes then `LOG_COMPILER=valgrind make check` also crashes.
    
    Tree-SHA512: 5f4a2fe186eca0b4ca29190eb18e20d0804934df614cdc8eb8cf0145ff36ded43194325572bb77eaaeba85c369f6effe69b7bdf7df97ba418d72cf36c9749a8c
    jonasnick committed May 21, 2021
    Configuration menu
    Copy the full SHA
    3dc8c07 View commit details
    Browse the repository at this point in the history

Commits on May 31, 2021

  1. ci: Run PRs on merge result even for i686

    This line should have been added in c7f754f.
    
    This mistake caused some i686 builds to fail when the PR was not
    rebased, see https://cirrus-ci.com/build/5156197872435200.
    real-or-random committed May 31, 2021
    Configuration menu
    Copy the full SHA
    a35fdd3 View commit details
    Browse the repository at this point in the history
  2. Merge #947: ci: Run PRs on merge result even for i686

    a35fdd3 ci: Run PRs on merge result even for i686 (Tim Ruffing)
    
    Pull request description:
    
    ACKs for top commit:
      jonasnick:
        ACK a35fdd3
    
    Tree-SHA512: 9b800b1136da2ecdaff7fcffaac92d91623c682abed1fa5c2a1fe4384f20d2ff1079786f7216c39f58f5dd025e4ed32237e7aff29f7658a74554f0c298e9148e
    jonasnick committed May 31, 2021
    Configuration menu
    Copy the full SHA
    50f3367 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    593e6ba View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    2fe1b50 View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    8f879c2 View commit details
    Browse the repository at this point in the history

Commits on Jun 6, 2021

  1. Merge #662: Add ecmult_gen, ecmult_const and ecmult to benchmark

    8f879c2 Fix array size in bench_ecmult (Jonas Nick)
    2fe1b50 Add ecmult_gen, ecmult_const and ecmult to benchmark (Jonas Nick)
    593e6ba 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 8f879c2
      elichai:
        tACK 8f879c2
    
    Tree-SHA512: 8a739f5de1e2c0467c8d1c3ceeaf453b396a470ea0e8e5bef15fe1b32f3f9633b6b1c7e2ce1d94d736cf3e9adecd8f4f983ad4ba37450cd5991767f1a95db85c
    real-or-random committed Jun 6, 2021
    Configuration menu
    Copy the full SHA
    7973576 View commit details
    Browse the repository at this point in the history

Commits on Jun 8, 2021

  1. ci: Add ppc64le build

    real-or-random committed Jun 8, 2021
    Configuration menu
    Copy the full SHA
    c58c4ea View commit details
    Browse the repository at this point in the history

Commits on Jun 9, 2021

  1. Merge #950: ci: Add ppc64le build

    c58c4ea ci: Add ppc64le build (Tim Ruffing)
    
    Pull request description:
    
    ACKs for top commit:
      sipa:
        ACK c58c4ea
      jonasnick:
        ACK c58c4ea
    
    Tree-SHA512: 8f58783d07b34241619051c8375749699b1bd447de56541b3aea3d2e9546c6eb22fbcae55ad57bff614b8c3455933d74031162d00e5eabe6d1d55d56b4aaca16
    jonasnick committed Jun 9, 2021
    Configuration menu
    Copy the full SHA
    1758a92 View commit details
    Browse the repository at this point in the history

Commits on Jun 14, 2021

  1. Configuration menu
    Copy the full SHA
    edcacc2 View commit details
    Browse the repository at this point in the history
  2. Revert "Remove unused Jacobi symbol support"

    This reverts commit 20448b8.
    
    The removed functions secp256k1_ge_set_xquad and secp256k1_fe_is_quad_var
    are required for some modules in secp256k1-zkp.
    jonasnick committed Jun 14, 2021
    Configuration menu
    Copy the full SHA
    d27e459 View commit details
    Browse the repository at this point in the history

Commits on Jul 13, 2021

  1. ecdsa_adaptor: fix test case with invalid signature

    Previously the ECDSA signature had an overflowing s value, which after the sync
    with upstream results in a failing VERIFY_CHECK in the inversion function.
    However, normally parsed signatures shouldn't contain overflowing s values.
    jonasnick committed Jul 13, 2021
    Configuration menu
    Copy the full SHA
    b053e85 View commit details
    Browse the repository at this point in the history
  2. ecdsa_adaptor: fix too small buffer in tests

    Also add a specific test that fails adaptor sig deserialization because with the
    correct size buffer that's not guaranteed anymore with the existing test.
    jonasnick committed Jul 13, 2021
    Configuration menu
    Copy the full SHA
    7226cf2 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    f09497e View commit details
    Browse the repository at this point in the history