Поддержка синхронизации своих же вложений

This commit is contained in:
RoyceDa
2026-02-17 15:13:48 +02:00
parent b63c87f23c
commit 9c72523e0c
3 changed files with 10 additions and 11 deletions

View File

@@ -150,6 +150,7 @@ export function useAttachment(attachment: Attachment, keyPlain: string) {
}
setDownloadStatus(DownloadStatus.DECRYPTING);
//console.info("Decrypted attachment ", Buffer.from(keyPlain, 'binary').toString('hex'));
console.info("KP", keyPlain);
const decrypted = await decodeWithPassword(keyPlain, downloadedBlob);
setDownloadTag("");
if(attachment.type == AttachmentType.FILE) {

View File

@@ -184,15 +184,13 @@ export function DialogProvider(props: DialogProviderProps) {
readUpdated = true;
}
let decryptKey = '';
if(message.from_me){
if(message.from_me && message.chacha_key != "" && message.chacha_key.startsWith("sync:")){
/**
* Если сообщение от меня, то ключ расшифровки для вложений
* не нужен, передаем пустую строку, так как под капотом
* в MessageAttachment.tsx при расшифровке вложений используется
* локальный ключ, а не тот что в сообщении, так как файл и так находится
* у нас локально
* Если это сообщение от нас, то проверяем, есть ли внутри chacha_key, если есть, значит это
* сообщение пришло нам в результате синхронизации и его нужно расшифровать, если chacha_key нет,
* значит сообщение отправлено с нашего устройства, и зашифровано на стороне отправки (plain_message)
*/
decryptKey = '';
decryptKey = Buffer.from(await decodeWithPassword(privatePlain, message.chacha_key.replace("sync:", "")), 'binary').toString('utf-8');
}
if(hasGroup(props.dialog)){
/**

View File

@@ -96,15 +96,15 @@ export function useDialogFiber() {
const content = packet.getContent();
const timestamp = packet.getTimestamp();
const messageId = packet.getMessageId();
if (fromPublicKey != publicKey) {
/**
* Игнорируем если это не сообщение от нас
*/
return;
}
const chachaDecryptedKey = Buffer.from(await decodeWithPassword(privatePlain, aesChachaKey), "binary");
const chachaKey = await decodeWithPassword(privatePlain, aesChachaKey);
const chachaDecryptedKey = Buffer.from(chachaKey, "binary");
const key = chachaDecryptedKey.slice(0, 32);
const nonce = chachaDecryptedKey.slice(32);
const decryptedContent = await chacha20Decrypt(content, nonce.toString('hex'), key.toString('hex'));
@@ -160,7 +160,7 @@ export function useDialogFiber() {
content,
timestamp,
0, //по умолчанию не прочитаны
'',
"sync:" + aesChachaKey,
1, //Свои же сообщения всегда от нас
await encodeWithPassword(privatePlain, decryptedContent),
publicKey,