@@ -19,6 +19,7 @@ import (
1919 "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/crypto/math"
2020 token2 "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/crypto/token"
2121 "github.com/hyperledger-labs/fabric-token-sdk/token/driver"
22+ "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging"
2223 "github.com/hyperledger-labs/fabric-token-sdk/token/services/tokens/core/comm"
2324 utils2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/utils"
2425 "github.com/hyperledger-labs/fabric-token-sdk/token/token"
@@ -34,6 +35,7 @@ var precisions = map[token.Format]uint64{
3435type TokensService struct {
3536 * common.TokensService
3637
38+ Logger logging.Logger
3739 PublicParametersManager common.PublicParametersManager [* crypto.PublicParams ]
3840 IdentityDeserializer driver.Deserializer
3941
@@ -42,7 +44,7 @@ type TokensService struct {
4244 UpgradeSupportedTokenFormatList []token.Format
4345}
4446
45- func NewTokensService (publicParametersManager common.PublicParametersManager [* crypto.PublicParams ], identityDeserializer driver.Deserializer ) (* TokensService , error ) {
47+ func NewTokensService (logger logging. Logger , publicParametersManager common.PublicParametersManager [* crypto.PublicParams ], identityDeserializer driver.Deserializer ) (* TokensService , error ) {
4648 // compute supported tokens
4749 pp := publicParametersManager .PublicParams ()
4850 maxPrecision := pp .RangeProofParams .BitLength
@@ -80,6 +82,7 @@ func NewTokensService(publicParametersManager common.PublicParametersManager[*cr
8082 }
8183
8284 return & TokensService {
85+ Logger : logger ,
8386 TokensService : common .NewTokensService (),
8487 PublicParametersManager : publicParametersManager ,
8588 IdentityDeserializer : identityDeserializer ,
@@ -89,7 +92,7 @@ func NewTokensService(publicParametersManager common.PublicParametersManager[*cr
8992 }, nil
9093}
9194
92- func (s * TokensService ) Recipients (output [] byte ) ([]driver.Identity , error ) {
95+ func (s * TokensService ) Recipients (output driver. TokenOutput ) ([]driver.Identity , error ) {
9396 tok := & token2.Token {}
9497 if err := tok .Deserialize (output ); err != nil {
9598 return nil , errors .Wrap (err , "failed to deserialize token" )
@@ -105,8 +108,20 @@ func (s *TokensService) Recipients(output []byte) ([]driver.Identity, error) {
105108// We assume here that the format of the output is the default output format supported
106109// It checks if the un-marshalled token matches the token info. If not, it returns
107110// an error. Else it returns the token in cleartext and the identity of its issuer
108- func (s * TokensService ) Deobfuscate (output []byte , outputMetadata []byte ) (* token.Token , driver.Identity , []driver.Identity , token.Format , error ) {
109- _ , metadata , tok , err := s .deserializeToken (output , outputMetadata , false )
111+ func (s * TokensService ) Deobfuscate (output driver.TokenOutput , outputMetadata driver.TokenOutputMetadata ) (* token.Token , driver.Identity , []driver.Identity , token.Format , error ) {
112+ // we support fabtoken.Type and comm.Type
113+
114+ // try first comm type
115+ tok , issuer , recipients , format , err := s .deobfuscateAsCommType (output , outputMetadata )
116+ if err == nil {
117+ return tok , issuer , recipients , format , nil
118+ }
119+ // try fabtoken type
120+ return s .deobfuscateAsFabtokenType (output , outputMetadata )
121+ }
122+
123+ func (s * TokensService ) deobfuscateAsCommType (output driver.TokenOutput , outputMetadata driver.TokenOutputMetadata ) (* token.Token , driver.Identity , []driver.Identity , token.Format , error ) {
124+ _ , metadata , tok , err := s .deserializeCommToken (output , outputMetadata , false )
110125 if err != nil {
111126 return nil , nil , nil , "" , errors .Wrapf (err , "failed to deobfuscate token" )
112127 }
@@ -117,6 +132,30 @@ func (s *TokensService) Deobfuscate(output []byte, outputMetadata []byte) (*toke
117132 return tok , metadata .Issuer , recipients , s .OutputTokenFormat , nil
118133}
119134
135+ func (s * TokensService ) deobfuscateAsFabtokenType (output driver.TokenOutput , outputMetadata driver.TokenOutputMetadata ) (* token.Token , driver.Identity , []driver.Identity , token.Format , error ) {
136+ // TODO: refer only to the protos
137+ tok := & core.Output {}
138+ if err := tok .Deserialize (output ); err != nil {
139+ return nil , nil , nil , "" , errors .Wrap (err , "failed unmarshalling token" )
140+ }
141+
142+ metadata := & core.OutputMetadata {}
143+ if err := metadata .Deserialize (outputMetadata ); err != nil {
144+ return nil , nil , nil , "" , errors .Wrap (err , "failed unmarshalling token information" )
145+ }
146+
147+ recipients , err := s .IdentityDeserializer .Recipients (tok .Owner )
148+ if err != nil {
149+ return nil , nil , nil , "" , errors .Wrapf (err , "failed to get recipients" )
150+ }
151+
152+ return & token.Token {
153+ Owner : tok .Owner ,
154+ Type : tok .Type ,
155+ Quantity : tok .Quantity ,
156+ }, metadata .Issuer , recipients , s .OutputTokenFormat , nil
157+ }
158+
120159func (s * TokensService ) SupportedTokenFormats () []token.Format {
121160 return s .SupportedTokenFormatList
122161}
@@ -193,7 +232,7 @@ func (s *TokensService) deserializeTokenWithOutputTokenFormat(outputRaw []byte,
193232 return output , metadata , nil
194233}
195234
196- func (s * TokensService ) deserializeToken (outputRaw []byte , metadataRaw []byte , checkOwner bool ) (* token2.Token , * token2.Metadata , * token.Token , error ) {
235+ func (s * TokensService ) deserializeCommToken (outputRaw []byte , metadataRaw []byte , checkOwner bool ) (* token2.Token , * token2.Metadata , * token.Token , error ) {
197236 // get zkatdlog token
198237 output , err := s .getOutput (outputRaw , checkOwner )
199238 if err != nil {
0 commit comments