neg method
Implementation
PallasFp neg() {
// Compute modulus - self
var r0 = BigintUtils.sbb(
PallasFPConst.modulus.limbs[0],
limbs[0],
BigInt.zero,
);
var d0 = r0[0];
var borrow = r0[1];
var r1 = BigintUtils.sbb(PallasFPConst.modulus.limbs[1], limbs[1], borrow);
var d1 = r1[0];
borrow = r1[1];
var r2 = BigintUtils.sbb(PallasFPConst.modulus.limbs[2], limbs[2], borrow);
var d2 = r2[0];
borrow = r2[1];
var r3 = BigintUtils.sbb(PallasFPConst.modulus.limbs[3], limbs[3], borrow);
var d3 = r3[0];
// final borrow ignored (same as Rust)
// mask = 0xffff...ffff if self != 0
// mask = 0x0000...0000 if self == 0
final BigInt orAll = limbs[0] | limbs[1] | limbs[2] | limbs[3];
// ((orAll == 0) ? 1 : 0) - 1 → 0 or -1
BigInt mask =
((orAll == BigInt.zero ? BigInt.one : BigInt.zero) - BigInt.one).toU64;
return PallasFp([d0 & mask, d1 & mask, d2 & mask, d3 & mask]);
}