Skip to content
This repository was archived by the owner on Mar 27, 2024. It is now read-only.

Commit cea4427

Browse files
Abdulboisbaha-ai
andauthored
refactor: enable usage of legacy Anoncrypt packer. Make nested forwards while creating forward message. Add legacyForward model (#3272)
* refactor: remote cryptobox URLs renamed to /wrap and /unwrap (#3259) this change updates the remote CryptoBox api URIs to point to remote KMS's key /wrap and /unwrap to match ECDH-ES and ECDH-1PU key wrapping. This change requires the KMS server to udpate /easy to /wrap, /easyOpen and /sealOpen to /unwrap Signed-off-by: Baha Shaaban <baha.shaaban@securekey.com> Signed-off-by: Abdulbois <abdulbois.tursunov@avast.com> * refactor: re enable remote kms bdd-tests with unwrapKey (#3263) This change updates the webkms server in bdd tests and re enables commented out webkms tests requiring cryptobox's /wrap and /unwrap operations. closes #3262 Signed-off-by: Baha Shaaban <baha.shaaban@securekey.com> Signed-off-by: Abdulbois <abdulbois.tursunov@avast.com> * refactor: Enable usage of legacy Anoncrypt packer. Make nested forwards while creating forward message. Add legacyForward model - Add legacy Anoncrypt packer while creating packers - Add ability to create nested packed forwards (one nested forward for each routing key) - Check and convert msg field of Forward to Envelope in order to support DIDComm V1 Forward types - Revert part of 04bfea8 commit related to generating keys inside mediator service. Because with previous changes (having two types of generated keys belonging to the same router) it breaks Route Coordination protocol (while creating nested forwards it will pack two times to the same mediator then mediator cannot handle second forward message) Signed-off-by: Abdulbois <abdulbois.tursunov@avast.com> * refactor: Remove test due to forcing anoncrypt while calling createForwardMessage. Fix lint errors Signed-off-by: Abdulbois <abdulbois.tursunov@avast.com> Co-authored-by: Baha <29608896+Baha-sk@users.noreply.github.com>
1 parent d96b693 commit cea4427

11 files changed

Lines changed: 184 additions & 89 deletions

File tree

cmd/aries-agent-mobile/go.sum

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,11 +275,14 @@ github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2
275275
github.com/square/go-jose/v3 v3.0.0-20200630053402-0a67ce9b0693 h1:wD1IWQwAhdWclCwaf6DdzgCAe9Bfz1M+4AHRd7N786Y=
276276
github.com/square/go-jose/v3 v3.0.0-20200630053402-0a67ce9b0693/go.mod h1:6hSY48PjDm4UObWmGLyJE9DxYVKTgR9kbCspXXJEhcU=
277277
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
278+
github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4=
279+
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
278280
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
279281
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
280282
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
281283
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
282284
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
285+
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
283286
github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s=
284287
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
285288
github.com/teserakt-io/golang-ed25519 v0.0.0-20210104091850-3888c087a4c8 h1:RBkacARv7qY5laaXGlF4wFB/tk5rnthhPb8oIBGoagY=

cmd/aries-agent-rest/go.sum

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,11 +347,14 @@ github.com/square/go-jose/v3 v3.0.0-20200630053402-0a67ce9b0693 h1:wD1IWQwAhdWcl
347347
github.com/square/go-jose/v3 v3.0.0-20200630053402-0a67ce9b0693/go.mod h1:6hSY48PjDm4UObWmGLyJE9DxYVKTgR9kbCspXXJEhcU=
348348
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
349349
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
350+
github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4=
351+
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
350352
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
351353
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
352354
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
353355
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
354356
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
357+
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
355358
github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s=
356359
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
357360
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ require (
5656
github.com/pmezard/go-difflib v1.0.0 // indirect
5757
github.com/pquerna/cachecontrol v0.1.0 // indirect
5858
github.com/spaolacci/murmur3 v1.1.0 // indirect
59+
github.com/stretchr/objx v0.4.0 // indirect
5960
github.com/tidwall/match v1.0.3 // indirect
6061
github.com/tidwall/pretty v1.0.2 // indirect
6162
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect

go.sum

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,11 +322,14 @@ github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2
322322
github.com/square/go-jose/v3 v3.0.0-20200630053402-0a67ce9b0693 h1:wD1IWQwAhdWclCwaf6DdzgCAe9Bfz1M+4AHRd7N786Y=
323323
github.com/square/go-jose/v3 v3.0.0-20200630053402-0a67ce9b0693/go.mod h1:6hSY48PjDm4UObWmGLyJE9DxYVKTgR9kbCspXXJEhcU=
324324
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
325+
github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4=
326+
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
325327
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
326328
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
327329
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
328330
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
329331
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
332+
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
330333
github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s=
331334
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
332335
github.com/teserakt-io/golang-ed25519 v0.0.0-20200315192543-8255be791ce4/go.mod h1:9PdLyPiZIiW3UopXyRnPYyjUXSpiQNHRLu8fOsR3o8M=

pkg/didcomm/dispatcher/outbound/outbound.go

Lines changed: 71 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424
"github.com/hyperledger/aries-framework-go/pkg/framework/aries/api/vdr"
2525
"github.com/hyperledger/aries-framework-go/pkg/kms"
2626
"github.com/hyperledger/aries-framework-go/pkg/store/connection"
27-
"github.com/hyperledger/aries-framework-go/pkg/vdr/fingerprint"
2827
"github.com/hyperledger/aries-framework-go/spi/storage"
2928
)
3029

@@ -66,6 +65,15 @@ type Dispatcher struct {
6665
didcommV2Handler *middleware.DIDCommMessageMiddleware
6766
}
6867

68+
// legacyForward is DIDComm V1 route Forward msg as declared in
69+
// https://github.com/hyperledger/aries-rfcs/blob/main/concepts/0094-cross-domain-messaging/README.md
70+
type legacyForward struct {
71+
Type string `json:"@type,omitempty"`
72+
ID string `json:"@id,omitempty"`
73+
To string `json:"to,omitempty"`
74+
Msg *model.Envelope `json:"msg,omitempty"`
75+
}
76+
6977
var logger = log.New("aries-framework/didcomm/dispatcher")
7078

7179
// NewOutbound return new dispatcher outbound instance.
@@ -340,32 +348,21 @@ func (o *Dispatcher) Forward(msg interface{}, des *service.Destination) error {
340348
return fmt.Errorf("outboundDispatcher.Forward: no transport found for serviceEndpoint: %s", uri)
341349
}
342350

343-
//nolint:funlen
344351
func (o *Dispatcher) createForwardMessage(msg []byte, des *service.Destination) ([]byte, error) {
345-
forwardMsgType := service.ForwardMsgType
346-
347352
mtProfile := o.mediaTypeProfile(des)
348353

349354
var (
350-
senderKey []byte
351-
err error
355+
forwardMsgType string
356+
err error
352357
)
353358

354359
switch mtProfile {
355360
case transport.MediaTypeV2EncryptedEnvelopeV1PlaintextPayload, transport.MediaTypeV2EncryptedEnvelope,
356361
transport.MediaTypeAIP2RFC0587Profile, transport.MediaTypeV2PlaintextPayload, transport.MediaTypeDIDCommV2Profile:
357362
// for DIDComm V2, do not set senderKey to force Anoncrypt packing. Only set the V2 forwardMsgType.
358363
forwardMsgType = service.ForwardMsgTypeV2
359-
default: // default is DIDComm V1, create a dummy key as senderKey
360-
// create key set
361-
_, senderKey, err = o.kms.CreateAndExportPubKeyBytes(kms.ED25519Type)
362-
if err != nil {
363-
return nil, fmt.Errorf("failed Create and export Encryption Key: %w", err)
364-
}
365-
366-
senderDIDKey, _ := fingerprint.CreateDIDKey(senderKey)
367-
368-
senderKey = []byte(senderDIDKey)
364+
default: // default is DIDComm V1
365+
forwardMsgType = service.ForwardMsgType
369366
}
370367

371368
routingKeys, err := des.ServiceEndpoint.RoutingKeys()
@@ -382,26 +379,74 @@ func (o *Dispatcher) createForwardMessage(msg []byte, des *service.Destination)
382379
routingKeys = des.RoutingKeys
383380
}
384381

385-
// create forward message
386-
forward := &model.Forward{
387-
Type: forwardMsgType,
388-
ID: uuid.New().String(),
389-
To: des.RecipientKeys[0],
390-
Msg: msg,
382+
fwdKeys := append([]string{des.RecipientKeys[0]}, routingKeys...)
383+
384+
packedMsg, err := o.createPackedNestedForwards(msg, fwdKeys, forwardMsgType, mtProfile)
385+
if err != nil {
386+
return nil, fmt.Errorf("failed to create packed nested forwards: %w", err)
387+
}
388+
389+
return packedMsg, nil
390+
}
391+
392+
func (o *Dispatcher) createPackedNestedForwards(msg []byte, routingKeys []string, fwdMsgType, mtProfile string) ([]byte, error) { //nolint: lll
393+
for i, key := range routingKeys {
394+
if i+1 >= len(routingKeys) {
395+
break
396+
}
397+
// create forward message
398+
forward := model.Forward{
399+
Type: fwdMsgType,
400+
ID: uuid.New().String(),
401+
To: key,
402+
Msg: msg,
403+
}
404+
405+
var err error
406+
407+
msg, err = o.packForward(forward, []string{routingKeys[i+1]}, mtProfile)
408+
if err != nil {
409+
return nil, fmt.Errorf("failed to pack forward msg: %w", err)
410+
}
391411
}
392412

413+
return msg, nil
414+
}
415+
416+
func (o *Dispatcher) packForward(fwd model.Forward, toKeys []string, mtProfile string) ([]byte, error) {
417+
env := &model.Envelope{}
418+
419+
var (
420+
forward interface{}
421+
err error
422+
req []byte
423+
)
424+
// try to convert msg to Envelope
425+
err = json.Unmarshal(fwd.Msg, env)
426+
if err == nil {
427+
forward = legacyForward{
428+
Type: fwd.Type,
429+
ID: fwd.ID,
430+
To: fwd.To,
431+
Msg: env,
432+
}
433+
} else {
434+
forward = fwd
435+
}
393436
// convert forward message to bytes
394-
req, err := json.Marshal(forward)
437+
req, err = json.Marshal(forward)
395438
if err != nil {
396439
return nil, fmt.Errorf("failed marshal to bytes: %w", err)
397440
}
398441

399-
packedMsg, err := o.packager.PackMessage(&transport.Envelope{
442+
var packedMsg []byte
443+
packedMsg, err = o.packager.PackMessage(&transport.Envelope{
400444
MediaTypeProfile: mtProfile,
401445
Message: req,
402-
FromKey: senderKey,
403-
ToKeys: routingKeys,
446+
FromKey: []byte{},
447+
ToKeys: toKeys,
404448
})
449+
405450
if err != nil {
406451
return nil, fmt.Errorf("failed to pack forward msg: %w", err)
407452
}

pkg/didcomm/dispatcher/outbound/outbound_test.go

Lines changed: 46 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"testing"
1414

1515
"github.com/google/uuid"
16+
"github.com/stretchr/testify/mock"
1617
"github.com/stretchr/testify/require"
1718

1819
"github.com/hyperledger/aries-framework-go/pkg/common/model"
@@ -47,6 +48,38 @@ func TestNewOutbound(t *testing.T) {
4748
})
4849
}
4950

51+
func TestOutBoundDispatcher_createPackedNestedForwards(t *testing.T) {
52+
t.Run("test send with nested forward message - success", func(t *testing.T) {
53+
data := "data"
54+
recKey1 := "recKey1"
55+
rtKey1 := "rtKey1"
56+
rtKey2 := "rtKey2"
57+
packager := &mockPackager{}
58+
expectedRequest := `{"protected":"","iv":"","ciphertext":"","tag":""}`
59+
60+
o, err := NewOutbound(&mockProvider{
61+
packagerValue: packager,
62+
outboundTransportsValue: []transport.OutboundTransport{&mockOutboundTransport{expectedRequest: expectedRequest}},
63+
storageProvider: mockstore.NewMockStoreProvider(),
64+
protoStorageProvider: mockstore.NewMockStoreProvider(),
65+
mediaTypeProfiles: []string{transport.MediaTypeDIDCommV2Profile},
66+
})
67+
require.NoError(t, err)
68+
69+
packager.On("PackMessage", []string{recKey1}).Return([]byte(expectedRequest))
70+
packager.On("PackMessage", []string{rtKey1}).Return([]byte(expectedRequest))
71+
packager.On("PackMessage", []string{rtKey2}).Return([]byte(expectedRequest))
72+
73+
require.NoError(t, o.Send(data, "", &service.Destination{
74+
ServiceEndpoint: model.NewDIDCommV2Endpoint([]model.DIDCommV2Endpoint{
75+
{URI: "url", RoutingKeys: []string{rtKey1, rtKey2}},
76+
}),
77+
RecipientKeys: []string{recKey1},
78+
}))
79+
packager.AssertExpectations(t)
80+
})
81+
}
82+
5083
func TestOutboundDispatcher_Send(t *testing.T) {
5184
t.Run("test success", func(t *testing.T) {
5285
o, err := NewOutbound(&mockProvider{
@@ -173,29 +206,6 @@ func TestOutboundDispatcher_Send(t *testing.T) {
173206
}))
174207
})
175208

176-
t.Run("test send with forward message - create key failure", func(t *testing.T) {
177-
o, err := NewOutbound(&mockProvider{
178-
packagerValue: &mockpackager.Packager{PackValue: createPackedMsgForForward(t)},
179-
outboundTransportsValue: []transport.OutboundTransport{&mockdidcomm.MockOutboundTransport{AcceptValue: true}},
180-
kms: &mockkms.KeyManager{
181-
CrAndExportPubKeyErr: errors.New("create and export key error"),
182-
},
183-
storageProvider: mockstore.NewMockStoreProvider(),
184-
protoStorageProvider: mockstore.NewMockStoreProvider(),
185-
mediaTypeProfiles: []string{transport.MediaTypeAIP2RFC0019Profile},
186-
})
187-
require.NoError(t, err)
188-
189-
err = o.Send("data", mockdiddoc.MockDIDKey(t), &service.Destination{
190-
ServiceEndpoint: model.NewDIDCommV2Endpoint([]model.DIDCommV2Endpoint{
191-
{URI: "url", RoutingKeys: []string{"xyz"}},
192-
}),
193-
RecipientKeys: []string{"abc"},
194-
})
195-
require.EqualError(t, err, "outboundDispatcher.Send: failed to create forward msg: failed Create "+
196-
"and export Encryption Key: create and export key error")
197-
})
198-
199209
t.Run("test send with forward message - packer error", func(t *testing.T) {
200210
o, err := NewOutbound(&mockProvider{
201211
packagerValue: &mockpackager.Packager{PackErr: errors.New("pack error")},
@@ -778,9 +788,21 @@ func (o *mockOutboundTransport) Accept(url string) bool {
778788
}
779789

780790
// mockPackager mock packager.
781-
type mockPackager struct{}
791+
type mockPackager struct {
792+
mock.Mock
793+
}
782794

783795
func (m *mockPackager) PackMessage(e *transport.Envelope) ([]byte, error) {
796+
if len(m.ExpectedCalls) > 0 {
797+
args := m.Called(e.ToKeys)
798+
switch v := args.Get(0).(type) {
799+
case []byte:
800+
return v, nil
801+
default:
802+
return e.Message, nil
803+
}
804+
}
805+
784806
return e.Message, nil
785807
}
786808

pkg/didcomm/packager/packager.go

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"github.com/hyperledger/aries-framework-go/pkg/crypto"
1919
"github.com/hyperledger/aries-framework-go/pkg/didcomm/packer"
2020
"github.com/hyperledger/aries-framework-go/pkg/didcomm/packer/authcrypt"
21+
legacyAuthCrypt "github.com/hyperledger/aries-framework-go/pkg/didcomm/packer/legacy/authcrypt"
2122
"github.com/hyperledger/aries-framework-go/pkg/didcomm/transport"
2223
"github.com/hyperledger/aries-framework-go/pkg/doc/did"
2324
"github.com/hyperledger/aries-framework-go/pkg/doc/jose/jwk/jwksupport"
@@ -83,8 +84,10 @@ func New(ctx Provider) (*Packager, error) {
8384
func (bp *Packager) addPacker(pack packer.Packer) {
8485
packerID := pack.EncodingType()
8586

86-
_, ok := pack.(*authcrypt.Packer)
87-
if ok {
87+
_, isAuthCrypt := pack.(*authcrypt.Packer)
88+
_, isLegacyAuthCrypt := pack.(*legacyAuthCrypt.Packer)
89+
90+
if isAuthCrypt || isLegacyAuthCrypt {
8891
// anoncrypt and authcrypt have the same encoding type
8992
// so authcrypt will have an appended suffix
9093
packerID += authSuffix
@@ -276,6 +279,7 @@ type envelopeStub struct {
276279
type headerStub struct {
277280
Type string `json:"typ,omitempty"`
278281
SKID string `json:"skid,omitempty"`
282+
Alg string `json:"alg,omitempty"`
279283
}
280284

281285
//nolint:funlen, gocyclo
@@ -349,7 +353,7 @@ func getEncodingType(encMessage []byte) (string, []byte, error) {
349353

350354
packerID := prot.Type
351355

352-
if prot.SKID != "" {
356+
if prot.SKID != "" || prot.Alg == "Authcrypt" {
353357
// since Type protected header is the same for authcrypt and anoncrypt, the differentiating factor is SKID.
354358
// If it is present, then it's authcrypt.
355359
packerID += authSuffix
@@ -385,22 +389,20 @@ func (bp *Packager) UnpackMessage(encMessage []byte) (*transport.Envelope, error
385389
func (bp *Packager) getCTYAndPacker(envelope *transport.Envelope) (string, packer.Packer, error) {
386390
switch envelope.MediaTypeProfile {
387391
case transport.MediaTypeAIP2RFC0019Profile, transport.MediaTypeProfileDIDCommAIP1:
388-
return transport.MediaTypeRFC0019EncryptedEnvelope, bp.packers[transport.MediaTypeRFC0019EncryptedEnvelope], nil
392+
packerName := addAuthcryptSuffix(envelope.FromKey, transport.MediaTypeRFC0019EncryptedEnvelope)
393+
394+
return transport.MediaTypeRFC0019EncryptedEnvelope, bp.packers[packerName], nil
389395
case transport.MediaTypeRFC0019EncryptedEnvelope:
390-
return envelope.MediaTypeProfile, bp.packers[transport.MediaTypeRFC0019EncryptedEnvelope], nil
396+
packerName := addAuthcryptSuffix(envelope.FromKey, transport.MediaTypeRFC0019EncryptedEnvelope)
397+
398+
return envelope.MediaTypeProfile, bp.packers[packerName], nil
391399
case transport.MediaTypeV2EncryptedEnvelope, transport.MediaTypeV2PlaintextPayload,
392400
transport.MediaTypeAIP2RFC0587Profile, transport.MediaTypeDIDCommV2Profile:
393-
packerName := transport.MediaTypeV2EncryptedEnvelope
394-
if len(envelope.FromKey) > 0 {
395-
packerName += authSuffix
396-
}
401+
packerName := addAuthcryptSuffix(envelope.FromKey, transport.MediaTypeV2EncryptedEnvelope)
397402

398403
return transport.MediaTypeV2PlaintextPayload, bp.packers[packerName], nil
399404
case transport.MediaTypeV2EncryptedEnvelopeV1PlaintextPayload, transport.MediaTypeV1PlaintextPayload:
400-
packerName := transport.MediaTypeV2EncryptedEnvelope
401-
if len(envelope.FromKey) > 0 {
402-
packerName += authSuffix
403-
}
405+
packerName := addAuthcryptSuffix(envelope.FromKey, transport.MediaTypeV2EncryptedEnvelope)
404406

405407
return transport.MediaTypeV1PlaintextPayload, bp.packers[packerName], nil
406408
default:
@@ -415,6 +417,14 @@ func (bp *Packager) getCTYAndPacker(envelope *transport.Envelope) (string, packe
415417
return "", nil, fmt.Errorf("no packer found for mediatype profile: '%v'", envelope.MediaTypeProfile)
416418
}
417419

420+
func addAuthcryptSuffix(fromKey []byte, packerName string) string {
421+
if len(fromKey) > 0 {
422+
packerName += authSuffix
423+
}
424+
425+
return packerName
426+
}
427+
418428
func (bp *Packager) resolveKeyAgreementFromDIDDoc(keyAgrID string) (*crypto.PublicKey, error) {
419429
i := strings.Index(keyAgrID, "#")
420430

0 commit comments

Comments
 (0)