Skip to content

Commit 02a091b

Browse files
committed
CONTRIBUTING: add some coding and style conventions
1 parent 523c5a6 commit 02a091b

File tree

1 file changed

+32
-2
lines changed

1 file changed

+32
-2
lines changed

CONTRIBUTING.md

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ These are not the only factors taken into account when considering to add new fu
2626
The proposed new libsecp256k1 code must be of high quality, including API documentation and tests, as well as featuring a misuse-resistant API design.
2727

2828
We recommend reaching out to other contributors (see [Communication Channels](#communication-channels)) and get feedback before implementing new functionality.
29+
2930
## Communication Channels
3031

3132
Most communication about libsecp256k1 occurs on the GitHub repository: in issues, pull request or on the discussion board.
@@ -37,9 +38,28 @@ Chat history logs can be found at https://gnusha.org/secp256k1/.
3738

3839
## Contributor Workflow & Peer Review
3940

40-
The Contributor Workflow & Peer Review in libsecp256k1 are similar to Bitcoin Core's workflow and review processes described in Core's [CONTRIBUTING.md](https://github.com/bitcoin/bitcoin/blob/master/CONTRIBUTING.md).
41+
The Contributor Workflow & Peer Review in libsecp256k1 are similar to Bitcoin Core's workflow and review processes described in its [CONTRIBUTING.md](https://github.com/bitcoin/bitcoin/blob/master/CONTRIBUTING.md).
42+
43+
### Coding Conventions
44+
45+
In addition, libsecp256k1 tries to maintain the following coding conventions:
46+
47+
- No runtime heap allocation (e.g., no `malloc`).
48+
- The tests should cover all lines and branches of the library (see [Test coverage](#coverage)).
49+
- Operations involving secret data should be tested for being constant time with respect to the secrets (see [src/ctime_tests.c](src/ctime_tests.c)).
50+
- Local variables containing secret data should be cleared explicitly to try to delete secrets from memory.
51+
- Use `secp256k1_memcmp_var` instead of `memcmp` (see [#823](https://github.com/bitcoin-core/secp256k1/issues/823)).
52+
- Arguments of the publicly-facing API must have a specific order defined in [include/secp256k1.h](include/secp256k1.h).
53+
54+
#### Style Conventions
55+
56+
- Commits should be atomic and diffs should be easy to read. For this reason, do not mix any formatting fixes or code moves with actual code changes. Make sure each individual commit is hygienic: that it builds successfully on its own without warnings, errors, regressions, or test failures.
57+
- Use `void *ptr` instead of `void* ptr`.
58+
- Avoid trailing whitespaces.
4159

42-
### Test coverage
60+
### Tests
61+
62+
#### Coverage
4363

4464
This library aims to have full coverage of the reachable lines and branches.
4565

@@ -59,3 +79,13 @@ To create a HTML report with coloured and annotated source code:
5979

6080
$ mkdir -p coverage
6181
$ gcovr --exclude 'src/bench*' --html --html-details -o coverage/coverage.html
82+
83+
#### Exhaustive Tests
84+
85+
There are tests of several functions in which a small group replaces secp256k1.
86+
These tests are *exhaustive* since they provide all elements and scalars of the small group as input arguments (see [src/tests_exhaustive.c]).
87+
88+
89+
### Benchmarks
90+
91+
See `src/bench*.c` for examples of benchmarks.

0 commit comments

Comments
 (0)