dleqVerify method
bool
dleqVerify(
- MerlinTranscript script,
- VRFInOut out,
- VRFProof proof, {
- bool isKusamaVRF = true,
Verifies a Discrete Logarithm Equality (DLEQ) proof for a Verifiable Random Function (VRF) output.
Parameters:
script: A transcript containing context-specific information used for DLEQ proof verification.out: The VRF input and output pair to be verified.proof: The DLEQ proof associated with the VRF output.isKusamaVRF(optional): A boolean indicating whether it's a Kusama VRF. Default is true.
Implementation
bool dleqVerify(
MerlinTranscript script,
VRFInOut out,
VRFProof proof, {
bool isKusamaVRF = true,
}) {
script.additionalData("proto-name".codeUnits, "DLEQProof".codeUnits);
script.additionalData("vrf:h".codeUnits, out.input);
if (!isKusamaVRF) {
script.additionalData("vrf:pk".codeUnits, toBytes());
}
final pr =
(toPoint() * proof.cBigint) + (Curves.generatorED25519 * proof.sBigint);
script.additionalData("vrf:R=g^r".codeUnits, pr.toBytes());
final hr =
(out.outputPoint * proof.cBigint) + (out.inputPoint * proof.sBigint);
script.additionalData("vrf:h^r".codeUnits, hr.toBytes());
if (isKusamaVRF) {
script.additionalData("vrf:pk".codeUnits, toBytes());
}
script.additionalData("vrf:h^sk".codeUnits, out.output);
final c = script.toBytesWithReduceScalar("prove".codeUnits, 64);
return BytesUtils.bytesEqual(c, proof.c);
}