from "ecc/babyjubjubParams" import BabyJubJubParams; // Check if a point is on a twisted Edwards curve // Curve parameters are defined with the last argument // See appendix 3.3.1 of Zcash protocol specification: // https://github.com/zcash/zips/blob/master/protocol/protocol.pdf def main(field[2] pt, BabyJubJubParams context) -> bool { field a = context.JUBJUB_A; field d = context.JUBJUB_D; field uu = pt[0] * pt[0]; field vv = pt[1] * pt[1]; field uuvv = uu * vv; assert(a * uu + vv == 1 + d * uuvv); return true; }