Skip to content

Commit 49b3a10

Browse files
committed
refactor: keep single way to resolve peer dids (#1106)
Signed-off-by: Patrik Stas <[email protected]>
1 parent ec5bdd4 commit 49b3a10

File tree

8 files changed

+66
-25
lines changed

8 files changed

+66
-25
lines changed

aries/aries_vcx/src/errors/mapping_others.rs

-2
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,12 @@ impl From<did_key::error::DidKeyError> for AriesVcxError {
7676
}
7777
}
7878

79-
// map UriWrapperError
8079
impl From<UriWrapperError> for AriesVcxError {
8180
fn from(err: UriWrapperError) -> Self {
8281
AriesVcxError::from_msg(AriesVcxErrorKind::InvalidInput, err.to_string())
8382
}
8483
}
8584

86-
// TODO
8785
impl From<AriesVcxCoreError> for AriesVcxError {
8886
fn from(err: AriesVcxCoreError) -> Self {
8987
let kind = match err.kind() {

aries/aries_vcx/src/protocols/did_exchange/state_machine/requester/request_sent/mod.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ use crate::{
2222
states::{completed::Completed, requester::request_sent::RequestSent},
2323
transition::{transition_error::TransitionError, transition_result::TransitionResult},
2424
},
25+
utils::didcomm_utils::resolve_didpeer2,
2526
};
2627

2728
impl DidExchangeRequester<RequestSent> {
@@ -34,7 +35,7 @@ impl DidExchangeRequester<RequestSent> {
3435
.resolve(their_did, &Default::default())
3536
.await?
3637
.did_document;
37-
let did_document = our_peer_did.resolve(PublicKeyEncoding::Base58)?;
38+
let our_did_document = resolve_didpeer2(our_peer_did, PublicKeyEncoding::Base58).await?;
3839
let invitation_id = Uuid::new_v4().to_string();
3940

4041
let request = construct_request(invitation_id.clone(), our_peer_did.to_string());
@@ -46,7 +47,7 @@ impl DidExchangeRequester<RequestSent> {
4647
invitation_id,
4748
},
4849
their_did_document,
49-
did_document,
50+
our_did_document,
5051
),
5152
output: request,
5253
})
@@ -73,8 +74,8 @@ impl DidExchangeRequester<RequestSent> {
7374
} else {
7475
let peer_did = PeerDid::<Numalgo2>::parse(response.content.did)
7576
.map_err(to_transition_error(self.clone()))?;
76-
peer_did
77-
.resolve(PublicKeyEncoding::Base58)
77+
resolve_didpeer2(&peer_did, PublicKeyEncoding::Base58)
78+
.await
7879
.map_err(to_transition_error(self.clone()))?
7980
};
8081

aries/aries_vcx/src/protocols/did_exchange/state_machine/responder/response_sent/mod.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ use crate::{
2222
states::{completed::Completed, responder::response_sent::ResponseSent},
2323
transition::{transition_error::TransitionError, transition_result::TransitionResult},
2424
},
25+
utils::didcomm_utils::resolve_didpeer2,
2526
};
2627

