Поддержка синхронизации своих же вложений
This commit is contained in:
@@ -150,6 +150,7 @@ export function useAttachment(attachment: Attachment, keyPlain: string) {
|
|||||||
}
|
}
|
||||||
setDownloadStatus(DownloadStatus.DECRYPTING);
|
setDownloadStatus(DownloadStatus.DECRYPTING);
|
||||||
//console.info("Decrypted attachment ", Buffer.from(keyPlain, 'binary').toString('hex'));
|
//console.info("Decrypted attachment ", Buffer.from(keyPlain, 'binary').toString('hex'));
|
||||||
|
console.info("KP", keyPlain);
|
||||||
const decrypted = await decodeWithPassword(keyPlain, downloadedBlob);
|
const decrypted = await decodeWithPassword(keyPlain, downloadedBlob);
|
||||||
setDownloadTag("");
|
setDownloadTag("");
|
||||||
if(attachment.type == AttachmentType.FILE) {
|
if(attachment.type == AttachmentType.FILE) {
|
||||||
|
|||||||
@@ -184,15 +184,13 @@ export function DialogProvider(props: DialogProviderProps) {
|
|||||||
readUpdated = true;
|
readUpdated = true;
|
||||||
}
|
}
|
||||||
let decryptKey = '';
|
let decryptKey = '';
|
||||||
if(message.from_me){
|
if(message.from_me && message.chacha_key != "" && message.chacha_key.startsWith("sync:")){
|
||||||
/**
|
/**
|
||||||
* Если сообщение от меня, то ключ расшифровки для вложений
|
* Если это сообщение от нас, то проверяем, есть ли внутри chacha_key, если есть, значит это
|
||||||
* не нужен, передаем пустую строку, так как под капотом
|
* сообщение пришло нам в результате синхронизации и его нужно расшифровать, если chacha_key нет,
|
||||||
* в MessageAttachment.tsx при расшифровке вложений используется
|
* значит сообщение отправлено с нашего устройства, и зашифровано на стороне отправки (plain_message)
|
||||||
* локальный ключ, а не тот что в сообщении, так как файл и так находится
|
|
||||||
* у нас локально
|
|
||||||
*/
|
*/
|
||||||
decryptKey = '';
|
decryptKey = Buffer.from(await decodeWithPassword(privatePlain, message.chacha_key.replace("sync:", "")), 'binary').toString('utf-8');
|
||||||
}
|
}
|
||||||
if(hasGroup(props.dialog)){
|
if(hasGroup(props.dialog)){
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -96,15 +96,15 @@ export function useDialogFiber() {
|
|||||||
const content = packet.getContent();
|
const content = packet.getContent();
|
||||||
const timestamp = packet.getTimestamp();
|
const timestamp = packet.getTimestamp();
|
||||||
const messageId = packet.getMessageId();
|
const messageId = packet.getMessageId();
|
||||||
|
|
||||||
|
|
||||||
if (fromPublicKey != publicKey) {
|
if (fromPublicKey != publicKey) {
|
||||||
/**
|
/**
|
||||||
* Игнорируем если это не сообщение от нас
|
* Игнорируем если это не сообщение от нас
|
||||||
*/
|
*/
|
||||||
return;
|
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 key = chachaDecryptedKey.slice(0, 32);
|
||||||
const nonce = chachaDecryptedKey.slice(32);
|
const nonce = chachaDecryptedKey.slice(32);
|
||||||
const decryptedContent = await chacha20Decrypt(content, nonce.toString('hex'), key.toString('hex'));
|
const decryptedContent = await chacha20Decrypt(content, nonce.toString('hex'), key.toString('hex'));
|
||||||
@@ -160,7 +160,7 @@ export function useDialogFiber() {
|
|||||||
content,
|
content,
|
||||||
timestamp,
|
timestamp,
|
||||||
0, //по умолчанию не прочитаны
|
0, //по умолчанию не прочитаны
|
||||||
'',
|
"sync:" + aesChachaKey,
|
||||||
1, //Свои же сообщения всегда от нас
|
1, //Свои же сообщения всегда от нас
|
||||||
await encodeWithPassword(privatePlain, decryptedContent),
|
await encodeWithPassword(privatePlain, decryptedContent),
|
||||||
publicKey,
|
publicKey,
|
||||||
|
|||||||
Reference in New Issue
Block a user