Skip to content

Latest commit

 

History

History
211 lines (97 loc) · 7.72 KB

groth16.md

File metadata and controls

211 lines (97 loc) · 7.72 KB

Module 0x2::groth16

Source from https://github.com/MystenLabs/sui/blob/924c294d9b4a98d5bc50cd6c830e7c0cdbc2a2b1/crates/sui-framework/packages/sui-framework/sources/crypto/groth16.move

Struct Curve

Represents an elliptic curve construction to be used in the verifier. Currently we support BLS12-381 and BN254. This should be given as the first parameter to prepare_verifying_key or verify_groth16_proof.

struct Curve has copy, drop, store

Struct PreparedVerifyingKey

A PreparedVerifyingKey consisting of four components in serialized form.

struct PreparedVerifyingKey has copy, drop, store

Struct PublicProofInputs

A PublicProofInputs wrapper around its serialized bytes.

struct PublicProofInputs has copy, drop, store

Struct ProofPoints

A ProofPoints wrapper around the serialized form of three proof points.

struct ProofPoints has copy, drop, store

Constants

const E_INVALID_CURVE: u64 = 0;

const E_INVALID_VERIFYING_KEY: u64 = 1;

const E_TOO_MANY_PUBLIC_INPUTS: u64 = 2;

Function bls12381

Return the Curve value indicating that the BLS12-381 construction should be used in a given function.

public fun bls12381(): groth16::Curve

Function bn254

Return the Curve value indicating that the BN254 construction should be used in a given function.

public fun bn254(): groth16::Curve

Function pvk_from_bytes

Creates a PreparedVerifyingKey from bytes.

public fun pvk_from_bytes(vk_gamma_abc_g1_bytes: vector<u8>, alpha_g1_beta_g2_bytes: vector<u8>, gamma_g2_neg_pc_bytes: vector<u8>, delta_g2_neg_pc_bytes: vector<u8>): groth16::PreparedVerifyingKey

Function pvk_to_bytes

Returns bytes of the four components of the PreparedVerifyingKey.

Function public_proof_inputs_from_bytes

Creates a PublicProofInputs wrapper from bytes.

Function proof_points_from_bytes

Creates a Groth16 ProofPoints from bytes.

Function prepare_verifying_key

@param curve: What elliptic curve construction to use. See bls12381 and bn254. @param verifying_key: An Arkworks canonical compressed serialization of a verifying key.

Returns four vectors of bytes representing the four components of a prepared verifying key. This step computes one pairing e(P, Q), and binds the verification to one particular proof statement. This can be used as inputs for the verify_groth16_proof function.

Function verify_groth16_proof

@param curve: What elliptic curve construction to use. See the bls12381 and bn254 functions. @param prepared_verifying_key: Consists of four vectors of bytes representing the four components of a prepared verifying key. @param public_proof_inputs: Represent inputs that are public. @param proof_points: Represent three proof points.

Returns a boolean indicating whether the proof is valid.

public fun verify_groth16_proof(curve: &groth16::Curve, prepared_verifying_key: &groth16::PreparedVerifyingKey, public_proof_inputs: &groth16::PublicProofInputs, proof_points: &groth16::ProofPoints): bool