diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 12:41:35 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 12:41:35 +0000 |
commit | 7e5d7eea9c580ef4b41a765bde624af431942b96 (patch) | |
tree | 2c0d9ca12878fc4525650aa4e54d77a81a07cc09 /vendor/elliptic-curve/src/arithmetic.rs | |
parent | Adding debian version 1.70.0+dfsg1-9. (diff) | |
download | rustc-7e5d7eea9c580ef4b41a765bde624af431942b96.tar.xz rustc-7e5d7eea9c580ef4b41a765bde624af431942b96.zip |
Merging upstream version 1.70.0+dfsg2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/elliptic-curve/src/arithmetic.rs')
-rw-r--r-- | vendor/elliptic-curve/src/arithmetic.rs | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/vendor/elliptic-curve/src/arithmetic.rs b/vendor/elliptic-curve/src/arithmetic.rs new file mode 100644 index 000000000..fa445f1bc --- /dev/null +++ b/vendor/elliptic-curve/src/arithmetic.rs @@ -0,0 +1,87 @@ +//! Elliptic curve arithmetic traits. + +use crate::{ + ops::LinearCombination, AffineXCoordinate, Curve, FieldBytes, IsHigh, PrimeCurve, ScalarCore, +}; +use core::fmt::Debug; +use subtle::{ConditionallySelectable, ConstantTimeEq}; +use zeroize::DefaultIsZeroes; + +/// Elliptic curve with affine arithmetic implementation. +#[cfg_attr(docsrs, doc(cfg(feature = "arithmetic")))] +pub trait AffineArithmetic: Curve + ScalarArithmetic { + /// Elliptic curve point in affine coordinates. + type AffinePoint: 'static + + AffineXCoordinate<Self> + + Copy + + Clone + + ConditionallySelectable + + ConstantTimeEq + + Debug + + Default + + DefaultIsZeroes + + Eq + + PartialEq + + Sized + + Send + + Sync; +} + +/// Prime order elliptic curve with projective arithmetic implementation. +#[cfg_attr(docsrs, doc(cfg(feature = "arithmetic")))] +pub trait PrimeCurveArithmetic: + PrimeCurve + ProjectiveArithmetic<ProjectivePoint = Self::CurveGroup> +{ + /// Prime order elliptic curve group. + type CurveGroup: group::prime::PrimeCurve<Affine = <Self as AffineArithmetic>::AffinePoint>; +} + +/// Elliptic curve with projective arithmetic implementation. +#[cfg_attr(docsrs, doc(cfg(feature = "arithmetic")))] +pub trait ProjectiveArithmetic: Curve + AffineArithmetic { + /// Elliptic curve point in projective coordinates. + /// + /// Note: the following bounds are provided by [`group::Group`]: + /// - `'static` + /// - [`Copy`] + /// - [`Clone`] + /// - [`Debug`] + /// - [`Eq`] + /// - [`Sized`] + /// - [`Send`] + /// - [`Sync`] + type ProjectivePoint: ConditionallySelectable + + ConstantTimeEq + + Default + + DefaultIsZeroes + + From<Self::AffinePoint> + + Into<Self::AffinePoint> + + LinearCombination + + group::Curve<AffineRepr = Self::AffinePoint> + + group::Group<Scalar = Self::Scalar>; +} + +/// Scalar arithmetic. +#[cfg(feature = "arithmetic")] +#[cfg_attr(docsrs, doc(cfg(feature = "arithmetic")))] +pub trait ScalarArithmetic: Curve { + /// Scalar field type. + /// + /// Note: the following bounds are provided by [`ff::Field`]: + /// - `'static` + /// - [`Copy`] + /// - [`Clone`] + /// - [`ConditionallySelectable`] + /// - [`ConstantTimeEq`] + /// - [`Debug`] + /// - [`Default`] + /// - [`Send`] + /// - [`Sync`] + type Scalar: DefaultIsZeroes + + From<ScalarCore<Self>> + + Into<FieldBytes<Self>> + + Into<Self::UInt> + + IsHigh + + ff::Field + + ff::PrimeField<Repr = FieldBytes<Self>>; +} |