Skip to content

Commit 3f37bcc

Browse files
committed
Create README.md
1 parent 8b3263b commit 3f37bcc

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

README.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
libsecp256k1
2+
============
3+
4+
Optimized C library for EC operations on curve secp256k1
5+
6+
This library is experimental, so use at your own risk.
7+
8+
Implementation details
9+
----------------------
10+
11+
* General
12+
* Avoid dynamic memory usage almost everywhere.
13+
* Field operations
14+
* Optimized implementation of arithmetic modulo the curve's field size (2^256 - 0x1000003D1).
15+
* Using 5 52-bit limbs (including hand-optimized assembly for x86_64, by Diederik Huys).
16+
* Using 10 26-bit limbs.
17+
* Using GMP.
18+
* Field inverses and square roots using a sliding window over blocks of 1s (by Peter Dettman).
19+
* Group operations
20+
* Point addition formula specifically simplified for the curve equation (y^2 = x^3 + 7).
21+
* Use addition between points in Jacobian and affine coordinates where possible.
22+
* Point multiplication for verification (a*P + b*G).
23+
* Use wNAF notation for point multiplicands.
24+
* Use a much larger window for multiples of G, using precomputed multiples.
25+
* Use Shamir's trick to do the multiplication with the public key and the generator simultaneously.
26+
* Optionally use secp256k1's efficiently-computable endomorphism to split the multiplicands into 4 half-sized ones first.
27+
* Point multiplication for signing
28+
* Use a precomputed table of multiples of powers of 16 multiplied with the generator, so general multiplication becomes a series of additions.
29+
* Slice the precomputed table in memory per byte, so memory access to the table becomes uniform.

0 commit comments

Comments
 (0)