@@ -12,6 +12,7 @@ import (
12
12
math "github.com/IBM/mathlib"
13
13
"github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/collections"
14
14
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"
15
16
"github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/setup"
16
17
token2 "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/token"
17
18
"github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/token/mock"
@@ -240,5 +241,136 @@ func TestTokensService_Recipients(t *testing.T) {
240
241
}
241
242
})
242
243
}
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 )
243
249
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\n failed 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\n failed 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\n failed 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]\n failed 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]\n failed 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]\n failed 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
+ }
244
376
}
0 commit comments