Skip to content

Commit

Permalink
avoid race condition in MakeAffine/ValidatePairing (#59)
Browse files Browse the repository at this point in the history
  • Loading branch information
kevincharm committed May 10, 2024
1 parent 54d4f93 commit 94dae51
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 15 deletions.
9 changes: 6 additions & 3 deletions pairing/bn254/suite.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,10 +132,13 @@ func (s *Suite) Pair(p1 kyber.Point, p2 kyber.Point) kyber.Point {
return s.GT().Point().(*pointGT).Pair(p1, p2)
}

// NB: Not safe for concurrent calls
func (s *Suite) ValidatePairing(p1, p2, inv1, inv2 kyber.Point) bool {
p2.(*pointG2).g.MakeAffine()
inv2.(*pointG2).g.MakeAffine()
return s.Pair(p1, p2).Equal(s.Pair(inv1, inv2))
p2Norm := p2.Clone()
inv2Norm := inv2.Clone()
p2Norm.(*pointG2).g.MakeAffine()
inv2Norm.(*pointG2).g.MakeAffine()
return s.Pair(p1, p2Norm).Equal(s.Pair(inv1, inv2Norm))
}

// Not used other than for reflect.TypeOf()
Expand Down
27 changes: 15 additions & 12 deletions pairing/bn254/twist.go
Original file line number Diff line number Diff line change
Expand Up @@ -177,24 +177,27 @@ func (c *twistPoint) Mul(a *twistPoint, scalar *big.Int) {
c.Set(sum)
}

// NB: Not safe for concurrent calls
func (c *twistPoint) MakeAffine() {
if c.z.IsOne() {
g := c.Clone()
if g.z.IsOne() {
return
} else if c.z.IsZero() {
c.x.SetZero()
c.y.SetOne()
c.t.SetZero()
} else if g.z.IsZero() {
g.x.SetZero()
g.y.SetOne()
g.t.SetZero()
return
}

zInv := (&gfP2{}).Invert(&c.z)
t := (&gfP2{}).Mul(&c.y, zInv)
zInv := (&gfP2{}).Invert(&g.z)
t := (&gfP2{}).Mul(&g.y, zInv)
zInv2 := (&gfP2{}).Square(zInv)
c.y.Mul(t, zInv2)
t.Mul(&c.x, zInv2)
c.x.Set(t)
c.z.SetOne()
c.t.SetOne()
g.y.Mul(t, zInv2)
t.Mul(&g.x, zInv2)
g.x.Set(t)
g.z.SetOne()
g.t.SetOne()
c.Set(g)
}

func (c *twistPoint) Neg(a *twistPoint) {
Expand Down

0 comments on commit 94dae51

Please sign in to comment.