@@ -356,7 +356,17 @@ class MontyHalfRange final :
356
356
{
357
357
HPBC_PRECONDITION2 (isValid (x));
358
358
HPBC_PRECONDITION2 (isValid (y));
359
+ #ifdef HURCHALLA_MONTYHALFRANGE_USE_ALT_ADDSUBS
360
+ T tx = static_cast <T>(static_cast <T>(x.get ()) + n_);
361
+ T ty = static_cast <T>(static_cast <T>(y.get ()) + n_);
362
+ T n2 = static_cast <T>(n_ + n_);
363
+ HPBC_ASSERT2 (tx < n2);
364
+ HPBC_ASSERT2 (ty < n2);
365
+ T modsum = ::hurchalla::modular_addition_prereduced_inputs (tx, ty, n2);
366
+ return V (static_cast <S>(modsum - n_));
367
+ #else
359
368
return add (x, getCanonicalValue (y));
369
+ #endif
360
370
}
361
371
HURCHALLA_FORCE_INLINE C add (C cx, C cy) const
362
372
{
@@ -381,10 +391,20 @@ class MontyHalfRange final :
381
391
{
382
392
HPBC_PRECONDITION2 (isValid (x));
383
393
HPBC_PRECONDITION2 (isValid (y));
394
+ #ifdef HURCHALLA_MONTYHALFRANGE_USE_ALT_ADDSUBS
395
+ T tx = static_cast <T>(static_cast <T>(x.get ()) + n_);
396
+ T ty = static_cast <T>(static_cast <T>(y.get ()) + n_);
397
+ T n2 = static_cast <T>(n_ + n_);
398
+ HPBC_ASSERT2 (tx < n2);
399
+ HPBC_ASSERT2 (ty < n2);
400
+ T diff = ::hurchalla::modular_subtraction_prereduced_inputs (tx, ty, n2);
401
+ S result = static_cast <S>(diff - n_);
402
+ #else
384
403
C cx = getCanonicalValue (x);
385
404
C cy = getCanonicalValue (y);
386
405
S result = static_cast <S>(
387
406
static_cast <S>(cx.get ()) - static_cast <S>(cy.get ()));
407
+ #endif
388
408
HPBC_POSTCONDITION2 (isValid (V (result)));
389
409
return V (result);
390
410
}
0 commit comments