nim-codex/benchmarks/clitypes.nim

59 lines
1.1 KiB
Nim
Raw Permalink Normal View History

2024-05-28 14:57:28 +00:00
import pkg/stint
import pkg/circomcompat
# import pkg/serde/json
import std/json
export stint, json
type
CircomG1* = G1
CircomG2* = G2
CircomProof* = Proof
CircomKey* = VerifyingKey
CircomInputs* = Inputs
type
Groth16Proof* = object
a*: G1Point
b*: G2Point
c*: G1Point
G1Point* = object
x*: UInt256
y*: UInt256
# A field element F_{p^2} encoded as `real + i * imag`
Fp2Element* = object
real*: UInt256
imag*: UInt256
G2Point* = object
x*: Fp2Element
y*: Fp2Element
func `%`*(integer: UInt256): JsonNode =
2024-05-28 15:07:41 +00:00
%($(integer))
2024-05-28 14:57:28 +00:00
func toG1*(g: CircomG1): G1Point =
G1Point(
x: UInt256.fromBytesLE(g.x),
y: UInt256.fromBytesLE(g.y))
func toG2*(g: CircomG2): G2Point =
G2Point(
x: Fp2Element(
real: UInt256.fromBytesLE(g.x[0]),
imag: UInt256.fromBytesLE(g.x[1])
),
y: Fp2Element(
real: UInt256.fromBytesLE(g.y[0]),
imag: UInt256.fromBytesLE(g.y[1])
))
func toGroth16Proof*(proof: CircomProof): Groth16Proof =
Groth16Proof(
a: proof.a.toG1,
b: proof.b.toG2,
c: proof.c.toG1)
2024-05-28 18:52:10 +00:00
proc parseBigInt*(input: JsonNode): UInt256 =
parse( input.str, UInt256 )