add method
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);
}