Struct NistP256
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§
§impl Curve for NistP256
impl Curve for NistP256
§impl CurveArithmetic for NistP256
impl CurveArithmetic for NistP256
§impl DigestPrimitive for NistP256
Available on crate feature sha256 only.
impl DigestPrimitive for NistP256
sha256 only.§impl FieldBytesEncoding<NistP256> for Uint<crypto_bigint::::uint::U256::{constant#0}>
impl FieldBytesEncoding<NistP256> for Uint<crypto_bigint::::uint::U256::{constant#0}>
§fn decode_field_bytes(
field_bytes: &GenericArray<u8, <NistP256 as Curve>::FieldBytesSize>,
) -> Uint<crypto_bigint::::uint::U256::{constant#0}>
fn decode_field_bytes( field_bytes: &GenericArray<u8, <NistP256 as Curve>::FieldBytesSize>, ) -> Uint<crypto_bigint::::uint::U256::{constant#0}>
§fn encode_field_bytes(
&self,
) -> GenericArray<u8, <NistP256 as Curve>::FieldBytesSize>
fn encode_field_bytes( &self, ) -> GenericArray<u8, <NistP256 as Curve>::FieldBytesSize>
§impl Ord for NistP256
impl Ord for NistP256
§impl PartialOrd for NistP256
impl PartialOrd for NistP256
§impl PointCompaction for NistP256
impl PointCompaction for NistP256
§const COMPACT_POINTS: bool = false
const COMPACT_POINTS: bool = false
NIST P-256 points are typically uncompressed.
§impl PointCompression for NistP256
impl PointCompression for NistP256
§const COMPRESS_POINTS: bool = false
const COMPRESS_POINTS: bool = false
NIST P-256 points are typically uncompressed.
§impl PrimeCurveArithmetic for NistP256
impl PrimeCurveArithmetic for NistP256
§type CurveGroup = ProjectivePoint<NistP256>
type CurveGroup = ProjectivePoint<NistP256>
§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.
§const EQUATION_A: FieldElement
const EQUATION_A: FieldElement
a = -3
§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 37bf51f5§const EQUATION_B: FieldElement
const EQUATION_B: FieldElement
b in the curve equation.§type FieldElement = FieldElement
type FieldElement = FieldElement
§type PointArithmetic = EquationAIsMinusThree
type PointArithmetic = EquationAIsMinusThree
§impl SignPrimitive<NistP256> for Scalar
Available on crate feature ecdsa only.
impl SignPrimitive<NistP256> for Scalar
ecdsa only.§fn try_sign_prehashed<K>(
&self,
k: K,
z: &GenericArray<u8, <C as Curve>::FieldBytesSize>,
) -> Result<(Signature<C>, Option<RecoveryId>), Error>
fn try_sign_prehashed<K>( &self, k: K, z: &GenericArray<u8, <C as Curve>::FieldBytesSize>, ) -> Result<(Signature<C>, Option<RecoveryId>), Error>
§fn try_sign_prehashed_rfc6979<D>(
&self,
z: &GenericArray<u8, <C as Curve>::FieldBytesSize>,
ad: &[u8],
) -> Result<(Signature<C>, Option<RecoveryId>), Error>where
Self: From<ScalarPrimitive<C>> + Invert<Output = CtOption<Self>>,
D: Digest<OutputSize = <C as Curve>::FieldBytesSize> + BlockSizeUser + FixedOutput + FixedOutputReset,
fn try_sign_prehashed_rfc6979<D>(
&self,
z: &GenericArray<u8, <C as Curve>::FieldBytesSize>,
ad: &[u8],
) -> Result<(Signature<C>, Option<RecoveryId>), Error>where
Self: From<ScalarPrimitive<C>> + Invert<Output = CtOption<Self>>,
D: Digest<OutputSize = <C as Curve>::FieldBytesSize> + BlockSizeUser + FixedOutput + FixedOutputReset,
§impl VerifyPrimitive<NistP256> for AffinePoint<NistP256>
Available on crate feature ecdsa only.
impl VerifyPrimitive<NistP256> for AffinePoint<NistP256>
ecdsa only.§fn verify_prehashed(
&self,
z: &GenericArray<u8, <C as Curve>::FieldBytesSize>,
sig: &Signature<C>,
) -> Result<(), Error>
fn verify_prehashed( &self, z: &GenericArray<u8, <C as Curve>::FieldBytesSize>, sig: &Signature<C>, ) -> Result<(), Error>
§fn verify_digest<D>(
&self,
msg_digest: D,
sig: &Signature<C>,
) -> Result<(), Error>
fn verify_digest<D>( &self, msg_digest: D, sig: &Signature<C>, ) -> Result<(), Error>
impl Copy for NistP256
impl Eq for NistP256
impl PrimeCurve for NistP256
impl StructuralPartialEq for NistP256
Auto Trait Implementations§
impl Freeze for NistP256
impl RefUnwindSafe for NistP256
impl Send for NistP256
impl Sync for NistP256
impl Unpin for NistP256
impl UnwindSafe for NistP256
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<C> ValidatePublicKey for Cwhere
C: CurveArithmetic,
<C as CurveArithmetic>::AffinePoint: FromEncodedPoint<C> + ToEncodedPoint<C>,
<C as Curve>::FieldBytesSize: ModulusSize,
impl<C> ValidatePublicKey for Cwhere
C: CurveArithmetic,
<C as CurveArithmetic>::AffinePoint: FromEncodedPoint<C> + ToEncodedPoint<C>,
<C as Curve>::FieldBytesSize: ModulusSize,
§fn validate_public_key(
secret_key: &SecretKey<C>,
public_key: &EncodedPoint<<C as Curve>::FieldBytesSize>,
) -> Result<(), Error>
fn validate_public_key( secret_key: &SecretKey<C>, public_key: &EncodedPoint<<C as Curve>::FieldBytesSize>, ) -> Result<(), Error>
EncodedPoint is a valid public key for the
provided secret value.