Skip to content

Commit 203fd36

Browse files
committed
Implement TryFrom for NonIdentity/ZeroScalar
1 parent 4b90da6 commit 203fd36

16 files changed

Lines changed: 140 additions & 6 deletions

File tree

bign256/src/arithmetic/scalar.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,14 @@ impl TryFrom<U256> for Scalar {
231231
}
232232
}
233233

234+
impl TryFrom<Scalar> for NonZeroScalar {
235+
type Error = Error;
236+
237+
fn try_from(scalar: Scalar) -> Result<Self> {
238+
NonZeroScalar::new(scalar).into_option().ok_or(Error)
239+
}
240+
}
241+
234242
#[cfg(test)]
235243
mod tests {
236244
use super::Scalar;

bp256/src/r1/arithmetic.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
use super::BrainpoolP256r1;
44
use crate::{FieldElement, Scalar};
5-
use elliptic_curve::{CurveArithmetic, PrimeCurveArithmetic};
5+
use elliptic_curve::{CurveArithmetic, Error, PrimeCurveArithmetic};
66
use primeorder::{PrimeCurveParams, point_arithmetic};
77

88
/// Elliptic curve point in affine coordinates.
@@ -76,3 +76,11 @@ impl From<&Scalar> for ScalarPrimitive {
7676
ScalarPrimitive::new(scalar.into()).unwrap()
7777
}
7878
}
79+
80+
impl TryFrom<Scalar> for NonZeroScalar {
81+
type Error = Error;
82+
83+
fn try_from(scalar: Scalar) -> Result<Self, Error> {
84+
NonZeroScalar::new(scalar).into_option().ok_or(Error)
85+
}
86+
}

bp256/src/t1/arithmetic.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
use super::BrainpoolP256t1;
44
use crate::{FieldElement, Scalar};
5-
use elliptic_curve::{CurveArithmetic, PrimeCurveArithmetic};
5+
use elliptic_curve::{CurveArithmetic, Error, PrimeCurveArithmetic};
66
use primeorder::{PrimeCurveParams, point_arithmetic};
77

88
/// Elliptic curve point in affine coordinates.
@@ -76,3 +76,11 @@ impl From<&Scalar> for ScalarPrimitive {
7676
ScalarPrimitive::new(scalar.into()).unwrap()
7777
}
7878
}
79+
80+
impl TryFrom<Scalar> for NonZeroScalar {
81+
type Error = Error;
82+
83+
fn try_from(scalar: Scalar) -> Result<Self, Error> {
84+
NonZeroScalar::new(scalar).into_option().ok_or(Error)
85+
}
86+
}

bp384/src/r1/arithmetic.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
use super::BrainpoolP384r1;
44
use crate::{FieldElement, Scalar};
5-
use elliptic_curve::{CurveArithmetic, PrimeCurveArithmetic};
5+
use elliptic_curve::{CurveArithmetic, Error, PrimeCurveArithmetic};
66
use primeorder::{PrimeCurveParams, point_arithmetic};
77

88
/// Elliptic curve point in affine coordinates.
@@ -82,3 +82,11 @@ impl From<&Scalar> for ScalarPrimitive {
8282
ScalarPrimitive::new(scalar.into()).unwrap()
8383
}
8484
}
85+
86+
impl TryFrom<Scalar> for NonZeroScalar {
87+
type Error = Error;
88+
89+
fn try_from(scalar: Scalar) -> Result<Self, Error> {
90+
NonZeroScalar::new(scalar).into_option().ok_or(Error)
91+
}
92+
}

bp384/src/t1/arithmetic.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
use super::BrainpoolP384t1;
44
use crate::{FieldElement, Scalar};
5-
use elliptic_curve::{CurveArithmetic, PrimeCurveArithmetic};
5+
use elliptic_curve::{CurveArithmetic, Error, PrimeCurveArithmetic};
66
use primeorder::{PrimeCurveParams, point_arithmetic};
77

88
/// Elliptic curve point in affine coordinates.
@@ -82,3 +82,11 @@ impl From<&Scalar> for ScalarPrimitive {
8282
ScalarPrimitive::new(scalar.into()).unwrap()
8383
}
8484
}
85+
86+
impl TryFrom<Scalar> for NonZeroScalar {
87+
type Error = Error;
88+
89+
fn try_from(scalar: Scalar) -> Result<Self, Error> {
90+
NonZeroScalar::new(scalar).into_option().ok_or(Error)
91+
}
92+
}

k256/src/arithmetic/affine.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,14 @@ impl From<&PublicKey> for AffinePoint {
329329
}
330330
}
331331

332+
impl TryFrom<AffinePoint> for NonIdentity<AffinePoint> {
333+
type Error = Error;
334+
335+
fn try_from(affine_point: AffinePoint) -> Result<Self> {
336+
NonIdentity::new(affine_point).into_option().ok_or(Error)
337+
}
338+
}
339+
332340
impl TryFrom<AffinePoint> for PublicKey {
333341
type Error = Error;
334342

k256/src/arithmetic/projective.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -664,6 +664,14 @@ impl From<&PublicKey> for ProjectivePoint {
664664
}
665665
}
666666

667+
impl TryFrom<ProjectivePoint> for NonIdentity<ProjectivePoint> {
668+
type Error = Error;
669+
670+
fn try_from(point: ProjectivePoint) -> Result<Self> {
671+
NonIdentity::new(point).into_option().ok_or(Error)
672+
}
673+
}
674+
667675
impl TryFrom<ProjectivePoint> for PublicKey {
668676
type Error = Error;
669677

k256/src/arithmetic/scalar.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use core::{
1212
ops::{Add, AddAssign, Mul, MulAssign, Neg, Shr, ShrAssign, Sub, SubAssign},
1313
};
1414
use elliptic_curve::{
15-
Curve, ScalarPrimitive,
15+
Curve, Error, ScalarPrimitive,
1616
bigint::{Limb, U256, U512, Word, prelude::*},
1717
ff::{self, Field, PrimeField},
1818
ops::{Invert, Reduce, ReduceNonZero},
@@ -413,6 +413,14 @@ impl From<&Scalar> for ScalarPrimitive<Secp256k1> {
413413
}
414414
}
415415

416+
impl TryFrom<Scalar> for NonZeroScalar {
417+
type Error = Error;
418+
419+
fn try_from(scalar: Scalar) -> Result<Self, Error> {
420+
NonZeroScalar::new(scalar).into_option().ok_or(Error)
421+
}
422+
}
423+
416424
impl FromUintUnchecked for Scalar {
417425
type Uint = U256;
418426

p192/src/arithmetic/scalar.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,14 @@ impl From<&Scalar> for ScalarPrimitive<NistP192> {
253253
}
254254
}
255255

256+
impl TryFrom<Scalar> for NonZeroScalar {
257+
type Error = Error;
258+
259+
fn try_from(scalar: Scalar) -> Result<Self> {
260+
NonZeroScalar::new(scalar).into_option().ok_or(Error)
261+
}
262+
}
263+
256264
impl TryFrom<U192> for Scalar {
257265
type Error = Error;
258266

p224/src/arithmetic/scalar.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,14 @@ impl From<&SecretKey> for Scalar {
254254
}
255255
}
256256

257+
impl TryFrom<Scalar> for NonZeroScalar {
258+
type Error = Error;
259+
260+
fn try_from(scalar: Scalar) -> Result<Self> {
261+
NonZeroScalar::new(scalar).into_option().ok_or(Error)
262+
}
263+
}
264+
257265
impl TryFrom<Uint> for Scalar {
258266
type Error = Error;
259267

0 commit comments

Comments
 (0)