Skip to content

Commit 671fe1c

Browse files
committed
Implement TryFrom for NonIdentity/ZeroScalar
1 parent 4b90da6 commit 671fe1c

File tree

16 files changed

+140
-6
lines changed

16 files changed

+140
-6
lines changed

bign256/src/arithmetic/scalar.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,14 @@ impl From<&SecretKey> for Scalar {
223223
}
224224
}
225225

226+
impl TryFrom<Scalar> for NonZeroScalar {
227+
type Error = Error;
228+
229+
fn try_from(scalar: Scalar) -> Result<Self> {
230+
NonZeroScalar::new(scalar).into_option().ok_or(Error)
231+
}
232+
}
233+
226234
impl TryFrom<U256> for Scalar {
227235
type Error = Error;
228236

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

p256/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, prelude::*},
1717
group::ff::{self, Field, PrimeField},
1818
ops::{Invert, Reduce, ReduceNonZero},
@@ -533,6 +533,14 @@ impl From<&Scalar> for ScalarBits {
533533
}
534534
}
535535

536+
impl TryFrom<Scalar> for NonZeroScalar {
537+
type Error = Error;
538+
539+
fn try_from(scalar: Scalar) -> Result<Self, Error> {
540+
NonZeroScalar::new(scalar).into_option().ok_or(Error)
541+
}
542+
}
543+
536544
impl Add<Scalar> for Scalar {
537545
type Output = Scalar;
538546

p384/src/arithmetic/scalar.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,14 @@ impl From<&SecretKey> for Scalar {
292292
}
293293
}
294294

295+
impl TryFrom<Scalar> for NonZeroScalar {
296+
type Error = Error;
297+
298+
fn try_from(scalar: Scalar) -> Result<Self> {
299+
NonZeroScalar::new(scalar).into_option().ok_or(Error)
300+
}
301+
}
302+
295303
impl TryFrom<U384> for Scalar {
296304
type Error = Error;
297305

p521/src/arithmetic/scalar.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -698,6 +698,14 @@ impl From<&SecretKey> for Scalar {
698698
}
699699
}
700700

701+
impl TryFrom<Scalar> for NonZeroScalar {
702+
type Error = Error;
703+
704+
fn try_from(scalar: Scalar) -> Result<Self> {
705+
NonZeroScalar::new(scalar).into_option().ok_or(Error)
706+
}
707+
}
708+
701709
impl TryFrom<U576> for Scalar {
702710
type Error = Error;
703711

primeorder/src/affine.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,17 @@ where
367367
}
368368
}
369369

370+
impl<C> TryFrom<AffinePoint<C>> for NonIdentity<AffinePoint<C>>
371+
where
372+
C: PrimeCurveParams,
373+
{
374+
type Error = Error;
375+
376+
fn try_from(affine_point: AffinePoint<C>) -> Result<Self> {
377+
NonIdentity::new(affine_point).into_option().ok_or(Error)
378+
}
379+
}
380+
370381
impl<C> TryFrom<EncodedPoint<C>> for AffinePoint<C>
371382
where
372383
C: PrimeCurveParams,

primeorder/src/projective.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,17 @@ where
477477
}
478478
}
479479

480+
impl<C> TryFrom<ProjectivePoint<C>> for NonIdentity<ProjectivePoint<C>>
481+
where
482+
C: PrimeCurveParams,
483+
{
484+
type Error = Error;
485+
486+
fn try_from(point: ProjectivePoint<C>) -> Result<Self> {
487+
NonIdentity::new(point).into_option().ok_or(Error)
488+
}
489+
}
490+
480491
impl<C> TryFrom<ProjectivePoint<C>> for PublicKey<C>
481492
where
482493
C: PrimeCurveParams,

sm2/src/arithmetic/scalar.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,14 @@ impl From<&SecretKey> for Scalar {
238238
}
239239
}
240240

241+
impl TryFrom<Scalar> for NonZeroScalar {
242+
type Error = Error;
243+
244+
fn try_from(scalar: Scalar) -> Result<Self> {
245+
NonZeroScalar::new(scalar).into_option().ok_or(Error)
246+
}
247+
}
248+
241249
impl TryFrom<U256> for Scalar {
242250
type Error = Error;
243251

0 commit comments

Comments
 (0)