Skip to content

Commit

Permalink
fix: integration issues in wallet DIDcomm interfaces
Browse files Browse the repository at this point in the history
- Part of hyperledger-archives#2433

Signed-off-by: sudesh.shetty <sudesh.shetty@securekey.com>
  • Loading branch information
sudeshrshetty committed Oct 14, 2021
1 parent f539087 commit 1df09bc
Show file tree
Hide file tree
Showing 20 changed files with 441 additions and 301 deletions.
6 changes: 4 additions & 2 deletions pkg/client/vcwallet/client.go
Expand Up @@ -47,6 +47,8 @@ type didCommProvider interface {
ServiceEndpoint() string
ProtocolStateStorageProvider() storage.Provider
Service(id string) (interface{}, error)
KeyType() kms.KeyType
KeyAgreementType() kms.KeyType
}

// walletAuth is auth function which returns wallet unlock token.
Expand Down Expand Up @@ -405,11 +407,11 @@ func (c *Client) ProposePresentation(invitation *outofband.Invitation, options .
// - error if operation fails.
//
// TODO: wait for acknowledgement option to be added.
func (c *Client) PresentProof(thID string, presentation *verifiable.Presentation) error {
func (c *Client) PresentProof(thID string, presentProofFrom wallet.PresentProofFrom) error {
auth, err := c.auth()
if err != nil {
return err
}

return c.wallet.PresentProof(auth, thID, presentation)
return c.wallet.PresentProof(auth, thID, presentProofFrom)
}
42 changes: 29 additions & 13 deletions pkg/client/vcwallet/client_test.go
Expand Up @@ -23,6 +23,7 @@ import (
"github.com/hyperledger/aries-framework-go/pkg/crypto/tinkcrypto"
"github.com/hyperledger/aries-framework-go/pkg/didcomm/common/service"
"github.com/hyperledger/aries-framework-go/pkg/didcomm/protocol/didexchange"
"github.com/hyperledger/aries-framework-go/pkg/didcomm/protocol/mediator"
outofbandSvc "github.com/hyperledger/aries-framework-go/pkg/didcomm/protocol/outofband"
presentproofSvc "github.com/hyperledger/aries-framework-go/pkg/didcomm/protocol/presentproof"
"github.com/hyperledger/aries-framework-go/pkg/doc/did"
Expand All @@ -34,6 +35,7 @@ import (
"github.com/hyperledger/aries-framework-go/pkg/kms"
cryptomock "github.com/hyperledger/aries-framework-go/pkg/mock/crypto"
mockdidexchange "github.com/hyperledger/aries-framework-go/pkg/mock/didcomm/protocol/didexchange"
mockmediator "github.com/hyperledger/aries-framework-go/pkg/mock/didcomm/protocol/mediator"
mockoutofband "github.com/hyperledger/aries-framework-go/pkg/mock/didcomm/protocol/outofband"
mockpresentproof "github.com/hyperledger/aries-framework-go/pkg/mock/didcomm/protocol/presentproof"
mockprovider "github.com/hyperledger/aries-framework-go/pkg/mock/provider"
Expand Down Expand Up @@ -1551,6 +1553,10 @@ func TestClient_Connect(t *testing.T) {
AcceptInvitationHandle: func(*outofbandSvc.Invitation, outofbandSvc.Options) (string, error) {
return sampleConnID, nil
},
}
mockctx.ServiceMap[outofbandSvc.Name] = oobSvc

didexSvc := &mockdidexchange.MockDIDExchangeSvc{
RegisterMsgEventHandle: func(ch chan<- service.StateMsg) error {
ch <- service.StateMsg{
Type: service.PostState,
Expand All @@ -1561,8 +1567,7 @@ func TestClient_Connect(t *testing.T) {
return nil
},
}

mockctx.ServiceMap[outofbandSvc.Name] = oobSvc
mockctx.ServiceMap[didexchange.DIDExchange] = didexSvc

vcWallet, err := New(sampleUser, mockctx)
require.NoError(t, err)
Expand All @@ -1578,13 +1583,12 @@ func TestClient_Connect(t *testing.T) {
})

t.Run("test did connect failure", func(t *testing.T) {
oobSvc := &mockoutofband.MockOobService{
didexSvc := &mockdidexchange.MockDIDExchangeSvc{
RegisterMsgEventHandle: func(ch chan<- service.StateMsg) error {
return fmt.Errorf(sampleClientErr)
},
}

mockctx.ServiceMap[outofbandSvc.Name] = oobSvc
mockctx.ServiceMap[didexchange.DIDExchange] = didexSvc

vcWallet, err := New(sampleUser, mockctx)
require.NoError(t, err)
Expand Down Expand Up @@ -1618,13 +1622,22 @@ func TestClient_ProposePresentation(t *testing.T) {
err := CreateProfile(sampleUser, mockctx, wallet.WithPassphrase(samplePassPhrase))
require.NoError(t, err)

const (
myDID = "did:mydid:123"
theirDID = "did:theirdid:123"
)

t.Run("test propose presentation success", func(t *testing.T) {
sampleConnID := uuid.New().String()

oobSvc := &mockoutofband.MockOobService{
AcceptInvitationHandle: func(*outofbandSvc.Invitation, outofbandSvc.Options) (string, error) {
return sampleConnID, nil
},
}
mockctx.ServiceMap[outofbandSvc.Name] = oobSvc

didexSvc := &mockdidexchange.MockDIDExchangeSvc{
RegisterMsgEventHandle: func(ch chan<- service.StateMsg) error {
ch <- service.StateMsg{
Type: service.PostState,
Expand All @@ -1635,6 +1648,7 @@ func TestClient_ProposePresentation(t *testing.T) {
return nil
},
}
mockctx.ServiceMap[didexchange.DIDExchange] = didexSvc

thID := uuid.New().String()

Expand All @@ -1646,24 +1660,24 @@ func TestClient_ProposePresentation(t *testing.T) {
Msg: service.NewDIDCommMsgMap(&presentproofSvc.RequestPresentation{
Comment: "mock msg",
}),
MyDID: myDID,
TheirDID: theirDID,
},
}, nil
},
HandleFunc: func(service.DIDCommMsg) (string, error) {
return thID, nil
},
}

mockctx.ServiceMap[outofbandSvc.Name] = oobSvc
mockctx.ServiceMap[presentproofSvc.Name] = ppSvc

store, err := mockctx.StorageProvider().OpenStore(connection.Namespace)
require.NoError(t, err)

record := &connection.Record{
ConnectionID: sampleConnID,
MyDID: "did:mydid",
TheirDID: "did:theirDID",
MyDID: myDID,
TheirDID: theirDID,
}
recordBytes, err := json.Marshal(record)
require.NoError(t, err)
Expand Down Expand Up @@ -1730,7 +1744,7 @@ func TestClient_PresentProof(t *testing.T) {
require.NoError(t, err)
defer vcWallet.Close()

err = vcWallet.PresentProof(uuid.New().String(), &verifiable.Presentation{})
err = vcWallet.PresentProof(uuid.New().String(), wallet.FromPresentation(&verifiable.Presentation{}))
require.NoError(t, err)
})

Expand All @@ -1739,7 +1753,7 @@ func TestClient_PresentProof(t *testing.T) {
require.NoError(t, err)
require.NotEmpty(t, vcWallet)

err = vcWallet.PresentProof(uuid.New().String(), &verifiable.Presentation{})
err = vcWallet.PresentProof(uuid.New().String(), wallet.FromPresentation(&verifiable.Presentation{}))
require.True(t, errors.Is(err, ErrWalletLocked))
})
}
Expand All @@ -1751,8 +1765,10 @@ func newMockProvider(t *testing.T) *mockprovider.Provider {
require.NoError(t, err)

serviceMap := map[string]interface{}{
presentproofSvc.Name: &mockpresentproof.MockPresentProofSvc{},
outofbandSvc.Name: &mockoutofband.MockOobService{},
presentproofSvc.Name: &mockpresentproof.MockPresentProofSvc{},
outofbandSvc.Name: &mockoutofband.MockOobService{},
didexchange.DIDExchange: &mockdidexchange.MockDIDExchangeSvc{},
mediator.Coordination: &mockmediator.MockMediatorSvc{},
}

return &mockprovider.Provider{
Expand Down
17 changes: 12 additions & 5 deletions pkg/controller/command/vcwallet/command.go
Expand Up @@ -180,6 +180,8 @@ type didCommProvider interface {
ServiceEndpoint() string
ProtocolStateStorageProvider() storage.Provider
Service(id string) (interface{}, error)
KeyType() kms.KeyType
KeyAgreementType() kms.KeyType
}

// Command contains operations provided by verifiable credential wallet controller.
Expand Down Expand Up @@ -735,8 +737,8 @@ func (o *Command) Connect(rw io.Writer, req io.Reader) command.Error {

connectionID, err := vcWallet.Connect(request.Auth, request.Invitation,
wallet.WithConnectTimeout(request.Timeout), wallet.WithReuseDID(request.ReuseConnection),
wallet.WithReuseAnyConnection(), wallet.WithMyLabel(request.MyLabel),
wallet.WithRouterConnections(request.RouterConnections))
wallet.WithReuseAnyConnection(request.ReuseAnyConnection), wallet.WithMyLabel(request.MyLabel),
wallet.WithRouterConnections(request.RouterConnections...))
if err != nil {
logutil.LogInfo(logger, CommandName, ConnectMethod, err.Error())

Expand Down Expand Up @@ -777,7 +779,12 @@ func (o *Command) ProposePresentation(rw io.Writer, req io.Reader) command.Error
}

msg, err := vcWallet.ProposePresentation(request.Auth, request.Invitation,
wallet.WithFromDID(request.FromDID), wallet.WithPresentProofTimeout(request.Timeout))
wallet.WithFromDID(request.FromDID), wallet.WithPresentProofTimeout(request.Timeout),
wallet.WithConnectOptions(wallet.WithConnectTimeout(request.ConnectionOpts.Timeout),
wallet.WithReuseDID(request.ConnectionOpts.ReuseConnection),
wallet.WithReuseAnyConnection(request.ConnectionOpts.ReuseAnyConnection),
wallet.WithMyLabel(request.ConnectionOpts.MyLabel),
wallet.WithRouterConnections(request.ConnectionOpts.RouterConnections...)))
if err != nil {
logutil.LogInfo(logger, CommandName, ProposePresentationMethod, err.Error())

Expand All @@ -792,7 +799,7 @@ func (o *Command) ProposePresentation(rw io.Writer, req io.Reader) command.Error
return nil
}

// PresentProof sends message present proof message from wallet to relying party.
// PresentProof sends present proof message from wallet to relying party.
//
// Currently Supporting
// [0454-present-proof-v2](https://github.com/hyperledger/aries-rfcs/tree/master/features/0454-present-proof-v2)
Expand All @@ -814,7 +821,7 @@ func (o *Command) PresentProof(rw io.Writer, req io.Reader) command.Error {
return command.NewExecuteError(PresentProofErrorCode, err)
}

err = vcWallet.PresentProof(request.Auth, request.ThreadID, request.Presentation)
err = vcWallet.PresentProof(request.Auth, request.ThreadID, wallet.FromRawPresentation(request.Presentation))
if err != nil {
logutil.LogInfo(logger, CommandName, PresentProofMethod, err.Error())

Expand Down

0 comments on commit 1df09bc

Please sign in to comment.