4 Optimized C library for EC operations on curve secp256k1.
6 This library is experimental, so use at your own risk.
9 * Low-level field and group operations on secp256k1.
10 * ECDSA signing/verification and key generation.
11 * Adding/multiplying private/public keys.
12 * Serialization/parsing of private keys, public keys, signatures.
13 * Very efficient implementation.
15 Implementation details
16 ----------------------
19 * Avoid dynamic memory usage almost everywhere.
21 * Optimized implementation of arithmetic modulo the curve's field size (2^256 - 0x1000003D1).
22 * Using 5 52-bit limbs (including hand-optimized assembly for x86_64, by Diederik Huys).
23 * Using 10 26-bit limbs.
25 * Field inverses and square roots using a sliding window over blocks of 1s (by Peter Dettman).
27 * Point addition formula specifically simplified for the curve equation (y^2 = x^3 + 7).
28 * Use addition between points in Jacobian and affine coordinates where possible.
29 * Point multiplication for verification (a*P + b*G).
30 * Use wNAF notation for point multiplicands.
31 * Use a much larger window for multiples of G, using precomputed multiples.
32 * Use Shamir's trick to do the multiplication with the public key and the generator simultaneously.
33 * Optionally use secp256k1's efficiently-computable endomorphism to split the multiplicands into 4 half-sized ones first.
34 * Point multiplication for signing
35 * Use a precomputed table of multiples of powers of 16 multiplied with the generator, so general multiplication becomes a series of additions.
36 * Slice the precomputed table in memory per byte, so memory access to the table becomes uniform.
37 * Not fully constant-time.
42 libsecp256k1 is built using autotools:
45 $ autoreconf --install
49 $ sudo make install # optional