@@ -613,30 +613,16 @@ impl EdwardsPoint {
613613 where
614614 X : for < ' a > elliptic_curve:: hash2curve:: ExpandMsg < ' a > ,
615615 {
616- use elliptic_curve:: {
617- bigint:: { ArrayEncoding , Encoding , NonZero , U384 } ,
618- hash2curve:: Expander ,
619- } ;
616+ use elliptic_curve:: hash2curve:: Expander ;
620617
621618 let dst = [ dst] ;
622619 let mut random_bytes = [ 0u8 ; 96 ] ;
623620 let mut expander =
624621 X :: expand_message ( & [ msg] , & dst, random_bytes. len ( ) ) . expect ( "expand_message failed" ) ;
625622 expander. fill_bytes ( & mut random_bytes) ;
626623
627- let p = NonZero :: new ( U384 :: from_be_hex ( "000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed" ) ) . expect ( "NonZero::new failed" ) ;
628- let u0 = U384 :: from_be_bytes (
629- <[ u8 ; 48 ] >:: try_from ( & random_bytes[ ..48 ] ) . expect ( "try_from failed" ) ,
630- ) % p;
631- let u1 = U384 :: from_be_bytes (
632- <[ u8 ; 48 ] >:: try_from ( & random_bytes[ 48 ..] ) . expect ( "try_from failed" ) ,
633- ) % p;
634-
635- let mut arr = [ 0u8 ; 32 ] ;
636- arr. copy_from_slice ( & u0. to_le_byte_array ( ) [ ..32 ] ) ;
637- let u0 = FieldElement :: from_bytes ( & arr) ;
638- arr. copy_from_slice ( & u1. to_le_byte_array ( ) [ ..32 ] ) ;
639- let u1 = FieldElement :: from_bytes ( & arr) ;
624+ let u0 = FieldElement :: from_xmd_bytes_mod_order ( & random_bytes[ ..48 ] ) ;
625+ let u1 = FieldElement :: from_xmd_bytes_mod_order ( & random_bytes[ 48 ..] ) ;
640626
641627 let q0 = map_to_edwards ( u0) ;
642628 let q1 = map_to_edwards ( u1) ;
@@ -674,11 +660,7 @@ fn elligator_encode(e: FieldElement) -> (FieldElement, FieldElement) {
674660
675661#[ cfg( feature = "group" ) ]
676662fn montgomery_to_edwards ( u : FieldElement , v : FieldElement ) -> ( FieldElement , FieldElement ) {
677- let inv_sqr_d = FieldElement :: from_bytes ( & [
678- 6 , 126 , 69 , 255 , 170 , 4 , 110 , 204 , 130 , 26 , 125 , 75 , 209 , 211 , 161 , 197 , 126 , 79 , 252 , 3 ,
679- 220 , 8 , 123 , 210 , 187 , 6 , 160 , 96 , 244 , 237 , 38 , 15 ,
680- ] ) ;
681- let x = & ( & v. invert ( ) * & u) * & inv_sqr_d;
663+ let x = & ( & v. invert ( ) * & u) * & FieldElement :: MONTGOMERY_TO_EDWARDS_INV_SQRT_D ;
682664 let u1 = & u - & FieldElement :: ONE ;
683665 let u2 = & u + & FieldElement :: ONE ;
684666 let y = & u1 * & u2. invert ( ) ;
@@ -687,12 +669,11 @@ fn montgomery_to_edwards(u: FieldElement, v: FieldElement) -> (FieldElement, Fie
687669
688670#[ cfg( feature = "group" ) ]
689671fn affine_to_edwards ( x : FieldElement , y : FieldElement ) -> EdwardsPoint {
690- let t = & x * & y;
691672 EdwardsPoint {
692673 X : x,
693674 Y : y,
694675 Z : FieldElement :: ONE ,
695- T : t ,
676+ T : & x * & y ,
696677 }
697678}
698679
0 commit comments