Crate elliptic_curve

source ·
Expand description

RustCrypto: Elliptic Curve Traits

crate Docs Build Status Apache2/MIT licensed Rust Version Project Chat

General purpose Elliptic Curve Cryptography (ECC) support, including types and traits for representing various elliptic curve forms, scalars, points, and public/secret keys composed thereof.

Documentation

Minimum Supported Rust Version

Requires Rust 1.65 or higher.

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

SemVer Policy

  • All on-by-default features of this library are covered by SemVer
  • MSRV is considered exempt from SemVer as noted above

License

All crates licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Usage

This crate provides traits for describing elliptic curves, along with types which are generic over elliptic curves which can be used as the basis of curve-agnostic code.

It’s intended to be used with the following concrete elliptic curve implementations from the RustCrypto/elliptic-curves project:

  • bp256: brainpoolP256r1 and brainpoolP256t1
  • bp384: brainpoolP384r1 and brainpoolP384t1
  • k256: secp256k1 a.k.a. K-256
  • p224: NIST P-224 a.k.a. secp224r1
  • p256: NIST P-256 a.k.a secp256r1, prime256v1
  • p384: NIST P-384 a.k.a. secp384r1
  • p521: NIST P-521 a.k.a. secp521r1

The ecdsa crate provides a generic implementation of the Elliptic Curve Digital Signature Algorithm which can be used with any of the above crates, either via an external ECDSA implementation, or using native curve arithmetic where applicable.

Type conversions

The following chart illustrates the various conversions possible between the various types defined by this crate.

Type Conversion Map

serde support

When the serde feature of this crate is enabled, Serialize and Deserialize impls are provided for the following types:

Please see type-specific documentation for more information.

Re-exports

Modules

  • Type aliases for many constants.
  • ecdhecdh
    Elliptic Curve Diffie-Hellman Support.
  • hash2curvehash2curve
    Traits for hashing byte sequences to curve points.
  • opsarithmetic
    Traits for arithmetic operations on elliptic curve field elements.
  • Traits for elliptic curve points.
  • Scalar types.
  • sec1sec1
    Support for SEC1 elliptic curve encoding formats.
  • weierstrassarithmetic
    Complete projective formulas for prime order elliptic curves as described in Renes-Costello-Batina 2015.

Structs

  • Elliptic curve errors.
  • JSON Web Key (JWK) with a kty of "EC" (elliptic curve).
  • PublicKeyarithmetic
    Elliptic curve public keys.
  • Elliptic curve secret keys.

Constants

  • Algorithm [ObjectIdentifier][pkcs8::ObjectIdentifier] for elliptic curve public key cryptography (id-ecPublicKey).

Traits

  • Elliptic curve.
  • CurveArithmeticarithmetic
    Elliptic curve with an arithmetic implementation.
  • Fieldarithmetic
    This trait represents an element of a field.
  • Trait for decoding/encoding Curve::Uint from/to FieldBytes using curve-specific rules.
  • Grouparithmetic
    This trait represents an element of a cryptographic group.
  • Elliptic curve parameters used by JSON Web Keys.
  • Marker trait for elliptic curves with prime order.
  • Prime order elliptic curve with projective arithmetic implementation.
  • PrimeFieldarithmetic
    This represents an element of a non-binary prime field.
  • Elliptic curve parameters used by VOPRF.

Type Aliases

  • Byte representation of a base/scalar field element of a given curve.
  • Size of serialized field elements of this elliptic curve.
  • Result type with the elliptic-curve crate’s Error type.