@@ -28,19 +28,8 @@ class PackagingServiceError(Exception):
2828class PackagingService (Generic [P , S ]):
2929 """DIDComm Messaging interface."""
3030
31- def __init__ (
32- self ,
33- resolver : DIDResolver ,
34- crypto : CryptoService [P , S ],
35- secrets : SecretsManager [S ],
36- ):
37- """Initialize the KMS."""
38- self .resolver = resolver
39- self .crypto = crypto
40- self .secrets = secrets
41-
4231 async def extract_packed_message_metadata ( # noqa: C901
43- self , enc_message : Union [str , bytes ]
32+ self , enc_message : Union [str , bytes ], secrets : SecretsManager [ S ]
4433 ) -> PackedMessageMetadata :
4534 """Extract metadata from a packed DIDComm message."""
4635 try :
@@ -61,7 +50,7 @@ async def extract_packed_message_metadata( # noqa: C901
6150 sender_kid = None
6251 recip_key = None
6352 for kid in wrapper .recipient_key_ids :
64- recip_key = await self . secrets .get_secret_by_kid (kid )
53+ recip_key = await secrets .get_secret_by_kid (kid )
6554 if recip_key :
6655 break
6756
@@ -97,40 +86,42 @@ async def extract_packed_message_metadata( # noqa: C901
9786 return PackedMessageMetadata (wrapper , method , recip_key , sender_kid )
9887
9988 async def unpack (
100- self , enc_message : Union [str , bytes ]
89+ self ,
90+ crypto : CryptoService [P , S ],
91+ resolver : DIDResolver ,
92+ secrets : SecretsManager [S ],
93+ enc_message : Union [str , bytes ],
10194 ) -> Tuple [bytes , PackedMessageMetadata ]:
10295 """Unpack a DIDComm message."""
103- metadata = await self .extract_packed_message_metadata (enc_message )
96+ metadata = await self .extract_packed_message_metadata (enc_message , secrets )
10497
10598 if metadata .method == "ECDH-ES" :
10699 return (
107- await self . crypto .ecdh_es_decrypt (enc_message , metadata .recip_key ),
100+ await crypto .ecdh_es_decrypt (enc_message , metadata .recip_key ),
108101 metadata ,
109102 )
110103
111104 if not metadata .sender_kid :
112105 raise PackagingServiceError ("Missing sender key ID" )
113106
114- sender_vm = await self . resolver .resolve_and_dereference_verification_method (
107+ sender_vm = await resolver .resolve_and_dereference_verification_method (
115108 metadata .sender_kid
116109 )
117- sender_key = self . crypto .verification_method_to_public_key (sender_vm )
110+ sender_key = crypto .verification_method_to_public_key (sender_vm )
118111
119112 return (
120- await self .crypto .ecdh_1pu_decrypt (
121- enc_message , metadata .recip_key , sender_key
122- ),
113+ await crypto .ecdh_1pu_decrypt (enc_message , metadata .recip_key , sender_key ),
123114 metadata ,
124115 )
125116
126- async def recip_for_kid_or_default_for_did (self , kid_or_did : str ) -> P :
117+ async def recip_for_kid_or_default_for_did (
118+ self , crypto : CryptoService [P , S ], resolver : DIDResolver , kid_or_did : str
119+ ) -> P :
127120 """Resolve a verification method for a kid or return default recip."""
128121 if "#" in kid_or_did :
129- vm = await self .resolver .resolve_and_dereference_verification_method (
130- kid_or_did
131- )
122+ vm = await resolver .resolve_and_dereference_verification_method (kid_or_did )
132123 else :
133- doc = await self . resolver .resolve_and_parse (kid_or_did )
124+ doc = await resolver .resolve_and_parse (kid_or_did )
134125 if not doc .key_agreement :
135126 raise PackagingServiceError (
136127 "No key agreement methods found; cannot determine recipient"
@@ -146,14 +137,14 @@ async def recip_for_kid_or_default_for_did(self, kid_or_did: str) -> P:
146137 else :
147138 vm = default
148139
149- return self . crypto .verification_method_to_public_key (vm )
140+ return crypto .verification_method_to_public_key (vm )
150141
151- async def default_sender_kid_for_did (self , did : str ) -> str :
142+ async def default_sender_kid_for_did (self , resolver : DIDResolver , did : str ) -> str :
152143 """Determine the kid of the default sender key for a DID."""
153144 if "#" in did :
154145 return did
155146
156- doc = await self . resolver .resolve_and_parse (did )
147+ doc = await resolver .resolve_and_parse (did )
157148 if not doc .key_agreement :
158149 raise PackagingServiceError (
159150 "No key agreement methods found; cannot determine recipient"
@@ -175,21 +166,27 @@ async def default_sender_kid_for_did(self, did: str) -> str:
175166
176167 async def pack (
177168 self ,
169+ crypto : CryptoService [P , S ],
170+ resolver : DIDResolver ,
171+ secrets : SecretsManager [S ],
178172 message : bytes ,
179173 to : Sequence [str ],
180174 frm : Optional [str ] = None ,
181175 ** options ,
182176 ):
183177 """Pack a DIDComm message."""
184- recip_keys = [await self .recip_for_kid_or_default_for_did (kid ) for kid in to ]
185- sender_kid = await self .default_sender_kid_for_did (frm ) if frm else None
186- sender_key = (
187- await self .secrets .get_secret_by_kid (sender_kid ) if sender_kid else None
178+ recip_keys = [
179+ await self .recip_for_kid_or_default_for_did (crypto , resolver , kid )
180+ for kid in to
181+ ]
182+ sender_kid = (
183+ await self .default_sender_kid_for_did (resolver , frm ) if frm else None
188184 )
185+ sender_key = await secrets .get_secret_by_kid (sender_kid ) if sender_kid else None
189186 if frm and not sender_key :
190187 raise PackagingServiceError ("No sender key found" )
191188
192189 if sender_key :
193- return await self . crypto .ecdh_1pu_encrypt (recip_keys , sender_key , message )
190+ return await crypto .ecdh_1pu_encrypt (recip_keys , sender_key , message )
194191 else :
195- return await self . crypto .ecdh_es_encrypt (recip_keys , message )
192+ return await crypto .ecdh_es_encrypt (recip_keys , message )
0 commit comments