aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/bn256/cloudflare/curve.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2018-03-20 00:13:54 +0800
committerGitHub <noreply@github.com>2018-03-20 00:13:54 +0800
commit1203c6a237cb87b78ec495772cecb178200499ce (patch)
treea51e6c3a24e43f265fc5c9b4f2bdb7ff7de6a8db /crypto/bn256/cloudflare/curve.go
parent0965761a45562d609f6036963dbac84561174677 (diff)
downloaddexon-1203c6a237cb87b78ec495772cecb178200499ce.tar
dexon-1203c6a237cb87b78ec495772cecb178200499ce.tar.gz
dexon-1203c6a237cb87b78ec495772cecb178200499ce.tar.bz2
dexon-1203c6a237cb87b78ec495772cecb178200499ce.tar.lz
dexon-1203c6a237cb87b78ec495772cecb178200499ce.tar.xz
dexon-1203c6a237cb87b78ec495772cecb178200499ce.tar.zst
dexon-1203c6a237cb87b78ec495772cecb178200499ce.zip
crypto/bn256: full switchover to cloudflare's code (#16301)
* crypto/bn256: full switchover to cloudflare's code * crypto/bn256: only use cloudflare for optimized architectures * crypto/bn256: upstream fallback for non-optimized code * .travis, build: drop support for Go 1.8 (need type aliases) * crypto/bn256/cloudflare: enable curve mul lattice optimization
Diffstat (limited to 'crypto/bn256/cloudflare/curve.go')
-rw-r--r--crypto/bn256/cloudflare/curve.go19
1 files changed, 14 insertions, 5 deletions
diff --git a/crypto/bn256/cloudflare/curve.go b/crypto/bn256/cloudflare/curve.go
index b6aecc0a6..18e9b38f3 100644
--- a/crypto/bn256/cloudflare/curve.go
+++ b/crypto/bn256/cloudflare/curve.go
@@ -183,15 +183,24 @@ func (c *curvePoint) Double(a *curvePoint) {
}
func (c *curvePoint) Mul(a *curvePoint, scalar *big.Int) {
- sum, t := &curvePoint{}, &curvePoint{}
+ precomp := [1 << 2]*curvePoint{nil, {}, {}, {}}
+ precomp[1].Set(a)
+ precomp[2].Set(a)
+ gfpMul(&precomp[2].x, &precomp[2].x, xiTo2PSquaredMinus2Over3)
+ precomp[3].Add(precomp[1], precomp[2])
+
+ multiScalar := curveLattice.Multi(scalar)
+
+ sum := &curvePoint{}
sum.SetInfinity()
+ t := &curvePoint{}
- for i := scalar.BitLen(); i >= 0; i-- {
+ for i := len(multiScalar) - 1; i >= 0; i-- {
t.Double(sum)
- if scalar.Bit(i) != 0 {
- sum.Add(t, a)
- } else {
+ if multiScalar[i] == 0 {
sum.Set(t)
+ } else {
+ sum.Add(t, precomp[multiScalar[i]])
}
}
c.Set(sum)