forked from Consensys/gnark
-
Notifications
You must be signed in to change notification settings - Fork 0
/
curve.go
63 lines (56 loc) · 1.4 KB
/
curve.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package twistededwards
import (
"github.com/consensys/gnark-crypto/ecc/twistededwards"
"github.com/airchains-network/gnark/frontend"
)
// curve curve is the default twisted edwards companion curve (defined on api.Curve().Fr)
type curve struct {
api frontend.API
id twistededwards.ID
params *CurveParams
endo *EndoParams
}
func (c *curve) Params() *CurveParams {
return c.params
}
func (c *curve) API() frontend.API {
return c.api
}
func (c *curve) Endo() *EndoParams {
return c.endo
}
func (c *curve) Add(p1, p2 Point) Point {
var p Point
p.add(c.api, &p1, &p2, c.params)
return p
}
func (c *curve) Double(p1 Point) Point {
var p Point
p.double(c.api, &p1, c.params)
return p
}
func (c *curve) Neg(p1 Point) Point {
var p Point
p.neg(c.api, &p1)
return p
}
func (c *curve) AssertIsOnCurve(p1 Point) {
p1.assertIsOnCurve(c.api, c.params)
}
func (c *curve) ScalarMul(p1 Point, scalar frontend.Variable) Point {
var p Point
if c.endo != nil {
// TODO restore
// this is disabled until this issue is solved https://github.com/airchains-network/gnark/issues/268
// p.scalarMulGLV(c.api, &p1, scalar, c.params, c.endo)
p.scalarMul(c.api, &p1, scalar, c.params)
} else {
p.scalarMul(c.api, &p1, scalar, c.params)
}
return p
}
func (c *curve) DoubleBaseScalarMul(p1, p2 Point, s1, s2 frontend.Variable) Point {
var p Point
p.doubleBaseScalarMul(c.api, &p1, &p2, s1, s2, c.params)
return p
}