diff options
author | Péter Szilágyi <peterke@gmail.com> | 2018-03-20 00:13:54 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-20 00:13:54 +0800 |
commit | 1203c6a237cb87b78ec495772cecb178200499ce (patch) | |
tree | a51e6c3a24e43f265fc5c9b4f2bdb7ff7de6a8db /crypto/bn256/cloudflare/curve.go | |
parent | 0965761a45562d609f6036963dbac84561174677 (diff) | |
download | dexon-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.go | 19 |
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) |