crypto/cloudflare/bn256: fix in-place addition and unmarshalling (#23419)
This commit is contained in:
parent
d16214228f
commit
887902ea4d
|
@ -92,6 +92,19 @@ func TestTripartiteDiffieHellman(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestG2SelfAddition(t *testing.T) {
|
||||||
|
s, _ := rand.Int(rand.Reader, Order)
|
||||||
|
p := new(G2).ScalarBaseMult(s)
|
||||||
|
|
||||||
|
if !p.p.IsOnCurve() {
|
||||||
|
t.Fatal("p isn't on curve")
|
||||||
|
}
|
||||||
|
m := p.Add(p, p).Marshal()
|
||||||
|
if _, err := p.Unmarshal(m); err != nil {
|
||||||
|
t.Fatalf("p.Add(p, p) ∉ G₂: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func BenchmarkG1(b *testing.B) {
|
func BenchmarkG1(b *testing.B) {
|
||||||
x, _ := rand.Int(rand.Reader, Order)
|
x, _ := rand.Int(rand.Reader, Order)
|
||||||
b.ResetTimer()
|
b.ResetTimer()
|
||||||
|
|
|
@ -171,15 +171,15 @@ func (c *curvePoint) Double(a *curvePoint) {
|
||||||
gfpAdd(t, d, d)
|
gfpAdd(t, d, d)
|
||||||
gfpSub(&c.x, f, t)
|
gfpSub(&c.x, f, t)
|
||||||
|
|
||||||
|
gfpMul(&c.z, &a.y, &a.z)
|
||||||
|
gfpAdd(&c.z, &c.z, &c.z)
|
||||||
|
|
||||||
gfpAdd(t, C, C)
|
gfpAdd(t, C, C)
|
||||||
gfpAdd(t2, t, t)
|
gfpAdd(t2, t, t)
|
||||||
gfpAdd(t, t2, t2)
|
gfpAdd(t, t2, t2)
|
||||||
gfpSub(&c.y, d, &c.x)
|
gfpSub(&c.y, d, &c.x)
|
||||||
gfpMul(t2, e, &c.y)
|
gfpMul(t2, e, &c.y)
|
||||||
gfpSub(&c.y, t2, t)
|
gfpSub(&c.y, t2, t)
|
||||||
|
|
||||||
gfpMul(t, &a.y, &a.z)
|
|
||||||
gfpAdd(&c.z, t, t)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *curvePoint) Mul(a *curvePoint, scalar *big.Int) {
|
func (c *curvePoint) Mul(a *curvePoint, scalar *big.Int) {
|
||||||
|
|
|
@ -61,6 +61,7 @@ func (e *gfP) Marshal(out []byte) {
|
||||||
func (e *gfP) Unmarshal(in []byte) error {
|
func (e *gfP) Unmarshal(in []byte) error {
|
||||||
// Unmarshal the bytes into little endian form
|
// Unmarshal the bytes into little endian form
|
||||||
for w := uint(0); w < 4; w++ {
|
for w := uint(0); w < 4; w++ {
|
||||||
|
e[3-w] = 0
|
||||||
for b := uint(0); b < 8; b++ {
|
for b := uint(0); b < 8; b++ {
|
||||||
e[3-w] += uint64(in[8*w+b]) << (56 - 8*b)
|
e[3-w] += uint64(in[8*w+b]) << (56 - 8*b)
|
||||||
}
|
}
|
||||||
|
|
|
@ -150,15 +150,15 @@ func (c *twistPoint) Double(a *twistPoint) {
|
||||||
t.Add(d, d)
|
t.Add(d, d)
|
||||||
c.x.Sub(f, t)
|
c.x.Sub(f, t)
|
||||||
|
|
||||||
|
c.z.Mul(&a.y, &a.z)
|
||||||
|
c.z.Add(&c.z, &c.z)
|
||||||
|
|
||||||
t.Add(C, C)
|
t.Add(C, C)
|
||||||
t2.Add(t, t)
|
t2.Add(t, t)
|
||||||
t.Add(t2, t2)
|
t.Add(t2, t2)
|
||||||
c.y.Sub(d, &c.x)
|
c.y.Sub(d, &c.x)
|
||||||
t2.Mul(e, &c.y)
|
t2.Mul(e, &c.y)
|
||||||
c.y.Sub(t2, t)
|
c.y.Sub(t2, t)
|
||||||
|
|
||||||
t.Mul(&a.y, &a.z)
|
|
||||||
c.z.Add(t, t)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *twistPoint) Mul(a *twistPoint, scalar *big.Int) {
|
func (c *twistPoint) Mul(a *twistPoint, scalar *big.Int) {
|
||||||
|
|
Loading…
Reference in New Issue