package types
|
|
|
|
import (
|
|
"math/big"
|
|
|
|
bn256 "github.com/ethereum/go-ethereum/crypto/bn256/cloudflare"
|
|
)
|
|
|
|
// R is the mod of the finite field
|
|
var R, _ = new(big.Int).SetString("21888242871839275222246405745257275088548364400416034343698204186575808495617", 10)
|
|
|
|
// Proof is the data structure of the Groth16 zkSNARK proof
|
|
type Proof struct {
|
|
A *bn256.G1
|
|
B *bn256.G2
|
|
C *bn256.G1
|
|
}
|
|
|
|
// Pk holds the data structure of the ProvingKey
|
|
type Pk struct {
|
|
A []*bn256.G1
|
|
B2 []*bn256.G2
|
|
B1 []*bn256.G1
|
|
C []*bn256.G1
|
|
NVars int
|
|
NPublic int
|
|
VkAlpha1 *bn256.G1
|
|
VkDelta1 *bn256.G1
|
|
VkBeta1 *bn256.G1
|
|
VkBeta2 *bn256.G2
|
|
VkDelta2 *bn256.G2
|
|
HExps []*bn256.G1
|
|
DomainSize int
|
|
PolsA []map[int]*big.Int
|
|
PolsB []map[int]*big.Int
|
|
PolsC []map[int]*big.Int
|
|
}
|
|
|
|
// Witness contains the witness
|
|
type Witness []*big.Int
|
|
|
|
// Vk is the Verification Key data structure
|
|
type Vk struct {
|
|
Alpha *bn256.G1
|
|
Beta *bn256.G2
|
|
Gamma *bn256.G2
|
|
Delta *bn256.G2
|
|
IC []*bn256.G1
|
|
}
|