Skip to content

Commit c79d19f

Browse files
committed
Rough Draft- still in the works
Signed-off-by: Effi-S <effi.szt@gmail.com>
1 parent 5c8aafc commit c79d19f

25 files changed

Lines changed: 248 additions & 102 deletions

File tree

integration/token/fungible/views/boolpolicy.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,12 @@ func (m *PolicyAcceptSpendView) Call(context view.Context) (any, error) {
217217

218218
continue
219219
}
220-
if len(in.Owner) != 0 && sigService.IsMe(context.Context(), in.Owner) {
221-
assert.Fail("received tx consumes additional token [%s] owned by this responder", in.Id)
220+
if len(in.Owner) != 0 {
221+
isMe, err := sigService.IsMe(context.Context(), in.Owner)
222+
assert.NoError(err, "failed to check ownership of input [%s]", in.Id)
223+
if isMe {
224+
assert.Fail("received tx consumes additional token [%s] owned by this responder", in.Id)
225+
}
222226
}
223227
}
224228
assert.True(matched, "received tx does not consume the token named in SpendRequest")

integration/token/fungible/views/multisig.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,12 @@ func (m *MultiSigAcceptSpendView) Call(context view.Context) (any, error) {
206206
continue
207207
}
208208
// Any other input must NOT belong to this responder.
209-
if len(in.Owner) != 0 && sigService.IsMe(context.Context(), in.Owner) {
210-
assert.Fail("received tx consumes additional token [%s] owned by this responder", in.Id)
209+
if len(in.Owner) != 0 {
210+
isMe, err := sigService.IsMe(context.Context(), in.Owner)
211+
assert.NoError(err, "failed to check ownership of input [%s]", in.Id)
212+
if isMe {
213+
assert.Fail("received tx consumes additional token [%s] owned by this responder", in.Id)
214+
}
211215
}
212216
}
213217
assert.True(matched, "received tx does not consume the token named in SpendRequest")

integration/token/fungible/views/utils.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ func AssertTokens(sp token.ServiceProvider, tx *ttx.Transaction, outputs *token.
2929
assert.NoError(err, "failed to get token db for [%s]", tx.TokenService().ID())
3030
for _, output := range outputs.Outputs() {
3131
tokenID := output.ID(token.RequestAnchor(tx.ID()))
32-
if output.Owner.Equal(id) || tx.TokenService().SigService().IsMe(ctx, output.Owner) {
32+
isMe, err := tx.TokenService().SigService().IsMe(ctx, output.Owner)
33+
assert.NoError(err, "failed to check ownership of [%s]", output.Owner)
34+
if output.Owner.Equal(id) || isMe {
3335
// check it exists
3436
toks, err := db.GetTokens(ctx, tokenID)
3537
assert.NoError(err, "failed to retrieve token [%s]", tokenID)

token/driver/mock/ip.go

Lines changed: 28 additions & 18 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

token/driver/wallet.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,14 @@ type IdentityProvider interface {
3939
RegisterSigner(ctx context.Context, identity Identity, signer Signer, verifier Verifier, signerInfo []byte, ephemeral bool) error
4040

4141
// AreMe checks a list of identities and returns those that have signers registered with this provider.
42-
AreMe(ctx context.Context, identities ...Identity) []string
42+
// A non-nil error means the ownership check could not be completed (for example a storage failure);
43+
// in that case the returned slice must not be treated as an authoritative answer.
44+
AreMe(ctx context.Context, identities ...Identity) ([]string, error)
4345

4446
// IsMe returns true if a signer has been registered for the specified identity.
45-
IsMe(ctx context.Context, party Identity) bool
47+
// A non-nil error means ownership could not be determined and the boolean must be ignored;
48+
// callers must not treat a false-with-error as an authoritative "not mine".
49+
IsMe(ctx context.Context, party Identity) (bool, error)
4650

4751
// GetEnrollmentID extracts the enrollment identifier from the provided audit information for a specific identity.
4852
GetEnrollmentID(ctx context.Context, identity Identity, auditInfo []byte) (string, error)

token/services/identity/membership/lm.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ type IdentityStoreService interface {
100100
//
101101
//go:generate counterfeiter -o mock/ip.go -fake-name IdentityProvider . IdentityProvider
102102
type IdentityProvider interface {
103-
IsMe(context.Context, idriver.Identity) bool
103+
IsMe(context.Context, idriver.Identity) (bool, error)
104104
// Bind an ephemeral identity to another identity
105105
Bind(ctx context.Context, longTerm idriver.Identity, ephemeralIdentities ...idriver.Identity) error
106106
// RegisterIdentityDescriptor register the passed identity descriptor with an alias
@@ -293,7 +293,8 @@ func (l *LocalMembership) Close() {
293293

294294
// IsMe reports whether the given identity belongs to this local membership set.
295295
// It delegates to the configured IdentityProvider to determine membership.
296-
func (l *LocalMembership) IsMe(ctx context.Context, id token.Identity) bool {
296+
// A non-nil error means membership could not be determined (the boolean must be ignored).
297+
func (l *LocalMembership) IsMe(ctx context.Context, id token.Identity) (bool, error) {
297298
return l.IdentityProvider.IsMe(ctx, id)
298299
}
299300

token/services/identity/membership/lm_security_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ func TestGetIdentityInfo_NotFoundDoesNotLeakOtherIdentities(t *testing.T) {
188188

189189
ip := &mock.IdentityProvider{}
190190
ip.BindReturns(nil)
191-
ip.IsMeReturns(false)
191+
ip.IsMeReturns(false, nil)
192192

193193
iss := &mock.IdentityStoreService{}
194194
iss.ConfigurationExistsReturns(false, nil)

token/services/identity/membership/lm_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import (
3434

3535
func TestNewLocalMembership_IsMe(t *testing.T) {
3636
ip := &mock.IdentityProvider{}
37-
ip.IsMeReturns(true)
37+
ip.IsMeReturns(true, nil)
3838

3939
lm := membership.NewLocalMembership(
4040
logging.MustGetLogger("test"),
@@ -47,7 +47,9 @@ func TestNewLocalMembership_IsMe(t *testing.T) {
4747
ip,
4848
)
4949

50-
assert.True(t, lm.IsMe(t.Context(), []byte("any")))
50+
isMe, err := lm.IsMe(t.Context(), []byte("any"))
51+
require.NoError(t, err)
52+
assert.True(t, isMe)
5153
assert.Equal(t, token.Identity("netid"), lm.DefaultNetworkIdentity())
5254
}
5355

token/services/identity/membership/mock/ip.go

Lines changed: 14 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)