Skip to content

Commit 64a2269

Browse files
committed
Clean up go binding input validation.
1 parent 9ba7210 commit 64a2269

File tree

5 files changed

+86
-29
lines changed

5 files changed

+86
-29
lines changed

bindings/go/blst.go

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ func PairingAggregatePkInG1(ctx Pairing, PK *P1Affine, pkValidate bool,
115115
}
116116
}
117117
var umsg *C.byte
118-
if msg != nil {
118+
if msg != nil && len(msg) > 0 {
119119
umsg = (*C.byte)(&msg[0])
120120
}
121121

@@ -140,7 +140,7 @@ func PairingAggregatePkInG2(ctx Pairing, PK *P2Affine, pkValidate bool,
140140
}
141141
}
142142
var umsg *C.byte
143-
if msg != nil {
143+
if msg != nil && len(msg) > 0 {
144144
umsg = (*C.byte)(&msg[0])
145145
}
146146

@@ -166,7 +166,7 @@ func PairingMulNAggregatePkInG1(ctx Pairing, PK *P1Affine, pkValidate bool,
166166
}
167167
}
168168
var umsg *C.byte
169-
if msg != nil {
169+
if msg != nil && len(msg) > 0 {
170170
umsg = (*C.byte)(&msg[0])
171171
}
172172

@@ -193,7 +193,7 @@ func PairingMulNAggregatePkInG2(ctx Pairing, PK *P2Affine, pkValidate bool,
193193
}
194194
}
195195
var umsg *C.byte
196-
if msg != nil {
196+
if msg != nil && len(msg) > 0 {
197197
umsg = (*C.byte)(&msg[0])
198198
}
199199

@@ -363,32 +363,33 @@ func (dummy *P2Affine) AggregateVerifyCompressed(sig []byte, sigGroupcheck bool,
363363

364364
sigFn := func() *P2Affine {
365365
sigP := new(P2Affine)
366-
if sig[0]&0x80 == 0 {
366+
if len(sig) == BLST_P2_SERIALIZE_BYTES && (sig[0]&0x80) == 0 {
367367
// Not compressed
368368
if sigP.Deserialize(sig) == nil {
369369
return nil
370370
}
371-
} else {
371+
} else if len(sig) == BLST_P2_COMPRESS_BYTES && (sig[0]&0x80) != 0 {
372372
if sigP.Uncompress(sig) == nil {
373373
return nil
374374
}
375+
} else {
376+
return nil
375377
}
376378
return sigP
377379
}
378380
pkFn := func(i uint32, pk *P1Affine) (*P1Affine, []byte) {
379381
bytes := pks[i]
380-
if len(bytes) == 0 {
381-
return nil, nil
382-
}
383-
if bytes[0]&0x80 == 0 {
382+
if len(bytes) == BLST_P1_SERIALIZE_BYTES && (bytes[0]&0x80) == 0 {
384383
// Not compressed
385384
if pk.Deserialize(bytes) == nil {
386385
return nil, nil
387386
}
388-
} else {
387+
} else if len(bytes) == BLST_P1_COMPRESS_BYTES && (bytes[0]&0x80) != 0 {
389388
if pk.Uncompress(bytes) == nil {
390389
return nil, nil
391390
}
391+
} else {
392+
return nil, nil
392393
}
393394
if usePksAsAugs {
394395
return pk, bytes
@@ -961,32 +962,33 @@ func (dummy *P1Affine) AggregateVerifyCompressed(sig []byte, sigGroupcheck bool,
961962

962963
sigFn := func() *P1Affine {
963964
sigP := new(P1Affine)
964-
if sig[0]&0x80 == 0 {
965+
if len(sig) == BLST_P1_SERIALIZE_BYTES && (sig[0]&0x80) == 0 {
965966
// Not compressed
966967
if sigP.Deserialize(sig) == nil {
967968
return nil
968969
}
969-
} else {
970+
} else if len(sig) == BLST_P1_COMPRESS_BYTES && (sig[0]&0x80) != 0 {
970971
if sigP.Uncompress(sig) == nil {
971972
return nil
972973
}
974+
} else {
975+
return nil
973976
}
974977
return sigP
975978
}
976979
pkFn := func(i uint32, pk *P2Affine) (*P2Affine, []byte) {
977980
bytes := pks[i]
978-
if len(bytes) == 0 {
979-
return nil, nil
980-
}
981-
if bytes[0]&0x80 == 0 {
981+
if len(bytes) == BLST_P2_SERIALIZE_BYTES && (bytes[0]&0x80) == 0 {
982982
// Not compressed
983983
if pk.Deserialize(bytes) == nil {
984984
return nil, nil
985985
}
986-
} else {
986+
} else if len(bytes) == BLST_P2_COMPRESS_BYTES && (bytes[0]&0x80) != 0 {
987987
if pk.Uncompress(bytes) == nil {
988988
return nil, nil
989989
}
990+
} else {
991+
return nil, nil
990992
}
991993
if usePksAsAugs {
992994
return pk, bytes

bindings/go/blst.tgo

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ func PairingAggregatePkInG1(ctx Pairing, PK *P1Affine, pkValidate bool,
106106
}
107107
}
108108
var umsg *C.byte
109-
if msg != nil {
109+
if msg != nil && len(msg) > 0 {
110110
umsg = (*C.byte)(&msg[0])
111111
}
112112

@@ -131,7 +131,7 @@ func PairingAggregatePkInG2(ctx Pairing, PK *P2Affine, pkValidate bool,
131131
}
132132
}
133133
var umsg *C.byte
134-
if msg != nil {
134+
if msg != nil && len(msg) > 0 {
135135
umsg = (*C.byte)(&msg[0])
136136
}
137137

@@ -157,7 +157,7 @@ func PairingMulNAggregatePkInG1(ctx Pairing, PK *P1Affine, pkValidate bool,
157157
}
158158
}
159159
var umsg *C.byte
160-
if msg != nil {
160+
if msg != nil && len(msg) > 0 {
161161
umsg = (*C.byte)(&msg[0])
162162
}
163163

@@ -184,7 +184,7 @@ func PairingMulNAggregatePkInG2(ctx Pairing, PK *P2Affine, pkValidate bool,
184184
}
185185
}
186186
var umsg *C.byte
187-
if msg != nil {
187+
if msg != nil && len(msg) > 0 {
188188
umsg = (*C.byte)(&msg[0])
189189
}
190190

bindings/go/blst_minpk.tgo

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -135,32 +135,33 @@ func (dummy *P2Affine) AggregateVerifyCompressed(sig []byte, sigGroupcheck bool,
135135

136136
sigFn := func() *P2Affine {
137137
sigP := new(P2Affine)
138-
if sig[0]&0x80 == 0 {
138+
if len(sig) == BLST_P2_SERIALIZE_BYTES && (sig[0] & 0x80) == 0 {
139139
// Not compressed
140140
if sigP.Deserialize(sig) == nil {
141141
return nil
142142
}
143-
} else {
143+
} else if len(sig) == BLST_P2_COMPRESS_BYTES && (sig[0] & 0x80) != 0 {
144144
if sigP.Uncompress(sig) == nil {
145145
return nil
146146
}
147+
} else {
148+
return nil
147149
}
148150
return sigP
149151
}
150152
pkFn := func(i uint32, pk *P1Affine) (*P1Affine, []byte) {
151153
bytes := pks[i]
152-
if len(bytes) == 0 {
153-
return nil, nil
154-
}
155-
if bytes[0]&0x80 == 0 {
154+
if len(bytes) == BLST_P1_SERIALIZE_BYTES && (bytes[0] & 0x80) == 0 {
156155
// Not compressed
157156
if pk.Deserialize(bytes) == nil {
158157
return nil, nil
159158
}
160-
} else {
159+
} else if len(bytes) == BLST_P1_COMPRESS_BYTES && (bytes[0] & 0x80) != 0 {
161160
if pk.Uncompress(bytes) == nil {
162161
return nil, nil
163162
}
163+
} else {
164+
return nil, nil
164165
}
165166
if usePksAsAugs {
166167
return pk, bytes

bindings/go/blst_minpk_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -595,3 +595,30 @@ func TestSignVerifyAggregateValidatesInfinitePubkeyMinPk(t *testing.T) {
595595
t.Errorf("failed to NOT verify signature")
596596
}
597597
}
598+
599+
func TestEmptyMessageMinPk(t *testing.T) {
600+
msg := []byte("")
601+
var sk_bytes = []byte {99, 64, 58, 175, 15, 139, 113, 184, 37, 222, 127,
602+
204, 233, 209, 34, 8, 61, 27, 85, 251, 68, 31, 255, 214, 8, 189, 190, 71,
603+
198, 16, 210, 91};
604+
sk := new(SecretKey).Deserialize(sk_bytes)
605+
pk := new(PublicKeyMinPk).From(sk)
606+
sig := new(SignatureMinPk).Sign(sk, msg, dstMinPk)
607+
if !new(SignatureMinPk).VerifyCompressed(sig.Compress(), true,
608+
pk.Compress(), false, msg, dstMinPk) {
609+
t.Errorf("failed to verify empty message")
610+
}
611+
}
612+
613+
func TestEmptySignatureMinPk(t *testing.T) {
614+
msg := []byte("message")
615+
var sk_bytes = []byte {99, 64, 58, 175, 15, 139, 113, 184, 37, 222, 127,
616+
204, 233, 209, 34, 8, 61, 27, 85, 251, 68, 31, 255, 214, 8, 189, 190, 71,
617+
198, 16, 210, 91};
618+
sk := new(SecretKey).Deserialize(sk_bytes)
619+
pk := new(PublicKeyMinPk).From(sk)
620+
var emptySig []byte
621+
if new(SignatureMinPk).VerifyCompressed(emptySig, true, pk.Compress(), false, msg, dstMinPk) {
622+
t.Errorf("failed to NOT verify empty signature")
623+
}
624+
}

bindings/go/blst_minsig_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,3 +599,30 @@ func TestSignVerifyAggregateValidatesInfinitePubkeyMinSig(t *testing.T) {
599599
t.Errorf("failed to NOT verify signature")
600600
}
601601
}
602+
603+
func TestEmptyMessageMinSig(t *testing.T) {
604+
msg := []byte("")
605+
var sk_bytes = []byte {99, 64, 58, 175, 15, 139, 113, 184, 37, 222, 127,
606+
204, 233, 209, 34, 8, 61, 27, 85, 251, 68, 31, 255, 214, 8, 189, 190, 71,
607+
198, 16, 210, 91};
608+
sk := new(SecretKey).Deserialize(sk_bytes)
609+
pk := new(PublicKeyMinSig).From(sk)
610+
sig := new(SignatureMinSig).Sign(sk, msg, dstMinSig)
611+
if !new(SignatureMinSig).VerifyCompressed(sig.Compress(), true,
612+
pk.Compress(), false, msg, dstMinSig) {
613+
t.Errorf("failed to verify empty message")
614+
}
615+
}
616+
617+
func TestEmptySignatureMinSig(t *testing.T) {
618+
msg := []byte("message")
619+
var sk_bytes = []byte {99, 64, 58, 175, 15, 139, 113, 184, 37, 222, 127,
620+
204, 233, 209, 34, 8, 61, 27, 85, 251, 68, 31, 255, 214, 8, 189, 190, 71,
621+
198, 16, 210, 91};
622+
sk := new(SecretKey).Deserialize(sk_bytes)
623+
pk := new(PublicKeyMinSig).From(sk)
624+
var emptySig []byte
625+
if new(SignatureMinSig).VerifyCompressed(emptySig, true, pk.Compress(), false, msg, dstMinSig) {
626+
t.Errorf("failed to NOT verify empty signature")
627+
}
628+
}

0 commit comments

Comments
 (0)