summaryrefslogtreecommitdiffstats
path: root/vendor/elliptic-curve/src/scalar.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/elliptic-curve/src/scalar.rs')
-rw-r--r--vendor/elliptic-curve/src/scalar.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/vendor/elliptic-curve/src/scalar.rs b/vendor/elliptic-curve/src/scalar.rs
new file mode 100644
index 0000000..eb99249
--- /dev/null
+++ b/vendor/elliptic-curve/src/scalar.rs
@@ -0,0 +1,53 @@
+//! Scalar types.
+
+#[cfg(feature = "arithmetic")]
+mod blinded;
+#[cfg(feature = "arithmetic")]
+mod nonzero;
+mod primitive;
+
+pub use self::primitive::ScalarPrimitive;
+#[cfg(feature = "arithmetic")]
+pub use self::{blinded::BlindedScalar, nonzero::NonZeroScalar};
+
+use crypto_bigint::Integer;
+use subtle::Choice;
+
+#[cfg(feature = "arithmetic")]
+use crate::CurveArithmetic;
+
+/// Scalar field element for a particular elliptic curve.
+#[cfg(feature = "arithmetic")]
+pub type Scalar<C> = <C as CurveArithmetic>::Scalar;
+
+/// Bit representation of a scalar field element of a given curve.
+#[cfg(feature = "bits")]
+pub type ScalarBits<C> = ff::FieldBits<<Scalar<C> as ff::PrimeFieldBits>::ReprBits>;
+
+/// Instantiate a scalar from an unsigned integer without checking for overflow.
+pub trait FromUintUnchecked {
+ /// Unsigned integer type (i.e. `Curve::Uint`)
+ type Uint: Integer;
+
+ /// Instantiate scalar from an unsigned integer without checking
+ /// whether the value overflows the field modulus.
+ ///
+ /// ⚠️ WARNING!
+ ///
+ /// Incorrectly used this can lead to mathematically invalid results,
+ /// which can lead to potential security vulnerabilities.
+ ///
+ /// Use with care!
+ fn from_uint_unchecked(uint: Self::Uint) -> Self;
+}
+
+/// Is this scalar greater than n / 2?
+///
+/// # Returns
+///
+/// - For scalars 0 through n / 2: `Choice::from(0)`
+/// - For scalars (n / 2) + 1 through n - 1: `Choice::from(1)`
+pub trait IsHigh {
+ /// Is this scalar greater than or equal to n / 2?
+ fn is_high(&self) -> Choice;
+}