arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
gnark-plonky2-verifier/edwards_curve/edpoint_test.go
edwards_curve/edpoint_test.goRaw
  1package edwards_curve
  2
  3import (
  4	"testing"
  5
  6	"github.com/consensys/gnark-crypto/ecc"
  7	"github.com/consensys/gnark/frontend"
  8	"github.com/consensys/gnark/std/math/emulated"
  9	"github.com/consensys/gnark/test"
 10	// "github.com/ethereum/go-ethereum/crypto/secp256k1"
 11)
 12
 13type OnCurveTest[T, S emulated.FieldParams] struct {
 14	P AffinePoint[T]
 15}
 16
 17func (c *OnCurveTest[T, S]) Define(api frontend.API) error {
 18	cr, err := New[T, S](api)
 19	if err != nil {
 20		return err
 21	}
 22	cr.AssertIsOnCurve(c.P)
 23	return nil
 24}
 25
 26func TestGenerator(t *testing.T) {
 27	assert := test.NewAssert(t)
 28	circuit := OnCurveTest[Ed25519, Ed25519Scalars]{}
 29	witness := OnCurveTest[Ed25519, Ed25519Scalars]{
 30		P: AffinePoint[Ed25519]{
 31			X: emulated.NewElement[Ed25519](newBigInt("216936D3CD6E53FEC0A4E231FDD6DC5C692CC7609525A7B2C9562D608F25D51A")),
 32			Y: emulated.NewElement[Ed25519](newBigInt("6666666666666666666666666666666666666666666666666666666666666658")),
 33		},
 34	}
 35	err := test.IsSolved(&circuit, &witness, testCurve.ScalarField())
 36	assert.NoError(err)
 37}
 38
 39var testCurve = ecc.BN254
 40
 41// type NegTest[T, S emulated.FieldParams] struct {
 42// 	P, Q AffinePoint[T]
 43// }
 44
 45// func (c *NegTest[T, S]) Define(api frontend.API) error {
 46// 	cr, err := New[T, S](api)
 47// 	if err != nil {
 48// 		return err
 49// 	}
 50// 	res := cr.Neg(c.P)
 51// 	cr.AssertIsEqual(res, c.Q)
 52// 	return nil
 53// }
 54
 55// func TestNeg(t *testing.T) {
 56// 	assert := test.NewAssert(t)
 57// 	secpCurve := secp256k1.S256()
 58// 	yn := new(big.Int).Sub(secpCurve.P, secpCurve.Gy)
 59// 	circuit := NegTest[emulated.Secp256k1, emulated.Secp256k1Scalars]{}
 60// 	witness := NegTest[emulated.Secp256k1, emulated.Secp256k1Scalars]{
 61// 		P: AffinePoint[emulated.Secp256k1]{
 62// 			X: emulated.NewElement[emulated.Secp256k1](secpCurve.Gx),
 63// 			Y: emulated.NewElement[emulated.Secp256k1](secpCurve.Gy),
 64// 		},
 65// 		Q: AffinePoint[emulated.Secp256k1]{
 66// 			X: emulated.NewElement[emulated.Secp256k1](secpCurve.Gx),
 67// 			Y: emulated.NewElement[emulated.Secp256k1](yn),
 68// 		},
 69// 	}
 70// 	err := test.IsSolved(&circuit, &witness, testCurve.ScalarField())
 71// 	assert.NoError(err)
 72// }
 73
 74// type AddTest[T, S emulated.FieldParams] struct {
 75// 	P, Q, R AffinePoint[T]
 76// }
 77
 78// func (c *AddTest[T, S]) Define(api frontend.API) error {
 79// 	cr, err := New[T, S](api)
 80// 	if err != nil {
 81// 		return err
 82// 	}
 83// 	res := cr.Add(c.P, c.Q)
 84// 	cr.AssertIsEqual(res, c.R)
 85// 	return nil
 86// }
 87
 88// func TestAdd(t *testing.T) {
 89// 	assert := test.NewAssert(t)
 90// 	secpCurve := secp256k1.S256()
 91// 	xd, yd := secpCurve.Double(secpCurve.Gx, secpCurve.Gy)
 92// 	xa, ya := secpCurve.Add(xd, yd, secpCurve.Gx, secpCurve.Gy)
 93// 	circuit := AddTest[emulated.Secp256k1, emulated.Secp256k1Scalars]{}
 94// 	witness := AddTest[emulated.Secp256k1, emulated.Secp256k1Scalars]{
 95// 		P: AffinePoint[emulated.Secp256k1]{
 96// 			X: emulated.NewElement[emulated.Secp256k1](secpCurve.Gx),
 97// 			Y: emulated.NewElement[emulated.Secp256k1](secpCurve.Gy),
 98// 		},
 99// 		Q: AffinePoint[emulated.Secp256k1]{
