Skip to content

Commit 4a731ed

Browse files
committed
Immutability tests
Signed-off-by: Alessandro Sorniotti <aso@zurich.ibm.com>
1 parent c6791bb commit 4a731ed

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

math_test.go

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package math
99
import (
1010
"encoding/json"
1111
"fmt"
12+
"io"
1213
"math"
1314
"math/rand"
1415
"testing"
@@ -19,6 +20,88 @@ import (
1920

2021
var seed = time.Now().Unix()
2122

23+
func TestImmutability(t *testing.T) {
24+
for _, curve := range Curves {
25+
rng, err := curve.Rand()
26+
assert.NoError(t, err)
27+
28+
testImmutabilityZr(t, curve, rng)
29+
testImmutabilityG1(t, curve, rng)
30+
testImmutabilityG2(t, curve, rng)
31+
testImmutabilityGt(t, curve, rng)
32+
}
33+
}
34+
35+
var r *Zr
36+
var g1 *G1
37+
var g2 *G2
38+
var gt *Gt
39+
40+
func testImmutabilityGt(t *testing.T, c *Curve, rng io.Reader) {
41+
g := c.GenGt.Exp(c.NewRandomZr(rng))
42+
orig, err := c.NewGtFromBytes(g.Bytes())
43+
assert.NoError(t, err)
44+
45+
// Exp(Zr) Gt
46+
gt = g.Exp(c.NewRandomZr(rng))
47+
assert.True(t, g.Equals(orig))
48+
}
49+
50+
func testImmutabilityG2(t *testing.T, c *Curve, rng io.Reader) {
51+
g := c.GenG2.Mul(c.NewRandomZr(rng))
52+
orig := g.Copy()
53+
54+
// Mul(Zr) G2
55+
g2 = g.Mul(c.NewRandomZr(rng))
56+
assert.True(t, g.Equals(orig))
57+
58+
// Copy() G2
59+
g2 = g.Copy()
60+
assert.True(t, g.Equals(orig))
61+
}
62+
63+
func testImmutabilityG1(t *testing.T, c *Curve, rng io.Reader) {
64+
g := c.GenG1.Mul(c.NewRandomZr(rng))
65+
orig := g.Copy()
66+
67+
// Mul(Zr) G1
68+
g1 = g.Mul(c.NewRandomZr(rng))
69+
assert.True(t, g.Equals(orig))
70+
71+
// Mul2(e Zr, Q G1, f Zr) G1
72+
g1 = g.Mul2(c.NewRandomZr(rng), c.GenG1, c.NewRandomZr(rng))
73+
assert.True(t, g.Equals(orig))
74+
75+
// Copy() G1
76+
g1 = g.Copy()
77+
assert.True(t, g.Equals(orig))
78+
}
79+
80+
func testImmutabilityZr(t *testing.T, c *Curve, rng io.Reader) {
81+
_r := c.NewRandomZr(rng)
82+
orig := _r.Copy()
83+
84+
// Plus(Zr) Zr
85+
r = _r.Plus(c.NewRandomZr(rng))
86+
assert.True(t, _r.Equals(orig))
87+
88+
// Minus(Zr) Zr
89+
r = _r.Minus(c.NewRandomZr(rng))
90+
assert.True(t, _r.Equals(orig))
91+
92+
// Mul(Zr) Zr
93+
r = _r.Mul(c.NewRandomZr(rng))
94+
assert.True(t, _r.Equals(orig))
95+
96+
// PowMod(Zr) Zr
97+
r = _r.PowMod(c.NewRandomZr(rng))
98+
assert.True(t, _r.Equals(orig))
99+
100+
// Copy() Zr
101+
r = _r.Copy()
102+
assert.True(t, _r.Equals(orig))
103+
}
104+
22105
func runZrTest(t *testing.T, c *Curve) {
23106
rng, err := c.Rand()
24107
assert.NoError(t, err)

0 commit comments

Comments
 (0)