|
| 1 | +**This changelog is not the libsecp256k1-zkp's changelog.** |
| 2 | +Instead, it is the changelog of the upstream library [libsecp256k1](https://github.com/bitcoin-core/secp256k1). |
| 3 | + |
| 4 | +# Changelog |
| 5 | + |
| 6 | +All notable changes to this project will be documented in this file. |
| 7 | + |
| 8 | +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), |
| 9 | +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
| 10 | + |
| 11 | +## [Unreleased] |
| 12 | + |
| 13 | +#### Added |
| 14 | + - New module `ellswift` implements ElligatorSwift encoding for public keys and x-only Diffie-Hellman key exchange for them. |
| 15 | + ElligatorSwift permits representing secp256k1 public keys as 64-byte arrays which cannot be distinguished from uniformly random. See: |
| 16 | + - Header file `include/secp256k1_ellswift.h` which defines the new API. |
| 17 | + - Document `doc/ellswift.md` which explains the mathematical background of the scheme. |
| 18 | + - The [paper](https://eprint.iacr.org/2022/759) on which the scheme is based. |
| 19 | + |
| 20 | +#### Changed |
| 21 | + - When consuming libsecp256k1 as a static library on Windows, the user must now define the `SECP256K1_STATIC` macro before including `secp256k1.h`. |
| 22 | + |
| 23 | +## [0.3.2] - 2023-05-13 |
| 24 | +We strongly recommend updating to 0.3.2 if you use or plan to use GCC >=13 to compile libsecp256k1. When in doubt, check the GCC version using `gcc -v`. |
| 25 | + |
| 26 | +#### Security |
| 27 | + - Module `ecdh`: Fix "constant-timeness" issue with GCC 13.1 (and potentially future versions of GCC) that could leave applications using libsecp256k1's ECDH module vulnerable to a timing side-channel attack. The fix avoids secret-dependent control flow during ECDH computations when libsecp256k1 is compiled with GCC 13.1. |
| 28 | + |
| 29 | +#### Fixed |
| 30 | + - Fixed an old bug that permitted compilers to potentially output bad assembly code on x86_64. In theory, it could lead to a crash or a read of unrelated memory, but this has never been observed on any compilers so far. |
| 31 | + |
| 32 | +#### Changed |
| 33 | + - Various improvements and changes to CMake builds. CMake builds remain experimental. |
| 34 | + - Made API versioning consistent with GNU Autotools builds. |
| 35 | + - Switched to `BUILD_SHARED_LIBS` variable for controlling whether to build a static or a shared library. |
| 36 | + - Added `SECP256K1_INSTALL` variable for the controlling whether to install the build artefacts. |
| 37 | + - Renamed asm build option `arm` to `arm32`. Use `--with-asm=arm32` instead of `--with-asm=arm` (GNU Autotools), and `-DSECP256K1_ASM=arm32` instead of `-DSECP256K1_ASM=arm` (CMake). |
| 38 | + |
| 39 | +#### ABI Compatibility |
| 40 | +The ABI is compatible with versions 0.3.0 and 0.3.1. |
| 41 | + |
| 42 | +## [0.3.1] - 2023-04-10 |
| 43 | +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`. |
| 44 | + |
| 45 | +#### Security |
| 46 | + - 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. |
| 47 | + |
| 48 | +#### Added |
| 49 | + - 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. |
| 50 | + |
| 51 | +#### Changed |
| 52 | + - Increased minimum required CMake version to 3.13. CMake builds remain experimental. |
| 53 | + |
| 54 | +#### ABI Compatibility |
| 55 | +The ABI is compatible with version 0.3.0. |
| 56 | + |
| 57 | +## [0.3.0] - 2023-03-08 |
| 58 | + |
| 59 | +#### Added |
| 60 | + - Added experimental support for CMake builds. Traditional GNU Autotools builds (`./configure` and `make`) remain fully supported. |
| 61 | + - Usage examples: Added a recommended method for securely clearing sensitive data, e.g., secret keys, from memory. |
| 62 | + - Tests: Added a new test binary `noverify_tests`. This binary runs the tests without some additional checks present in the ordinary `tests` binary and is thereby closer to production binaries. The `noverify_tests` binary is automatically run as part of the `make check` target. |
| 63 | + |
| 64 | +#### Fixed |
| 65 | + - Fixed declarations of API variables for MSVC (`__declspec(dllimport)`). This fixes MSVC builds of programs which link against a libsecp256k1 DLL dynamically and use API variables (and not only API functions). Unfortunately, the MSVC linker now will emit warning `LNK4217` when trying to link against libsecp256k1 statically. Pass `/ignore:4217` to the linker to suppress this warning. |
| 66 | + |
| 67 | +#### Changed |
| 68 | + - Forbade cloning or destroying `secp256k1_context_static`. Create a new context instead of cloning the static context. (If this change breaks your code, your code is probably wrong.) |
| 69 | + - Forbade randomizing (copies of) `secp256k1_context_static`. Randomizing a copy of `secp256k1_context_static` did not have any effect and did not provide defense-in-depth protection against side-channel attacks. Create a new context if you want to benefit from randomization. |
| 70 | + |
| 71 | +#### Removed |
| 72 | + - 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). |
| 73 | + |
| 74 | +#### ABI Compatibility |
| 75 | +Due to changes in the API regarding `secp256k1_context_static` described above, the ABI is *not* compatible with previous versions. |
| 76 | + |
| 77 | +## [0.2.0] - 2022-12-12 |
| 78 | + |
| 79 | +#### Added |
| 80 | + - Added usage examples for common use cases in a new `examples/` directory. |
| 81 | + - Added `secp256k1_selftest`, to be used in conjunction with `secp256k1_context_static`. |
| 82 | + - Added support for 128-bit wide multiplication on MSVC for x86_64 and arm64, giving roughly a 20% speedup on those platforms. |
| 83 | + |
| 84 | +#### Changed |
| 85 | + - Enabled modules `schnorrsig`, `extrakeys` and `ecdh` by default in `./configure`. |
| 86 | + - The `secp256k1_nonce_function_rfc6979` nonce function, used by default by `secp256k1_ecdsa_sign`, now reduces the message hash modulo the group order to match the specification. This only affects improper use of ECDSA signing API. |
| 87 | + |
| 88 | +#### Deprecated |
| 89 | + - Deprecated context flags `SECP256K1_CONTEXT_VERIFY` and `SECP256K1_CONTEXT_SIGN`. Use `SECP256K1_CONTEXT_NONE` instead. |
| 90 | + - Renamed `secp256k1_context_no_precomp` to `secp256k1_context_static`. |
| 91 | + - Module `schnorrsig`: renamed `secp256k1_schnorrsig_sign` to `secp256k1_schnorrsig_sign32`. |
| 92 | + |
| 93 | +#### ABI Compatibility |
| 94 | +Since this is the first release, we do not compare application binary interfaces. |
| 95 | +However, there are earlier unreleased versions of libsecp256k1 that are *not* ABI compatible with this version. |
| 96 | + |
| 97 | +## [0.1.0] - 2013-03-05 to 2021-12-25 |
| 98 | + |
| 99 | +This version was in fact never released. |
| 100 | +The number was given by the build system since the introduction of autotools in Jan 2014 (ea0fe5a5bf0c04f9cc955b2966b614f5f378c6f6). |
| 101 | +Therefore, this version number does not uniquely identify a set of source files. |
| 102 | + |
| 103 | +[unreleased]: https://github.com/bitcoin-core/secp256k1/compare/v0.3.2...HEAD |
| 104 | +[0.3.2]: https://github.com/bitcoin-core/secp256k1/compare/v0.3.1...v0.3.2 |
| 105 | +[0.3.1]: https://github.com/bitcoin-core/secp256k1/compare/v0.3.0...v0.3.1 |
| 106 | +[0.3.0]: https://github.com/bitcoin-core/secp256k1/compare/v0.2.0...v0.3.0 |
| 107 | +[0.2.0]: https://github.com/bitcoin-core/secp256k1/compare/423b6d19d373f1224fd671a982584d7e7900bc93..v0.2.0 |
| 108 | +[0.1.0]: https://github.com/bitcoin-core/secp256k1/commit/423b6d19d373f1224fd671a982584d7e7900bc93 |
0 commit comments