diff --git a/src/config/groups/keys.cpp b/src/config/groups/keys.cpp index 66776473..1f99909a 100644 --- a/src/config/groups/keys.cpp +++ b/src/config/groups/keys.cpp @@ -54,6 +54,9 @@ Keys::Keys( if (dumped) { load_dump(*dumped); + auto key_list = group_keys(); + members.replace_keys(key_list, /*dirty=*/false); + info.replace_keys(key_list, /*dirty=*/false); } else if (admin()) { rekey(info, members); } diff --git a/tests/test_group_keys.cpp b/tests/test_group_keys.cpp index 48e30240..111307f9 100644 --- a/tests/test_group_keys.cpp +++ b/tests/test_group_keys.cpp @@ -502,6 +502,22 @@ TEST_CASE("Group Keys - C++ API", "[config][groups][keys][cpp]") { CHECK(m.members.size() == 5); CHECK(m.keys.current_hashes() == std::unordered_set{{"keyhash6"s, "keyhash7"s}}); } + + // Make sure keys propagate on dump restore to info/members: + pseudo_client admin1b{ + admin1_seed, + true, + group_pk.data(), + group_sk.data(), + admin1.info.dump(), + admin1.members.dump(), + admin1.keys.dump()}; + admin1b.info.set_name("Test New Name"); + CHECK_NOTHROW(admin1b.info.push()); + admin1b.members.set( + admin1b.members.get_or_construct("05124076571076017981235497801235098712093870981273590" + "8746387172343")); + CHECK_NOTHROW(admin1b.members.push()); } TEST_CASE("Group Keys - C API", "[config][groups][keys][c]") {