SHA256
Первая версия вложенных файлов работает
This commit is contained in:
@@ -68,7 +68,7 @@
|
||||
- `kind` — ASCII-идентификатор типа вставки;
|
||||
- параметры отделяются `;`;
|
||||
- ключ и значение отделяются `=`;
|
||||
- значения не экранируются в v1;
|
||||
- значения обычных v1-вставок не экранируются; для `file` поля `url`, `name`, `mime` кодируются через percent-encoding (`encodeURIComponent`), чтобы `;`, `=` и `>` внутри метаданных не ломали блок;
|
||||
- канонический новый префикс: `<S:`;
|
||||
- legacy-префикс `<SHiNE:` продолжает поддерживаться при чтении.
|
||||
|
||||
@@ -127,7 +127,32 @@ fromLogin|toLogin|timeMs|nonce
|
||||
- UI может рисовать такие сообщения отдельным специальным стилем.
|
||||
- официальный UI не отправляет call-summary, если от старта исходящего звонка до его завершения прошло меньше `5` секунд.
|
||||
|
||||
## 7. Поведение официального UI
|
||||
## 7. Тип `file`
|
||||
|
||||
Формат v1:
|
||||
|
||||
```text
|
||||
<S:file;v=1;id=BASE58_SHA256;url=ENCODED_URL;key=BASE64URL_AES_KEY;iv=BASE64URL_IV;name=ENCODED_NAME;mime=ENCODED_MIME;size=123;encsize=139>📎 example.pdf
|
||||
```
|
||||
|
||||
Поля:
|
||||
|
||||
- `id` — `Base58(SHA-256(ciphertext))`;
|
||||
- `url` — абсолютный URL ciphertext на access-сервере отправителя, percent-encoded;
|
||||
- `key` — случайный 32-byte AES-256 key в Base64URL;
|
||||
- `iv` — случайный 12-byte AES-GCM IV в Base64URL;
|
||||
- `name` — исходное безопасно нормализованное имя файла, percent-encoded;
|
||||
- `mime` — исходный MIME, percent-encoded;
|
||||
- `size` — размер plaintext в байтах;
|
||||
- `encsize` — размер ciphertext в байтах.
|
||||
|
||||
`key`, `iv` и метаданные безопасно находятся здесь только потому, что весь plaintext DM затем шифруется существующим E2EE-механизмом. Они не передаются файловому HTTP endpoint отдельно.
|
||||
|
||||
Текст `📎 example.pdf` после блока служит fallback для старого клиента. Новый официальный UI вместо него рисует карточку файла и кнопку «Скачать».
|
||||
|
||||
Перед локальной AES-GCM-расшифровкой клиент обязан повторно вычислить SHA-256 скачанного ciphertext и сравнить Base58 с `id`.
|
||||
|
||||
## 8. Поведение официального UI
|
||||
|
||||
Официальный UI SHiNE в v1:
|
||||
|
||||
@@ -137,9 +162,10 @@ fromLogin|toLogin|timeMs|nonce
|
||||
- `Звонок: H:MM:SS`
|
||||
- `Звонил, но недозвонился: ...`
|
||||
- для `reply` скрывает сам блок и показывает только текст ответа;
|
||||
- для `file` скрывает fallback-текст и показывает карточку вложения с локальным download/decrypt;
|
||||
- если исходное reply-сообщение не найдено, reply-preview не показывается.
|
||||
|
||||
## 8. Совместимость
|
||||
## 9. Совместимость
|
||||
|
||||
Так как это часть plaintext, а не часть серверного envelope:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user