Skip to content

Commit

Permalink
use keys-storage
Browse files Browse the repository at this point in the history
  • Loading branch information
deevroman committed Nov 7, 2024
1 parent f82f8c5 commit 7acd5a5
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ namespace Data {
}

void EncryptSettings::storeKey(PeerId peer, const std::string &key) {
loadFile();
secrets[peer] = key;
saveToFile();
}
Expand Down
32 changes: 25 additions & 7 deletions Telegram/SourceFiles/history/history_widget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4437,6 +4437,17 @@ std::string decryptText(const char *encryptedText, DES_cblock* key) {
return res;
}

std::string decryptTextByPeer(Data::EncryptSettings &keys, PeerId peerId, const std::string &hexedText){
auto keyOpt = keys.requestKey(peerId);
if (keyOpt.has_value()) {
auto key = keyOpt.value();
auto raw_key = hexToBytes(key, key.size());
return decryptText(hexedText.c_str(), reinterpret_cast<DES_cblock*>(raw_key));
} else {
return {};
}
}

std::string encryptText(const char *text, DES_cblock* key) {
char * fixed_text = new char[MAX_DATA_SIZE];
memcpy(fixed_text, text, strlen(text));
Expand Down Expand Up @@ -6727,27 +6738,34 @@ void HistoryWidget::startItemRevealAnimations() {
auto init_prefix = std::string("E2E INIT ");
auto answer_prefix = std::string("E2E INIT_ANSWER ");
auto message_prefix = std::string("E2E MESSAGE ");

auto keys = session().data().encryptSettings();
auto peer = view->history()->peer->id;
if (!view->isSelfMessage()) {
if (view->textItem()->originalText().text.startsWith(QString::fromStdString( init_prefix))) {
std::string text = view->textItem()->originalText().text.mid(init_prefix.size()).toStdString();
char * init_answer = recvDH(text.c_str());
keys.storeKey(peer, bytesToHex(reinterpret_cast<char*>(des_key2), sizeof(DES_cblock)));

view->textItem()->setText(TextWithEntities::Simple("RECV" + view->textItem()->originalText().text));
view->textItem()->setText(TextWithEntities::Simple("Init encrypting"));
this->customSend({}, answer_prefix + init_answer);
} else if (view->textItem()->originalText().text.startsWith(QString::fromStdString( answer_prefix))) {
std::string text = view->textItem()->originalText().text.mid(answer_prefix.size()).toStdString();
finishDH(text.c_str());
view->textItem()->setText(TextWithEntities::Simple("Chat encrypted!"));
keys.storeKey(peer, bytesToHex(reinterpret_cast<char*>(des_key1), sizeof(DES_cblock)));

view->textItem()->setText(TextWithEntities::Simple("Чат зашифрован ✅"));
}
}
if (view->textItem()->originalText().text.startsWith(QString::fromStdString( message_prefix))) {
std::string text = view->textItem()->originalText().text.mid(message_prefix.size()).toStdString();
auto keys = session().data().encryptSettings();
auto peer = view->history()->peer;
if (des_key1 != nullptr) {
view->textItem()->setText(TextWithEntities::Simple(QString("DEC: ") + QString::fromStdString( decryptText(text.c_str(), des_key1))));
} else if (des_key2 != nullptr) {
view->textItem()->setText(TextWithEntities::Simple(QString("DEC: ") + QString::fromStdString(decryptText(text.c_str(), des_key2))));

auto keyOpt = keys.requestKey(peer);
if (keyOpt.has_value()) {
auto key = keyOpt.value();
auto raw_key = hexToBytes(key, key.size());
view->textItem()->setText(TextWithEntities::Simple(QString("🔒: ") + QString::fromStdString( decryptText(text.c_str(), reinterpret_cast<DES_cblock*>(raw_key)))));
} else {
view->textItem()->setText(TextWithEntities::Simple("DECRYPTION FAIL " + view->textItem()->originalText().text));
}
Expand Down

0 comments on commit 7acd5a5

Please sign in to comment.