Skip to content

Commit bbf3d62

Browse files
authored
Merge pull request #611 from dedis/adapt-protobuf-test
Adapt protobuf test
2 parents fab66e0 + 1743700 commit bbf3d62

19 files changed

Lines changed: 304 additions & 116 deletions

encoding_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66

77
"github.com/stretchr/testify/assert"
88
"github.com/stretchr/testify/require"
9-
"go.dedis.ch/protobuf"
9+
"go.dedis.ch/kyber/v4/internal/protobuf"
1010
)
1111

1212
type intWrapper struct {

go.mod

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ require (
99
github.com/kilic/bls12-381 v0.1.0
1010
github.com/stretchr/testify v1.11.1
1111
go.dedis.ch/fixbuf v1.0.3
12-
v3 go.dedis.ch/kyber/v3 v3.0.9
13-
go.dedis.ch/protobuf v1.0.11
1412
golang.org/x/crypto v0.44.0
1513
golang.org/x/sys v0.38.0
1614
gopkg.in/yaml.v3 v3.0.1

go.sum

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZ
55
github.com/consensys/gnark-crypto v0.19.2 h1:qrEAIXq3T4egxqiliFFoNrepkIWVEeIYwt3UL0fvS80=
66
github.com/consensys/gnark-crypto v0.19.2/go.mod h1:rT23F0XSZqE0mUA0+pRtnL56IbPxs6gp4CeRsBk4XS0=
77
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
8-
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
98
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
109
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1110
github.com/jonboulle/clockwork v0.5.0 h1:Hyh9A8u51kptdkR+cqRpT1EebBwTn1oK9YfGYbdFz6I=
@@ -22,23 +21,12 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
2221
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
2322
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
2423
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
25-
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
26-
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
2724
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
2825
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
2926
go.dedis.ch/fixbuf v1.0.3 h1:hGcV9Cd/znUxlusJ64eAlExS+5cJDIyTyEG+otu5wQs=
3027
go.dedis.ch/fixbuf v1.0.3/go.mod h1:yzJMt34Wa5xD37V5RTdmp38cz3QhMagdGoem9anUalw=
31-
go.dedis.ch/kyber/v3 v3.0.4/go.mod h1:OzvaEnPvKlyrWyp3kGXlFdp7ap1VC6RkZDTaPikqhsQ=
32-
go.dedis.ch/kyber/v3 v3.0.9 h1:i0ZbOQocHUjfFasBiUql5zVeC7u/vahFd96DFA8UOWk=
33-
go.dedis.ch/kyber/v3 v3.0.9/go.mod h1:rhNjUUg6ahf8HEg5HUvVBYoWY4boAafX8tYxX+PS+qg=
34-
go.dedis.ch/protobuf v1.0.5/go.mod h1:eIV4wicvi6JK0q/QnfIEGeSFNG0ZeB24kzut5+HaRLo=
35-
go.dedis.ch/protobuf v1.0.7/go.mod h1:pv5ysfkDX/EawiPqcW3ikOxsL5t+BqnV6xHSmE79KI4=
36-
go.dedis.ch/protobuf v1.0.11 h1:FTYVIEzY/bfl37lu3pR4lIj+F9Vp1jE8oh91VmxKgLo=
37-
go.dedis.ch/protobuf v1.0.11/go.mod h1:97QR256dnkimeNdfmURz0wAMNVbd1VmLXhG1CrTYrJ4=
38-
golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
3928
golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU=
4029
golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
41-
golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
4230
golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
4331
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
4432
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=

internal/protobuf/array_test.go

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,13 @@ package protobuf
22

33
import (
44
"encoding/hex"
5+
"math"
56
"reflect"
67
"testing"
78

89
"github.com/stretchr/testify/require"
910
)
1011

11-
type ArrayTest0 struct {
12-
A []int
13-
}
14-
1512
type ArrayTest1 struct {
1613
A []int64
1714
}
@@ -20,48 +17,52 @@ type ArrayTest2 struct {
2017
A []int32
2118
}
2219

23-
type ArrayTest3 struct {
24-
A int
25-
}
26-
2720
func TestArray(t *testing.T) {
28-
// largest int32 is 2147483647
29-
var large int = 3147483647
21+
var maxInt32 int32 = math.MaxInt32
22+
var maxInt64 int64 = math.MaxInt64 / 2
3023

31-
a0 := ArrayTest0{[]int{1, 1, large}}
3224
a1 := ArrayTest1{[]int64{1, 1, 1}}
3325
a2 := ArrayTest2{[]int32{1, 1, 1}}
34-
a3 := ArrayTest3{1}
26+
a3 := ArrayTest2{[]int32{1, 1, maxInt32}}
27+
a4 := ArrayTest1{[]int64{1, 1, maxInt64}}
28+
29+
buf1, err := Encode(&a1)
30+
require.NoError(t, err)
31+
buf2, err := Encode(&a2)
32+
require.NoError(t, err)
33+
buf3, err := Encode(&a3)
34+
require.NoError(t, err)
35+
buf4, err := Encode(&a4)
36+
require.NoError(t, err)
3537

36-
buf0, _ := Encode(&a0)
37-
buf1, _ := Encode(&a1)
38-
buf2, _ := Encode(&a2)
39-
buf3, _ := Encode(&a3)
40-
41-
t.Log(hex.Dump(buf0))
4238
t.Log(hex.Dump(buf1))
4339
t.Log(hex.Dump(buf2))
4440
t.Log(hex.Dump(buf3))
41+
t.Log(hex.Dump(buf4))
4542

46-
b0 := ArrayTest0{}
4743
b1 := ArrayTest1{}
4844
b2 := ArrayTest2{}
49-
b3 := ArrayTest3{}
50-
51-
Decode(buf0, &b0)
52-
t.Log(b0, reflect.TypeOf(b0))
45+
b3 := ArrayTest2{}
46+
b4 := ArrayTest1{}
5347

54-
Decode(buf1, &b1)
48+
err = Decode(buf1, &b1)
49+
require.NoError(t, err)
5550
t.Log(b1, reflect.TypeOf(b1))
5651

57-
Decode(buf2, &b2)
52+
err = Decode(buf2, &b2)
53+
require.NoError(t, err)
5854
t.Log(b2, reflect.TypeOf(b2))
5955

60-
Decode(buf3, &b3)
56+
err = Decode(buf3, &b3)
57+
require.NoError(t, err)
6158
t.Log(b3, reflect.TypeOf(b3))
6259

63-
require.Equal(t, a0, b0)
60+
err = Decode(buf4, &b4)
61+
require.NoError(t, err)
62+
t.Log(b4, reflect.TypeOf(b4))
63+
6464
require.Equal(t, a1, b1)
6565
require.Equal(t, a2, b2)
6666
require.Equal(t, a3, b3)
67+
require.Equal(t, a4, b4)
6768
}

internal/protobuf/crashers_test.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package protobuf
22

33
import (
4+
"errors"
45
"testing"
56

67
"github.com/stretchr/testify/assert"
@@ -33,7 +34,10 @@ func TestCrash1(t *testing.T) {
3334
var s t2
3435
err = Decode(in, &s)
3536
assert.NotNil(t, err)
36-
assert.Equal(t, "Error while decoding field {Name:T3s PkgPath: Type:[3]protobuf.t3 Tag: Offset:112 Index:[4] Anonymous:false}: append to non-slice", err.Error())
37+
var expectedError *DecodingFieldError
38+
if !errors.As(err, &expectedError) {
39+
assert.Fail(t, "Expected error \"appending to non-slice\"")
40+
}
3741
}
3842

3943
func TestCrash2(t *testing.T) {
@@ -42,5 +46,6 @@ func TestCrash2(t *testing.T) {
4246
var s t2
4347
err := Decode(in, &s)
4448
assert.NotNil(t, err)
45-
assert.Equal(t, "Error while decoding field {Name:X PkgPath: Type:protobuf.t1 Tag: Offset:0 Index:[0] Anonymous:false}: array length and buffer length differ", err.Error())
49+
var expectedError *DecodingFieldError
50+
assert.ErrorAs(t, err, &expectedError)
4651
}

internal/protobuf/decode.go

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,24 @@ func (c *Constructors) String() string {
2929
return s
3030
}
3131

32+
type DecodingFieldError struct {
33+
Field string
34+
Err error
35+
}
36+
37+
// Implement error interface
38+
func (e *DecodingFieldError) Error() string {
39+
return fmt.Sprintf("Error while decoding field %s. Reason: %v", e.Field, e.Err)
40+
}
41+
42+
func (e *DecodingFieldError) Unwrap() error {
43+
return e.Err
44+
}
45+
46+
func newDecodingFieldError(field string, err error) *DecodingFieldError {
47+
return &DecodingFieldError{field, err}
48+
}
49+
3250
// Decoder is the main struct used to decode a protobuf blob.
3351
type decoder struct {
3452
nm Constructors
@@ -57,7 +75,7 @@ func DecodeWithConstructors(buf []byte, structPtr interface{}, cons Constructors
5775
case error:
5876
err = e
5977
default:
60-
err = errors.New("Failed to decode the field")
78+
err = newDecodingFieldError("unknown", errors.New("failed to decode the field"))
6179
}
6280
}
6381
}()
@@ -104,7 +122,8 @@ func (de *decoder) message(buf []byte, sval reflect.Value) error {
104122
// Parse the key
105123
key, n := binary.Uvarint(buf)
106124
if n <= 0 {
107-
return errors.New("bad protobuf field key")
125+
return newDecodingFieldError(fmt.Sprintf("%+v", fields[fieldi].Field),
126+
errors.New("bad protobuf field key"))
108127
}
109128
buf = buf[n:]
110129
wiretype := int(key & 7)
@@ -140,7 +159,7 @@ func (de *decoder) message(buf []byte, sval reflect.Value) error {
140159
rem, err := de.value(wiretype, buf, field)
141160
if err != nil {
142161
if fieldi < len(fields) && fields[fieldi] != nil {
143-
return fmt.Errorf("Error while decoding field %+v: %v", fields[fieldi].Field, err)
162+
return newDecodingFieldError(fmt.Sprintf("%+v", fields[fieldi].Field), err)
144163
}
145164

146165
return err

internal/protobuf/encoding_test.go

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import (
99

1010
"github.com/stretchr/testify/assert"
1111
"github.com/stretchr/testify/require"
12-
"go.dedis.ch/kyber/v3"
13-
"go.dedis.ch/kyber/v3/suites"
12+
"go.dedis.ch/kyber/v4"
13+
"go.dedis.ch/kyber/v4/suites"
1414
)
1515

1616
type Number interface {
@@ -64,18 +64,18 @@ func TestBinaryMarshaler(t *testing.T) {
6464
}
6565

6666
type NumberNoMarshal interface {
67-
Value() int
67+
Value() int32
6868
}
6969

70-
func NewNumberNoMarshal(n int) NumberNoMarshal {
70+
func NewNumberNoMarshal(n int32) NumberNoMarshal {
7171
return &IntNoMarshal{n}
7272
}
7373

7474
type IntNoMarshal struct {
75-
N int
75+
N int32
7676
}
7777

78-
func (i *IntNoMarshal) Value() int {
78+
func (i *IntNoMarshal) Value() int32 {
7979
return i.N
8080
}
8181

@@ -92,7 +92,7 @@ func TestNoBinaryMarshaler(t *testing.T) {
9292
err = Decode(buf, &wrapper2)
9393

9494
assert.Nil(t, err)
95-
assert.Equal(t, 99, wrapper2.N.Value())
95+
assert.Equal(t, int32(99), wrapper2.N.Value())
9696
}
9797

9898
type WrongSliceInt struct {
@@ -230,18 +230,14 @@ func TestArrayKey(t *testing.T) {
230230
func TestInterface(t *testing.T) {
231231
type Points struct {
232232
P1 kyber.Point
233-
P2 kyber.Point
234233
}
235234

236-
bn256 := suites.MustFind("bn256.adapter")
237235
ed25519 := suites.MustFind("ed25519")
238236

239-
RegisterInterface(func() interface{} { return bn256.Point() })
240237
RegisterInterface(func() interface{} { return ed25519.Point() })
241238

242239
pp := Points{
243-
P1: bn256.Point(),
244-
P2: ed25519.Point(),
240+
P1: ed25519.Point(),
245241
}
246242

247243
buf, err := Encode(&pp)
@@ -251,7 +247,6 @@ func TestInterface(t *testing.T) {
251247
err = Decode(buf, &dpp)
252248
require.NoError(t, err)
253249
require.Equal(t, pp.P1.String(), dpp.P1.String())
254-
require.Equal(t, pp.P2.String(), dpp.P2.String())
255250
}
256251

257252
type dummyInterface interface {
@@ -326,7 +321,7 @@ type canMarshal struct{ private string }
326321

327322
type hasInternalCanMarshal struct {
328323
CM canMarshal
329-
SomethingElse int
324+
SomethingElse int32
330325
}
331326

332327
func (cm canMarshal) MarshalBinary() ([]byte, error) {
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
//go:build !constantTime
2+
3+
package protobuf
4+
5+
import (
6+
"testing"
7+
8+
"github.com/stretchr/testify/require"
9+
"go.dedis.ch/kyber/v4"
10+
"go.dedis.ch/kyber/v4/suites"
11+
)
12+
13+
// TestInterfaceVartime runs the same test as TestInterface but using a suite available
14+
// only in vartime (bn256)
15+
func TestInterfaceVartime(t *testing.T) {
16+
type Points struct {
17+
P1 kyber.Point
18+
P2 kyber.Point
19+
}
20+
21+
bn256 := suites.MustFind("bn256.adapter")
22+
ed25519 := suites.MustFind("ed25519")
23+
24+
RegisterInterface(func() interface{} { return bn256.Point() })
25+
RegisterInterface(func() interface{} { return ed25519.Point() })
26+
27+
pp := Points{
28+
P1: bn256.Point().Pick(bn256.XOF([]byte("test"))),
29+
P2: ed25519.Point().Pick(ed25519.XOF([]byte("test"))),
30+
}
31+
32+
buf, err := Encode(&pp)
33+
require.NoError(t, err)
34+
35+
var dpp Points
36+
err = Decode(buf, &dpp)
37+
require.NoError(t, err)
38+
require.Equal(t, pp.P1.String(), dpp.P1.String())
39+
require.Equal(t, pp.P2.String(), dpp.P2.String())
40+
}

internal/protobuf/generate_test.go

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,20 @@ func TestGenerate(t *testing.T) {
1515
expected := `
1616
message test {
1717
optional bool boolean = 1;
18-
required sint64 i = 2;
19-
required sint32 i32 = 3;
20-
required sint64 i64 = 4;
21-
required uint32 u32 = 5;
22-
required uint64 u64 = 6;
23-
required sfixed32 sx32 = 7;
24-
required sfixed64 sx64 = 8;
25-
required fixed32 ux32 = 9;
26-
required ufixed64 ux64 = 10;
27-
required float f32 = 11;
28-
required double f64 = 12;
29-
required bytes bytes = 13;
30-
required bytes array = 14;
31-
required string string = 15;
32-
required emb struct = 16;
18+
required sint32 i32 = 2;
19+
required sint64 i64 = 3;
20+
required uint32 u32 = 4;
21+
required uint64 u64 = 5;
22+
required sfixed32 sx32 = 6;
23+
required sfixed64 sx64 = 7;
24+
required fixed32 ux32 = 8;
25+
required ufixed64 ux64 = 9;
26+
required float f32 = 10;
27+
required double f64 = 11;
28+
required bytes bytes = 12;
29+
required bytes array = 13;
30+
required string string = 14;
31+
required emb struct = 15;
3332
optional bool obool = 50;
3433
optional sint32 oi32 = 51;
3534
optional sint64 oi64 = 52;

internal/protobuf/marshal_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ type ValueInt interface {
1212
}
1313

1414
type A struct {
15-
Value int
15+
Value int32
1616
}
1717

1818
func (a *A) MarshalBinary() ([]byte, error) {
@@ -25,7 +25,7 @@ func (a *A) Print() string {
2525

2626
type B struct {
2727
AValue A
28-
AInt int
28+
AInt int32
2929
}
3030

3131
func TestMarshal(t *testing.T) {

0 commit comments

Comments
 (0)