Skip to content

Commit c240ef0

Browse files
committed
do the same in the upgrade what Motoko does -- overwrite the key name
1 parent fe1b9ea commit c240ef0

File tree

4 files changed

+59
-16
lines changed

4 files changed

+59
-16
lines changed

backend/rs/canisters/ic_vetkeys_encrypted_maps_canister/src/lib.rs

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use ic_stable_structures::memory_manager::{MemoryId, MemoryManager, VirtualMemor
77
use ic_stable_structures::storable::Blob;
88
use ic_stable_structures::DefaultMemoryImpl;
99
use ic_vetkeys::encrypted_maps::{EncryptedMapData, EncryptedMaps, VetKey, VetKeyVerificationKey};
10-
use ic_vetkeys::types::{AccessRights, ByteBuf, EncryptedMapValue, TransportKey};
10+
use ic_vetkeys::types::{AccessRights, ByteBuf, EncryptedMapValue, KeyManagerConfig, TransportKey};
1111

1212
type Memory = VirtualMemory<DefaultMemoryImpl>;
1313
type MapId = (Principal, ByteBuf);
@@ -38,21 +38,44 @@ fn init(key_name: String) {
3838
}
3939

4040
#[post_upgrade]
41-
fn post_upgrade() {
42-
// Note that the value of the key_id is not important, as it is used only if the memory not yet initialized.
43-
let key_id = VetKDKeyId {
41+
fn post_upgrade(key_name: String) {
42+
// Note that the value of the `dummy_key_id` and `domain_separator` is not important, as it is used only if the memory not yet initialized, which is not the case here.
43+
let dummy_key_id = VetKDKeyId {
4444
curve: VetKDCurve::Bls12_381_G2,
4545
name: "dummy_key_name".to_string(),
4646
};
47+
let domain_separator = "dummy_domain_separator";
4748
ENCRYPTED_MAPS.with_borrow_mut(|encrypted_maps| {
4849
encrypted_maps.replace(EncryptedMaps::init(
49-
"dummy_domain_separator",
50-
key_id,
50+
domain_separator,
51+
dummy_key_id.clone(),
5152
id_to_memory(0),
5253
id_to_memory(1),
5354
id_to_memory(2),
5455
id_to_memory(3),
55-
))
56+
));
57+
58+
let config: &KeyManagerConfig = encrypted_maps.as_mut().unwrap().key_manager.config.get();
59+
assert_ne!(config.key_id, dummy_key_id);
60+
assert_ne!(config.domain_separator, domain_separator);
61+
62+
let cloned_domain_separator = config.domain_separator.clone();
63+
64+
let new_key_id = VetKDKeyId {
65+
curve: VetKDCurve::Bls12_381_G2,
66+
name: key_name,
67+
};
68+
69+
encrypted_maps
70+
.as_mut()
71+
.unwrap()
72+
.key_manager
73+
.config
74+
.set(KeyManagerConfig {
75+
domain_separator: cloned_domain_separator,
76+
key_id: new_key_id,
77+
})
78+
.unwrap();
5679
});
5780
}
5881

backend/rs/canisters/ic_vetkeys_encrypted_maps_canister/tests/tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -901,7 +901,7 @@ fn should_survive_canister_upgrade() {
901901
.upgrade_canister(
902902
env.example_canister_id,
903903
wasm_bytes,
904-
encode_one("").unwrap(),
904+
encode_one("dfx_test_key").unwrap(),
905905
None,
906906
)
907907
.unwrap();

backend/rs/canisters/ic_vetkeys_manager_canister/src/lib.rs

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use ic_stable_structures::memory_manager::{MemoryId, MemoryManager, VirtualMemor
77
use ic_stable_structures::storable::Blob;
88
use ic_stable_structures::DefaultMemoryImpl;
99
use ic_vetkeys::key_manager::{KeyManager, VetKey, VetKeyVerificationKey};
10-
use ic_vetkeys::types::{AccessRights, ByteBuf, TransportKey};
10+
use ic_vetkeys::types::{AccessRights, ByteBuf, KeyManagerConfig, TransportKey};
1111

1212
type Memory = VirtualMemory<DefaultMemoryImpl>;
1313

@@ -36,21 +36,41 @@ fn init(key_name: String) {
3636
}
3737

3838
#[post_upgrade]
39-
fn post_upgrade() {
40-
// Note that the value of the key_id is not important, as it is used only if the memory not yet initialized.
39+
fn post_upgrade(key_name: String) {
40+
// Note that the value of the `dummy_key_id` and `domain_separator` is not important, as it is used only if the memory not yet initialized, which is not the case here.
4141
let key_id = VetKDKeyId {
4242
curve: VetKDCurve::Bls12_381_G2,
4343
name: "dummy_key_name".to_string(),
4444
};
45+
let domain_separator = "dummy_domain_separator";
4546
KEY_MANAGER.with_borrow_mut(|km| {
4647
km.replace(KeyManager::init(
47-
"dummy_domain_separator",
48-
key_id,
48+
domain_separator,
49+
key_id.clone(),
4950
id_to_memory(0),
5051
id_to_memory(1),
5152
id_to_memory(2),
52-
))
53-
});
53+
));
54+
55+
let config: &KeyManagerConfig = km.as_mut().unwrap().config.get();
56+
assert_ne!(config.key_id, key_id);
57+
assert_ne!(config.domain_separator, domain_separator);
58+
59+
let cloned_domain_separator = config.domain_separator.clone();
60+
61+
let new_key_id = VetKDKeyId {
62+
curve: VetKDCurve::Bls12_381_G2,
63+
name: key_name,
64+
};
65+
km.as_mut()
66+
.unwrap()
67+
.config
68+
.set(KeyManagerConfig {
69+
domain_separator: cloned_domain_separator,
70+
key_id: new_key_id,
71+
})
72+
.unwrap();
73+
})
5474
}
5575

5676
#[query]

backend/rs/canisters/ic_vetkeys_manager_canister/tests/tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,7 @@ fn should_survive_canister_upgrade() {
532532
.upgrade_canister(
533533
env.example_canister_id,
534534
wasm_bytes,
535-
encode_one("").unwrap(),
535+
encode_one("dfx_test_key").unwrap(),
536536
None,
537537
)
538538
.unwrap();

0 commit comments

Comments
 (0)