Skip to content

Commit 5953ff6

Browse files
authored
Forward protocol: corrections, examples update (#54)
- Examples for Forward protocol - Forward is true in other examples - didcomm/v2 profile checks - other fixes and improvements
1 parent 5b1efa1 commit 5953ff6

File tree

14 files changed

+1196
-305
lines changed

14 files changed

+1196
-305
lines changed

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ name = 'advanced_params'
1616
name = 'basic'
1717

1818
[[example]]
19-
name = 'plaintext'
19+
name = 'rotate_did'
2020

2121
[[example]]
22-
name = 'rotate_did'
22+
name = 'routing'
2323

2424
[package]
2525
name = 'didcomm'

README.md

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,7 @@ let (msg, metadata) = msg
112112
None,
113113
&did_resolver,
114114
&secrets_resolver,
115-
&PackEncryptedOptions {
116-
forward: false, // Forward wrapping is unsupported in current version
117-
..PackEncryptedOptions::default()
118-
},
115+
&PackEncryptedOptions::default(),
119116
)
120117
.await
121118
.expect("Unable pack_encrypted");
@@ -133,9 +130,7 @@ let (msg, metadata) = Message::unpack(
133130
&msg,
134131
&did_resolver,
135132
&secrets_resolver,
136-
&UnpackOptions {
137-
..UnpackOptions::default()
138-
},
133+
&UnpackOptions::default(),
139134
)
140135
.await
141136
.expect("Unable unpack");
@@ -154,10 +149,7 @@ let (msg, metadata) = msg
154149
None,
155150
&did_resolver,
156151
&secrets_resolver,
157-
&PackEncryptedOptions {
158-
forward: false, // Forward wrapping is unsupported in current version
159-
..PackEncryptedOptions::default()
160-
},
152+
&PackEncryptedOptions::default(),
161153
)
162154
.await
163155
.expect("Unable pack_encrypted");
@@ -170,14 +162,10 @@ let (msg, metadata) = msg
170162
.pack_encrypted(
171163
BOB_DID,
172164
Some(ALICE_DID),
173-
None,
165+
Some(ALICE_DID), // Provide information about signer here
174166
&did_resolver,
175167
&secrets_resolver,
176-
&PackEncryptedOptions {
177-
sign_by: Some(ALICE_DID), // Provide information about signer here
178-
forward: false, // Forward wrapping is unsupported in current version
179-
..PackEncryptedOptions::default()
180-
},
168+
&PackEncryptedOptions::default(),
181169
)
182170
.await
183171
.expect("Unable pack_encrypted");
@@ -207,7 +195,7 @@ let msg = Message::build(
207195
.finalize();
208196

209197
let (msg, metadata) = msg
210-
.pack_signed(ALICE_DID, did_resolver, secrets_resolver)
198+
.pack_signed(ALICE_DID, &did_resolver, &secrets_resolver)
211199
.await
212200
.expect("Unable pack_signed");
213201

@@ -216,9 +204,7 @@ let (msg, metadata) = Message::unpack(
216204
&msg,
217205
&did_resolver,
218206
&secrets_resolver,
219-
&UnpackOptions {
220-
..UnpackOptions::default()
221-
},
207+
&UnpackOptions::default(),
222208
)
223209
.await
224210
.expect("Unable unpack");
@@ -245,17 +231,15 @@ let msg = Message::build(
245231
.finalize();
246232

247233
let msg = msg
248-
.pack_plaintext()
234+
.pack_plaintext(&did_resolver)
249235
.expect("Unable pack_plaintext");
250236

251237
// BOB
252238
let (msg, metadata) = Message::unpack(
253239
&msg,
254240
&did_resolver,
255241
&secrets_resolver,
256-
&UnpackOptions {
257-
..UnpackOptions::default()
258-
},
242+
&UnpackOptions::default(),
259243
)
260244
.await
261245
.expect("Unable unpack");

examples/advanced_params.rs

Lines changed: 60 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,20 @@ mod test_vectors;
66
// Allows test vectors usage inside and outside crate
77
pub(crate) use didcomm;
88

9-
use didcomm::algorithms::AnonCryptAlg;
109
use didcomm::{
11-
did::resolvers::ExampleDIDResolver, secrets::resolvers::ExampleSecretsResolver, Message,
12-
PackEncryptedOptions, UnpackOptions,
10+
algorithms::{AnonCryptAlg, AuthCryptAlg},
11+
did::resolvers::ExampleDIDResolver,
12+
protocols::routing::try_parse_forward,
13+
secrets::resolvers::ExampleSecretsResolver,
14+
Message, PackEncryptedOptions, UnpackOptions,
1315
};
1416
use serde_json::json;
1517
use std::collections::HashMap;
1618
use std::iter::FromIterator;
17-
use test_vectors::{ALICE_DID, ALICE_DID_DOC, ALICE_SECRETS, BOB_DID, BOB_DID_DOC, BOB_SECRETS};
19+
use test_vectors::{
20+
ALICE_DID, ALICE_DID_DOC, ALICE_SECRETS, BOB_DID, BOB_DID_DOC, BOB_SECRETS, MEDIATOR1_DID_DOC,
21+
MEDIATOR1_SECRETS,
22+
};
1823

1924
#[tokio::main(flavor = "current_thread")]
2025
async fn main() {
@@ -31,10 +36,14 @@ async fn main() {
3136
.finalize();
3237

3338
// --- Packing encrypted and authenticated message ---
34-
let did_resolver = ExampleDIDResolver::new(vec![ALICE_DID_DOC.clone(), BOB_DID_DOC.clone()]);
39+
let did_resolver = ExampleDIDResolver::new(vec![
40+
ALICE_DID_DOC.clone(),
41+
BOB_DID_DOC.clone(),
42+
MEDIATOR1_DID_DOC.clone(),
43+
]);
44+
3545
let secrets_resolver = ExampleSecretsResolver::new(ALICE_SECRETS.clone());
3646

37-
//TODO: messaging_service is always None
3847
let (msg, metadata) = msg
3948
.pack_encrypted(
4049
"did:example:bob#key-p256-1",
@@ -43,40 +52,73 @@ async fn main() {
4352
&did_resolver,
4453
&secrets_resolver,
4554
&PackEncryptedOptions {
46-
forward: false, // Forward wrapping is unsupported in current version
4755
protect_sender: true,
48-
enc_alg_anon: AnonCryptAlg::A256gcmEcdhEsA256kw,
56+
forward: true,
4957
forward_headers: Some(HashMap::from_iter([(
5058
"expires_time".to_string(),
5159
json!(99999),
5260
)])),
5361
messaging_service: Some("did:example:bob#didcomm-1".to_string()),
54-
enc_alg_auth: Default::default(),
62+
enc_alg_auth: AuthCryptAlg::A256cbcHs512Ecdh1puA256kw,
63+
enc_alg_anon: AnonCryptAlg::A256gcmEcdhEsA256kw,
5564
},
5665
)
5766
.await
5867
.expect("Unable pack_encrypted");
5968

6069
println!("Encryption metadata is\n{:?}\n", metadata);
6170

62-
// --- Sending message ---
63-
println!("Sending message \n{}\n", msg);
71+
// --- Sending message by Alice ---
72+
println!("Alice is sending message \n{}\n", msg);
73+
74+
// --- Unpacking message by Mediator1 ---
75+
let did_resolver = ExampleDIDResolver::new(vec![
76+
ALICE_DID_DOC.clone(),
77+
BOB_DID_DOC.clone(),
78+
MEDIATOR1_DID_DOC.clone(),
79+
]);
80+
81+
let secrets_resolver = ExampleSecretsResolver::new(MEDIATOR1_SECRETS.clone());
82+
83+
let (msg, metadata) = Message::unpack(
84+
&msg,
85+
&did_resolver,
86+
&secrets_resolver,
87+
&UnpackOptions::default(),
88+
)
89+
.await
90+
.expect("Unable unpack");
91+
92+
println!("Mediator1 received message is \n{:?}\n", msg);
93+
94+
println!(
95+
"Mediator1 received message unpack metadata is \n{:?}\n",
96+
metadata
97+
);
98+
99+
// --- Forwarding message by Mediator1 ---
100+
let msg = serde_json::to_string(&try_parse_forward(&msg).unwrap().forwarded_msg).unwrap();
101+
102+
println!("Mediator1 is forwarding message \n{}\n", msg);
103+
104+
// --- Unpacking message by Bob ---
105+
let did_resolver = ExampleDIDResolver::new(vec![
106+
ALICE_DID_DOC.clone(),
107+
BOB_DID_DOC.clone(),
108+
MEDIATOR1_DID_DOC.clone(),
109+
]);
64110

65-
// --- Unpacking message ---
66-
let did_resolver = ExampleDIDResolver::new(vec![ALICE_DID_DOC.clone(), BOB_DID_DOC.clone()]);
67111
let secrets_resolver = ExampleSecretsResolver::new(BOB_SECRETS.clone());
68112

69113
let (msg, metadata) = Message::unpack(
70114
&msg,
71115
&did_resolver,
72116
&secrets_resolver,
73-
&UnpackOptions {
74-
..UnpackOptions::default()
75-
},
117+
&UnpackOptions::default(),
76118
)
77119
.await
78120
.expect("Unable unpack");
79121

80-
println!("Received message is \n{:?}\n", msg);
81-
println!("Received message unpack metadata is \n{:?}\n", metadata);
122+
println!("Bob received message is \n{:?}\n", msg);
123+
println!("Bob received message unpack metadata is \n{:?}\n", metadata);
82124
}

examples/attachments.rs

Lines changed: 56 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@ mod test_vectors;
66
// Allows test vectors usage inside and outside crate
77
pub(crate) use didcomm;
88

9-
use crate::didcomm::AttachmentData;
109
use didcomm::{
11-
did::resolvers::ExampleDIDResolver, secrets::resolvers::ExampleSecretsResolver, Attachment,
12-
JsonAttachmentData, Message, PackEncryptedOptions, UnpackOptions,
10+
did::resolvers::ExampleDIDResolver, protocols::routing::try_parse_forward,
11+
secrets::resolvers::ExampleSecretsResolver, Attachment, AttachmentData, JsonAttachmentData,
12+
Message, PackEncryptedOptions, UnpackOptions,
1313
};
1414
use serde_json::json;
15-
use test_vectors::{ALICE_DID, ALICE_DID_DOC, ALICE_SECRETS, BOB_DID, BOB_DID_DOC, BOB_SECRETS};
15+
use test_vectors::{
16+
ALICE_DID, ALICE_DID_DOC, ALICE_SECRETS, BOB_DID, BOB_DID_DOC, BOB_SECRETS, MEDIATOR1_DID_DOC,
17+
MEDIATOR1_SECRETS,
18+
};
1619

1720
#[tokio::main(flavor = "current_thread")]
1821
async fn main() {
@@ -42,7 +45,12 @@ async fn main() {
4245
.finalize();
4346

4447
// --- Packing encrypted and authenticated message ---
45-
let did_resolver = ExampleDIDResolver::new(vec![ALICE_DID_DOC.clone(), BOB_DID_DOC.clone()]);
48+
let did_resolver = ExampleDIDResolver::new(vec![
49+
ALICE_DID_DOC.clone(),
50+
BOB_DID_DOC.clone(),
51+
MEDIATOR1_DID_DOC.clone(),
52+
]);
53+
4654
let secrets_resolver = ExampleSecretsResolver::new(ALICE_SECRETS.clone());
4755

4856
let (msg, metadata) = msg
@@ -52,34 +60,64 @@ async fn main() {
5260
None,
5361
&did_resolver,
5462
&secrets_resolver,
55-
&PackEncryptedOptions {
56-
forward: false, // Forward wrapping is unsupported in current version
57-
..PackEncryptedOptions::default()
58-
},
63+
&PackEncryptedOptions::default(),
5964
)
6065
.await
6166
.expect("Unable pack_encrypted");
6267

6368
println!("Encryption metadata is\n{:?}\n", metadata);
6469

65-
// --- Sending message ---
66-
println!("Sending message \n{}\n", msg);
70+
// --- Alice is sending message ---
71+
println!("Alice is sending message \n{}\n", msg);
72+
73+
// --- Unpacking message by Mediator1 ---
74+
let did_resolver = ExampleDIDResolver::new(vec![
75+
ALICE_DID_DOC.clone(),
76+
BOB_DID_DOC.clone(),
77+
MEDIATOR1_DID_DOC.clone(),
78+
]);
79+
80+
let secrets_resolver = ExampleSecretsResolver::new(MEDIATOR1_SECRETS.clone());
81+
82+
let (msg, metadata) = Message::unpack(
83+
&msg,
84+
&did_resolver,
85+
&secrets_resolver,
86+
&UnpackOptions::default(),
87+
)
88+
.await
89+
.expect("Unable unpack");
90+
91+
println!("Mediator1 received message is \n{:?}\n", msg);
92+
93+
println!(
94+
"Mediator1 received message unpack metadata is \n{:?}\n",
95+
metadata
96+
);
97+
98+
// --- Forwarding message by Mediator1 ---
99+
let msg = serde_json::to_string(&try_parse_forward(&msg).unwrap().forwarded_msg).unwrap();
100+
101+
println!("Mediator1 is forwarding message \n{}\n", msg);
102+
103+
// --- Unpacking message by Bob ---
104+
let did_resolver = ExampleDIDResolver::new(vec![
105+
ALICE_DID_DOC.clone(),
106+
BOB_DID_DOC.clone(),
107+
MEDIATOR1_DID_DOC.clone(),
108+
]);
67109

68-
// --- Unpacking message ---
69-
let did_resolver = ExampleDIDResolver::new(vec![ALICE_DID_DOC.clone(), BOB_DID_DOC.clone()]);
70110
let secrets_resolver = ExampleSecretsResolver::new(BOB_SECRETS.clone());
71111

72112
let (msg, metadata) = Message::unpack(
73113
&msg,
74114
&did_resolver,
75115
&secrets_resolver,
76-
&UnpackOptions {
77-
..UnpackOptions::default()
78-
},
116+
&UnpackOptions::default(),
79117
)
80118
.await
81119
.expect("Unable unpack");
82120

83-
println!("Received message is \n{:?}\n", msg);
84-
println!("Received message unpack metadata is \n{:?}\n", metadata);
121+
println!("Bob received message is \n{:?}\n", msg);
122+
println!("Bob received message unpack metadata is \n{:?}\n", metadata);
85123
}

0 commit comments

Comments
 (0)