Skip to content

Commit e1552d5

Browse files
committed
Squashed 'src/secp256k1/' changes from bdf3900..346a053
346a053 Merge bitcoin-core/secp256k1#1269: changelog: Fix link 6a37b2a changelog: Fix link ec98fce Merge bitcoin-core/secp256k1#1266: release: Prepare for 0.3.1 898e1c6 release: Prepare for 0.3.1 1d9a13f changelog: Remove inconsistent newlines 0e09166 changelog: Catch up in preparation of 0.3.1 7b7503d Merge bitcoin-core/secp256k1#1245: tests: Add Wycheproof ECDSA vectors 145078c Merge bitcoin-core/secp256k1#1118: Add x-only ecmult_const version with x specified as n/d e5de454 tests: Add Wycheproof ECDSA vectors 0f86420 Add exhaustive tests for ecmult_const_xonly 4485926 Add x-only ecmult_const version for x=n/d a0f4644 Merge bitcoin-core/secp256k1#1252: Make position of * in pointer declarations in include/ consistent 4e68262 Merge bitcoin-core/secp256k1#1226: Add CMake instructions to release process 2d51a45 Merge bitcoin-core/secp256k1#1257: ct: Use volatile "trick" in all fe/scalar cmov implementations 4a496a3 ct: Use volatile "trick" in all fe/scalar cmov implementations 3d1f430 Make position of * in pointer declarations in include/ consistent 2bca0a5 Merge bitcoin-core/secp256k1#1241: build: Improve `SECP_TRY_APPEND_DEFAULT_CFLAGS` macro afd8b23 Merge bitcoin-core/secp256k1#1244: Suppress `-Wunused-parameter` when building for coverage analysis 1d8f367 Merge bitcoin-core/secp256k1#1250: No need to subtract 1 before doing a right shift 3e43041 No need to subtract 1 before doing a right shift 3addb4c build: Improve `SECP_TRY_APPEND_DEFAULT_CFLAGS` macro 0c07c82 Add CMake instructions to release process 464a911 Merge bitcoin-core/secp256k1#1242: Set ARM ASM symbol visibility to `hidden` f16a709 Merge bitcoin-core/secp256k1#1247: Apply Checks only in VERIFY mode. 70be3ca Merge bitcoin-core/secp256k1#1246: Typo 4ebd828 Apply Checks only in VERIFY mode. d1e7ca1 Typo 5bb03c2 Replace `SECP256K1_ECMULT_TABLE_VERIFY` macro by a function 9c8c4f4 Merge bitcoin-core/secp256k1#1238: build: bump CMake minimum requirement to 3.13 0cf2fb9 Merge bitcoin-core/secp256k1#1243: build: Ensure no optimization when building for coverage analysis fd2a408 Set ARM ASM symbol visibility to `hidden` 4429a8c Suppress `-Wunused-parameter` when building for coverage analysis 8e79c7e build: Ensure no optimization when building for coverage analysis 96dd062 build: bump CMake minimum requirement to 3.13 427bc3c Merge bitcoin-core/secp256k1#1236: Update comment for secp256k1_modinv32_inv256 647f0a5 Update comment for secp256k1_modinv32_inv256 5658209 Merge bitcoin-core/secp256k1#1228: release cleanup: bump version after 0.3.0 28e63f7 release cleanup: bump version after 0.3.0 git-subtree-dir: src/secp256k1 git-subtree-split: 346a053
1 parent 763079a commit e1552d5

29 files changed

+8739
-130
lines changed

CHANGELOG.md

