Поддержка синхронизации своих же вложений
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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)){
|
||||
/**
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user