Skip to content

Commit ca58818

Browse files
committed
TestTokensService_Deobfuscate (1)
Signed-off-by: Angelo De Caro <[email protected]>
1 parent 900132f commit ca58818

File tree

4 files changed

+157
-13
lines changed

4 files changed

+157
-13
lines changed

token/core/zkatdlog/nogh/v1/token/service.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,20 @@ func (s *TokensService) Deobfuscate(output driver.TokenOutput, outputMetadata dr
121121
if err == nil {
122122
return tok, issuer, recipients, format, nil
123123
}
124+
err = errors.Wrapf(err, "failed to deobfuscate comm token")
125+
124126
// try fabtoken type
125-
return s.deobfuscateAsFabtokenType(output, outputMetadata)
127+
tok, issuer, recipients, format, err2 := s.deobfuscateAsFabtokenType(output, outputMetadata)
128+
if err2 != nil {
129+
return nil, nil, nil, "", errors.Wrapf(
130+
errors2.Join(
131+
err,
132+
errors.Wrapf(err2, "failed to deobfuscate fabtoken token"),
133+
),
134+
"failed to deobfuscate",
135+
)
136+
}
137+
return tok, issuer, recipients, format, nil
126138
}
127139

128140
func (s *TokensService) deobfuscateAsCommType(ctx context.Context, output driver.TokenOutput, outputMetadata driver.TokenOutputMetadata) (*token.Token, driver.Identity, []driver.Identity, token.Format, error) {
@@ -146,7 +158,7 @@ func (s *TokensService) deobfuscateAsFabtokenType(output driver.TokenOutput, out
146158

147159
metadata := &actions.OutputMetadata{}
148160
if err := metadata.Deserialize(outputMetadata); err != nil {
149-
return nil, nil, nil, "", errors.Wrap(err, "failed unmarshalling token information")
161+
return nil, nil, nil, "", errors.Wrap(err, "failed unmarshalling token metadata")
150162
}
151163

152164
recipients, err := s.IdentityDeserializer.Recipients(tok.Owner)

token/core/zkatdlog/nogh/v1/token/service_test.go

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
math "github.com/IBM/mathlib"
1313
"github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/collections"
1414
v1 "github.com/hyperledger-labs/fabric-token-sdk/token/core/fabtoken/v1"
15+
"github.com/hyperledger-labs/fabric-token-sdk/token/core/fabtoken/v1/actions"
1516
"github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/setup"
1617
token2 "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/token"
1718
"github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/token/mock"
@@ -240,5 +241,136 @@ func TestTokensService_Recipients(t *testing.T) {
240241
}
241242
})
242243
}
244+
}
245+
246+
func TestTokensService_Deobfuscate(t *testing.T) {
247+
pp, err := setup.Setup(32, []byte("issuer public key"), math.FP256BN_AMCL)
248+
assert.NoError(t, err)
243249

250+
tests := []struct {
251+
name string
252+
inputs func() (*token2.TokensService, driver.TokenOutput, driver.TokenOutputMetadata, error)
253+
wantErr bool
254+
expectedError string
255+
}{
256+
{
257+
name: "failed to deserialize token",
258+
inputs: func() (*token2.TokensService, driver.TokenOutput, driver.TokenOutputMetadata, error) {
259+
ts, err := token2.NewTokensService(nil, pp, &mock.IdentityDeserializer{})
260+
if err != nil {
261+
return nil, nil, nil, err
262+
}
263+
return ts, nil, nil, nil
264+
},
265+
wantErr: true,
266+
expectedError: "failed to deobfuscate: failed to deobfuscate comm token: failed to deobfuscate token: failed getting token output: failed to deserialize token: failed deserializing token: failed unmarshalling token: failed to unmarshal to TypedToken: asn1: syntax error: sequence truncated\nfailed to deobfuscate fabtoken token: failed unmarshalling token: failed deserializing token: failed unmarshalling token: failed to unmarshal to TypedToken: asn1: syntax error: sequence truncated",
267+
},
268+
{
269+
name: "failed to deserialize token 2",
270+
inputs: func() (*token2.TokensService, driver.TokenOutput, driver.TokenOutputMetadata, error) {
271+
ts, err := token2.NewTokensService(nil, pp, &mock.IdentityDeserializer{})
272+
if err != nil {
273+
return nil, nil, nil, err
274+
}
275+
return ts, []byte{}, nil, nil
276+
},
277+
wantErr: true,
278+
expectedError: "failed to deobfuscate: failed to deobfuscate comm token: failed to deobfuscate token: failed getting token output: failed to deserialize token: failed deserializing token: failed unmarshalling token: failed to unmarshal to TypedToken: asn1: syntax error: sequence truncated\nfailed to deobfuscate fabtoken token: failed unmarshalling token: failed deserializing token: failed unmarshalling token: failed to unmarshal to TypedToken: asn1: syntax error: sequence truncated",
279+
},
280+
{
281+
name: "failed to deserialize token 3",
282+
inputs: func() (*token2.TokensService, driver.TokenOutput, driver.TokenOutputMetadata, error) {
283+
ts, err := token2.NewTokensService(nil, pp, &mock.IdentityDeserializer{})
284+
if err != nil {
285+
return nil, nil, nil, err
286+
}
287+
return ts, []byte{0, 1, 2, 3}, nil, nil
288+
},
289+
wantErr: true,
290+
expectedError: "failed to deobfuscate: failed to deobfuscate comm token: failed to deobfuscate token: failed getting token output: failed to deserialize token: failed deserializing token: failed unmarshalling token: failed to unmarshal to TypedToken: asn1: structure error: tags don't match (16 vs {class:0 tag:0 length:1 isCompound:false}) {optional:false explicit:false application:false private:false defaultValue:<nil> tag:<nil> stringType:0 timeType:0 set:false omitEmpty:false} TypedToken @2\nfailed to deobfuscate fabtoken token: failed unmarshalling token: failed deserializing token: failed unmarshalling token: failed to unmarshal to TypedToken: asn1: structure error: tags don't match (16 vs {class:0 tag:0 length:1 isCompound:false}) {optional:false explicit:false application:false private:false defaultValue:<nil> tag:<nil> stringType:0 timeType:0 set:false omitEmpty:false} TypedToken @2",
291+
},
292+
{
293+
name: "failed to deserialize fabtoken metadata",
294+
inputs: func() (*token2.TokensService, driver.TokenOutput, driver.TokenOutputMetadata, error) {
295+
ts, err := token2.NewTokensService(nil, pp, &mock.IdentityDeserializer{})
296+
if err != nil {
297+
return nil, nil, nil, err
298+
}
299+
tok := &actions.Output{}
300+
raw, err := tok.Serialize()
301+
if err != nil {
302+
return nil, nil, nil, err
303+
}
304+
return ts, raw, nil, nil
305+
},
306+
wantErr: true,
307+
expectedError: "failed to deobfuscate: failed to deobfuscate comm token: failed to deobfuscate token: failed getting token output: failed to deserialize token: failed deserializing token: invalid token type [1]\nfailed to deobfuscate fabtoken token: failed unmarshalling token metadata: failed deserializing metadata: failed unmarshalling token: failed to unmarshal to TypedToken: asn1: syntax error: sequence truncated",
308+
},
309+
{
310+
name: "failed to deserialize fabtoken owner identity",
311+
inputs: func() (*token2.TokensService, driver.TokenOutput, driver.TokenOutputMetadata, error) {
312+
des := &mock.IdentityDeserializer{}
313+
des.RecipientsReturns(nil, errors.New("pineapple"))
314+
ts, err := token2.NewTokensService(nil, pp, des)
315+
if err != nil {
316+
return nil, nil, nil, err
317+
}
318+
tok := &actions.Output{}
319+
raw, err := tok.Serialize()
320+
if err != nil {
321+
return nil, nil, nil, err
322+
}
323+
324+
meta := &actions.OutputMetadata{}
325+
metaRaw, err := meta.Serialize()
326+
if err != nil {
327+
return nil, nil, nil, err
328+
}
329+
330+
return ts, raw, metaRaw, nil
331+
},
332+
wantErr: true,
333+
expectedError: "failed to deobfuscate: failed to deobfuscate comm token: failed to deobfuscate token: failed getting token output: failed to deserialize token: failed deserializing token: invalid token type [1]\nfailed to deobfuscate fabtoken token: failed to get recipients: pineapple",
334+
},
335+
{
336+
name: "fabtoken output, cannot deserialize output",
337+
inputs: func() (*token2.TokensService, driver.TokenOutput, driver.TokenOutputMetadata, error) {
338+
des := &mock.IdentityDeserializer{}
339+
des.RecipientsReturns(nil, errors.New("pineapple"))
340+
ts, err := token2.NewTokensService(nil, pp, des)
341+
if err != nil {
342+
return nil, nil, nil, err
343+
}
344+
tok := &actions.Output{}
345+
raw, err := tok.Serialize()
346+
if err != nil {
347+
return nil, nil, nil, err
348+
}
349+
350+
meta := &actions.OutputMetadata{}
351+
metaRaw, err := meta.Serialize()
352+
if err != nil {
353+
return nil, nil, nil, err
354+
}
355+
356+
return ts, raw, metaRaw, nil
357+
},
358+
wantErr: true,
359+
expectedError: "failed to deobfuscate: failed to deobfuscate comm token: failed to deobfuscate token: failed getting token output: failed to deserialize token: failed deserializing token: invalid token type [1]\nfailed to deobfuscate fabtoken token: failed to get recipients: pineapple",
360+
},
361+
}
362+
for _, tt := range tests {
363+
t.Run(tt.name, func(t *testing.T) {
364+
ts, output, metadata, err := tt.inputs()
365+
assert.NoError(t, err)
366+
_, _, _, _, err = ts.Deobfuscate(output, metadata)
367+
if tt.wantErr {
368+
assert.Error(t, err)
369+
assert.EqualError(t, err, tt.expectedError)
370+
} else {
371+
assert.NoError(t, err)
372+
assert.NotNil(t, ts)
373+
}
374+
})
375+
}
244376
}

