Skip to content

Commit 3ca186d

Browse files
fanquakeClaude Code
authored andcommitted
Merge bitcoin#29803: Update libsecp256k1 subtree to latest master
53eec53 Squashed 'src/secp256k1/' changes from efe85c70a2..d8311688bd (fanquake) Pull request description: Updates the libsecp256k1 subtree to bitcoin-core/secp256k1@d831168. Part of bitcoin#29742. See that PR for more details, the particularly relevant changes are: * bitcoin-core/secp256k1#1496 * bitcoin-core/secp256k1#1512 ACKs for top commit: theuni: ACK 4654cc3 jonasnick: utACK 4654cc3 Tree-SHA512: 84e711e9245ced6cc679e082f597d096361d8824c6ff7de2d4d7f59adb3316464b3643ffa588a899345cb88532672a66968b6c66c51b1924adf4441f54427277
1 parent bd589dd commit 3ca186d

23 files changed

+352
-239
lines changed

src/secp256k1/CMakeLists.txt

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -51,29 +51,40 @@ endif()
5151

5252
option(SECP256K1_INSTALL "Enable installation." ${PROJECT_IS_TOP_LEVEL})
5353

54-
option(SECP256K1_ENABLE_MODULE_ECDH "Enable ECDH module." ON)
55-
if(SECP256K1_ENABLE_MODULE_ECDH)
56-
add_compile_definitions(ENABLE_MODULE_ECDH=1)
57-
endif()
54+
## Modules
5855

56+
# We declare all options before processing them, to make sure we can express
57+
# dependendencies while processing.
58+
option(SECP256K1_ENABLE_MODULE_ECDH "Enable ECDH module." ON)
5959
option(SECP256K1_ENABLE_MODULE_RECOVERY "Enable ECDSA pubkey recovery module." OFF)
60-
if(SECP256K1_ENABLE_MODULE_RECOVERY)
61-
add_compile_definitions(ENABLE_MODULE_RECOVERY=1)
62-
endif()
63-
6460
option(SECP256K1_ENABLE_MODULE_EXTRAKEYS "Enable extrakeys module." ON)
6561
option(SECP256K1_ENABLE_MODULE_SCHNORRSIG "Enable schnorrsig module." ON)
62+
option(SECP256K1_ENABLE_MODULE_ELLSWIFT "Enable ElligatorSwift module." ON)
63+
64+
# Processing must be done in a topological sorting of the dependency graph
65+
# (dependent module first).
66+
if(SECP256K1_ENABLE_MODULE_ELLSWIFT)
67+
add_compile_definitions(ENABLE_MODULE_ELLSWIFT=1)
68+
endif()
69+
6670
if(SECP256K1_ENABLE_MODULE_SCHNORRSIG)
71+
if(DEFINED SECP256K1_ENABLE_MODULE_EXTRAKEYS AND NOT SECP256K1_ENABLE_MODULE_EXTRAKEYS)
72+
message(FATAL_ERROR "Module dependency error: You have disabled the extrakeys module explicitly, but it is required by the schnorrsig module.")
73+
endif()
6774
set(SECP256K1_ENABLE_MODULE_EXTRAKEYS ON)
6875
add_compile_definitions(ENABLE_MODULE_SCHNORRSIG=1)
6976
endif()
77+
7078
if(SECP256K1_ENABLE_MODULE_EXTRAKEYS)
7179
add_compile_definitions(ENABLE_MODULE_EXTRAKEYS=1)
7280
endif()
7381

74-
option(SECP256K1_ENABLE_MODULE_ELLSWIFT "Enable ElligatorSwift module." ON)
75-
if(SECP256K1_ENABLE_MODULE_ELLSWIFT)
76-
add_compile_definitions(ENABLE_MODULE_ELLSWIFT=1)
82+
if(SECP256K1_ENABLE_MODULE_RECOVERY)
83+
add_compile_definitions(ENABLE_MODULE_RECOVERY=1)
84+
endif()
85+
86+
if(SECP256K1_ENABLE_MODULE_ECDH)
87+
add_compile_definitions(ENABLE_MODULE_ECDH=1)
7788
endif()
7889

