Skip to content

Commit 81539b2

Browse files
ale-linuxadecaro
authored andcommitted
Add method to export Zr to unsigned int
Resolves #20 Signed-off-by: Alessandro Sorniotti <aso@zurich.ibm.com>
1 parent 1852350 commit 81539b2

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

math.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,15 @@ func (z *Zr) Neg() {
232232
var zerobytes = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
233233
var onebytes = []byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}
234234

235+
func (z *Zr) Uint() (uint64, error) {
236+
b := z.Bytes()
237+
if !bytes.Equal(zerobytes, b[:32-8]) && !bytes.Equal(onebytes, b[:32-8]) {
238+
return 0, fmt.Errorf("out of range")
239+
}
240+
241+
return uint64(binary.BigEndian.Uint64(b[32-8:])), nil
242+
}
243+
235244
func (z *Zr) Int() (int64, error) {
236245
b := z.Bytes()
237246
if !bytes.Equal(zerobytes, b[:32-8]) && !bytes.Equal(onebytes, b[:32-8]) {

math_test.go

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,33 @@ func runZrTest(t *testing.T, c *Curve) {
126126

127127
maxint64 := c.NewZrFromInt(math.MaxInt64)
128128
maxuint64 := c.NewZrFromUint64(math.MaxUint64)
129+
130+
iu, err := maxint64.Uint()
131+
assert.NoError(t, err)
132+
assert.Equal(t, uint64(math.MaxInt64), iu)
133+
134+
i64, err := maxint64.Int()
135+
assert.NoError(t, err)
136+
assert.Equal(t, int64(math.MaxInt64), i64)
137+
138+
ui, err := maxuint64.Int()
139+
assert.NoError(t, err)
140+
assert.Equal(t, int64(-1), ui)
141+
142+
u64, err := maxuint64.Uint()
143+
assert.NoError(t, err)
144+
assert.Equal(t, uint64(math.MaxUint64), u64)
145+
146+
a, b := rand.Int63(), rand.Int63()
147+
cr, err := c.NewZrFromInt(a).Plus(c.NewZrFromInt(b)).Int()
148+
assert.NoError(t, err)
149+
assert.Equal(t, a+b, cr)
150+
151+
au, bu := uint64(rand.Int63()), uint64(rand.Int63())
152+
cru, err := c.NewZrFromUint64(au).Plus(c.NewZrFromUint64(bu)).Uint()
153+
assert.NoError(t, err)
154+
assert.Equal(t, au+bu, cru)
155+
129156
assert.Equal(t, fmt.Sprintf("%x", math.MaxInt64), maxint64.String())
130157
assert.Equal(t, fmt.Sprintf("%x", uint64(math.MaxUint64)), maxuint64.String())
131158

@@ -150,7 +177,7 @@ func runZrTest(t *testing.T, c *Curve) {
150177

151178
rand.Seed(seed)
152179

153-
i64 := rand.Int63()
180+
i64 = rand.Int63()
154181
i = c.NewZrFromInt(i64)
155182
i64_, err := i.Int()
156183
assert.NoError(t, err)

0 commit comments

Comments
 (0)