Документация для разработчиков
DVeProto
Версия протокола: 1.1 (рукопожатие v1-совместимо). После handshake данные могут идти binary WebSocket-кадрами.
?format=json или заголовок Accept: application/json). Ранее: dveproto_spec.php. Очередь обмена: dve_exchange.openapi.yaml.
Транспорт
Рукопожатие всегда — UTF-8 JSON. После выбора режима:
- 1.0 — текстовые кадры WebSocket с JSON
type: dve(Base64), как в v1; - 1.1 — только binary WebSocket frames: без JSON, без Base64, без text frames для данных.
Криптография та же: X25519, HKDF-SHA256 (DVeProto-v1/c2s, DVeProto-v1/s2c), AES-256-GCM. TLS по-прежнему защищает канал; DVeProto шифрует полезную нагрузку поверх транспорта.
Рукопожатие (совместимо с v1)
- Сервер отправляет
dve_helloсserver_pkи опциональноoffer: ["1.0","1.1"]. - Клиент считает общий секрет X25519 и ключи HKDF.
- Клиент отвечает
dve_client_ackсclient_pkиselect: "1.1"(или"1.0"). Старые клиенты безselect→ режим 1.0. - Далее данные только в выбранном wire-формате.
Бинарный кадр 1.1
[1] ver=0x11 [1] ptype [12] nonce […] ciphertext || GCM-tag(16)
Длина сообщения задаётся границей WebSocket binary frame. Типы ptype: 0x01 APP_JSON, 0x02 APP_BIN, 0x03 TEXT, 0x10–0x15 файловый обмен.
Передача файлов (1.1)
Файл идёт чанками: FILE_BEGIN → FILE_CHUNK* → FILE_END. Каждый chunk — отдельный binary frame со своим AES-GCM nonce/tag. Возобновление: FILE_RESUME / FILE_ACK(last_ok). Целостность: AEAD на chunk + опциональный SHA-256 всего файла. Поддерживаются любые пользовательские файлы (текст, изображения, документы, аудио, видео, архивы).
Удобная интеграция
- Python —
DVeClientSession.from_server_hello_text,pack_outgoing/unpack_incoming, хелперыpack_file_*. - Браузер —
dveDeveloperHandshake→{ session, clientAckJson, wire }; для 1.1encryptOutgoingвозвращаетUint8Array.
Полная машиночитаемая схема: https://api.f-chat.ru/DVeProto?format=json.
Совместимость
Клиенты только v1 продолжают работать на wire 1.0. Если обе стороны поддерживают 1.1 — автоматически выбирается binary-режим. Смешанные пары (старый клиент / новый сервер) остаются на JSON-кадрах.
English summary
DVeProto 1.1 keeps the v1 JSON handshake and crypto labels. After negotiation (offer/select), data may use compact binary WebSocket frames (no JSON/Base64) with chunked file transfer. Legacy wire 1.0 remains fully supported. Spec: API JSON; references: reference.py, reference-client.js.