forked from Consensys/gnark
/
inner_compute.go
59 lines (55 loc) · 1.77 KB
/
inner_compute.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
package sw_bls12377
import (
"math/big"
bls12377 "github.com/consensys/gnark-crypto/ecc/bls12-377"
)
func computeCurveTable() [][2]*big.Int {
G1jac, _, _, _ := bls12377.Generators()
table := make([][2]*big.Int, 253)
tmp := new(bls12377.G1Jac).Set(&G1jac)
aff := new(bls12377.G1Affine)
jac := new(bls12377.G1Jac)
for i := 1; i < 253; i++ {
tmp = tmp.Double(tmp)
switch i {
case 1, 2:
jac.Set(tmp).AddAssign(&G1jac)
aff.FromJacobian(jac)
table[i-1] = [2]*big.Int{aff.X.BigInt(new(big.Int)), aff.Y.BigInt(new(big.Int))}
case 3:
jac.Set(tmp).SubAssign(&G1jac)
aff.FromJacobian(jac)
table[i-1] = [2]*big.Int{aff.X.BigInt(new(big.Int)), aff.Y.BigInt(new(big.Int))}
fallthrough
default:
aff.FromJacobian(tmp)
table[i] = [2]*big.Int{aff.X.BigInt(new(big.Int)), aff.Y.BigInt(new(big.Int))}
}
}
return table[:]
}
func computeTwistTable() [][4]*big.Int {
_, G2jac, _, _ := bls12377.Generators()
table := make([][4]*big.Int, 253)
tmp := new(bls12377.G2Jac).Set(&G2jac)
aff := new(bls12377.G2Affine)
jac := new(bls12377.G2Jac)
for i := 1; i < 253; i++ {
tmp = tmp.Double(tmp)
switch i {
case 1, 2:
jac.Set(tmp).AddAssign(&G2jac)
aff.FromJacobian(jac)
table[i-1] = [4]*big.Int{aff.X.A0.BigInt(new(big.Int)), aff.X.A1.BigInt(new(big.Int)), aff.Y.A0.BigInt(new(big.Int)), aff.Y.A1.BigInt(new(big.Int))}
case 3:
jac.Set(tmp).SubAssign(&G2jac)
aff.FromJacobian(jac)
table[i-1] = [4]*big.Int{aff.X.A0.BigInt(new(big.Int)), aff.X.A1.BigInt(new(big.Int)), aff.Y.A0.BigInt(new(big.Int)), aff.Y.A1.BigInt(new(big.Int))}
fallthrough
default:
aff.FromJacobian(tmp)
table[i] = [4]*big.Int{aff.X.A0.BigInt(new(big.Int)), aff.X.A1.BigInt(new(big.Int)), aff.Y.A0.BigInt(new(big.Int)), aff.Y.A1.BigInt(new(big.Int))}
}
}
return table[:]
}