1
1
use std:: sync:: Arc ;
2
2
3
3
use aries_vcx:: {
4
+ did_doc:: schema:: { service:: typed:: ServiceType , types:: uri:: Uri } ,
4
5
messages:: {
5
6
msg_fields:: protocols:: {
6
7
did_exchange:: {
@@ -25,7 +26,6 @@ use aries_vcx_core::wallet::{base_wallet::BaseWallet, indy::IndySdkWallet};
25
26
use did_peer:: peer_did:: { numalgos:: numalgo2:: Numalgo2 , PeerDid } ;
26
27
use did_resolver_registry:: ResolverRegistry ;
27
28
use did_resolver_sov:: did_resolver:: did_doc:: schema:: did_doc:: DidDocument ;
28
- use url:: Url ;
29
29
30
30
use super :: connection:: ServiceEndpoint ;
31
31
use crate :: {
@@ -83,10 +83,17 @@ impl ServiceDidExchange {
83
83
. thid ;
84
84
let ddo_their = requester. their_did_doc ( ) ;
85
85
let ddo_our = requester. our_did_document ( ) ;
86
- let encryption_envelope =
87
- pairwise_encrypt ( ddo_our, ddo_their, self . wallet . as_ref ( ) , & request. into ( ) ) . await ?;
86
+ let service = ddo_their. get_service_of_type ( & ServiceType :: DIDCommV1 ) ?;
87
+ let encryption_envelope = pairwise_encrypt (
88
+ ddo_our,
89
+ ddo_their,
90
+ self . wallet . as_ref ( ) ,
91
+ & request. into ( ) ,
92
+ service. id ( ) ,
93
+ )
94
+ . await ?;
88
95
VcxHttpClient
89
- . send_message ( encryption_envelope. 0 , get_first_endpoint ( ddo_their ) ? )
96
+ . send_message ( encryption_envelope. 0 , service . service_endpoint ( ) . clone ( ) )
90
97
. await ?;
91
98
self . did_exchange . insert ( & request_id, requester. clone ( ) )
92
99
}
@@ -127,10 +134,17 @@ impl ServiceDidExchange {
127
134
. await ?;
128
135
let ddo_their = responder. their_did_doc ( ) ;
129
136
let ddo_our = responder. our_did_document ( ) ;
130
- let encryption_envelope =
131
- pairwise_encrypt ( ddo_our, ddo_their, self . wallet . as_ref ( ) , & response. into ( ) ) . await ?;
137
+ let service = ddo_their. get_service_of_type ( & ServiceType :: DIDCommV1 ) ?;
138
+ let encryption_envelope = pairwise_encrypt (
139
+ ddo_our,
140
+ ddo_their,
141
+ self . wallet . as_ref ( ) ,
142
+ & response. into ( ) ,
143
+ service. id ( ) ,
144
+ )
145
+ . await ?;
132
146
VcxHttpClient
133
- . send_message ( encryption_envelope. 0 , get_first_endpoint ( ddo_their ) ? )
147
+ . send_message ( encryption_envelope. 0 , service . service_endpoint ( ) . clone ( ) )
134
148
. await ?;
135
149
self . did_exchange . insert ( & request_id, responder. clone ( ) )
136
150
}
@@ -144,10 +158,17 @@ impl ServiceDidExchange {
144
158
. await ?;
145
159
let ddo_their = requester. their_did_doc ( ) ;
146
160
let ddo_our = requester. our_did_document ( ) ;
147
- let encryption_envelope =
148
- pairwise_encrypt ( ddo_our, ddo_their, self . wallet . as_ref ( ) , & complete. into ( ) ) . await ?;
161
+ let service = ddo_their. get_service_of_type ( & ServiceType :: DIDCommV1 ) ?;
162
+ let encryption_envelope = pairwise_encrypt (
163
+ ddo_our,
164
+ ddo_their,
165
+ self . wallet . as_ref ( ) ,
166
+ & complete. into ( ) ,
167
+ service. id ( ) ,
168
+ )
169
+ . await ?;
149
170
VcxHttpClient
150
- . send_message ( encryption_envelope. 0 , get_first_endpoint ( ddo_their ) ? )
171
+ . send_message ( encryption_envelope. 0 , service . service_endpoint ( ) . clone ( ) )
151
172
. await ?;
152
173
self . did_exchange . insert ( & thread_id, requester. clone ( ) )
153
174
}
@@ -187,25 +208,19 @@ impl ServiceDidExchange {
187
208
}
188
209
}
189
210
190
- pub fn get_first_endpoint ( did_document : & DidDocument ) -> AgentResult < Url > {
191
- let service = did_document. service ( ) . first ( ) . ok_or ( AgentError :: from_msg (
192
- AgentErrorKind :: InvalidState ,
193
- "No service found" ,
194
- ) ) ?;
195
- Ok ( service. service_endpoint ( ) . clone ( ) )
196
- }
197
-
198
211
pub async fn pairwise_encrypt (
199
212
our_did_doc : & DidDocument ,
200
213
their_did_doc : & DidDocument ,
201
214
wallet : & impl BaseWallet ,
202
215
message : & AriesMessage ,
216
+ their_service_id : & Uri ,
203
217
) -> AgentResult < EncryptionEnvelope > {
204
218
EncryptionEnvelope :: create (
205
219
wallet,
206
220
serde_json:: json!( message) . to_string ( ) . as_bytes ( ) ,
207
221
our_did_doc,
208
222
their_did_doc,
223
+ their_service_id,
209
224
)
210
225
. await
211
226
. map_err ( |err| {
0 commit comments