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) {
|
||||
x, _ := rand.Int(rand.Reader, Order)
|
||||
b.ResetTimer()
|
||||
|
|
|
@ -171,15 +171,15 @@ func (c *curvePoint) Double(a *curvePoint) {
|
|||
gfpAdd(t, d, d)
|
||||
gfpSub(&c.x, f, t)
|
||||
|
||||
gfpMul(&c.z, &a.y, &a.z)
|
||||
gfpAdd(&c.z, &c.z, &c.z)
|
||||
|
||||
gfpAdd(t, C, C)
|
||||
gfpAdd(t2, t, t)
|
||||
gfpAdd(t, t2, t2)
|
||||
gfpSub(&c.y, d, &c.x)
|
||||
gfpMul(t2, e, &c.y)
|
||||
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) {
|
||||
|
|
|
@ -61,6 +61,7 @@ func (e *gfP) Marshal(out []byte) {
|
|||
func (e *gfP) Unmarshal(in []byte) error {
|
||||
// Unmarshal the bytes into little endian form
|
||||
for w := uint(0); w < 4; w++ {
|
||||
e[3-w] = 0
|
||||
for b := uint(0); b < 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)
|
||||
c.x.Sub(f, t)
|
||||
|
||||
c.z.Mul(&a.y, &a.z)
|
||||
c.z.Add(&c.z, &c.z)
|
||||
|
||||
t.Add(C, C)
|
||||
t2.Add(t, t)
|
||||
t.Add(t2, t2)
|
||||
c.y.Sub(d, &c.x)
|
||||
t2.Mul(e, &c.y)
|
||||
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) {
|
||||
|
|
Loading…
Reference in New Issue