7990
option(SECP256K1_USE_EXTERNAL_DEFAULT_CALLBACKS "Enable external default callback functions." OFF)
@@ -254,9 +265,14 @@ if(SECP256K1_BUILD_BENCHMARK OR SECP256K1_BUILD_TESTS OR SECP256K1_BUILD_EXHAUST
254265
enable_testing()
255266
endif()
256267

268+
set(SECP256K1_LATE_CFLAGS "" CACHE STRING "Compiler flags that are added to the command line after all other flags added by the build system.")
269+
include(AllTargetsCompileOptions)
270+
257271
add_subdirectory(src)
272+
all_targets_compile_options(src "${SECP256K1_LATE_CFLAGS}")
258273
if(SECP256K1_BUILD_EXAMPLES)
259274
add_subdirectory(examples)
275+
all_targets_compile_options(examples "${SECP256K1_LATE_CFLAGS}")
260276
endif()
261277

262278
message("\n")
@@ -330,6 +346,9 @@ else()
330346
message(" - LDFLAGS for executables ............ ${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
331347
message(" - LDFLAGS for shared libraries ....... ${CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
332348
endif()
349+
if(SECP256K1_LATE_CFLAGS)
350+
message("SECP256K1_LATE_CFLAGS ................. ${SECP256K1_LATE_CFLAGS}")
351+
endif()
333352
message("\n")
334353
if(SECP256K1_EXPERIMENTAL)
335354
message(

src/secp256k1/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,9 @@ To maintain a pristine source tree, CMake encourages to perform an out-of-source
8080

8181
$ mkdir build && cd build
8282
$ cmake ..
83-
$ make
84-
$ make check # run the test suite
85-
$ sudo make install # optional
83+
$ cmake --build .
84+
$ ctest # run the test suite
85+
$ sudo cmake --build . --target install # optional
8686

8787
To compile optional modules (such as Schnorr signatures), you need to run `cmake` with additional flags (such as `-DSECP256K1_ENABLE_MODULE_SCHNORRSIG=ON`). Run `cmake .. -LH` to see the full list of available flags.
8888

src/secp256k1/ci/cirrus.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ print_environment() {
1616
SECP256K1_TEST_ITERS BENCH SECP256K1_BENCH_ITERS CTIMETESTS\
1717
EXAMPLES \
1818
HOST WRAPPER_CMD \
19-
CC CFLAGS CPPFLAGS AR NM
19+
CC CFLAGS CPPFLAGS AR NM \
20+
UBSAN_OPTIONS ASAN_OPTIONS LSAN_OPTIONS
2021
do
2122
eval "isset=\${$var+x}"
2223
if [ -n "$isset" ]; then
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Add compile options to all targets added in the subdirectory.
2+
function(all_targets_compile_options dir options)
3+
get_directory_property(targets DIRECTORY ${dir} BUILDSYSTEM_TARGETS)
4+
separate_arguments(options)
5+
set(compiled_target_types STATIC_LIBRARY SHARED_LIBRARY OBJECT_LIBRARY EXECUTABLE)
6+
foreach(target ${targets})
7+
get_target_property(type ${target} TYPE)
8+
if(type IN_LIST compiled_target_types)
9+
target_compile_options(${target} PRIVATE ${options})
10+
endif()
11+
endforeach()
12+
endfunction()

src/secp256k1/configure.ac

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -393,8 +393,22 @@ SECP_CFLAGS="$SECP_CFLAGS $WERROR_CFLAGS"
393393
### Handle module options
394394
###
395395

396-
if test x"$enable_module_ecdh" = x"yes"; then
397-
SECP_CONFIG_DEFINES="$SECP_CONFIG_DEFINES -DENABLE_MODULE_ECDH=1"
396+
# Processing must be done in a reverse topological sorting of the dependency graph
397+
# (dependent module first).
398+
if test x"$enable_module_ellswift" = x"yes"; then
399+
SECP_CONFIG_DEFINES="$SECP_CONFIG_DEFINES -DENABLE_MODULE_ELLSWIFT=1"
400+
fi
401+
402+
if test x"$enable_module_schnorrsig" = x"yes"; then
403+
if test x"$enable_module_extrakeys" = x"no"; then
404+
AC_MSG_ERROR([Module dependency error: You have disabled the extrakeys module explicitly, but it is required by the schnorrsig module.])
405+
fi
406+
enable_module_extrakeys=yes
407+
SECP_CONFIG_DEFINES="$SECP_CONFIG_DEFINES -DENABLE_MODULE_SCHNORRSIG=1"
408+
fi
409+
410+
if test x"$enable_module_extrakeys" = x"yes"; then
411+
SECP_CONFIG_DEFINES="$SECP_CONFIG_DEFINES -DENABLE_MODULE_EXTRAKEYS=1"
398412
fi
399413

400414
if test x"$enable_module_recovery" = x"yes"; then
@@ -416,6 +430,10 @@ if test x"$enable_module_extrakeys" = x"yes"; then
416430
SECP_CONFIG_DEFINES="$SECP_CONFIG_DEFINES -DENABLE_MODULE_EXTRAKEYS=1"
417431
fi
418432

433+
if test x"$enable_module_ecdh" = x"yes"; then
434+
SECP_CONFIG_DEFINES="$SECP_CONFIG_DEFINES -DENABLE_MODULE_ECDH=1"
435+
fi
436+
419437
if test x"$enable_external_default_callbacks" = x"yes"; then
420438
SECP_CONFIG_DEFINES="$SECP_CONFIG_DEFINES -DUSE_EXTERNAL_DEFAULT_CALLBACKS=1"
421439
fi

src/secp256k1/contrib/lax_der_parsing.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ extern "C" {
6767
*
6868
* Returns: 1 when the signature could be parsed, 0 otherwise.
6969
* Args: ctx: a secp256k1 context object
70-
* Out: sig: a pointer to a signature object
71-
* In: input: a pointer to the signature to be parsed
70+
* Out: sig: pointer to a signature object
71+
* In: input: pointer to the signature to be parsed
7272
* inputlen: the length of the array pointed to be input
7373
*
7474
* This function will accept any valid DER encoded signature, even if the

src/secp256k1/doc/release-process.md

Lines changed: 37 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Release Process
1+
# Release process
22

33
This document outlines the process for releasing versions of the form `$MAJOR.$MINOR.$PATCH`.
44

@@ -14,75 +14,80 @@ This process also assumes that there will be no minor releases for old major rel
1414

1515
We aim to cut a regular release every 3-4 months, approximately twice as frequent as major Bitcoin Core releases. Every second release should be published one month before the feature freeze of the next major Bitcoin Core release, allowing sufficient time to update the library in Core.
1616

17-
## Sanity Checks
18-
Perform these checks before creating a release:
17+
## Sanity checks
18+
Perform these checks when reviewing the release PR (see below):
1919

2020
1. Ensure `make distcheck` doesn't fail.
21-
```shell
22-
./autogen.sh && ./configure --enable-dev-mode && make distcheck
23-
```
21+
```shell
22+
./autogen.sh && ./configure --enable-dev-mode && make distcheck
23+
```
2424
2. Check installation with autotools:
25-
```shell
26-
dir=$(mktemp -d)
27-
./autogen.sh && ./configure --prefix=$dir && make clean && make install && ls -l $dir/include $dir/lib
28-
gcc -o ecdsa examples/ecdsa.c $(PKG_CONFIG_PATH=$dir/lib/pkgconfig pkg-config --cflags --libs libsecp256k1) -Wl,-rpath,"$dir/lib" && ./ecdsa
29-
```
25+
```shell
26+
dir=$(mktemp -d)
27+
./autogen.sh && ./configure --prefix=$dir && make clean && make install && ls -RlAh $dir
28+
gcc -o ecdsa examples/ecdsa.c $(PKG_CONFIG_PATH=$dir/lib/pkgconfig pkg-config --cflags --libs libsecp256k1) -Wl,-rpath,"$dir/lib" && ./ecdsa
29+
```
3030
3. Check installation with CMake:
31-
```shell
32-
dir=$(mktemp -d)
33-
build=$(mktemp -d)
34-
cmake -B $build -DCMAKE_INSTALL_PREFIX=$dir && cmake --build $build --target install && ls -l $dir/include $dir/lib*
35-
gcc -o ecdsa examples/ecdsa.c -I $dir/include -L $dir/lib*/ -l secp256k1 -Wl,-rpath,"$dir/lib",-rpath,"$dir/lib64" && ./ecdsa
36-
```
31+
```shell
32+
dir=$(mktemp -d)
33+
build=$(mktemp -d)
34+
cmake -B $build -DCMAKE_INSTALL_PREFIX=$dir && cmake --build $build --target install && ls -RlAh $dir
35+
gcc -o ecdsa examples/ecdsa.c -I $dir/include -L $dir/lib*/ -l secp256k1 -Wl,-rpath,"$dir/lib",-rpath,"$dir/lib64" && ./ecdsa
36+
```
37+
4. Use the [`check-abi.sh`](/tools/check-abi.sh) tool to verify that there are no unexpected ABI incompatibilities and that the version number and the release notes accurately reflect all potential ABI changes. To run this tool, the `abi-dumper` and `abi-compliance-checker` packages are required.
38+
```shell
39+
tools/check-abi.sh
40+
```
3741

3842
## Regular release
3943

4044
1. Open a PR to the master branch with a commit (using message `"release: prepare for $MAJOR.$MINOR.$PATCH"`, for example) that
4145
* finalizes the release notes in [CHANGELOG.md](../CHANGELOG.md) by
4246
* adding a section for the release (make sure that the version number is a link to a diff between the previous and new version),
4347
* removing the `[Unreleased]` section header, and
44-
* including an entry for `### ABI Compatibility` if it doesn't exist that mentions the library soname of the release,
45-
* sets `_PKG_VERSION_IS_RELEASE` to `true` in `configure.ac`, and
46-
* if this is not a patch release
47-
* updates `_PKG_VERSION_*` and `_LIB_VERSION_*` in `configure.ac` and
48+
* including an entry for `### ABI Compatibility` if it doesn't exist,
49+
* sets `_PKG_VERSION_IS_RELEASE` to `true` in `configure.ac`, and,
50+
* if this is not a patch release,
51+
* updates `_PKG_VERSION_*` and `_LIB_VERSION_*` in `configure.ac`, and
4852
* updates `project(libsecp256k1 VERSION ...)` and `${PROJECT_NAME}_LIB_VERSION_*` in `CMakeLists.txt`.
49-
2. After the PR is merged, tag the commit and push it:
53+
2. Perform the [sanity checks](#sanity-checks) on the PR branch.
54+
3. After the PR is merged, tag the commit, and push the tag:
5055
```
5156
RELEASE_COMMIT=<merge commit of step 1>
5257
git tag -s v$MAJOR.$MINOR.$PATCH -m "libsecp256k1 $MAJOR.$MINOR.$PATCH" $RELEASE_COMMIT
5358
git push [email protected]:bitcoin-core/secp256k1.git v$MAJOR.$MINOR.$PATCH
5459
```
55-
3. Open a PR to the master branch with a commit (using message `"release cleanup: bump version after $MAJOR.$MINOR.$PATCH"`, for example) that
60+
4. Open a PR to the master branch with a commit (using message `"release cleanup: bump version after $MAJOR.$MINOR.$PATCH"`, for example) that
5661
* sets `_PKG_VERSION_IS_RELEASE` to `false` and increments `_PKG_VERSION_PATCH` and `_LIB_VERSION_REVISION` in `configure.ac`,
5762
* increments the `$PATCH` component of `project(libsecp256k1 VERSION ...)` and `${PROJECT_NAME}_LIB_VERSION_REVISION` in `CMakeLists.txt`, and
5863
* adds an `[Unreleased]` section header to the [CHANGELOG.md](../CHANGELOG.md).
5964

6065
If other maintainers are not present to approve the PR, it can be merged without ACKs.
61-
4. Create a new GitHub release with a link to the corresponding entry in [CHANGELOG.md](../CHANGELOG.md).
66+
5. Create a new GitHub release with a link to the corresponding entry in [CHANGELOG.md](../CHANGELOG.md).
67+
6. Send an announcement email to the bitcoin-dev mailing list.
6268

6369
## Maintenance release
6470

65-
Note that bugfixes only need to be backported to releases for which no compatible release without the bug exists.
71+
Note that bug fixes need to be backported only to releases for which no compatible release without the bug exists.
6672

6773
1. If there's no maintenance branch `$MAJOR.$MINOR`, create one:
6874
```
6975
git checkout -b $MAJOR.$MINOR v$MAJOR.$MINOR.$((PATCH - 1))
7076
git push [email protected]:bitcoin-core/secp256k1.git $MAJOR.$MINOR
7177
```
7278
2. Open a pull request to the `$MAJOR.$MINOR` branch that
73-
* includes the bugfixes,
79+
* includes the bug fixes,
7480
* finalizes the release notes similar to a regular release,
7581
* increments `_PKG_VERSION_PATCH` and `_LIB_VERSION_REVISION` in `configure.ac`
7682
and the `$PATCH` component of `project(libsecp256k1 VERSION ...)` and `${PROJECT_NAME}_LIB_VERSION_REVISION` in `CMakeLists.txt`
7783
(with commit message `"release: bump versions for $MAJOR.$MINOR.$PATCH"`, for example).
78-
3. After the PRs are merged, update the release branch and tag the commit:
84+
3. Perform the [sanity checks](#sanity-checks) on the PR branch.
85+
4. After the PRs are merged, update the release branch, tag the commit, and push the tag:
7986
```
8087
git checkout $MAJOR.$MINOR && git pull
8188
git tag -s v$MAJOR.$MINOR.$PATCH -m "libsecp256k1 $MAJOR.$MINOR.$PATCH"
82-
```
83-
4. Push tag:
84-
```
8589
git push [email protected]:bitcoin-core/secp256k1.git v$MAJOR.$MINOR.$PATCH
8690
```
87-
5. Create a new GitHub release with a link to the corresponding entry in [CHANGELOG.md](../CHANGELOG.md).
88-
6. Open PR to the master branch that includes a commit (with commit message `"release notes: add $MAJOR.$MINOR.$PATCH"`, for example) that adds release notes to [CHANGELOG.md](../CHANGELOG.md).
91+
6. Create a new GitHub release with a link to the corresponding entry in [CHANGELOG.md](../CHANGELOG.md).
92+
7. Send an announcement email to the bitcoin-dev mailing list.
93+
8. Open PR to the master branch that includes a commit (with commit message `"release notes: add $MAJOR.$MINOR.$PATCH"`, for example) that adds release notes to [CHANGELOG.md](../CHANGELOG.md).

0 commit comments

Comments
 (0)