100// 			X: emulated.NewElement[emulated.Secp256k1](xd),
101// 			Y: emulated.NewElement[emulated.Secp256k1](yd),
102// 		},
103// 		R: AffinePoint[emulated.Secp256k1]{
104// 			X: emulated.NewElement[emulated.Secp256k1](xa),
105// 			Y: emulated.NewElement[emulated.Secp256k1](ya),
106// 		},
107// 	}
108// 	err := test.IsSolved(&circuit, &witness, testCurve.ScalarField())
109// 	assert.NoError(err)
110// }
111
112// type DoubleTest[T, S emulated.FieldParams] struct {
113// 	P, Q AffinePoint[T]
114// }
115
116// func (c *DoubleTest[T, S]) Define(api frontend.API) error {
117// 	cr, err := New[T, S](api)
118// 	if err != nil {
119// 		return err
120// 	}
121// 	res := cr.Double(c.P)
122// 	cr.AssertIsEqual(res, c.Q)
123// 	return nil
124// }
125
126// func TestDouble(t *testing.T) {
127// 	assert := test.NewAssert(t)
128// 	secpCurve := secp256k1.S256()
129// 	xd, yd := secpCurve.Double(secpCurve.Gx, secpCurve.Gy)
130// 	circuit := DoubleTest[emulated.Secp256k1, emulated.Secp256k1Scalars]{}
131// 	witness := DoubleTest[emulated.Secp256k1, emulated.Secp256k1Scalars]{
132// 		P: AffinePoint[emulated.Secp256k1]{
133// 			X: emulated.NewElement[emulated.Secp256k1](secpCurve.Gx),
134// 			Y: emulated.NewElement[emulated.Secp256k1](secpCurve.Gy),
135// 		},
136// 		Q: AffinePoint[emulated.Secp256k1]{
137// 			X: emulated.NewElement[emulated.Secp256k1](xd),
138// 			Y: emulated.NewElement[emulated.Secp256k1](yd),
139// 		},
140// 	}
141// 	err := test.IsSolved(&circuit, &witness, testCurve.ScalarField())
142// 	assert.NoError(err)
143// }
144
145// type ScalarMulTest[T, S emulated.FieldParams] struct {
146// 	P, Q AffinePoint[T]
147// 	S    emulated.Element[S]
148// }
149
150// func (c *ScalarMulTest[T, S]) Define(api frontend.API) error {
151// 	cr, err := New[T, S](api)
152// 	if err != nil {
153// 		return err
154// 	}
155// 	res := cr.ScalarMul(c.P, c.S)
156// 	cr.AssertIsEqual(res, c.Q)
157// 	return nil
158// }
159
160// func TestScalarMul(t *testing.T) {
161// 	assert := test.NewAssert(t)
162// 	secpCurve := secp256k1.S256()
163// 	s, ok := new(big.Int).SetString("44693544921776318736021182399461740191514036429448770306966433218654680512345", 10)
164// 	assert.True(ok)
165// 	sx, sy := secpCurve.ScalarMult(secpCurve.Gx, secpCurve.Gy, s.Bytes())
166
167// 	circuit := ScalarMulTest[emulated.Secp256k1, emulated.Secp256k1Scalars]{}
168// 	witness := ScalarMulTest[emulated.Secp256k1, emulated.Secp256k1Scalars]{
169// 		S: emulated.NewElement[emulated.Secp256k1Scalars](s),
170// 		P: AffinePoint[emulated.Secp256k1]{
171// 			X: emulated.NewElement[emulated.Secp256k1](secpCurve.Gx),
172// 			Y: emulated.NewElement[emulated.Secp256k1](secpCurve.Gy),
173// 		},
174// 		Q: AffinePoint[emulated.Secp256k1]{
175// 			X: emulated.NewElement[emulated.Secp256k1](sx),
176// 			Y: emulated.NewElement[emulated.Secp256k1](sy),
177// 		},
178// 	}
179// 	err := test.IsSolved(&circuit, &witness, testCurve.ScalarField())
180// 	assert.NoError(err)
181// 	// _, err = frontend.Compile(testCurve.ScalarField(), r1cs.NewBuilder, &circuit)
182// 	// assert.NoError(err)
183// }