muxator
commented at 12:24 pm on March 18, 2025:
none
v0.3.0 slightly modified the way modules are enabled in configure.ac.
We integrated v0.3.0 into frost on 2023-11-21, with b701c4abaf0e, but we forgot to make our FROST_SPECIFIC code in configure.ac conformant to the new convention.
We do it now.
This is not a breaking change: both old and new versions should still be correct.
frost: first release of the secp256k1-frost implementation by Bank of Italyc31b9c193c
doc: remove trailing newlines53237240df
frost: add copyright headers42ca3cf661
doc: add reference to the original authors and a link to the itcoin projectc52279b8bc
frost: reformat code baseb4c4479e23
frost: add secp256k1_frost_pubkey_save() and secp256k1_frost_pubkey_load()ddc7c41362
Merge secp256k1 44c2452fd387 (bitcoin v24.x) into secp256k1-frost
Secp256k1 version 44c2452fd387 is the one that got into bitcoin v24.0 and v24.1.
It got there via https://github.com/bitcoin/bitcoin/commit/913b1f2a5eb2ee5cd02113791764b23ded4c1c94
304c5a80f4
build: port to the current syntax the configure.ac snippet that enables frost
Between secp256k1 0559fc6e41b6 and 44c2452fd387 the code that enabled the
various submodules got slightly changed.
This commit ports those changes to the frost module, too.
aae5337ce4
frost: missing error check in deserialize_frost_signature() could lead to UB in secp256k1_frost_verify()
The upstream function secp256k1_ge_set_xo_var() in src/group_impl.h returns an
int signalling an error condition, but it is not marked with
SECP256K1_WARN_UNUSED_RESULT.
Thus, when compiling the Frost module, no warning was generated when
deserialize_frost_signature() had no check covering the case that
secp256k1_ge_set_xo_var() could fail.
The GCC static analyzer found two potential execution paths in
secp256k1_frost_verify() that would lead to undefined behaviour. For brevity,
the issues are not reported here, but only in the Github PR associated with
this commit (https://github.com/bancaditalia/secp256k1-frost/pull/5).
As of today (2023-05-29), in bitcoin-core secp256k1, secp256k1_ge_set_xo_var()
is still not marked SECP256K1_WARN_UNUSED_RESULT, see:
https://github.com/bitcoin-core/secp256k1/blob/908e02d596b66203788e8945b1f9c93ff28a4536/src/group_impl.h#L280
It may make sense to propose upstream to add that annotation.
In order to replicate the issues fixed by this commit, compile with:
./configure SECP_CFLAGS="-fanalyzer -fanalyzer-transitivity" --disable-tests --disable-exhaustive-tests --disable-benchmark --enable-experimental --enable-module-frost
18b40628c9
frost: remove potential memory leak in secp256k1_frost_aggregate()
The leak presented if compute_binding_factors() failed. In that case the error
reporting path would not deallocate the binding factor that were allocated just
above.
Found with gcc 13.1 via:
./configure SECP_CFLAGS="-fanalyzer -fanalyzer-transitivity" --disable-tests --disable-exhaustive-tests --disable-benchmark --enable-experimental --enable-module-frost
The analyzer found 3 leaks at main_impl.h:1403, all of them solved by this
change. The branch analysis of the first leak was:
```
In file included from src/secp256k1.c:767:
src/modules/frost/main_impl.h: In function 'secp256k1_frost_aggregate':
src/modules/frost/main_impl.h:1454:1: warning: leak of 'binding_factors.binding_factors' [CWE-401] [-Wanalyzer-malloc-leak]
1454 | }
| ^
'secp256k1_frost_aggregate': events 1-2
|
| 1365 | SECP256K1_API int secp256k1_frost_aggregate(const secp256k1_context *ctx,
| | ^~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (1) entry to 'secp256k1_frost_aggregate'
[...]
| 1394 | binding_factors.binding_factors = (secp256k1_scalar *)
| 1395 | checked_malloc(&default_error_callback, num_signers * sizeof(secp256k1_scalar));
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (10) calling 'checked_malloc' from 'secp256k1_frost_aggregate'
|
+--> 'checked_malloc': events 11-15
|
|src/util.h:118:31:
| 118 | static SECP256K1_INLINE void *checked_malloc(const secp256k1_callback* cb, size_t size) {
| | ^~~~~~~~~~~~~~
| | |
| | (11) entry to 'checked_malloc'
| 119 | void *ret = malloc(size);
| | ~~~~~~~~~~~~
| | |
| | (12) allocated here
[...]
'secp256k1_frost_aggregate': events 29-30
|
| 1403 | if (compute_binding_factors(&binding_factors, msg32, 32, num_signers, commitments) == 0) {
| | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (29) ...to here
|......
| 1454 | }
| | ~
| | |
| | (30) 'binding_factors.binding_factors' leaks here; was allocated at (12)
|
```
49749cd0c2
frost: move free_binding_factors() to the top
In the next commit, this will allow us to call it from inside
secp256k1_frost_sign().
No functional changes.
a98dd0caca
frost: use free_binding_factors() in secp256k1_frost_sign()
In this way we have a single way of clearing binding factors across the code
base. Before this change, secp256k1_frost_sign() was the only function that
rolled its own code.
eb3858dcf8
frost: rename "_identityPoint" -> "_invalidPoint" in tests
No functional changes.
b5b7935830
frost: gej_mul_scalar does not call ecmult with an infinity pointd2b0b7ba02
frost: initialize points as infinite instead of invalid5e1370f3fd
build: mention frost in the pkg-config description of the library. Link to Bank of Italy's github fork
A reference per the pkg-config sytax can be found in "man 5 pc", or online at
https://man.freebsd.org/cgi/man.cgi?query=pc&sektion=5&n=1
EXAMPLES
An example .pc file:
# This is a comment
prefix=/home/kaniini/pkg # this defines a variable
exec_prefix=${prefix} # defining another variable with a substitution
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: libfoo # human-readable name
Description: an example library called libfoo # human-readable description
Version: 1.0
URL: http://www.pkgconf.org
Requires: libbar > 2.0.0
Conflicts: libbaz <= 3.0.0
Libs: -L${libdir} -lfoo
Libs.private: -lm
Cflags: -I${includedir}/libfoo
e02b3f8235
build: replace links with those of Bank of Italy's fork79fb781b04
frost: add FROST usage example43cdbb722e
frost: use parentheses around argument of sizeof()
As per C89 standard (https://www.open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf,
section 6.5.3 "Unary operators") we are only required to parenthesize a sizeof()
call if the argument is a type name, which is not the case here.
However, it is less surprising to err on the side of caution, and uniformly
enclose in parentheses every sizeof() invocation across the code base.
No functional changes.
684142b0d9
frost: in compute_binding_factor(), free encoded_group_commitments as soon as no longer needed
Given that - at least for now - we are allocating memory dynamically, let's free
it as soon as it is no longer needed.
Valgrind shows no regressions.
2080f19a8a
frost: fix typos in comments944aeda771
frost: remove potential free on null pointer when using custom error_handler340769d427
frost: remove rho_input parameter from compute_binding_factor()
Remove rho_input as output variable of compute_binding_factor.
Currently, rho_input is not used outside compute_binding_factor, so we avoid
keeping unuseful data on the stack.
Note: the official test vectors of FROST by IETF include tests on rho_input.
Eventually, rho_input will be introduced again.
doc: wrap function names in backticks (``) in frost/README.md80591bb405
doc: remove ";" from lists in frost/README.md95a0fe3ec7
ci: run functional tests on frost module
Two test runs are performed:
1. Build with coverage enabled and no -Werror; run tests; generate summary of
code coverage
2. Build with coverage disabled and using -Werror; run tests
Enabling converage translates in compiling additional code; the different
build configurations aim at checking that code changes do not introduce
regressions.
In order to save time on dependency installation the tests are performed
sequentially in a single job.
9e77eafa45
ci: we have a frost example, let's build it96ccaa13e3
build: added _PKG_VERSION_FROST_BUILD. Now this release is 0.1.0-frost-1
This mimics what has been done in itcoin-core at
https://github.com/bancaditalia/itcoin-core/commit/a6d27e63c8ed22694df293163e51a8e3e8748a13
ca2d49086b
Update secp256k1 from bitcoin v23 to v24
Update official secp256k1 library taking bitcoin changes (from v23 to v24) and accordingly update the frost module integration. Pull request #3 introduced this merge commit.
1c6750fdf4
ci: rename the functional-tests.yml workflow
The previous name was a leftover from a previous version. Now a single workflow
performs both:
- tests with -Werror and no coverage
- tests with coverage and no -Werror
As of current secp version, enabling coverage spits out some warnings, and
prevents us to use -Werror everywhere.
c80109b1b8
doc: add badge with the status of the last CI run on frost branch1eeda9e6d6
ci: run Frost tests and example under Valgrind
This CI workflow builds the minimum code necessary to run the Frost test suite
and the Frost example, and runs them under Valgrind, exiting if it detects any
problems.
The example is run first because it takes way less time.
f312afe033
Merge v0.2.0 in FROST
Closes #19
da0b187889
Merge v0.3.0 in FROST
Closes #20
b701c4abaf
ci: add github workflow to also build with CMake
In v0.3.0, secp256k1 also added support for building via CMake. Let's add a CI
workflow to exercise it.
Co-authored-by: Antonio Muci <antonio.muci@bancaditalia.it>
f25094b4e2
ci: ensure that the version numbers contained in configure.ac and CMakeLists.txt are consistent to each other62315f2812
Merge v0.3.1 in FROST
Closes #21
e65d8d90e9
Merge commit '4258c54f4ebfc09390168e8a43306c46b315134b' in FROST
Closes #23
Closes #18
a22b83ab7a
frost: add error checking to secp256k1_fe_set_b32() in deserialize_frost_signature()a39bd42c54
Workflow verify-version-consistency was the last one written, and already used
checkout@v4.
Let's align all the remaining workflows to use the most recent action version.
No functional changes.
872a25c492
ci: update base image "fedora:38" -> "fedora:39"838792f9bd
ci: fix language "consistent to each other" -> "consistent with each other"3e1f881fed
ci: update the runner images: ubuntu 22.04 -> 24.04
This should be a very low risk change, since the only CI job that directly uses
the base image is .github/workflows/verify-version-consistency.yml, which only
depends on bash.
All the other workflows run in containers and should be unaffected; we will
update the base image in the next commit.
Installed software on the two platforms:
- https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2204-Readme.md
- https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2404-Readme.md
087c469959
ci: update base image "fedora:39" -> "fedora:41"df38044b04
build: add back configure.ac change that was left out when integrating v0.3.0 ()
v0.3.0 slightly modified the way modules are enabled. We integrated v0.3.0 into
frost on 2023-11-21, with b701c4abaf0e, but we forgot to update the new
convention our FROST_SPECIFIC code in configure.ac. We do it now.
This is not a breaking change: both old and new versions should still be correct.
307ebea107
muxator
commented at 12:25 pm on March 18, 2025:
none
This is a metadata mirror of the GitHub repository
bitcoin-core/secp256k1.
This site is not affiliated with GitHub.
Content is generated from a GitHub metadata backup.
generated: 2025-04-17 21:15 UTC
This site is hosted by @0xB10C More mirrored repositories can be found on mirror.b10c.me