pub struct NistP256;Expand description
NIST P-256 elliptic curve.
This curve is also known as prime256v1 (ANSI X9.62) and secp256r1 (SECG) and is specified in NIST SP 800-186: Recommendations for Discrete Logarithm-based Cryptography: Elliptic Curve Domain Parameters.
It’s included in the US National Security Agency’s “Suite B” and is widely used in protocols like TLS and the associated X.509 PKI.
Its equation is y² = x³ - 3x + b over a ~256-bit prime field where b is
the “verifiably random”† constant:
b = 41058363725152142129326129780047268409114441015993725554835256314039467401291† NOTE: the specific origins of this constant have never been fully disclosed (it is the SHA-1 digest of an unknown NSA-selected constant)
Trait Implementations§
Source§impl AssociatedOid for NistP256
Available on crate feature pkcs8 only.
impl AssociatedOid for NistP256
pkcs8 only.Source§const OID: ObjectIdentifier
const OID: ObjectIdentifier
Source§impl Curve for NistP256
impl Curve for NistP256
Source§type FieldBytesSize = UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>
type FieldBytesSize = UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>
32-byte serialized field elements.
Source§type Uint = Uint<crypto_bigint::::uint::U256::{constant#0}>
type Uint = Uint<crypto_bigint::::uint::U256::{constant#0}>
256-bit integer type used for internally representing field elements.
Source§const FIELD_ENDIANNESS: ByteOrder = ByteOrder::BigEndian
const FIELD_ENDIANNESS: ByteOrder = ByteOrder::BigEndian
Source§impl CurveArithmetic for NistP256
impl CurveArithmetic for NistP256
Source§type AffinePoint = AffinePoint<NistP256>
type AffinePoint = AffinePoint<NistP256>
Source§type ProjectivePoint = ProjectivePoint<NistP256>
type ProjectivePoint = ProjectivePoint<NistP256>
Source§impl DigestAlgorithm for NistP256
Available on crate feature sha256 only.
impl DigestAlgorithm for NistP256
sha256 only.Source§impl EcdsaCurve for NistP256
impl EcdsaCurve for NistP256
Source§const NORMALIZE_S: bool = false
const NORMALIZE_S: bool = false
Source§impl FieldArithmetic for NistP256
impl FieldArithmetic for NistP256
Source§type FieldElement = FieldElement
type FieldElement = FieldElement
Source§impl Mul<&<NistP256 as CurveArithmetic>::AffinePoint> for &Scalar
impl Mul<&<NistP256 as CurveArithmetic>::AffinePoint> for &Scalar
Source§type Output = <NistP256 as CurveArithmetic>::ProjectivePoint
type Output = <NistP256 as CurveArithmetic>::ProjectivePoint
* operator.Source§fn mul(self, rhs: &AffinePoint<NistP256>) -> ProjectivePoint<NistP256>
fn mul(self, rhs: &AffinePoint<NistP256>) -> ProjectivePoint<NistP256>
* operation. Read moreSource§impl Mul<&<NistP256 as CurveArithmetic>::AffinePoint> for Scalar
impl Mul<&<NistP256 as CurveArithmetic>::AffinePoint> for Scalar
Source§type Output = <NistP256 as CurveArithmetic>::ProjectivePoint
type Output = <NistP256 as CurveArithmetic>::ProjectivePoint
* operator.Source§fn mul(self, rhs: &AffinePoint<NistP256>) -> ProjectivePoint<NistP256>
fn mul(self, rhs: &AffinePoint<NistP256>) -> ProjectivePoint<NistP256>
* operation. Read moreSource§impl Mul<&<NistP256 as CurveArithmetic>::ProjectivePoint> for &Scalar
impl Mul<&<NistP256 as CurveArithmetic>::ProjectivePoint> for &Scalar
Source§type Output = <NistP256 as CurveArithmetic>::ProjectivePoint
type Output = <NistP256 as CurveArithmetic>::ProjectivePoint
* operator.Source§fn mul(self, rhs: &ProjectivePoint<NistP256>) -> ProjectivePoint<NistP256>
fn mul(self, rhs: &ProjectivePoint<NistP256>) -> ProjectivePoint<NistP256>
* operation. Read moreSource§impl Mul<&<NistP256 as CurveArithmetic>::ProjectivePoint> for Scalar
impl Mul<&<NistP256 as CurveArithmetic>::ProjectivePoint> for Scalar
Source§type Output = <NistP256 as CurveArithmetic>::ProjectivePoint
type Output = <NistP256 as CurveArithmetic>::ProjectivePoint
* operator.Source§fn mul(self, rhs: &ProjectivePoint<NistP256>) -> ProjectivePoint<NistP256>
fn mul(self, rhs: &ProjectivePoint<NistP256>) -> ProjectivePoint<NistP256>
* operation. Read moreSource§impl Mul<<NistP256 as CurveArithmetic>::AffinePoint> for &Scalar
impl Mul<<NistP256 as CurveArithmetic>::AffinePoint> for &Scalar
Source§type Output = <NistP256 as CurveArithmetic>::ProjectivePoint
type Output = <NistP256 as CurveArithmetic>::ProjectivePoint
* operator.Source§fn mul(self, rhs: AffinePoint<NistP256>) -> ProjectivePoint<NistP256>
fn mul(self, rhs: AffinePoint<NistP256>) -> ProjectivePoint<NistP256>
* operation. Read moreSource§impl Mul<<NistP256 as CurveArithmetic>::AffinePoint> for Scalar
impl Mul<<NistP256 as CurveArithmetic>::AffinePoint> for Scalar
Source§type Output = <NistP256 as CurveArithmetic>::ProjectivePoint
type Output = <NistP256 as CurveArithmetic>::ProjectivePoint
* operator.Source§fn mul(self, rhs: AffinePoint<NistP256>) -> ProjectivePoint<NistP256>
fn mul(self, rhs: AffinePoint<NistP256>) -> ProjectivePoint<NistP256>
* operation. Read moreSource§impl Mul<<NistP256 as CurveArithmetic>::ProjectivePoint> for &Scalar
impl Mul<<NistP256 as CurveArithmetic>::ProjectivePoint> for &Scalar
Source§type Output = <NistP256 as CurveArithmetic>::ProjectivePoint
type Output = <NistP256 as CurveArithmetic>::ProjectivePoint
* operator.Source§fn mul(self, rhs: ProjectivePoint<NistP256>) -> ProjectivePoint<NistP256>
fn mul(self, rhs: ProjectivePoint<NistP256>) -> ProjectivePoint<NistP256>
* operation. Read moreSource§impl Mul<<NistP256 as CurveArithmetic>::ProjectivePoint> for Scalar
impl Mul<<NistP256 as CurveArithmetic>::ProjectivePoint> for Scalar
Source§type Output = <NistP256 as CurveArithmetic>::ProjectivePoint
type Output = <NistP256 as CurveArithmetic>::ProjectivePoint
* operator.Source§fn mul(self, rhs: ProjectivePoint<NistP256>) -> ProjectivePoint<NistP256>
fn mul(self, rhs: ProjectivePoint<NistP256>) -> ProjectivePoint<NistP256>
* operation. Read moreSource§impl MulBackend<NistP256> for PrecomputedTables
impl MulBackend<NistP256> for PrecomputedTables
Source§fn mul_by_generator(k: &Scalar) -> ProjectivePoint
fn mul_by_generator(k: &Scalar) -> ProjectivePoint
Source§fn mul_by_generator_vartime(k: &Scalar) -> ProjectivePoint
fn mul_by_generator_vartime(k: &Scalar) -> ProjectivePoint
Source§fn mul_by_generator_and_mul_add_vartime(
a: &<C as CurveArithmetic>::Scalar,
b_scalar: &<C as CurveArithmetic>::Scalar,
b_point: &ProjectivePoint<C>,
) -> ProjectivePoint<C>
fn mul_by_generator_and_mul_add_vartime( a: &<C as CurveArithmetic>::Scalar, b_scalar: &<C as CurveArithmetic>::Scalar, b_point: &ProjectivePoint<C>, ) -> ProjectivePoint<C>
a by the generator of the prime-order subgroup, adding the result to the point
P multiplied by the scalar b, i.e. compute aG + bP.Source§impl MulVartime<&<NistP256 as CurveArithmetic>::AffinePoint> for &Scalar
impl MulVartime<&<NistP256 as CurveArithmetic>::AffinePoint> for &Scalar
Source§fn mul_vartime(self, rhs: &AffinePoint<NistP256>) -> ProjectivePoint<NistP256>
fn mul_vartime(self, rhs: &AffinePoint<NistP256>) -> ProjectivePoint<NistP256>
self by rhs in variable-time.Source§impl MulVartime<&<NistP256 as CurveArithmetic>::AffinePoint> for Scalar
impl MulVartime<&<NistP256 as CurveArithmetic>::AffinePoint> for Scalar
Source§fn mul_vartime(self, rhs: &AffinePoint<NistP256>) -> ProjectivePoint<NistP256>
fn mul_vartime(self, rhs: &AffinePoint<NistP256>) -> ProjectivePoint<NistP256>
self by rhs in variable-time.Source§impl MulVartime<&<NistP256 as CurveArithmetic>::ProjectivePoint> for &Scalar
impl MulVartime<&<NistP256 as CurveArithmetic>::ProjectivePoint> for &Scalar
Source§fn mul_vartime(
self,
rhs: &ProjectivePoint<NistP256>,
) -> ProjectivePoint<NistP256>
fn mul_vartime( self, rhs: &ProjectivePoint<NistP256>, ) -> ProjectivePoint<NistP256>
self by rhs in variable-time.Source§impl MulVartime<&<NistP256 as CurveArithmetic>::ProjectivePoint> for Scalar
impl MulVartime<&<NistP256 as CurveArithmetic>::ProjectivePoint> for Scalar
Source§fn mul_vartime(
self,
rhs: &ProjectivePoint<NistP256>,
) -> ProjectivePoint<NistP256>
fn mul_vartime( self, rhs: &ProjectivePoint<NistP256>, ) -> ProjectivePoint<NistP256>
self by rhs in variable-time.Source§impl MulVartime<<NistP256 as CurveArithmetic>::AffinePoint> for &Scalar
impl MulVartime<<NistP256 as CurveArithmetic>::AffinePoint> for &Scalar
Source§fn mul_vartime(self, rhs: AffinePoint<NistP256>) -> ProjectivePoint<NistP256>
fn mul_vartime(self, rhs: AffinePoint<NistP256>) -> ProjectivePoint<NistP256>
self by rhs in variable-time.Source§impl MulVartime<<NistP256 as CurveArithmetic>::AffinePoint> for Scalar
impl MulVartime<<NistP256 as CurveArithmetic>::AffinePoint> for Scalar
Source§fn mul_vartime(self, rhs: AffinePoint<NistP256>) -> ProjectivePoint<NistP256>
fn mul_vartime(self, rhs: AffinePoint<NistP256>) -> ProjectivePoint<NistP256>
self by rhs in variable-time.Source§impl MulVartime<<NistP256 as CurveArithmetic>::ProjectivePoint> for &Scalar
impl MulVartime<<NistP256 as CurveArithmetic>::ProjectivePoint> for &Scalar
Source§fn mul_vartime(
self,
rhs: ProjectivePoint<NistP256>,
) -> ProjectivePoint<NistP256>
fn mul_vartime( self, rhs: ProjectivePoint<NistP256>, ) -> ProjectivePoint<NistP256>
self by rhs in variable-time.Source§impl MulVartime<<NistP256 as CurveArithmetic>::ProjectivePoint> for Scalar
impl MulVartime<<NistP256 as CurveArithmetic>::ProjectivePoint> for Scalar
Source§fn mul_vartime(
self,
rhs: ProjectivePoint<NistP256>,
) -> ProjectivePoint<NistP256>
fn mul_vartime( self, rhs: ProjectivePoint<NistP256>, ) -> ProjectivePoint<NistP256>
self by rhs in variable-time.Source§impl Ord for NistP256
impl Ord for NistP256
Source§impl PartialOrd for NistP256
impl PartialOrd for NistP256
Source§impl PointCompaction for NistP256
impl PointCompaction for NistP256
Source§const COMPACT_POINTS: bool = false
const COMPACT_POINTS: bool = false
NIST P-256 points are typically uncompressed.
Source§impl PointCompression for NistP256
impl PointCompression for NistP256
Source§const COMPRESS_POINTS: bool = false
const COMPRESS_POINTS: bool = false
NIST P-256 points are typically uncompressed.
Source§impl PrimeCurveArithmetic for NistP256
impl PrimeCurveArithmetic for NistP256
Source§type CurveGroup = ProjectivePoint<NistP256>
type CurveGroup = ProjectivePoint<NistP256>
Source§impl PrimeCurveParams for NistP256
Adapted from NIST SP 800-186 § G.1.2: Curve P-256.
impl PrimeCurveParams for NistP256
Adapted from NIST SP 800-186 § G.1.2: Curve P-256.
Source§const EQUATION_A: FieldElement
const EQUATION_A: FieldElement
a = -3
Source§const GENERATOR: (FieldElement, FieldElement)
const GENERATOR: (FieldElement, FieldElement)
Base point of P-256.
Defined in NIST SP 800-186 § G.1.2:
Gₓ = 6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296
Gᵧ = 4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5Source§const EQUATION_B: FieldElement
const EQUATION_B: FieldElement
b in the curve equation.