feat: Enhance ChatDetailScreen with Telegram-style selection UI and action buttons

This commit is contained in:
k1ngsterr1
2026-01-14 01:39:44 +05:00
parent 3c6f1cdd2f
commit 01441e21d9
2 changed files with 114 additions and 54 deletions

View File

@@ -679,10 +679,12 @@ object MessageCrypto {
// 1. Расшифровываем ChaCha ключ (как для сообщений)
val keyAndNonce = decryptKeyFromSender(encryptedKey, myPrivateKey)
// 2. Конвертируем key+nonce в строку (как в RN: key.toString('utf-8'))
val chachaKeyString = String(keyAndNonce, Charsets.UTF_8)
// 2. Конвертируем key+nonce в строку используя bytesToJsUtf8String
// чтобы совпадало с JS Buffer.toString('utf-8') который заменяет
// невалидные UTF-8 последовательности на U+FFFD
val chachaKeyString = bytesToJsUtf8String(keyAndNonce)
// 3. Генерируем PBKDF2 ключ (salt='rosetta', 1000 iterations, sha256)
// 3. Генерируем PBKDF2 ключ (salt='rosetta', 1000 iterations, sha1)
val pbkdf2Key = generatePBKDF2Key(chachaKeyString)
// 4. Расшифровываем AES-256-CBC
@@ -694,10 +696,11 @@ object MessageCrypto {
}
/**
* Генерация PBKDF2 ключа (совместимо с RN)
* Генерация PBKDF2 ключа (совместимо с crypto-js / RN)
* ВАЖНО: crypto-js использует PBKDF2WithHmacSHA1 по умолчанию!
*/
private fun generatePBKDF2Key(password: String, salt: String = "rosetta", iterations: Int = 1000): ByteArray {
val factory = javax.crypto.SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256")
val factory = javax.crypto.SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1")
val spec = javax.crypto.spec.PBEKeySpec(
password.toCharArray(),
salt.toByteArray(Charsets.UTF_8),