Skip to content

Commit bc02815

Browse files
committed
deobfuscate also fabtokens
fix tests Signed-off-by: Angelo De Caro <adc@zurich.ibm.com>
1 parent 9428818 commit bc02815

File tree

7 files changed

+180
-128
lines changed

7 files changed

+180
-128
lines changed

integration/token/fungible/support.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -952,10 +952,12 @@ func CheckOwnerDB(network *integration.Infrastructure, errorCheck func([]string)
952952
for _, replicaName := range id.AllNames() {
953953
errorMessagesBoxed, err := network.Client(replicaName).CallView("CheckTTXDB", common.JSONMarshall(&views.CheckTTXDB{}))
954954
Expect(err).NotTo(HaveOccurred())
955+
var errorMessages []string
956+
common.JSONUnmarshal(errorMessagesBoxed.([]byte), &errorMessages)
955957
if errorCheck != nil {
956-
var errorMessages []string
957-
common.JSONUnmarshal(errorMessagesBoxed.([]byte), &errorMessages)
958958
Expect(errorCheck(errorMessages)).NotTo(HaveOccurred(), "failed to check errors")
959+
} else {
960+
Expect(len(errorMessages)).To(BeZero(), "expected zero errors, got [%v]", errorMessages)
959961
}
960962
}
961963
}
@@ -967,14 +969,12 @@ func CheckAuditorDB(network *integration.Infrastructure, auditor *token3.NodeRef
967969
AuditorWalletID: walletID,
968970
}))
969971
Expect(err).NotTo(HaveOccurred())
972+
var errorMessages []string
973+
common.JSONUnmarshal(errorMessagesBoxed.([]byte), &errorMessages)
970974
if errorCheck != nil {
971-
var errorMessages []string
972-
common.JSONUnmarshal(errorMessagesBoxed.([]byte), &errorMessages)
973975
Expect(errorCheck(errorMessages)).NotTo(HaveOccurred(), "failed to check errors")
974976
} else {
975-
var errorMessages []string
976-
common.JSONUnmarshal(errorMessagesBoxed.([]byte), &errorMessages)
977-
Expect(len(errorMessages)).To(Equal(0), "expected 0 error messages, got [% v]", errorMessages)
977+
Expect(len(errorMessages)).To(BeZero(), "expected zero errors, got [%v]", errorMessages)
978978
}
979979
}
980980

token/core/fabtoken/v1/tokens.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func NewTokensService(pp *core.PublicParams, identityDeserializer driver.Deseria
3737
}, nil
3838
}
3939

40-
func (s *TokensService) Recipients(output []byte) ([]driver.Identity, error) {
40+
func (s *TokensService) Recipients(output driver.TokenOutput) ([]driver.Identity, error) {
4141
tok := &core.Output{}
4242
if err := tok.Deserialize(output); err != nil {
4343
return nil, errors.Wrap(err, "failed unmarshalling token")
@@ -50,7 +50,7 @@ func (s *TokensService) Recipients(output []byte) ([]driver.Identity, error) {
5050
}
5151

5252
// Deobfuscate returns a deserialized token and the identity of its issuer
53-
func (s *TokensService) Deobfuscate(output []byte, outputMetadata []byte) (*token2.Token, driver.Identity, []driver.Identity, token2.Format, error) {
53+
func (s *TokensService) Deobfuscate(output driver.TokenOutput, outputMetadata driver.TokenOutputMetadata) (*token2.Token, driver.Identity, []driver.Identity, token2.Format, error) {
5454
tok := &core.Output{}
5555
if err := tok.Deserialize(output); err != nil {
5656
return nil, nil, nil, "", errors.Wrap(err, "failed unmarshalling token")

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ func (d *Driver) NewTokenService(tmsID driver.TMSID, publicParams []byte) (drive
113113

114114
metricsProvider := metrics.NewTMSProvider(tmsConfig.ID(), d.metricsProvider)
115115
driverMetrics := v1.NewMetrics(metricsProvider)
116-
tokensService, err := v1.NewTokensService(ppm, deserializer)
116+
tokensService, err := v1.NewTokensService(logger, ppm, deserializer)
117117
if err != nil {
118118
return nil, errors.Wrapf(err, "failed to initiliaze token service for [%s:%s]", tmsID.Network, tmsID.Namespace)
119119
}

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

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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{
3435
type 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+
120159
func (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

Comments
 (0)