Specify admin import transaction and notification contracts

This commit is contained in:
evgeny committed 2026-10-26 20:44:42 +01:00
1 parent cc04f1c0fa
commit 5169ffd0b3
3 files changed
+8 -7

No files matched your search

+3 -3
View File
@@ -5,9 +5,9 @@
* выбранному узлу. Передача идёт через сервисный пакет etcp_router с
* ROUTE_CRYPTO_SIGN | ROUTE_CRYPTO_ENCRYPT: X25519 ECDH + AES-128-CCM и Ed25519-подпись.
* Получатель сверяет выведенные публичные ключи с уже известными ключами канала,
* сохраняет оба privkey и синхронно публикует CHAT_EVT_ADMIN_KEY_RECEIVED.
* Известный дефект: SQL-helper игнорирует ошибки bind; возможен частичный импорт
* с ложным событием успеха. План: doc/chat_audit_findings.txt, продолжение chat_admin.
* сохраняет оба privkey атомарно и после commit синхронно публикует CHAT_EVT_ADMIN_KEY_RECEIVED.
* Ошибка SQL/crypto сохраняет прежнюю пару без события успеха; корректный повтор допустим.
* Внешняя SQL-транзакция отклоняет входящий импорт; незавершённый rollback требует restart.
* Модуль включается/отключается chat_sync; все вызовы — в потоке uasync.
*/
+1
View File
@@ -335,6 +335,7 @@ void chat_member_tags_commit_trampoline(void* arg);
// ── Передача прав админа (владелец → другому узлу) ──
// Передать оба канальных privkey выбранному узлу (encrypted+signed через etcp_router).
// uasync-поток; NULL/неинициализированный inst отклоняется с ERROR. Постановка в транспорт не подтверждает импорт.
void chat_core_transfer_admin(struct UTUN_INSTANCE* inst, const char* ch_id, uint64_t target_node_id);
void chat_core_transfer_admin_trampoline(void* arg);
+4 -4
View File
@@ -123,10 +123,10 @@ int topo_node_sqlite_channel_get_priv(sqlite3* db, const char* channel_id,
int topo_node_sqlite_channel_get_privs(sqlite3* db, const char* channel_id,
uint8_t* x25519_priv_out, uint8_t* ed25519_priv_out);
/* Записать оба канальных privkey по 32 байта (импорт прав админа); 0/-1, без проверки пары/подписи.
* Отсутствующая строка даёт 0 без вставки; наличие канала проверяет вызывающий.
* Известный дефект: bind/finalize не проверяются; ошибка bind допускает частичную пару/ложный 0.
* Исправление ещё не выполнено: doc/chat_audit_findings.txt, продолжение chat_admin. */
/* Атомарно записать оба канальных privkey[32] в одну существующую строку; 0/-1.
* Savepoint проверяет все SQL-операции и откатывает запись при отказе; отсутствие строки — ошибка.
* При внешней транзакции её commit остаётся вызывающему; событие успеха до него запрещено.
* Соответствие пары/подпись проверяет вызывающий. Аргументы обязательны; rollback-отказ логируется. */
int topo_node_sqlite_channel_set_privs(sqlite3* db, const char* channel_id,
const uint8_t* x25519_priv, const uint8_t* ed25519_priv);