@@ -6,11 +6,12 @@ import (
66
77 "github.com/consensys/gnark-crypto/ecc"
88 "github.com/consensys/gnark-crypto/ecc/bn254"
9+ "github.com/consensys/gnark-crypto/ecc/secp256k1"
10+ "github.com/consensys/gnark-crypto/ecc/secp256k1/fp"
911 "github.com/consensys/gnark/frontend"
1012 "github.com/consensys/gnark/frontend/cs/r1cs"
1113 "github.com/consensys/gnark/std/math/emulated"
1214 "github.com/consensys/gnark/test"
13- "github.com/ethereum/go-ethereum/crypto/secp256k1"
1415)
1516
1617var testCurve = ecc .BN254
@@ -31,16 +32,17 @@ func (c *NegTest[T, S]) Define(api frontend.API) error {
3132
3233func TestNeg (t * testing.T ) {
3334 assert := test .NewAssert (t )
34- secpCurve := secp256k1 .S256 ()
35- yn := new (big.Int ).Sub (secpCurve .P , secpCurve .Gy )
35+ _ , g := secp256k1 .Generators ()
36+ var yn fp.Element
37+ yn .Neg (& g .Y )
3638 circuit := NegTest [emulated.Secp256k1Fp , emulated.Secp256k1Fr ]{}
3739 witness := NegTest [emulated.Secp256k1Fp , emulated.Secp256k1Fr ]{
3840 P : AffinePoint [emulated.Secp256k1Fp ]{
39- X : emulated.ValueOf [emulated.Secp256k1Fp ](secpCurve . Gx ),
40- Y : emulated.ValueOf [emulated.Secp256k1Fp ](secpCurve . Gy ),
41+ X : emulated.ValueOf [emulated.Secp256k1Fp ](g . X ),
42+ Y : emulated.ValueOf [emulated.Secp256k1Fp ](g . Y ),
4143 },
4244 Q : AffinePoint [emulated.Secp256k1Fp ]{
43- X : emulated.ValueOf [emulated.Secp256k1Fp ](secpCurve . Gx ),
45+ X : emulated.ValueOf [emulated.Secp256k1Fp ](g . X ),
4446 Y : emulated.ValueOf [emulated.Secp256k1Fp ](yn ),
4547 },
4648 }
@@ -64,22 +66,27 @@ func (c *AddTest[T, S]) Define(api frontend.API) error {
6466
6567func TestAdd (t * testing.T ) {
6668 assert := test .NewAssert (t )
67- secpCurve := secp256k1 .S256 ()
68- xd , yd := secpCurve .Double (secpCurve .Gx , secpCurve .Gy )
69- xa , ya := secpCurve .Add (xd , yd , secpCurve .Gx , secpCurve .Gy )
69+ var dJac , aJac secp256k1.G1Jac
70+ g , _ := secp256k1 .Generators ()
71+ dJac .Double (& g )
72+ aJac .Set (& dJac ).
73+ AddAssign (& g )
74+ var dAff , aAff secp256k1.G1Affine
75+ dAff .FromJacobian (& dJac )
76+ aAff .FromJacobian (& aJac )
7077 circuit := AddTest [emulated.Secp256k1Fp , emulated.Secp256k1Fr ]{}
7178 witness := AddTest [emulated.Secp256k1Fp , emulated.Secp256k1Fr ]{
7279 P : AffinePoint [emulated.Secp256k1Fp ]{
73- X : emulated.ValueOf [emulated.Secp256k1Fp ](secpCurve . Gx ),
74- Y : emulated.ValueOf [emulated.Secp256k1Fp ](secpCurve . Gy ),
80+ X : emulated.ValueOf [emulated.Secp256k1Fp ](g . X ),
81+ Y : emulated.ValueOf [emulated.Secp256k1Fp ](g . Y ),
7582 },
7683 Q : AffinePoint [emulated.Secp256k1Fp ]{
77- X : emulated.ValueOf [emulated.Secp256k1Fp ](xd ),
78- Y : emulated.ValueOf [emulated.Secp256k1Fp ](yd ),
84+ X : emulated.ValueOf [emulated.Secp256k1Fp ](dAff . X ),
85+ Y : emulated.ValueOf [emulated.Secp256k1Fp ](dAff . Y ),
7986 },
8087 R : AffinePoint [emulated.Secp256k1Fp ]{
81- X : emulated.ValueOf [emulated.Secp256k1Fp ](xa ),
82- Y : emulated.ValueOf [emulated.Secp256k1Fp ](ya ),
88+ X : emulated.ValueOf [emulated.Secp256k1Fp ](aAff . X ),
89+ Y : emulated.ValueOf [emulated.Secp256k1Fp ](aAff . Y ),
8390 },
8491 }
8592 err := test .IsSolved (& circuit , & witness , testCurve .ScalarField ())
@@ -102,17 +109,20 @@ func (c *DoubleTest[T, S]) Define(api frontend.API) error {
102109
103110func TestDouble (t * testing.T ) {
104111 assert := test .NewAssert (t )
105- secpCurve := secp256k1 .S256 ()
106- xd , yd := secpCurve .Double (secpCurve .Gx , secpCurve .Gy )
112+ g , _ := secp256k1 .Generators ()
113+ var dJac secp256k1.G1Jac
114+ dJac .Double (& g )
115+ var dAff secp256k1.G1Affine
116+ dAff .FromJacobian (& dJac )
107117 circuit := DoubleTest [emulated.Secp256k1Fp , emulated.Secp256k1Fr ]{}
108118 witness := DoubleTest [emulated.Secp256k1Fp , emulated.Secp256k1Fr ]{
109119 P : AffinePoint [emulated.Secp256k1Fp ]{
110- X : emulated.ValueOf [emulated.Secp256k1Fp ](secpCurve . Gx ),
111- Y : emulated.ValueOf [emulated.Secp256k1Fp ](secpCurve . Gy ),
120+ X : emulated.ValueOf [emulated.Secp256k1Fp ](g . X ),
121+ Y : emulated.ValueOf [emulated.Secp256k1Fp ](g . Y ),
112122 },
113123 Q : AffinePoint [emulated.Secp256k1Fp ]{
114- X : emulated.ValueOf [emulated.Secp256k1Fp ](xd ),
115- Y : emulated.ValueOf [emulated.Secp256k1Fp ](yd ),
124+ X : emulated.ValueOf [emulated.Secp256k1Fp ](dAff . X ),
125+ Y : emulated.ValueOf [emulated.Secp256k1Fp ](dAff . Y ),
116126 },
117127 }
118128 err := test .IsSolved (& circuit , & witness , testCurve .ScalarField ())
@@ -136,21 +146,22 @@ func (c *ScalarMulTest[T, S]) Define(api frontend.API) error {
136146
137147func TestScalarMul (t * testing.T ) {
138148 assert := test .NewAssert (t )
139- secpCurve := secp256k1 .S256 ()
149+ _ , g := secp256k1 .Generators ()
140150 s , ok := new (big.Int ).SetString ("44693544921776318736021182399461740191514036429448770306966433218654680512345" , 10 )
141151 assert .True (ok )
142- sx , sy := secpCurve .ScalarMult (secpCurve .Gx , secpCurve .Gy , s .Bytes ())
152+ var S secp256k1.G1Affine
153+ S .ScalarMultiplication (& g , s )
143154
144155 circuit := ScalarMulTest [emulated.Secp256k1Fp , emulated.Secp256k1Fr ]{}
145156 witness := ScalarMulTest [emulated.Secp256k1Fp , emulated.Secp256k1Fr ]{
146157 S : emulated.ValueOf [emulated.Secp256k1Fr ](s ),
147158 P : AffinePoint [emulated.Secp256k1Fp ]{
148- X : emulated.ValueOf [emulated.Secp256k1Fp ](secpCurve . Gx ),
149- Y : emulated.ValueOf [emulated.Secp256k1Fp ](secpCurve . Gy ),
159+ X : emulated.ValueOf [emulated.Secp256k1Fp ](g . X ),
160+ Y : emulated.ValueOf [emulated.Secp256k1Fp ](g . Y ),
150161 },
151162 Q : AffinePoint [emulated.Secp256k1Fp ]{
152- X : emulated.ValueOf [emulated.Secp256k1Fp ](sx ),
153- Y : emulated.ValueOf [emulated.Secp256k1Fp ](sy ),
163+ X : emulated.ValueOf [emulated.Secp256k1Fp ](S . X ),
164+ Y : emulated.ValueOf [emulated.Secp256k1Fp ](S . Y ),
154165 },
155166 }
156167 err := test .IsSolved (& circuit , & witness , testCurve .ScalarField ())
@@ -171,12 +182,12 @@ func TestScalarMul2(t *testing.T) {
171182 witness := ScalarMulTest [emulated.BN254Fp , emulated.BN254Fr ]{
172183 S : emulated.ValueOf [emulated.BN254Fr ](s ),
173184 P : AffinePoint [emulated.BN254Fp ]{
174- X : emulated.ValueOf [emulated.BN254Fp ](gen .X . BigInt ( new (big. Int )) ),
175- Y : emulated.ValueOf [emulated.BN254Fp ](gen .Y . BigInt ( new (big. Int )) ),
185+ X : emulated.ValueOf [emulated.BN254Fp ](gen .X ),
186+ Y : emulated.ValueOf [emulated.BN254Fp ](gen .Y ),
176187 },
177188 Q : AffinePoint [emulated.BN254Fp ]{
178- X : emulated.ValueOf [emulated.BN254Fp ](res .X . BigInt ( new (big. Int )) ),
179- Y : emulated.ValueOf [emulated.BN254Fp ](res .Y . BigInt ( new (big. Int )) ),
189+ X : emulated.ValueOf [emulated.BN254Fp ](res .X ),
190+ Y : emulated.ValueOf [emulated.BN254Fp ](res .Y ),
180191 },
181192 }
182193 err := test .IsSolved (& circuit , & witness , testCurve .ScalarField ())
0 commit comments