# Crate secp256kfun_k256_backend

Expand description

Pure Rust implementation of the secp256k1 (K-256) elliptic curve, including support for the Elliptic Curve Digital Signature Algorithm (ECDSA), Elliptic Curve Diffie-Hellman (ECDH), and general purpose elliptic curve/field arithmetic which can be used to implement protocols based on group operations.

secp256k1 is a Koblitz curve commonly used in cryptocurrency applications. The “K-256” name follows NIST notation where P = prime fields, B = binary fields, and K = Koblitz curves.

The curve is specified as `secp256k1` by Certicom’s SECG in “SEC 2: Recommended Elliptic Curve Domain Parameters”:

https://www.secg.org/sec2-v2.pdf

### ⚠️ Security Warning

The elliptic curve arithmetic contained in this crate has never been independently audited!

This crate has been designed with the goal of ensuring that secret-dependent operations are performed in constant time (using the `subtle` crate and constant-time formulas). However, it has not been thoroughly assessed to ensure that generated assembly is constant time on common CPU architectures.

### Minimum Supported Rust Version

Rust 1.51 or higher.

Minimum supported Rust version may be changed in the future, but it will be accompanied with a minor version bump.

## Structs

A point on the secp256k1 curve in affine coordinates.

An element in the finite field used for curve coordinates.

A point on the secp256k1 curve in projective coordinates.

Scalars are elements in the finite field modulo n.

K-256 (secp256k1) elliptic curve.

## Functions

Calculates `x * k + y * l`.

Calculates a linear combination `sum(x[i] * k[i])`, `i = 0..N`

## Type Definitions

Compressed SEC1-encoded secp256k1 (K-256) curve point.

secp256k1 (K-256) field element serialized as bytes.

Non-zero secp256k1 (K-256) scalar field element. inner byte value is within range of `Secp256k1::ORDER`.