2728
impl DidExchangeResponder<ResponseSent> {
@@ -33,7 +34,7 @@ impl DidExchangeResponder<ResponseSent> {
3334
invitation_key: Key,
3435
) -> Result<TransitionResult<DidExchangeResponder<ResponseSent>, Response>, AriesVcxError> {
3536
let their_ddo = resolve_ddo_from_request(&resolver_registry, &request).await?;
36-
let our_did_document = our_peer_did.resolve(PublicKeyEncoding::Base58)?;
37+
let our_did_document = resolve_didpeer2(our_peer_did, PublicKeyEncoding::Base58).await?;
3738
// TODO: Response should sign the new *did* with invitation_key only if key was rotated
3839
// In practice if the invitation was public, we definitely will be rotating to
3940
// peer:did

aries/aries_vcx/src/utils/didcomm_utils.rs

+23
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,33 @@ use did_doc::schema::{
22
did_doc::DidDocument, service::service_key_kind::ServiceKeyKind, types::uri::Uri,
33
verification_method::VerificationMethodType,
44
};
5+
use did_peer::{
6+
peer_did::{numalgos::numalgo2::Numalgo2, PeerDid},
7+
resolver::{options::PublicKeyEncoding, PeerDidResolutionOptions, PeerDidResolver},
8+
};
9+
use did_resolver::{
10+
error::GenericError,
11+
traits::resolvable::{resolution_output::DidResolutionOutput, DidResolvable},
12+
};
513
use public_key::Key;
614

715
use crate::errors::error::{AriesVcxError, AriesVcxErrorKind, VcxResult};
816

17+
pub(crate) async fn resolve_didpeer2(
18+
did_peer: &PeerDid<Numalgo2>,
19+
encoding: PublicKeyEncoding,
20+
) -> Result<DidDocument, GenericError> {
21+
let DidResolutionOutput { did_document, .. } = PeerDidResolver::new()
22+
.resolve(
23+
did_peer.did(),
24+
&PeerDidResolutionOptions {
25+
encoding: Some(encoding),
26+
},
27+
)
28+
.await?;
29+
Ok(did_document)
30+
}
31+
932
fn resolve_service_key_to_typed_key(
1033
key: &ServiceKeyKind,
1134
did_document: &DidDocument,

aries/aries_vcx/tests/test_did_exchange.rs

+19-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@ use did_doc::schema::{
2525
use did_parser::Did;
2626
use did_peer::{
2727
peer_did::{numalgos::numalgo2::Numalgo2, PeerDid},
28-
resolver::{options::PublicKeyEncoding, PeerDidResolver},
28+
resolver::{options::PublicKeyEncoding, PeerDidResolutionOptions, PeerDidResolver},
2929
};
30+
use did_resolver::traits::resolvable::{resolution_output::DidResolutionOutput, DidResolvable};
3031
use did_resolver_registry::ResolverRegistry;
3132
use did_resolver_sov::resolution::DidSovResolver;
3233
use log::info;
@@ -42,6 +43,22 @@ use crate::utils::test_agent::{
4243

4344
pub mod utils;
4445

46+
pub(crate) async fn resolve_didpeer2(
47+
did_peer: &PeerDid<Numalgo2>,
48+
encoding: PublicKeyEncoding,
49+
) -> DidDocument {
50+
let DidResolutionOutput { did_document, .. } = PeerDidResolver::new()
51+
.resolve(
52+
did_peer.did(),
53+
&PeerDidResolutionOptions {
54+
encoding: Some(encoding),
55+
},
56+
)
57+
.await
58+
.unwrap();
59+
did_document
60+
}
61+
4562
fn assert_key_agreement(a: DidDocument, b: DidDocument) {
4663
let a_key = resolve_base58_key_agreement(&a).unwrap();
4764
let b_key = resolve_base58_key_agreement(&b).unwrap();
@@ -137,7 +154,7 @@ async fn did_exchange_test() -> Result<(), Box<dyn Error>> {
137154
let responders_peer_did = PeerDid::<Numalgo2>::from_did_doc(responders_did_document.clone())?;
138155
info!("Responder prepares their peer:did: {responders_peer_did}");
139156

140-
let check_diddoc = responders_peer_did.resolve(PublicKeyEncoding::Base58)?;
157+
let check_diddoc = resolve_didpeer2(&responders_peer_did, PublicKeyEncoding::Base58).await;
141158
info!("Responder decodes constructed peer:did as did document: {check_diddoc}");
142159

143160
let TransitionResult {

did_core/did_methods/did_peer/examples/demo.rs

+11-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ use did_peer::{
1010
numalgos::{numalgo2::Numalgo2, numalgo3::Numalgo3},
1111
PeerDid,
1212
},
13-
resolver::options::PublicKeyEncoding,
13+
resolver::{options::PublicKeyEncoding, PeerDidResolutionOptions, PeerDidResolver},
1414
};
15+
use did_resolver::traits::resolvable::{resolution_output::DidResolutionOutput, DidResolvable};
1516

1617
#[tokio::main(flavor = "current_thread")]
1718
async fn main() -> Result<(), Box<dyn Error>> {
@@ -46,7 +47,15 @@ async fn demo() -> Result<(), Box<dyn Error>> {
4647
peer_did_3_v2
4748
);
4849

49-
let did_document = peer_did_2.resolve(PublicKeyEncoding::Base58)?;
50+
let DidResolutionOutput { did_document, .. } = PeerDidResolver::new()
51+
.resolve(
52+
peer_did_2.did(),
53+
&PeerDidResolutionOptions {
54+
encoding: Some(PublicKeyEncoding::Base58),
55+
},
56+
)
57+
.await
58+
.unwrap();
5059
println!(
5160
"Decoded did document: \n{}",
5261
serde_json::to_string_pretty(&did_document)?

did_core/did_methods/did_peer/src/peer_did/numalgos/numalgo2/mod.rs

-11
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,6 @@ impl PeerDid<Numalgo2> {
4242
didpeer_elements_to_diddoc(did_doc_builder, self.did(), public_key_encoding)?;
4343
Ok(did_doc_builder)
4444
}
45-
46-
pub fn resolve(
47-
&self,
48-
public_key_encoding: PublicKeyEncoding,
49-
) -> Result<DidDocument, DidPeerError> {
50-
let builder: DidDocumentBuilder = self.to_did_doc_builder(public_key_encoding)?;
51-
let did_doc = builder
52-
.add_also_known_as(self.to_numalgo3()?.to_string().parse()?)
53-
.build();
54-
Ok(did_doc)
55-
}
5645
}
5746

5847
#[derive(Clone, Copy, Default, Debug, PartialEq)]

did_core/did_methods/did_peer/src/resolver/mod.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use async_trait::async_trait;
2+
use did_doc::schema::did_doc::DidDocumentBuilder;
23
use did_parser::Did;
34
use did_resolver::{
45
error::GenericError,
@@ -28,7 +29,6 @@ impl PeerDidResolver {
2829
pub struct PeerDidResolutionOptions {
2930
pub encoding: Option<PublicKeyEncoding>,
3031
}
31-
3232
#[async_trait]
3333
impl DidResolvable for PeerDidResolver {
3434
type DidResolutionOptions = PeerDidResolutionOptions;
@@ -41,8 +41,11 @@ impl DidResolvable for PeerDidResolver {
4141
let peer_did = AnyPeerDid::parse(did.to_owned())?;
4242
match peer_did {
4343
AnyPeerDid::Numalgo2(peer_did) => {
44-
let did_doc =
45-
peer_did.resolve(options.encoding.unwrap_or(PublicKeyEncoding::Base58))?;
44+
let encoding = options.encoding.unwrap_or(PublicKeyEncoding::Multibase);
45+
let builder: DidDocumentBuilder = peer_did.to_did_doc_builder(encoding)?;
46+
let did_doc = builder
47+
.add_also_known_as(peer_did.to_numalgo3()?.to_string().parse()?)
48+
.build();
4649
let resolution_metadata = DidResolutionMetadata::builder()
4750
.content_type("application/did+json".to_string())
4851
.build();

0 commit comments

Comments
 (0)