mllwchrry
3b2ceb3e7a
Merge commits '14e56970 1605b02f cd49c57e 453949ab 57315a69 97de5120 c5da3bde 99ab4a10 d071aa56 1d146ac3 322d0a43 c7a7f732 ac561601 dfe042fe 3019186a 95e68158 10f546a2 c0a2aba0 ' into temp-merge-1811
2026-03-03 14:45:28 +02:00
DarkWindman
913be29ea2
Merge commits 'b161bffb 0cdc758a ec329c25 8deef00b f79f46c7 00774d07 2e3bf136 c0d9480f ' into temp-merge-1654
2026-02-18 15:57:18 +02:00
mllwchrry
347d6adfd2
Merge commits 'a88aa935 01b58933 18f9b967 e59158b6 1fae76f5 f0868a9b 68b55209 9b7c59cb 1464f15c 9a8db52f 7d48f5ed a38d879a ' into temp-merge-1628
2026-02-16 16:04:51 +02:00
mllwchrry
8d443b8030
musig: Re-add adaptor signatures support
2026-02-13 15:07:52 +02:00
Hennadii Stepanov
8354618e02
cmake: Set LABELS property for tests
2026-01-20 16:53:29 +00:00
Hennadii Stepanov
29f26ec3cf
cmake: Integrate DiscoverTests and normalize test names
...
Updates the build system to use the new DiscoverTests module.
This also standardizes test names to use dot-separated parts for
consistency.
2026-01-20 16:53:17 +00:00
Sebastian Falbesoner
965393fcea
examples: use EXIT_... constants for main return values
...
Fixes issue #1609 .
2025-02-14 13:43:10 +01:00
Hennadii Stepanov
87384f5c0f
cmake, test: Add secp256k1_ prefix to test names
...
This change improves regex matching options when using `ctest` in
downstream projects.
2024-10-17 09:59:04 +01:00
merge-script
e59158b6eb
Merge bitcoin-core/secp256k1#1553 : cmake: Set top-level target output locations
...
c232486d84 Revert "cmake: Set `ENVIRONMENT` property for examples on Windows" (Hennadii Stepanov)
26e4a7c214 cmake: Set top-level target output locations (Hennadii Stepanov)
Pull request description:
While testing https://github.com/bitcoin-core/secp256k1/pull/1551 , I noticed that when cross-compiling a shared library with examples for Windows, the `ctest` fails to run examples with Wine. Adjusting the `PATH` variable in https://github.com/bitcoin-core/secp256k1/blob/4af241b32099067464e015fa66daac5096206dea/examples/CMakeLists.txt#L16-L18 does not help because `WINEPATH` is expected.
Another issue with the current implementation is that the examples cannot run individually on Windows.
This PR resolves both issues by reverting the implementation from https://github.com/bitcoin-core/secp256k1/pull/1290 in favour of the reworked and improved implementation from https://github.com/bitcoin-core/secp256k1/pull/1233 .
ACKs for top commit:
theuni:
Concept ACK and utACK c232486d84 .
real-or-random:
utACK c232486d84
Tree-SHA512: 479b71d15d5d5670f6f69da3da599240c345711003383ca805c821b67065c9baaf269f987792cf1029211cdbfe799aecd401e6940a471539e3929b4a90e0781d
2024-10-15 13:37:21 +02:00
Jonas Nick
5bab8f6d3c
examples: make key generation doc consistent
2024-10-14 13:24:34 +00:00
Jonas Nick
e8908221a4
examples: do not retry generating seckey randomness in musig
2024-10-14 13:24:34 +00:00
Jonas Nick
01b5893389
Merge bitcoin-core/secp256k1#1599: #1570 improve examples: remove key generation loop
...
cd4f84f3ba Improve examples/documentation: remove key generation loops (cheapshot003)
Pull request description:
ACKs for top commit:
real-or-random:
utACK cd4f84f3ba
jonasnick:
ACK cd4f84f3ba
Tree-SHA512: 242ab99c36302b539fc95421142c3eec5ccfa2cf918989457886338febde45a33b1794e0f08e7a632747bc21cbf5c47b7361fd9a28b9a1c6dff7caecf7b31a9f
2024-10-13 07:25:09 +00:00
cheapshot003
cd4f84f3ba
Improve examples/documentation: remove key generation loops
...
Co-Authored by: Sebastian Falbesoner <sebastian.falbesoner@gmail.com >
2024-10-09 16:24:38 +03:00
Jonas Nick
168c92011f
build: allow enabling the musig module in cmake
2024-10-07 14:03:42 +00:00
Jonas Nick
f411841a46
Add module "musig" that implements MuSig2 multi-signatures (BIP 327)
2024-10-07 14:03:42 +00:00
Hennadii Stepanov
c232486d84
Revert "cmake: Set ENVIRONMENT property for examples on Windows"
...
This reverts commit 116d2ab3df .
2024-09-18 18:13:44 +01:00
MarcoFalke
fa67b6752d
refactor: Use array initialization for unterminated strings
...
The previous code is correct and harmless to initialize an array with a
non-terminated character sequence using a string literal.
However, it requires exactly specifying the array size, which can be
cumbersome.
Also, GCC-15 may issue the -Wunterminated-string-initialization warning.
[1]
Fix both issues by using array initialization. This refactoring commit
does not change behavior.
[1] Example warning:
src/modules/schnorrsig/main_impl.h:48:46: error: initializer-string for array of 'unsigned char' is too long [-Werror=unterminated-string-initialization]
48 | static const unsigned char bip340_algo[13] = "BIP0340/nonce";
| ^~~~~~~~~~~~~~~
2024-08-15 17:58:14 +02:00
Sebastian Falbesoner
31f84595c4
Add ellswift usage example
...
This should hopefully be useful as orientation for users implementing
the key exchange part of BIP324. Conceptually the example is not very
different to the ECDH one, so a lot of code/comments are just copied
(e.g. context creation, secret key generation, shared secret comparison,
console output, cleanup with secret key clearing).
2024-06-25 17:11:20 +02:00
Sebastian Falbesoner
fe4fbaa7f3
examples: fix case typos in secret clearing paragraphs (s/, Or/, or/)
2024-06-25 17:11:07 +02:00
Hennadii Stepanov
116d2ab3df
cmake: Set ENVIRONMENT property for examples on Windows
...
This change simplifies running examples on Windows, because the DLL
must reside either in the same folder where the executable is or
somewhere in PATH.
2023-07-14 08:42:48 +01:00
Hennadii Stepanov
cef373997c
cmake, refactor: Use helper function instead of interface library
...
This change aims to simplify the following commit.
2023-07-14 08:41:26 +01:00
Tim Ruffing
9e6d1b0e9b
Merge bitcoin-core/secp256k1#1367 : build: Improvements to symbol visibility logic on Windows (attempt 3)
...
c6cd2b15a0 ci: Add task for static library on Windows + CMake (Hennadii Stepanov)
020bf69a44 build: Add extensive docs on visibility issues (Tim Ruffing)
0196e8ade1 build: Introduce `SECP256k1_DLL_EXPORT` macro (Hennadii Stepanov)
9f1b1904a3 refactor: Replace `SECP256K1_API_VAR` with `SECP256K1_API` (Hennadii Stepanov)
ae9db95cea build: Introduce `SECP256K1_STATIC` macro for Windows users (Hennadii Stepanov)
Pull request description:
Previous attempts:
- https://github.com/bitcoin-core/secp256k1/pull/1346
- https://github.com/bitcoin-core/secp256k1/pull/1362
The result is as follows:
1. Simple, concise and extensively documented code.
2. Explicitly documented use cases with no ambiguities.
3. No workarounds for linker warnings.
4. Solves one item in https://github.com/bitcoin-core/secp256k1/issues/1235 .
ACKs for top commit:
real-or-random:
utACK c6cd2b15a0
Tree-SHA512: d58694452d630aefbd047916033249891bc726b7475433aaaa7c3ea2a07ded8f185a598385b67c2ee3440ec5904ff9d9452c97b0961d84dcb2eb2cf46caa171e
2023-07-03 18:53:38 +02:00
Alejandro
b6b9834e8d
small fixes
...
restoring wycheproof files
restoring wycheproof files2
2023-07-03 17:05:55 +02:00
Hennadii Stepanov
ae9db95cea
build: Introduce SECP256K1_STATIC macro for Windows users
...
It is a non-Libtool-specific way to explicitly specify the user's
intention to consume a static `libseck256k1`.
This change allows to get rid of MSVC linker warnings LNK4217 and
LNK4286. Also, it makes possible to merge the `SECP256K1_API` and
`SECP256K1_API_VAR` into one.
2023-07-03 13:57:11 +01:00
Hennadii Stepanov
755629bc03
cmake: Use full signature of add_test() command
...
An executable target in the `COMMAND` option will automatically be
replaced by the location of the executable created at build time.
This change fixes tests for Windows binaries using Wine.
2023-04-29 09:49:25 +01:00
Tim Ruffing
6b7e5b717d
Merge bitcoin-core/secp256k1#1275 : build: Fix C4005 "macro redefinition" MSVC warnings in examples
...
dc0657c762 build: Fix C4005 "macro redefinition" MSVC warnings in examples (Hennadii Stepanov)
Pull request description:
This PR:
- fixes C4005 "macro redefinition" MSVC warnings in examples
- removes warning suppressions in both build systems, Autotools-based and CMake-based ones
ACKs for top commit:
real-or-random:
utACK dc0657c762
Tree-SHA512: fe3bb8f06b3ff1d51e5e20754a289e0e6b99ddf4c0bd4e6e4786e2558e71e043ab23ff7782a83a902df5db28d18ae65312674c373fdc49f5af252763a22bd0fb
2023-04-26 16:44:51 +01:00
Tim Ruffing
a6f4bcf6e1
Merge bitcoin-core/secp256k1#1231 : Move SECP256K1_INLINE macro definition out from include/secp256k1.h
...
8e142ca410 Move `SECP256K1_INLINE` macro definition out from `include/secp256k1.h` (Hennadii Stepanov)
77445898a5 Remove `SECP256K1_INLINE` usage from examples (Hennadii Stepanov)
Pull request description:
From [IRC](https://gnusha.org/secp256k1/2023-01-31.log ):
> 06:29 \< hebasto\> What are reasons to define the `SECP256K1_INLINE` macro in user's `include/secp256k1.h` header, while it is used internally only?
> 06:32 \< hebasto\> I mean, any other (or a new dedicated) header in `src` looks more appropriate, no?
> 06:35 \< sipa\> I think it may just predate any "utility" internal headers.
> 06:42 \< sipa\> I think it makes sense to move it to util.h
Pros:
- it is a step in direction to better organized headers (in context of #924 , #1039 )
Cons:
- code duplication for `SECP256K1_GNUC_PREREQ` macro
ACKs for top commit:
sipa:
utACK 8e142ca410
real-or-random:
utACK https://github.com/bitcoin-core/secp256k1/pull/1231/commits/8e142ca4102ade1b90dcb06d6c78405ef3220599
Tree-SHA512: 180e0ba7c2ef242b765f20698b67d06c492b7b70866c21db27c18d8b2e85c3e11f86c6cb99ffa88bbd23891ce3ee8a24bc528f2c91167ec2fddc167463f78eac
2023-04-20 18:18:11 +02:00
Cory Fields
ef49a11d29
build: allow static or shared but not both
2023-04-17 16:25:27 +00:00
Hennadii Stepanov
dc0657c762
build: Fix C4005 "macro redefinition" MSVC warnings in examples
2023-04-13 12:23:30 +01:00
Hennadii Stepanov
77445898a5
Remove SECP256K1_INLINE usage from examples
2023-03-09 13:05:14 +00:00
Hennadii Stepanov
8be82d4362
cmake: Rename project to "libsecp256k1"
2023-03-08 21:22:24 +00:00
Pieter Wuille
df323b5c14
Merge bitcoin-core/secp256k1#1113 : build: Add CMake-based build system
...
e1eb33724c ci: Add "x86_64: Windows (VS 2022)" task (Hennadii Stepanov)
10602b0030 cmake: Export config files (Hennadii Stepanov)
5468d70964 build: Add CMake-based build system (Hennadii Stepanov)
Pull request description:
This PR adds a [CMake](https://cmake.org/ )-based build system.
Added build instructions and examples to the [`README.md`](https://github.com/hebasto/secp256k1/blob/220628-cmake/README.md#building-with-cmake-experimental ) file.
Ways to integrate with downstream CMake-based projects:
- if `secp256k1` is a subtree (including Bitcoin Core project) -- `add_subdirectory(secp256k1)`
- if `secp256k1` has been installed -- `find_package(secp256k1 0.2.1 CONFIG)`, see https://github.com/hebasto/secp256k1-CMake-example
Added a few toolchain files for easy cross compiling.
Discussions on IRC:
- https://gnusha.org/secp256k1/2022-06-23.log
- https://gnusha.org/secp256k1/2022-06-24.log
- https://gnusha.org/secp256k1/2022-06-27.log
- https://gnusha.org/secp256k1/2023-01-30.log
---
Related PRs:
- #315
- #549
- #761
---
**Implementation notes**
Minimum required CMake version is 3.1. This was required to provide [`C_STANDARD`](https://cmake.org/cmake/help/latest/prop_tgt/C_STANDARD.html ) property.
In turn, this choice of CMake version implies it is not possible to build with default CMake on Debian 8, which has CMake v3.0.2 only.
Also see:
- [CMake Versions on Linux Distros](https://gitlab.kitware.com/cmake/community/-/wikis/CMake-Versions-on-Linux-Distros )
- https://repology.org/project/cmake/versions
---
# Autotools -- CMake Feature Parity Tables
## 1. Configuration options
Autotool-based build system features being listed according to the `./configure --help` output.
| Autotools | CMake |
|---|---|
| `--prefix` | `-DCMAKE_INSTALL_PREFIX`
| `--enable-shared` | `-DSECP256K1_BUILD_SHARED` |
| `--enable-static` | `-DSECP256K1_BUILD_STATIC` |
| `--enable-dev-mode` _hidden_ | N/A, see https://github.com/bitcoin-core/secp256k1/pull/1113#discussion_r916979117 |
| `--enable-benchmark` | `-DSECP256K1_BUILD_BENCHMARK` |
| `--enable-coverage` | `-DCMAKE_BUILD_TYPE=Coverage` |
| `--enable-tests` | `-DSECP256K1_BUILD_TESTS` |
| `--enable-ctime-tests` | `-DSECP256K1_BUILD_CTIME_TESTS` |
| `--enable-experimental` | `-DSECP256K1_EXPERIMENTAL` |
| `--enable-exhaustive-tests` | `-DSECP256K1_BUILD_EXHAUSTIVE_TESTS` |
| `--enable-examples` | `-DSECP256K1_BUILD_EXAMPLES` |
| `--enable-module-ecdh` | `-DSECP256K1_ENABLE_MODULE_ECDH` |
| `--enable-module-recovery` | `-DSECP256K1_ENABLE_MODULE_RECOVERY` |
| `--enable-module-extrakeys` | `-DSECP256K1_ENABLE_MODULE_EXTRAKEYS` |
| `--enable-module-schnorrsig` | `-DSECP256K1_ENABLE_MODULE_SCHNORRSIG` |
| `--enable-external-default-callbacks` | `-DSECP256K1_USE_EXTERNAL_DEFAULT_CALLBACKS` |
| `--with-test-override-wide-multiply` _hidden_ | `-DSECP256K1_TEST_OVERRIDE_WIDE_MULTIPLY` |
| `--with-asm` | `-DSECP256K1_ASM` |
| `--with-ecmult-window` | `-DSECP256K1_ECMULT_WINDOW_SIZE` |
| `--with-ecmult-gen-precision` | `-DSECP256K1_ECMULT_GEN_PREC_BITS` |
| `--with-valgrind` | `-DSECP256K1_VALGRING` |
A screenshot of grouped options from `cmake-gui`:

## 2. `make` targets
| Autotools | CMake |
|---|---|
| `make` | `make` |
| `make check` | `make check` |
| `make install` | `make install` * |
* Installation of `lib/pkgconfig/libsecp256k1.pc` not implemented.
ACKs for top commit:
theuni:
ACK e1eb33724c .
sipa:
ACK e1eb33724c
real-or-random:
ACK e1eb33724c
Tree-SHA512: ebe2772eeb1a430a0a7ae767fb1a9a82d52d5e9bf2306956cd08f7b442c862be2539774dd10d5555817353d37d1c6add78b8fe5a85bb71239304fb42c98ff337
2023-03-08 10:33:09 -05:00
Hennadii Stepanov and Tim Ruffing
5468d70964
build: Add CMake-based build system
...
Co-authored-by: Tim Ruffing <crypto@timruffing.de >
2023-03-08 13:33:16 +00:00
Tim Ruffing
5757318782
Merge bitcoin-core/secp256k1#1212 : Prevent dead-store elimination when clearing secrets in examples
...
5660c13755 prevent optimization in algorithms (Harshil Jani)
Pull request description:
Signed-off-by: Harshil Jani <harshiljani2002@gmail.com >
ACKs for top commit:
sipa:
utACK 5660c13755
real-or-random:
utACK 5660c13755
Tree-SHA512: 90024b7445c04e18a88af4099fc1ac6d1b9b2309b88dd22ae2b1f50aed7bac28b2c180cc28e1a95d5e9ec94b4c4adc44b9ada1477e6abe8efae7884c2382645c
2023-03-02 23:30:20 +01:00
Harshil Jani
5660c13755
prevent optimization in algorithms
...
Signed-off-by: Harshil Jani <harshiljani2002@gmail.com >
Add secure_erase function to clear secrets
Signed-off-by: Harshil Jani <harshiljani2002@gmail.com >
Update the function with good practices
Signed-off-by: Harshil Jani <harshiljani2002@gmail.com >
Renaming random.h to examples_util.h
Signed-off-by: Harshil Jani <harshiljani2002@gmail.com >
2023-03-02 15:36:41 +05:30
Tim Ruffing
739c53b19a
examples: Extend sig examples by call that uses static context
...
Besides improving the examples, this makes sure that the examples
import a variable (instead of a function), namely the static context,
from the library. This is helpful when testing MSVC builds, because
the MSVC linker tends to be awkward when importing variables.
2023-02-06 21:44:56 +01:00
Tim Ruffing
4386a2306c
examples: Switch to NONE contexts
2022-12-05 11:26:44 +01:00
Tim Ruffing
f813bb0df3
schnorrsig: Adapt example to new API
2022-03-17 22:41:36 +01:00
Tim Ruffing
99e6568fc6
schnorrsig: Rename schnorrsig_sign to schnorsig_sign32 and deprecate
2022-03-17 22:41:36 +01:00
Elichai Turkel
7c9502cece
Add a copy of the CC0 license to the examples
2022-02-23 16:15:00 +02:00
Elichai Turkel and Jonas Nick
422a7cc86a
Add a ecdh shared secret example
...
Co-authored-by: Jonas Nick <jonasd.nick@gmail.com >
2022-02-23 16:14:57 +02:00
Elichai Turkel and Jonas Nick
b0cfbcc143
Add a Schnorr signing and verifying example
...
Co-authored-by: Jonas Nick <jonasd.nick@gmail.com >
2022-02-23 16:14:55 +02:00
Elichai Turkel and Jonas Nick
fee7d4bf9e
Add an ECDSA signing and verifying example
...
Co-authored-by: Jonas Nick <jonasd.nick@gmail.com >
2022-02-23 16:14:53 +02:00