MCPcopy Create free account
hub / github.com/TelegramMessenger/cocoon / process_db_key

Method process_db_key

runners/key-manager/KeyManagerRunner.cpp:164–199  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

162}
163
164void KeyManagerRunner::process_db_key(td::Slice key, td::Slice value) {
165 auto key_parts = td::split(key, '_');
166 auto key_type = key_parts.first;
167 key = key_parts.second;
168
169 CHECK(value.size() >= 64);
170 auto signature = value.copy().remove_prefix(value.size() - 64);
171 value.remove_suffix(64);
172
173 public_key_obj_->verify_signature(value, signature).ensure();
174
175 if (key_type == "key") {
176 auto obj = cocoon::fetch_tl_object<cocoon_api::keyManagerDb_key>(value, true).move_as_ok();
177
178 auto P = std::make_unique<PrivateKey>();
179 P->private_key = obj->private_key_;
180
181 P->public_key.as_slice().copy_from(td::Ed25519::PrivateKey(td::SecureString(P->private_key.as_slice()))
182 .get_public_key()
183 .move_as_ok()
184 .as_octet_string());
185 CHECK(P->public_key.to_hex() == key);
186 P->key_type_ = (td::uint8)obj->key_type_;
187 P->valid_since_ = obj->valid_since_utime_;
188 P->valid_until_ = obj->valid_until_utime_;
189 P->valid_since_config_version_ = obj->valid_since_config_version_;
190 CHECK(active_config_version_ >= (td::uint32)P->valid_since_config_version_);
191
192 if ((td::uint32)P->valid_until_ > td::Clocks::system()) {
193 private_keys_.push_back(std::move(P));
194 }
195 } else if (key_type == "config") {
196 } else {
197 LOG(FATAL) << "unknown key type in db: " << key;
198 }
199}
200
201void KeyManagerRunner::config_to_db() {
202 auto conf = cocoon::create_serialize_tl_object<cocoon_api::keyManagerDb_configV1>(

Callers

nothing calls this directly

Calls 4

verify_signatureMethod · 0.80
as_sliceMethod · 0.80
PrivateKeyClass · 0.70
copyMethod · 0.45

Tested by

no test coverage detected