+15-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,20 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8-
## [Unreleased]
8+
## [0.3.1] - 2023-04-10
9+
We strongly recommend updating to 0.3.1 if you use or plan to use Clang >=14 to compile libsecp256k1, e.g., Xcode >=14 on macOS has Clang >=14. When in doubt, check the Clang version using `clang -v`.
10+
11+
#### Security
12+
- Fix "constant-timeness" issue with Clang >=14 that could leave applications using libsecp256k1 vulnerable to a timing side-channel attack. The fix avoids secret-dependent control flow and secret-dependent memory accesses in conditional moves of memory objects when libsecp256k1 is compiled with Clang >=14.
13+
14+
#### Added
15+
- Added tests against [Project Wycheproof's](https://github.com/google/wycheproof/) set of ECDSA test vectors (Bitcoin "low-S" variant), a fixed set of test cases designed to trigger various edge cases.
16+
17+
#### Changed
18+
- Increased minimum required CMake version to 3.13. CMake builds remain experimental.
19+
20+
#### ABI Compatibility
21+
The ABI is compatible with version 0.3.0.
922

1023
## [0.3.0] - 2023-03-08
1124

@@ -25,7 +38,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2538
- Removed the configuration header `src/libsecp256k1-config.h`. We recommend passing flags to `./configure` or `cmake` to set configuration options (see `./configure --help` or `cmake -LH`). If you cannot or do not want to use one of the supported build systems, pass configuration flags such as `-DSECP256K1_ENABLE_MODULE_SCHNORRSIG` manually to the compiler (see the file `configure.ac` for supported flags).
2639

2740
#### ABI Compatibility
28-
2941
Due to changes in the API regarding `secp256k1_context_static` described above, the ABI is *not* compatible with previous versions.
3042

3143
## [0.2.0] - 2022-12-12
@@ -45,7 +57,6 @@ Due to changes in the API regarding `secp256k1_context_static` described above,
4557
- Module `schnorrsig`: renamed `secp256k1_schnorrsig_sign` to `secp256k1_schnorrsig_sign32`.
4658

4759
#### ABI Compatibility
48-
4960
Since this is the first release, we do not compare application binary interfaces.
5061
However, there are earlier unreleased versions of libsecp256k1 that are *not* ABI compatible with this version.
5162

@@ -56,6 +67,7 @@ The number was given by the build system since the introduction of autotools in
5667
Therefore, this version number does not uniquely identify a set of source files.
5768

5869
[unreleased]: https://github.com/bitcoin-core/secp256k1/compare/v0.3.0...HEAD
70+
[0.3.1]: https://github.com/bitcoin-core/secp256k1/compare/v0.3.0...v0.3.1
5971
[0.3.0]: https://github.com/bitcoin-core/secp256k1/compare/v0.2.0...v0.3.0
6072
[0.2.0]: https://github.com/bitcoin-core/secp256k1/compare/423b6d19d373f1224fd671a982584d7e7900bc93..v0.2.0
6173
[0.1.0]: https://github.com/bitcoin-core/secp256k1/commit/423b6d19d373f1224fd671a982584d7e7900bc93

CMakeLists.txt

+4-9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.1)
1+
cmake_minimum_required(VERSION 3.13)
22

33
if(CMAKE_VERSION VERSION_GREATER 3.14)
44
# MSVC runtime library flags are selected by the CMAKE_MSVC_RUNTIME_LIBRARY abstraction.
@@ -10,15 +10,15 @@ endif()
1010
# The package (a.k.a. release) version is based on semantic versioning 2.0.0 of
1111
# the API. All changes in experimental modules are treated as
1212
# backwards-compatible and therefore at most increase the minor version.
13-
project(libsecp256k1 VERSION 0.3.0 LANGUAGES C)
13+
project(libsecp256k1 VERSION 0.3.1 LANGUAGES C)
1414

1515
# The library version is based on libtool versioning of the ABI. The set of
1616
# rules for updating the version can be found here:
1717
# https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
1818
# All changes in experimental modules are treated as if they don't affect the
1919
# interface and therefore only increase the revision.
2020
set(${PROJECT_NAME}_LIB_VERSION_CURRENT 2)
21-
set(${PROJECT_NAME}_LIB_VERSION_REVISION 0)
21+
set(${PROJECT_NAME}_LIB_VERSION_REVISION 1)
2222
set(${PROJECT_NAME}_LIB_VERSION_AGE 0)
2323

2424
set(CMAKE_C_STANDARD 90)
@@ -147,7 +147,7 @@ else()
147147
endif()
148148

