File tree Expand file tree Collapse file tree 1 file changed +8
-3
lines changed Expand file tree Collapse file tree 1 file changed +8
-3
lines changed Original file line number Diff line number Diff line change @@ -267,18 +267,23 @@ impl DecafPoint {
267
267
fn elligator_decaf_flavour ( r_0 : & FieldElement ) -> DecafPoint {
268
268
// Follows Appendix C of the Decaf paper.
269
269
// Use n = 2 as the quadratic nonresidue so that n*x = x + x.
270
+ let minus_one = -& FieldElement :: one ( ) ;
270
271
271
272
// 1. Compute r <--- nr_0^2.
272
273
let r_0_squared = r_0. square ( ) ;
273
274
let r = & r_0_squared + & r_0_squared;
274
275
275
276
// 2. Compute D <--- (dr + (a-d)) * (dr - (d + ar))
276
277
let dr = & constants:: d * & r;
277
- // D = (dr + (a-d)) * (dr - (d + ar)) = (dr + (a-d))*(dr - (d-r)) since a=-1
278
- let D = & ( & dr + & constants:: a_minus_d) * & ( & dr - & ( & constants:: d - & r) ) ;
278
+ // D = (dr + (a-d)) * (dr - (d + ar))
279
+ // = (dr + (a-d)) * (dr - (d-r)) since a=-1
280
+ // writing as
281
+ // = (dr + (a-d)) * dr - (dr + (a-d)) * (d - r)
282
+ // avoids two consecutive additions (could cause overflow)
283
+ let dr_plus_amd = & dr + & constants:: a_minus_d;
284
+ let D = & ( & dr_plus_amd * & dr) - & ( & dr_plus_amd * & ( & constants:: d - & r) ) ;
279
285
280
286
// 3. Compute N <--- (r+1) * (a-2d)
281
- let minus_one = -& FieldElement :: one ( ) ;
282
287
let N = & ( & r + & FieldElement :: one ( ) ) * & ( & minus_one - & constants:: d2) ;
283
288
284
289
// 4. Compute
You can’t perform that action at this time.
0 commit comments