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.
Requires Rust 1.57 or higher.
Minimum supported Rust version can be changed in the future, but it will be done with a minor version bump.
- All on-by-default features of this library are covered by SemVer
- MSRV is considered exempt from SemVer as noted above
All crates licensed under either of
at your option.
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.
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
bp256: brainpoolP256r1 and brainpoolP256t1
bp384: brainpoolP384r1 and brainpoolP384t1
k256: secp256k1 a.k.a. K-256
p256: NIST P-256 a.k.a secp256r1, prime256v1
p384: NIST P-384 a.k.a. secp384r1
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.
The following chart illustrates the various conversions possible between the various types defined by this crate.
serde feature of this crate is enabled,
Deserialize impls are provided for the following types:
Please see type-specific documentation for more information.
pub use crypto_bigint as bigint;
pub use generic_array;
pub use rand_core;
pub use subtle;
pub use zeroize;
pub use ff;
pub use group;
pub use pkcs8;
- Type aliases for many constants.
- Elliptic Curve Diffie-Hellman Support.
- Traits for arithmetic operations on elliptic curve field elements.
- Support for SEC1 elliptic curve encoding formats.
- Complete projective formulas for prime order elliptic curves as described in Renes-Costello-Batina 2015.
- Provides both inherent and trait impls for a field element type which are backed by a core set of arithmetic functions specified as macro arguments.
- Emit impls for a
core::opstrait for all combinations of reference types, which thunk to the given function.
- Elliptic curve errors.
- Non-zero scalar type.
- Elliptic curve public keys.
- Generic scalar type with core functionality.
- Elliptic curve secret keys.
ObjectIdentifierfor elliptic curve public key cryptography (
- Elliptic curve with affine arithmetic implementation.
- Obtain the affine x-coordinate of an elliptic curve point.
- Elliptic curve.
- Decompact an elliptic curve point from an x-coordinate.
- Decompress an elliptic curve point.
- This trait represents an element of a field.
- This trait represents an element of a cryptographic group.
- Is this scalar greater than n / 2?
- Point compaction settings.
- Point compression settings.
- Marker trait for elliptic curves with prime order.
- Prime order elliptic curve with projective arithmetic implementation.
- This represents an element of a prime field.
- Elliptic curve with projective arithmetic implementation.
- Scalar arithmetic.
- Affine point type for a given curve with a
- Byte representation of a base/scalar field element of a given curve.
- Size of field elements of this elliptic curve.
- Projective point type for a given curve with a
- Result type with the
- Scalar field element for a particular elliptic curve.