Skip to content

Commit 9204aad

Browse files
authored
chore: CRP-2839 add key name initialization to notes dapp (#204)
1 parent eb8e39a commit 9204aad

File tree

5 files changed

+45
-29
lines changed

5 files changed

+45
-29
lines changed

examples/encrypted_notes_dapp_vetkd/motoko/backend/main.mo

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import Hex "./utils/Hex";
1616

1717
// Declare a shared actor class
1818
// Bind the caller and the initializer
19-
shared ({ caller = initializer }) actor class () {
19+
shared ({ caller = initializer }) actor class (keyName: Text) {
2020

2121
// Currently, a single canister smart contract is limited to 4 GB of heap size.
2222
// For the current limits see https://internetcomputer.org/docs/current/developer-docs/production/resource-limits.
@@ -328,7 +328,7 @@ shared ({ caller = initializer }) actor class () {
328328
let { public_key } = await management_canister.vetkd_public_key({
329329
canister_id = null;
330330
context = Text.encodeUtf8("note_symmetric_key");
331-
key_id = { curve = #bls12_381_g2; name = "test_key_1" };
331+
key_id = { curve = #bls12_381_g2; name = keyName };
332332
});
333333
Hex.encode(Blob.toArray(public_key));
334334
};
@@ -348,7 +348,7 @@ shared ({ caller = initializer }) actor class () {
348348
let { encrypted_key } = await (with cycles = 26_153_846_153) management_canister.vetkd_derive_key({
349349
input;
350350
context = Text.encodeUtf8("note_symmetric_key");
351-
key_id = { curve = #bls12_381_g2; name = "test_key_1" };
351+
key_id = { curve = #bls12_381_g2; name = keyName };
352352
transport_public_key;
353353
});
354354
Hex.encode(Blob.toArray(encrypted_key));

examples/encrypted_notes_dapp_vetkd/motoko/dfx.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
"canisters": {
33
"encrypted_notes": {
44
"main": "backend/main.mo",
5-
"type": "motoko"
5+
"type": "motoko",
6+
"args": "--enhanced-orthogonal-persistence",
7+
"init_arg": "(\"test_key_1\")"
68
},
79
"internet-identity": {
810
"candid": "https://github.com/dfinity/internet-identity/releases/latest/download/internet_identity.did",
Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
1-
type anon_class_15_1 =
2-
service {
3-
create_note: () -> (nat);
4-
delete_note: (nat) -> ();
5-
get_notes: () -> (vec EncryptedNote);
6-
update_note: (nat, text) -> ();
7-
add_user: (nat, text) -> ();
8-
remove_user: (nat, text) -> ();
9-
whoami: () -> (text);
10-
symmetric_key_verification_key_for_note: () -> (text);
11-
encrypted_symmetric_key_for_note: (nat, blob) -> (text);
12-
};
13-
type EncryptedNote =
14-
record {
15-
encrypted_text: text;
16-
id: nat;
17-
owner: text;
18-
users: vec text;
19-
};
20-
service : () -> anon_class_15_1
1+
type EncryptedNote = record {
2+
id : nat;
3+
encrypted_text : text;
4+
owner : text;
5+
users : vec text;
6+
};
7+
service : (text) -> {
8+
add_user : (nat, text) -> ();
9+
create_note : () -> (nat);
10+
delete_note : (nat) -> ();
11+
encrypted_symmetric_key_for_note : (nat, blob) -> (text);
12+
get_notes : () -> (vec EncryptedNote);
13+
remove_user : (nat, text) -> ();
14+
symmetric_key_verification_key_for_note : () -> (text);
15+
update_note : (nat, text) -> ();
16+
whoami : () -> (text);
17+
}

examples/encrypted_notes_dapp_vetkd/rust/backend/src/lib.rs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use candid::{CandidType, Decode, Deserialize, Encode, Principal};
22
use ic_cdk::api::msg_caller;
3+
use ic_cdk::init;
34
use ic_cdk::update;
45
use ic_stable_structures::memory_manager::{MemoryId, MemoryManager, VirtualMemory};
56
use ic_stable_structures::{
@@ -98,6 +99,21 @@ thread_local! {
9899
MEMORY_MANAGER.with_borrow(|m| m.get(MemoryId::new(3))),
99100
)
100101
);
102+
static KEY_NAME: RefCell<StableCell<String, Memory>> =
103+
RefCell::new(StableCell::init(
104+
MEMORY_MANAGER.with(|m| m.borrow().get(MemoryId::new(1))),
105+
String::new(),
106+
)
107+
.expect("failed to initialize key name"));
108+
}
109+
110+
#[init]
111+
fn init(key_name_string: String) {
112+
KEY_NAME.with_borrow_mut(|key_name| {
113+
key_name
114+
.set(key_name_string)
115+
.expect("failed to set key name");
116+
});
101117
}
102118

103119
/// Unlike Motoko, the caller identity is not built into Rust.
@@ -365,7 +381,7 @@ async fn symmetric_key_verification_key_for_note() -> String {
365381
let request = VetKDPublicKeyArgs {
366382
canister_id: None,
367383
context: b"note_symmetric_key".to_vec(),
368-
key_id: bls12_381_g2_test_key_1(),
384+
key_id: key_id(),
369385
};
370386

371387
let response: VetKDPublicKeyResult = ic_cdk::management_canister::vetkd_public_key(&request)
@@ -394,7 +410,7 @@ async fn encrypted_symmetric_key_for_note(
394410
buf // prefix-free
395411
},
396412
context: b"note_symmetric_key".to_vec(),
397-
key_id: bls12_381_g2_test_key_1(),
413+
key_id: key_id(),
398414
transport_public_key,
399415
}
400416
} else {
@@ -409,9 +425,9 @@ async fn encrypted_symmetric_key_for_note(
409425
hex::encode(response.encrypted_key)
410426
}
411427

412-
fn bls12_381_g2_test_key_1() -> VetKDKeyId {
428+
fn key_id() -> VetKDKeyId {
413429
VetKDKeyId {
414430
curve: VetKDCurve::Bls12_381_G2,
415-
name: "test_key_1".to_string(),
431+
name: KEY_NAME.with_borrow(|key_name| key_name.get().clone()),
416432
}
417433
}

examples/encrypted_notes_dapp_vetkd/rust/dfx.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
"encrypted_notes": {
44
"type": "rust",
55
"candid": "backend/src/encrypted_notes_rust.did",
6-
"package": "encrypted_notes_backend"
6+
"package": "encrypted_notes_backend",
7+
"init_arg": "(\"test_key_1\")"
78
},
89
"internet-identity": {
910
"candid": "https://github.com/dfinity/internet-identity/releases/latest/download/internet_identity.did",

0 commit comments

Comments
 (0)