token/core/zkatdlog/nogh/v1/token/token.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -143,11 +143,11 @@ func NewMetadata(curve math.CurveID, tokenType token.Type, values []uint64, bfs
143143
func (m *Metadata) Deserialize(b []byte) error {
144144
typed, err := comm.UnmarshalTypedMetadata(b)
145145
if err != nil {
146-
return errors.Wrapf(err, "failed deserializing metadata")
146+
return errors.Wrapf(err, "failed to deserialize metadata")
147147
}
148148
metadata := &actions.TokenMetadata{}
149149
if err := proto.Unmarshal(typed.Metadata, metadata); err != nil {
150-
return errors.Wrapf(err, "failed unmarshalling metadata")
150+
return errors.Wrapf(err, "failed to deserialize metadata")
151151
}
152152
m.Type = token.Type(metadata.Type)
153153
m.Value, err = utils.FromZrProto(metadata.Value)
@@ -168,11 +168,11 @@ func (m *Metadata) Deserialize(b []byte) error {
168168
func (m *Metadata) Serialize() ([]byte, error) {
169169
value, err := utils.ToProtoZr(m.Value)
170170
if err != nil {
171-
return nil, errors.Wrapf(err, "failed to deserialize metadata")
171+
return nil, errors.Wrapf(err, "failed to serialize metadata")
172172
}
173173
blindingFactor, err := utils.ToProtoZr(m.BlindingFactor)
174174
if err != nil {
175-
return nil, errors.Wrapf(err, "failed to deserialize metadata")
175+
return nil, errors.Wrapf(err, "failed to serialize metadata")
176176
}
177177
raw, err := proto.Marshal(&actions.TokenMetadata{
178178
Type: string(m.Type),
@@ -181,7 +181,7 @@ func (m *Metadata) Serialize() ([]byte, error) {
181181
Issuer: &pp.Identity{Raw: m.Issuer},
182182
})
183183
if err != nil {
184-
return nil, errors.Wrapf(err, "failed serializing token")
184+
return nil, errors.Wrapf(err, "failed to serialize metadata")
185185
}
186186
return comm.WrapMetadataWithType(raw)
187187
}

token/core/zkatdlog/nogh/v1/token/token_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ func TestMetadataDeserialize(t *testing.T) {
377377
return nil, nil, nil
378378
},
379379
wantErr: true,
380-
expectedError: "failed deserializing metadata: failed unmarshalling metadata: failed to unmarshal to TypedMetadata: asn1: syntax error: sequence truncated",
380+
expectedError: "failed to deserialize metadata: failed unmarshalling metadata: failed to unmarshal to TypedMetadata: asn1: syntax error: sequence truncated",
381381
},
382382
{
383383
name: "empty raw",
@@ -386,7 +386,7 @@ func TestMetadataDeserialize(t *testing.T) {
386386
return nil, []byte{}, nil
387387
},
388388
wantErr: true,
389-
expectedError: "failed deserializing metadata: failed unmarshalling metadata: failed to unmarshal to TypedMetadata: asn1: syntax error: sequence truncated",
389+
expectedError: "failed to deserialize metadata: failed unmarshalling metadata: failed to unmarshal to TypedMetadata: asn1: syntax error: sequence truncated",
390390
},
391391
{
392392
name: "invalid raw",
@@ -395,7 +395,7 @@ func TestMetadataDeserialize(t *testing.T) {
395395
return nil, []byte{0, 1, 2, 3}, nil
396396
},
397397
wantErr: true,
398-
expectedError: "failed deserializing metadata: failed unmarshalling metadata: failed to unmarshal to TypedMetadata: asn1: structure error: tags don't match (16 vs {class:0 tag:0 length:1 isCompound:false}) {optional:false explicit:false application:false private:false defaultValue:<nil> tag:<nil> stringType:0 timeType:0 set:false omitEmpty:false} TypedMetadata @2",
398+
expectedError: "failed to deserialize metadata: failed unmarshalling metadata: failed to unmarshal to TypedMetadata: asn1: structure error: tags don't match (16 vs {class:0 tag:0 length:1 isCompound:false}) {optional:false explicit:false application:false private:false defaultValue:<nil> tag:<nil> stringType:0 timeType:0 set:false omitEmpty:false} TypedMetadata @2",
399399
},
400400
{
401401
name: "invalid metadata type",
@@ -405,7 +405,7 @@ func TestMetadataDeserialize(t *testing.T) {
405405
return nil, raw, err
406406
},
407407
wantErr: true,
408-
expectedError: "failed deserializing metadata: invalid metadata type [-1]",
408+
expectedError: "failed to deserialize metadata: invalid metadata type [-1]",
409409
},
410410
{
411411
name: "valid metadata raw, nil",
@@ -424,7 +424,7 @@ func TestMetadataDeserialize(t *testing.T) {
424424
return nil, raw, err
425425
},
426426
wantErr: true,
427-
expectedError: "failed unmarshalling metadata: proto: cannot parse invalid wire-format data",
427+
expectedError: "failed to deserialize metadata: proto: cannot parse invalid wire-format data",
428428
},
429429
{
430430
name: "invalid metadata raw, invalid",
@@ -434,7 +434,7 @@ func TestMetadataDeserialize(t *testing.T) {
434434
return nil, raw, err
435435
},
436436
wantErr: true,
437-
expectedError: "failed unmarshalling metadata: proto: cannot parse invalid wire-format data",
437+
expectedError: "failed to deserialize metadata: proto: cannot parse invalid wire-format data",
438438
},
439439
{
440440
name: "valid metadata",

0 commit comments

Comments
 (0)