bn256: fix String methods when g.p == nil
Previously, when g.p == nil, String() crashed. In other method like Add(),
a point with g.p == nil is treated as an identity element.
Besides, the following code is the only way to get an identity element
outside the library: g := bn256.G1{}. In this situation, g.p == nil.
For example, the following code will crash:
package main
import (
"fmt"
"golang.org/x/crypto/bn256"
)
func main() {
g := bn256.G1{}
fmt.Println(g.String())
}
Change-Id: Ied6f7c8197e7b79b0913c000a9cf1cf68f8188a9
GitHub-Last-Rev: 23246486a982ea54d6023726e048c74f02089f25
GitHub-Pull-Request: golang/crypto#75
Reviewed-on: https://go-review.googlesource.com/c/163118
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Filippo Valsorda <filippo@golang.org>
Run-TryBot: Filippo Valsorda <filippo@golang.org>
This commit is contained in:
committed by
Filippo Valsorda
parent
a57398324d
commit
6635ad9975
+11
-2
@@ -56,6 +56,9 @@ func RandomG1(r io.Reader) (*big.Int, *G1, error) {
|
||||
}
|
||||
|
||||
func (e *G1) String() string {
|
||||
if e.p == nil {
|
||||
return "bn256.G1" + newCurvePoint(nil).String()
|
||||
}
|
||||
return "bn256.G1" + e.p.String()
|
||||
}
|
||||
|
||||
@@ -178,6 +181,9 @@ func RandomG2(r io.Reader) (*big.Int, *G2, error) {
|
||||
}
|
||||
|
||||
func (e *G2) String() string {
|
||||
if e.p == nil {
|
||||
return "bn256.G2" + newTwistPoint(nil).String()
|
||||
}
|
||||
return "bn256.G2" + e.p.String()
|
||||
}
|
||||
|
||||
@@ -281,8 +287,11 @@ type GT struct {
|
||||
p *gfP12
|
||||
}
|
||||
|
||||
func (g *GT) String() string {
|
||||
return "bn256.GT" + g.p.String()
|
||||
func (e *GT) String() string {
|
||||
if e.p == nil {
|
||||
return "bn256.GT" + newGFp12(nil).String()
|
||||
}
|
||||
return "bn256.GT" + e.p.String()
|
||||
}
|
||||
|
||||
// ScalarMult sets e to a*k and then returns e.
|
||||
|
||||
Reference in New Issue
Block a user