Skip to content

Commit 1097a17

Browse files
yelhousniivokub
andauthored
Refactor: remove geth dependency (#440)
* feat: add go-ethereum dep for ecdsa compatibility * feat: add emulated SW EC * feat: add ECDSA using emulated SW * refactor: use gnark-crypto instead of geth (secp256k1, ecdsa) * fix(ecdsa): rebase on gnark-crypto * refactor(test/ecdsa): update following gnark-crypto * test: ecdsa with pre-hashed message * feat: gnark-crypto dependency update * refactor: ValueOf takes any integer-like * chore: remove unused dependencies * refactor: ecdsa package import --------- Co-authored-by: Ivo Kubjas <[email protected]>
1 parent 381d72c commit 1097a17

File tree

5 files changed

+141
-114
lines changed

5 files changed

+141
-114
lines changed

go.mod

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ go 1.18
55
require (
66
github.com/blang/semver/v4 v4.0.0
77
github.com/consensys/bavard v0.1.13
8-
github.com/consensys/gnark-crypto v0.9.1-0.20230126211359-1835092d6670
9-
github.com/ethereum/go-ethereum v1.10.26
8+
github.com/consensys/gnark-crypto v0.9.1-0.20230203170247-e77b0919d1aa
109
github.com/fxamacker/cbor/v2 v2.2.0
1110
github.com/google/go-cmp v0.5.8
1211
github.com/google/pprof v0.0.0-20220729232143-a41b82acbcb1
@@ -17,9 +16,7 @@ require (
1716
)
1817

1918
require (
20-
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
2119
github.com/davecgh/go-spew v1.1.1 // indirect
22-
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
2320
github.com/kr/pretty v0.3.0 // indirect
2421
github.com/mmcloughlin/addchain v0.4.0 // indirect
2522
github.com/pmezard/go-difflib v1.0.0 // indirect

go.sum

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,14 @@
11
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
22
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
3-
github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k=
4-
github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU=
5-
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
63
github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ=
74
github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI=
8-
github.com/consensys/gnark-crypto v0.8.1-0.20221220191316-4b7364bddab8 h1:Ij6UQpKx4/Ox6L6qFPk8NhEnTsYCEXlILnh+1Hi1grY=
9-
github.com/consensys/gnark-crypto v0.8.1-0.20221220191316-4b7364bddab8/go.mod h1:CkbdF9hbRidRJYMRzmfX8TMOr95I2pYXRHF18MzRrvA=
10-
github.com/consensys/gnark-crypto v0.9.1-0.20230126211359-1835092d6670 h1:AkewHCm7VuiCV3nDxsFVYE8JHPi9RhR6zFq4I6Ha0Fg=
11-
github.com/consensys/gnark-crypto v0.9.1-0.20230126211359-1835092d6670/go.mod h1:CkbdF9hbRidRJYMRzmfX8TMOr95I2pYXRHF18MzRrvA=
5+
github.com/consensys/gnark-crypto v0.9.1-0.20230203170247-e77b0919d1aa h1:y9E8TLAKfwpj1uAnxfiUfsK/hOusP2fo2o/BBQiZxEU=
6+
github.com/consensys/gnark-crypto v0.9.1-0.20230203170247-e77b0919d1aa/go.mod h1:CkbdF9hbRidRJYMRzmfX8TMOr95I2pYXRHF18MzRrvA=
127
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
138
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
149
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1510
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
1611
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
17-
github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0=
18-
github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
19-
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc=
20-
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs=
21-
github.com/ethereum/go-ethereum v1.10.26 h1:i/7d9RBBwiXCEuyduBQzJw/mKmnvzsN14jqBmytw72s=
22-
github.com/ethereum/go-ethereum v1.10.26/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg=
2312
github.com/fxamacker/cbor/v2 v2.2.0 h1:6eXqdDDe588rSYAi1HfZKbx6YYQO4mxQ9eC6xYpU/JQ=
2413
github.com/fxamacker/cbor/v2 v2.2.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo=
2514
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=

std/algebra/weierstrass/doc_test.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ import (
55
"math/big"
66

77
"github.com/consensys/gnark-crypto/ecc"
8+
"github.com/consensys/gnark-crypto/ecc/secp256k1"
89
"github.com/consensys/gnark/backend/groth16"
910
"github.com/consensys/gnark/frontend"
1011
"github.com/consensys/gnark/frontend/cs/r1cs"
1112
"github.com/consensys/gnark/std/algebra/weierstrass"
1213
"github.com/consensys/gnark/std/math/emulated"
13-
"github.com/ethereum/go-ethereum/crypto/secp256k1"
1414
)
1515

1616
type ExampleCurveCircuit[Base, Scalar emulated.FieldParams] struct {
@@ -33,16 +33,17 @@ func (c *ExampleCurveCircuit[B, S]) Define(api frontend.API) error {
3333
}
3434

3535
func ExampleCurve() {
36-
secpCurve := secp256k1.S256()
3736
s := big.NewInt(9)
38-
sx, sy := secpCurve.ScalarMult(secpCurve.Gx, secpCurve.Gy, s.Bytes())
39-
fmt.Printf("result (%d, %d)", sx, sy)
37+
_, g := secp256k1.Generators()
38+
var Q secp256k1.G1Affine
39+
Q.ScalarMultiplication(&g, s)
40+
fmt.Printf("result (%d, %d)", Q.X, Q.Y)
4041

4142
circuit := ExampleCurveCircuit[emulated.Secp256k1Fp, emulated.Secp256k1Fr]{}
4243
witness := ExampleCurveCircuit[emulated.Secp256k1Fp, emulated.Secp256k1Fr]{
4344
Res: weierstrass.AffinePoint[emulated.Secp256k1Fp]{
44-
X: emulated.ValueOf[emulated.Secp256k1Fp](secpCurve.Gx),
45-
Y: emulated.ValueOf[emulated.Secp256k1Fp](secpCurve.Gy),
45+
X: emulated.ValueOf[emulated.Secp256k1Fp](g.X),
46+
Y: emulated.ValueOf[emulated.Secp256k1Fp](g.Y),
4647
},
4748
}
4849
ccs, err := frontend.Compile(ecc.BN254.ScalarField(), r1cs.NewBuilder, &circuit)

std/algebra/weierstrass/point_test.go

Lines changed: 42 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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

1617
var testCurve = ecc.BN254
@@ -31,16 +32,17 @@ func (c *NegTest[T, S]) Define(api frontend.API) error {
3132

3233
func 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

6567
func 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

103110
func 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

137147
func 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

Comments
 (0)