Skip to content

Latest commit

 

History

History
71 lines (46 loc) · 2.07 KB

README.md

File metadata and controls

71 lines (46 loc) · 2.07 KB

msl-secp256k1

The secp256k1 curve

The base field modulus:

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F

The scalar field modulus:

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141

The cofactor is 1.

The curve formula: $y^2 = x^3 + ax + b$ where:

$a = 0$

$b = 7$

In projective coordinates, the point at infinity is x: 0; y: 1; z: 0.

In projective coordinates, the generator point is:

x: 55066263022277343669578718895168534326250603453777594175500187360389116729240
y: 32670510020758816978083085130507043184471273380659243275938904335757337482424
z: 1

Algorithms included in this repository

We have implemented these algorithms in Metal:

  • Jacobian formulae:
    • add-2007-bl
    • dbl-2009-l

Notes

Representations for fast curve arithmetic

secp256k1 is a short Weierstrass curve.

From the Explicit Formula Database, the following representations for fast computations are relevant to secp256k1:

Implementation of Jacobian algos in Go: https://gist.github.com/fomichev/9f9f4a11cd93196067a6ac10ed1a5686

Precomputation

Brickell's method and the sliding-window methods can speed up scalar multiplication, given precomputed tables of points (see Gor98)