add method

JubJubFq add(
  1. JubJubFq rhs
)

Implementation

JubJubFq add(JubJubFq rhs) {
  // Step 1: Add limbs with carry
  var adcRes = BigintUtils.adc(limbs[0], rhs.limbs[0], BigInt.zero);
  BigInt d0 = adcRes[0];
  BigInt carry = adcRes[1];

  adcRes = BigintUtils.adc(limbs[1], rhs.limbs[1], carry);
  BigInt d1 = adcRes[0];
  carry = adcRes[1];

  adcRes = BigintUtils.adc(limbs[2], rhs.limbs[2], carry);
  BigInt d2 = adcRes[0];
  carry = adcRes[1];

  adcRes = BigintUtils.adc(limbs[3], rhs.limbs[3], carry);
  BigInt d3 = adcRes[0];
  // final carry ignored

  // Step 2: Reduce modulo modulus
  return JubJubFq([d0, d1, d2, d3]).sub(JubJubFqConst.modulus);
}