File tree Expand file tree Collapse file tree 1 file changed +11
-5
lines changed
ed448-goldilocks/src/edwards Expand file tree Collapse file tree 1 file changed +11
-5
lines changed Original file line number Diff line number Diff line change @@ -122,13 +122,19 @@ impl AffinePoint {
122
122
/// Convert this point to [`MontgomeryPoint`]
123
123
// See https://www.rfc-editor.org/rfc/rfc7748#section-4.2 4-isogeny maps
124
124
pub fn to_montgomery ( & self ) -> MontgomeryPoint {
125
- let x_sq = self . x . square ( ) ;
126
- let y_sq = self . y . square ( ) ;
127
-
128
125
// u = y^2/x^2
129
- let u = y_sq * x_sq. invert ( ) ;
130
126
// v = (2 - x^2 - y^2)*y/x^3)
131
- let v = ( ( FieldElement :: TWO - x_sq - y_sq) * self . y ) * ( x_sq * self . x ) . invert ( ) ;
127
+
128
+ // Optimized to one inversion:
129
+ // x_inv = x^-1
130
+ // t = y * x_inv
131
+ // u = t^2
132
+ // v = (2x_inv^2 - 1 - u) * t
133
+ let x_inv = self . x . invert ( ) ;
134
+ let t = self . y * x_inv;
135
+
136
+ let u = t. square ( ) ;
137
+ let v = ( x_inv. square ( ) . double ( ) - FieldElement :: ONE - u) * t;
132
138
133
139
MontgomeryPoint :: conditional_select (
134
140
& MontgomeryPoint :: new ( u, v) ,
You can’t perform that action at this time.
0 commit comments