]> Git Repo - secp256k1.git/blob - README.md
Merge pull request #20
[secp256k1.git] / README.md
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 Features:
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.
14
15 Implementation details
16 ----------------------
17
18 * General
19   * Avoid dynamic memory usage almost everywhere.
20 * Field operations
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.
24     * Using GMP.
25   * Field inverses and square roots using a sliding window over blocks of 1s (by Peter Dettman).
26 * Group operations
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.
38
39 Build steps
40 -----------
41
42 libsecp256k1 is built using autotools:
43
44     $ aclocal
45     $ autoreconf --install
46     $ automake
47     $ ./configure
48     $ make
49     $ sudo make install  # optional
This page took 0.025396 seconds and 4 git commands to generate.