1
2
3
4
5 package encoding
6
7 import (
8 "bytes"
9 "io"
10 "testing"
11 )
12
13 var mpiTests = []struct {
14 encoded []byte
15 bytes []byte
16 reencoded []byte
17 bitLength uint16
18 err error
19 }{
20 {
21 encoded: []byte{0x0, 0x0},
22 bytes: []byte{},
23 bitLength: 0,
24 },
25 {
26 encoded: []byte{0x0, 0x1, 0x1},
27 bytes: []byte{0x1},
28 bitLength: 1,
29 },
30 {
31 encoded: []byte{0x0, 0x9, 0x1, 0xff},
32 bytes: []byte{0x1, 0xff},
33 bitLength: 9,
34 },
35 {
36 encoded: append([]byte{0x1, 0x0, 0xff}, make([]byte, 0x1f)...),
37 bytes: append([]byte{0xff}, make([]byte, 0x1f)...),
38 bitLength: 0x100,
39 },
40
41 {
42 encoded: []byte{0x0, 0x10, 0x0, 0x1},
43 bytes: []byte{0x0, 0x1},
44 reencoded: []byte{0x0, 0x1, 0x1},
45 bitLength: 0x10,
46 },
47
48 {
49 encoded: []byte{},
50 err: io.ErrUnexpectedEOF,
51 },
52 {
53 encoded: []byte{0x1, 0x0, 0x0},
54 err: io.ErrUnexpectedEOF,
55 },
56 }
57
58 func TestMPI(t *testing.T) {
59 for i, test := range mpiTests {
60 mpi := new(MPI)
61 if _, err := mpi.ReadFrom(bytes.NewBuffer(test.encoded)); err != nil {
62 if !sameError(err, test.err) {
63 t.Errorf("#%d: ReadFrom error got:%q", i, err)
64 }
65 continue
66 }
67 if b := mpi.Bytes(); !bytes.Equal(b, test.bytes) {
68 t.Errorf("#%d: bad creation got:%x want:%x", i, b, test.bytes)
69 }
70 if bl := mpi.BitLength(); bl != test.bitLength {
71 t.Errorf("#%d: bad BitLength got:%d want:%d", i, bl, test.bitLength)
72 }
73
74 reencoded := test.encoded
75 if test.reencoded != nil {
76 reencoded = test.reencoded
77 }
78
79 if b := mpi.EncodedBytes(); !bytes.Equal(b, test.encoded) {
80 t.Errorf("#%d: bad encoding got:%x want:%x", i, b, test.encoded)
81 }
82 if b := NewMPI(mpi.Bytes()).EncodedBytes(); !bytes.Equal(b, reencoded) {
83 t.Errorf("#%d: bad encoding got:%x want:%x", i, b, reencoded)
84 }
85 }
86 }
87
View as plain text