149149
# Define custom "Coverage" build type.
150-
set(CMAKE_C_FLAGS_COVERAGE "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O0 -DCOVERAGE=1 --coverage -Wno-unused-parameter" CACHE STRING
150+
set(CMAKE_C_FLAGS_COVERAGE "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O0 -DCOVERAGE=1 --coverage" CACHE STRING
151151
"Flags used by the C compiler during \"Coverage\" builds."
152152
FORCE
153153
)
@@ -203,11 +203,6 @@ else()
203203
try_add_compile_option(-Wundef)
204204
endif()
205205

206-
if(CMAKE_VERSION VERSION_GREATER 3.2)
207-
# Honor visibility properties for all target types.
208-
# See: https://cmake.org/cmake/help/latest/policy/CMP0063.html
209-
cmake_policy(SET CMP0063 NEW)
210-
endif()
211206
set(CMAKE_C_VISIBILITY_PRESET hidden)
212207

213208
# Ask CTest to create a "check" target (e.g., make check) as alias for the "test" target.

Makefile.am

+17
Original file line numberDiff line numberDiff line change
@@ -247,3 +247,20 @@ endif
247247
if ENABLE_MODULE_SCHNORRSIG
248248
include src/modules/schnorrsig/Makefile.am.include
249249
endif
250+
251+
EXTRA_DIST += src/wycheproof/WYCHEPROOF_COPYING
252+
EXTRA_DIST += src/wycheproof/ecdsa_secp256k1_sha256_bitcoin_test.h
253+
EXTRA_DIST += src/wycheproof/ecdsa_secp256k1_sha256_bitcoin_test.json
254+
EXTRA_DIST += tools/tests_wycheproof_generate.py
255+
256+
TESTVECTORS = src/wycheproof/ecdsa_secp256k1_sha256_bitcoin_test.h
257+
258+
src/wycheproof/ecdsa_secp256k1_sha256_bitcoin_test.h: src/wycheproof/ecdsa_secp256k1_sha256_bitcoin_test.json
259+
python3 tools/tests_wycheproof_generate.py $< > $@
260+
261+
testvectors: $(TESTVECTORS)
262+
263+
maintainer-clean-testvectors: clean-testvectors
264+
265+
clean-testvectors:
266+
rm -f $(TESTVECTORS)

ci/cirrus.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ fi
109109
# Rebuild precomputed files (if not cross-compiling).
110110
if [ -z "$HOST" ]
111111
then
112-
make clean-precomp
113-
make precomp
112+
make clean-precomp clean-testvectors
113+
make precomp testvectors
114114
fi
115115

116116
# Check that no repo files have been modified by the build.

configure.ac

+20-6
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ AC_PREREQ([2.60])
55
# backwards-compatible and therefore at most increase the minor version.
66
define(_PKG_VERSION_MAJOR, 0)
77
define(_PKG_VERSION_MINOR, 3)
8-
define(_PKG_VERSION_PATCH, 0)
8+
define(_PKG_VERSION_PATCH, 1)
99
define(_PKG_VERSION_IS_RELEASE, true)
1010

1111
# The library version is based on libtool versioning of the ABI. The set of
@@ -14,7 +14,7 @@ define(_PKG_VERSION_IS_RELEASE, true)
1414
# All changes in experimental modules are treated as if they don't affect the
1515
# interface and therefore only increase the revision.
1616
define(_LIB_VERSION_CURRENT, 2)
17-
define(_LIB_VERSION_REVISION, 0)
17+
define(_LIB_VERSION_REVISION, 1)
1818
define(_LIB_VERSION_AGE, 0)
1919

2020
AC_INIT([libsecp256k1],m4_join([.], _PKG_VERSION_MAJOR, _PKG_VERSION_MINOR, _PKG_VERSION_PATCH)m4_if(_PKG_VERSION_IS_RELEASE, [true], [], [-dev]),[https://github.com/bitcoin-core/secp256k1/issues],[libsecp256k1],[https://github.com/bitcoin-core/secp256k1])
@@ -29,6 +29,11 @@ AM_INIT_AUTOMAKE([1.11.2 foreign subdir-objects])
2929
# Make the compilation flags quiet unless V=1 is used.
3030
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
3131

32+
if test "${CFLAGS+set}" = "set"; then
33+
CFLAGS_overridden=yes
34+
else
35+
CFLAGS_overridden=no
36+
fi
3237
AC_PROG_CC
3338
AM_PROG_AS
3439
AM_PROG_AR
@@ -88,11 +93,14 @@ esac
8893
AC_DEFUN([SECP_TRY_APPEND_DEFAULT_CFLAGS], [
8994
# GCC and compatible (incl. clang)
9095
if test "x$GCC" = "xyes"; then
91-
# Try to append -Werror=unknown-warning-option to CFLAGS temporarily. Otherwise clang will
92-
# not error out if it gets unknown warning flags and the checks here will always succeed
93-
# no matter if clang knows the flag or not.
96+
# Try to append -Werror to CFLAGS temporarily. Otherwise checks for some unsupported
97+
# flags will succeed.
98+
# Note that failure to append -Werror does not necessarily mean that -Werror is not
99+
# supported. The compiler may already be warning about something unrelated, for example
100+
# about some path issue. If that is the case, -Werror cannot be used because all
101+
# of those warnings would be turned into errors.
94102
SECP_TRY_APPEND_DEFAULT_CFLAGS_saved_CFLAGS="$CFLAGS"
95-
SECP_TRY_APPEND_CFLAGS([-Werror=unknown-warning-option], CFLAGS)
103+
SECP_TRY_APPEND_CFLAGS([-Werror], CFLAGS)
96104
97105
SECP_TRY_APPEND_CFLAGS([-std=c89 -pedantic -Wno-long-long -Wnested-externs -Wshadow -Wstrict-prototypes -Wundef], $1) # GCC >= 3.0, -Wlong-long is implied by -pedantic.
98106
SECP_TRY_APPEND_CFLAGS([-Wno-overlength-strings], $1) # GCC >= 4.2, -Woverlength-strings is implied by -pedantic.
@@ -241,6 +249,12 @@ fi
241249
if test x"$enable_coverage" = x"yes"; then
242250
SECP_CONFIG_DEFINES="$SECP_CONFIG_DEFINES -DCOVERAGE=1"
243251
SECP_CFLAGS="-O0 --coverage $SECP_CFLAGS"
252+
# If coverage is enabled, and the user has not overridden CFLAGS,
253+
# override Autoconf's value "-g -O2" with "-g". Otherwise we'd end up
254+
# with "-O0 --coverage -g -O2".
255+
if test "$CFLAGS_overridden" = "no"; then
256+
CFLAGS="-g"
257+
fi
244258
LDFLAGS="--coverage $LDFLAGS"
245259
else
246260
# Most likely the CFLAGS already contain -O2 because that is autoconf's default.

doc/release-process.md

+11-4
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,20 @@ This process also assumes that there will be no minor releases for old major rel
1515
## Regular release
1616

1717
1. Open a PR to the master branch with a commit (using message `"release: prepare for $MAJOR.$MINOR.$PATCH"`, for example) that
18-
* finalizes the release notes in [CHANGELOG.md](../CHANGELOG.md) (make sure to include an entry for `### ABI Compatibility`) and
19-
* updates `_PKG_VERSION_*`, `_LIB_VERSION_*`, and sets `_PKG_VERSION_IS_RELEASE` to `true` in `configure.ac`.
18+
* finalizes the release notes in [CHANGELOG.md](../CHANGELOG.md) (make sure to include an entry for `### ABI Compatibility`),
19+
* updates `_PKG_VERSION_*` and `_LIB_VERSION_*` and sets `_PKG_VERSION_IS_RELEASE` to `true` in `configure.ac`, and
20+
* updates `project(libsecp256k1 VERSION ...)` and `${PROJECT_NAME}_LIB_VERSION_*` in `CMakeLists.txt`.
2021
2. After the PR is merged, tag the commit and push it:
2122
```
2223
RELEASE_COMMIT=<merge commit of step 1>
2324
git tag -s v$MAJOR.$MINOR.$PATCH -m "libsecp256k1 $MAJOR.$MINOR.$PATCH" $RELEASE_COMMIT
2425
git push [email protected]:bitcoin-core/secp256k1.git v$MAJOR.$MINOR.$PATCH
2526
```
26-
3. Open a PR to the master branch with a commit (using message `"release cleanup: bump version after $MAJOR.$MINOR.$PATCH"`, for example) that sets `_PKG_VERSION_IS_RELEASE` to `false` and `_PKG_VERSION_PATCH` to `$PATCH + 1` and increases `_LIB_VERSION_REVISION`. If other maintainers are not present to approve the PR, it can be merged without ACKs.
27+
3. Open a PR to the master branch with a commit (using message `"release cleanup: bump version after $MAJOR.$MINOR.$PATCH"`, for example) that
28+
* sets `_PKG_VERSION_IS_RELEASE` to `false` and increments `_PKG_VERSION_PATCH` and `_LIB_VERSION_REVISION` in `configure.ac`, and
29+
* increments the `$PATCH` component of `project(libsecp256k1 VERSION ...)` and `${PROJECT_NAME}_LIB_VERSION_REVISION` in `CMakeLists.txt`.
30+
31+
If other maintainers are not present to approve the PR, it can be merged without ACKs.
2732
4. Create a new GitHub release with a link to the corresponding entry in [CHANGELOG.md](../CHANGELOG.md).
2833

2934
## Maintenance release
@@ -38,7 +43,9 @@ Note that bugfixes only need to be backported to releases for which no compatibl
3843
2. Open a pull request to the `$MAJOR.$MINOR` branch that
3944
* includes the bugfixes,
4045
* finalizes the release notes,
41-
* bumps `_PKG_VERSION_PATCH` and `_LIB_VERSION_REVISION` in `configure.ac` (with commit message `"release: update PKG_ and LIB_VERSION for $MAJOR.$MINOR.$PATCH"`, for example).
46+
* increments `_PKG_VERSION_PATCH` and `_LIB_VERSION_REVISION` in `configure.ac`
47+
and the `$PATCH` component of `project(libsecp256k1 VERSION ...)` and `${PROJECT_NAME}_LIB_VERSION_REVISION` in `CMakeLists.txt`
48+
(with commit message `"release: bump versions for $MAJOR.$MINOR.$PATCH"`, for example).
4249
3. After the PRs are merged, update the release branch and tag the commit:
4350
```
4451
git checkout $MAJOR.$MINOR && git pull

0 commit comments

Comments
 (0)