forked from sicpa-dlab/didcomm-rust
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathadvanced_params.rs
124 lines (105 loc) · 3.69 KB
/
advanced_params.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#[allow(unused_imports, dead_code)]
#[path = "../src/test_vectors/mod.rs"]
mod test_vectors;
// TODO: look for better solution
// Allows test vectors usage inside and outside crate
pub(crate) use didcomm;
use didcomm::{
algorithms::{AnonCryptAlg, AuthCryptAlg},
did::resolvers::ExampleDIDResolver,
protocols::routing::try_parse_forward,
secrets::resolvers::ExampleSecretsResolver,
Message, PackEncryptedOptions, UnpackOptions,
};
use serde_json::json;
use std::collections::HashMap;
use std::iter::FromIterator;
use test_vectors::{
ALICE_DID, ALICE_DID_DOC, ALICE_SECRETS, BOB_DID, BOB_DID_DOC, BOB_SECRETS, MEDIATOR1_DID_DOC,
MEDIATOR1_SECRETS,
};
#[tokio::main(flavor = "current_thread")]
async fn main() {
// --- Building message from ALICE to BOB ---
let msg = Message::build(
"example-1".to_owned(),
"example/v1".to_owned(),
json!("example-body"),
)
.from(ALICE_DID.to_owned())
.to(BOB_DID.to_owned())
.created_time(1516269022)
.expires_time(1516385931)
.finalize();
// --- Packing encrypted and authenticated message ---
let did_resolver = ExampleDIDResolver::new(vec![
ALICE_DID_DOC.clone(),
BOB_DID_DOC.clone(),
MEDIATOR1_DID_DOC.clone(),
]);
let secrets_resolver = ExampleSecretsResolver::new(ALICE_SECRETS.clone());
let (msg, metadata) = msg
.pack_encrypted(
"did:example:bob#key-p256-1",
"did:example:alice#key-p256-1".into(),
"did:example:alice#key-2".into(),
&did_resolver,
&secrets_resolver,
&PackEncryptedOptions {
protect_sender: true,
forward: true,
forward_headers: Some(HashMap::from_iter([(
"expires_time".to_string(),
json!(99999),
)])),
messaging_service: Some("did:example:bob#didcomm-1".to_string()),
enc_alg_auth: AuthCryptAlg::A256cbcHs512Ecdh1puA256kw,
enc_alg_anon: AnonCryptAlg::A256gcmEcdhEsA256kw,
},
)
.await
.expect("Unable pack_encrypted");
println!("Encryption metadata is\n{:?}\n", metadata);
// --- Sending message by Alice ---
println!("Alice is sending message \n{}\n", msg);
// --- Unpacking message by Mediator1 ---
let did_resolver = ExampleDIDResolver::new(vec![
ALICE_DID_DOC.clone(),
BOB_DID_DOC.clone(),
MEDIATOR1_DID_DOC.clone(),
]);
let secrets_resolver = ExampleSecretsResolver::new(MEDIATOR1_SECRETS.clone());
let (msg, metadata) = Message::unpack(
&msg,
&did_resolver,
&secrets_resolver,
&UnpackOptions::default(),
)
.await
.expect("Unable unpack");
println!("Mediator1 received message is \n{:?}\n", msg);
println!(
"Mediator1 received message unpack metadata is \n{:?}\n",
metadata
);
// --- Forwarding message by Mediator1 ---
let msg = serde_json::to_string(&try_parse_forward(&msg).unwrap().forwarded_msg).unwrap();
println!("Mediator1 is forwarding message \n{}\n", msg);
// --- Unpacking message by Bob ---
let did_resolver = ExampleDIDResolver::new(vec![
ALICE_DID_DOC.clone(),
BOB_DID_DOC.clone(),
MEDIATOR1_DID_DOC.clone(),
]);
let secrets_resolver = ExampleSecretsResolver::new(BOB_SECRETS.clone());
let (msg, metadata) = Message::unpack(
&msg,
&did_resolver,
&secrets_resolver,
&UnpackOptions::default(),
)
.await
.expect("Unable unpack");
println!("Bob received message is \n{:?}\n", msg);
println!("Bob received message unpack metadata is \n{:?}\n", metadata);
}