@@ -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\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+ }
244376}
0 commit comments