# VOR
# Functions:
bigModExp(uint256 base, uint256 exponent) internalsquareRoot(uint256 x) internalySquared(uint256 x) internalisOnCurve(uint256[2] p) internalfieldHash(bytes b) internalnewCandidateSecp256k1Point(bytes b) internalhashToCurve(uint256[2] pk, uint256 input) internalecmulVerify(uint256[2] multiplicand, uint256 scalar, uint256[2] product) internalprojectiveSub(uint256 x1, uint256 z1, uint256 x2, uint256 z2) internalprojectiveMul(uint256 x1, uint256 z1, uint256 x2, uint256 z2) internalprojectiveECAdd(uint256 px, uint256 py, uint256 qx, uint256 qy) internalaffineECAdd(uint256[2] p1, uint256[2] p2, uint256 invZ) internalverifyLinearCombinationWithGenerator(uint256 c, uint256[2] p, uint256 s, address lcWitness) internallinearCombination(uint256 c, uint256[2] p1, uint256[2] cp1Witness, uint256 s, uint256[2] p2, uint256[2] sp2Witness, uint256 zInv) internalscalarFromCurvePoints(uint256[2] hash, uint256[2] pk, uint256[2] gamma, address uWitness, uint256[2] v) internalverifyVORProof(uint256[2] pk, uint256[2] gamma, uint256 c, uint256 s, uint256 seed, address uWitness, uint256[2] cGammaWitness, uint256[2] sHashWitness, uint256 zInv) internalrandomValueFromVORProof(bytes proof) internal
# Function bigModExp(uint256 base, uint256 exponent) internal -> uint256 exponentiation
# Function squareRoot(uint256 x) internal -> uint256
# Function ySquared(uint256 x) internal -> uint256
# Function isOnCurve(uint256[2] p) internal -> bool
# Function fieldHash(bytes b) internal -> uint256 x_
# Function newCandidateSecp256k1Point(bytes b) internal -> uint256[2] p
# Function hashToCurve(uint256[2] pk, uint256 input) internal -> uint256[2] rv
# Function ecmulVerify(uint256[2] multiplicand, uint256 scalar, uint256[2] product) internal -> bool verifies
Based on Vitalik Buterin's idea in ethresear.ch post cited below.
# Parameters:
secp256k1: pointzero: GF(GROUP_ORDER) scalarsecp256k1: expected to be multiplier * multiplicand
# Return Values:
# Function projectiveSub(uint256 x1, uint256 z1, uint256 x2, uint256 z2) internal -> uint256 x3, uint256 z3
# Function projectiveMul(uint256 x1, uint256 z1, uint256 x2, uint256 z2) internal -> uint256 x3, uint256 z3
# Function projectiveECAdd(uint256 px, uint256 py, uint256 qx, uint256 qy) internal -> uint256 sx, uint256 sy, uint256 sz
# Function affineECAdd(uint256[2] p1, uint256[2] p2, uint256 invZ) internal -> uint256[2]
# Function verifyLinearCombinationWithGenerator(uint256 c, uint256[2] p, uint256 s, address lcWitness) internal -> bool
# Function linearCombination(uint256 c, uint256[2] p1, uint256[2] cp1Witness, uint256 s, uint256[2] p2, uint256[2] sp2Witness, uint256 zInv) internal -> uint256[2]
# Function scalarFromCurvePoints(uint256[2] hash, uint256[2] pk, uint256[2] gamma, address uWitness, uint256[2] v) internal -> uint256 s
# Function verifyVORProof(uint256[2] pk, uint256[2] gamma, uint256 c, uint256 s, uint256 seed, address uWitness, uint256[2] cGammaWitness, uint256[2] sHashWitness, uint256 zInv) internal
# Function randomValueFromVORProof(bytes proof) internal -> uint256 output
No description