orignal
auto session = GetSession ();
orignal
if (!session) return false;
orignal
вот тут поставь перед return false
orignal
вылетает ли тут или дальше вызывает session->HandleNextMessage
orignal
внутри сесии ставить логи и смотреть на каком месте фейлится
orignal
дальше в HandleExistingSessionMessage
onon
Куда ещё лог сувать?
orignal
мы должны понять в каком месте HandleNextMessage возвращает false
onon
А конктретно
orignal
перед ветвлениями
onon
Всё?
onon
СОбирать?
orignal
погоди
orignal
auto session = GetSession ();
orignal
я думаю что фейлится здесь
onon
Мои какие действия?
orignal
вот здесь if (!session) return false;
orignal
отрыть фигурные скобки
onon
Ну я там уже сделал лог
onon
СО скобками
onon
Или чио-то добавить ещё
orignal
и написать перед rerun LogPrint ("мы накрылись медным тазом")
orignal
нет больше ничего
onon
Ок собираю
orignal
собирать и пробовать
orignal
если гиптеза подтвердится будем думать с чего сессиия стала нулевой в тагсете
onon
Ну щас со старта заработало
orignal
ну в общем понятно что надо смотреть
onon
Локально поток остановил, послал поток с другого клиента, свё заработало
orignal
эээээ
onon
Остановил с удалённого клиента, запустил с локального - поёт
orignal
какая то исчезающая ошибка
onon
А если с двух в один слать то поёт сразу две песни
onon
Одновременно
orignal
лол
onon
Пока не ломается
onon
Вот сломалось
onon
И нету там !session
onon
И HandleNextMessage тоже нет
onon
Просто Can't handle ECIES-X25519-AEAD-Ratchet message
onon
Пред тем как сломалось было 2 вызова HandleNextMessage
onon
Потом было GetNextSessionTag от 24 до 45
onon
И дальше GetNextIndex 0
orignal
ну так надо все таки понять откуда возвращается false
orignal
если других ошибок нет
orignal
default:
orignal
return false;
orignal
может вот тут стейт какой то не такой?
onon
А UDPSession: Operation canceled Это откуда?
onon
Оно перед этим вылезло, может как-то связано
orignal
LogPrint(eLogError, "UDPSession: ", ecode.message());
orignal
отсюда
orignal
кто то закрыл сокет короче
onon
Значит ни при чём
orignal
угу
orignal
наша цель узнать откуда false в HandleNextMessage
onon
Может ему сам пакет не нравится, что он пустой GetDatagramDestination ()->SendDatagram (session, nullptr, 0, 0, 0, &options);
orignal
про пустоту пакета ты узнаешь только после рашифровки
orignal
а у тебя расшифровать не может
onon
Хмм
orignal
или еще что то фейлится
orignal
мы и пытаемся понять где фейлится
onon
Ну ты пока пытайся, а я чаю себе сделаю
orignal
да кстати этам мысль интересная что там с пейлоадом
orignal
я отойду
orignal
в сельпо ))
orignal
вернулся
onon
А я там опять жабоводов тролирую
onon
Говорю что они на болоте сидят
onon
Жаб разводят
onon
Вот только что оно сломалось в потоке
onon
Т.е. не на старте
orignal
кстати почему ты думаешь что это фейлится шифрование?
onon
А не погоди
onon
Это я рестартанул
onon
Тоже на старте
orignal
давай место смотреть
onon
Может ка-то влияет что у меня порты прописаны в конфиге
onon
destinationport = 30000
onon
port = 30000
onon
Я уж не знаю почему у тебя работает а у меня нет
orignal
так если у тебя не работает
orignal
то ты можешь найти по логам
onon
Ну я всё логирую что ты сказал
orignal
я же говорю мы должны понять на какой строчки происходит return false
onon
Ничё е понятно всё равно
orignal
что то же возвращает false
onon
Сюда !it->second.tagset или сюда !it->second.tagset->HandleNextMessage ?
orignal
раз у тебя печталается индекс что очевидно что тагсет не нулевой
orignal
фейлится внутри HandleNextMessage
orignal
теперь смотри если бы не могло расшифровать то писало бы ошибку
orignal
Garlic: Payload section AEAD decryption failed"
orignal
типа такого
orignal
но если этой ошибки нет то это явно не шифрование
onon
У меня там лог error
onon
может он и вылазило
onon
Щас поставлю цфктштп
onon
warning
orignal
вот с этого и надо начинать
orignal
если фейлится именно расшифровка
orignal
будем копать дальше
orignal
у меня кстати порты 24001
onon
Оно что-то перестало ломаться
orignal
лол
onon
Это закон подлости
orignal
закон мэрфи
onon
Flags/static
orignal
так-с
orignal
это значит новая сессия
onon
Причем это не сломалось мгновенно
onon
Он сначала несколько сообщений не смог расшифровать
onon
Потом снова смог
orignal
Garlic: Flags/static section AEAD encryption failed
onon
А потом опять не смог
orignal
я полагаю
orignal
пардон descryption
orignal
а это в свою очередь означает что не нашелся таг
onon
И сломалось оно на 683 таге
orignal
if (session->HandleNextMessage (buf, length, nullptr, 0))
orignal
m_LastIncomingSessionTimestamp = ts;
orignal
else
orignal
LogPrint (eLogError, "Garlic: Can't handle ECIES-X25519-AEAD-Ratchet message");
orignal
завалилось вот здесь
orignal
вопрос почему не нашелся таг
onon
Вру сломалось на 443 таге
onon
Потом снова починилось
onon
А потом снова сломалось
onon
Может у меня память где битая?
onon
Где он в памяти хранится
orignal
вряд ли
orignal
кто? таг?
onon
Ну
onon
Ну другие программы пока не жаловались
orignal
std::unordered_map<uint64_t, ECIESX25519AEADRatchetIndexTagset> m_ECIESx25519Tags; // session tag -> session
orignal
вот здесь
onon
У меня там при включении быстрый тест памяти делается...
orignal
да не память это
onon
Поня
onon
л
orignal
а логическая ошибка где то
orignal
скорее всего он выкинулся по какой то причине
onon
Из-за тестов туннелей
orignal
для тестов тоннелей свои тагсеты
onon
Куда ещё логирование пихать
orignal
теперь надо делать следующее
orignal
записывать когда таги кладутся в таблицу m_ECIESx25519Tags
orignal
и когда они из нее удаляются
orignal
далее в момент ошибки записать какой это был таг
orignal
когда ошибка возникнет проседить судьбу этого тага
orignal
чтобы понять
orignal
1. создавался ли он вообще
orignal
2. если создавался почему был выкинут
orignal
это все на стороне получателя
orignal
если получился вариант 1 что он такой вообще не создавался
orignal
то смотреть почему наборы тагов разошлись на отправителе и получателе
onon
Конкретно какие строки
orignal
перед всеми операциями с m_ECIESx25519Tags
orignal
insert, emplace и erase я думаю
orignal
а сам таг вот там где индекс печатал
onon
Чет там дохрена операций с этим m_ECIESx25519Tags
orignal
ну вот все и записать
orignal
в лог
orignal
тип операции и таг
orignal
тебе от индекса нет пользы
orignal
если ты получил таг который не найдет в таблице
orignal
тебе нужно само значение тага
onon
Ну вот значение значит
orignal
и понять что с ним происходило до этого
orignal
ну вот в AddECIESx25519SessionNextTag это просто tag
orignal
какая строчка вызывает у тебя затруднение?
orignal
понимаешь мысль? если мы запишем все действия с тага с этой таблицей
orignal
то когда получим не найденный то мы поиском найдем в логе что с ним случилось
onon
Ща попробую
orignal
ну и пишешь в лог Add и Remove
onon
А там где erase
onon
m_ECIESx25519Tags.erase (it);
onon
auto it = m_ECIESx25519Tags.find (tag);
onon
if (it != m_ECIESx25519Tags.end ())
orignal
it->first но обязтаельно перед earse а не после
orignal
ну и у тебя же есть tag
onon
Там где void GarlicDestination::CleanupExpiredTags ()
onon
Не знаю как
onon
Он там какие-то слишком большие числа пишет
orignal
правильно
orignal
так и должно быть
orignal
и с - может
orignal
перед it = m_ECIESx25519Sessions.erase (it);
orignal
напечатать it->first
onon
Да везде перед
orignal
со словом Remove
onon
СДелал, только ничего не понятно
onon
ВОт оно сломалось уже только как это разобрать...
orignal
надо взять таг который на найдет
orignal
и сделать поиском по логу его
onon
А где это посмотреть который он не нашёл
orignal
так ты должен был его напечтать
orignal
в HandleECIESx25519TagMessage
orignal
к этому if (it != m_ECIESx25519Tags.end ()) доьавить else и туда
orignal
Not found и tag
onon
Голову мне взорвешь
orignal
смотри какой план
onon
Перед return false;
orignal
да именно там
orignal
мы находим таг который не найден а должен быть найден
orignal
а потом пытаемся установить почему он не найден
orignal
или его вообще не существовало или его выпилили
onon
Не находит такого тага вообще
onon
Нету его в emplace и erase
orignal
то есть он не сгенерился
onon
Они только в этом файле генерятся?
orignal
да
onon
Еще раз перепроверю что все логи дабвил
orignal
то есть генерятся они в другом а вставляются только в этом
orignal
если не было его emplace дальше возникает вопрос почему
orignal
почему он есть на стороне отправителя и нет на стороне получателя
onon
Секретный зонд от АНБ
orignal
либо не успел либо расхождение в генерации их
orignal
значит надо печтать что мы генерим на обеих сторонах и сранивать
orignal
но это уже завтра
onon
Данунах
onon
Издевается на до мной
onon
Я это еле осилил
onon
А ещё с двух сторон
orignal
ну так раз толькол у тебя воспроизводися
onon
Ты просто не старался
orignal
если бы у меня воспроизводилось я бы сам все это проделал
onon
И отлыниваешь
orignal
ну если не застревает что я могу сделать?
onon
Слабо пихаешь значит
onon
Больший поток пихай
orignal
больший это сколько?
onon
434.7kbits/s
onon
У меня
orignal
хорошо завтра попытаюсь
orignal
точнее даже счас
onon
Завтра на работу
onon
Спать иди
orignal
frame= 16 fps=7.7 q=6.1 size= 126kB time=00:00:01.50 bitrate= 688.8kbits/s
orignal
рано
orignal
что я делаю не так?
onon
Не знаю
orignal
идет без проблем и затыков
onon
Что мне на клиенте смотреть
onon
Искать такой номер тага?
orignal
на клиенте надо записать все таги которые там генерятся
onon
Они такие же должны быть?
onon
Вот на сервере он пишет таг не найден
onon
И с этим номером на клиенте искать?
orignal
uint64_t tag = m_SendTagset->GetNextSessionTag ();
onon
Это в каком файле
orignal
в сттроке 865
orignal
ECIESX25519AEAD как обычно
orignal
вот туда надо писать с этой строки
orignal
а у получателя надо записывать в AddECIESx25519SessionNextTag
orignal
и дальше сранивать одинаковые ли нагенирились и когда начались расхождения
orignal
нам надо понять почему на отправителе таг есть а на получателе его нет
onon
Знаеш что
onon
На сервере таг не нашёлся
onon
На отправителе есть
onon
Вот какой нюанс
onon
Следующий нераспознанный таг на сервере на клиенте сгенерирован до первого не найденного
onon
Если в этом вашем шифровании важен порядок следования тагов, то возможно он сломался из-за реордеринга
onon
Нет, похоже сервер просто нагенерил мало тагов.
onon
только 53 штуки
onon
А с клиента часть пакетов потерялась
onon
И потом перепрыглул номер получается
onon
И на сервере и на клиенте crypto.ratchet.inboundTags=800 если что
Most_
05<centeredhonor> test
Most_
05<centeredhonor> > test
Most_
05<centeredhonor> ❤️
Most_
14<gomunkul> > test
Most_
14<gomunkul> ❤️
orignal
это то понятно что не нашелся
orignal
вопрос было ли расхождение или прсто не сгенрился
orignal
нет порядок не важен
onon
Расхождение
orignal
в какой момент?
onon
Ты мне лучше объясни тогда принцип генерации тагов на приёмнике
onon
Ну на отправителе вперёд убежали
orignal
в чем именно вопрос?
onon
А на приёмнике новые перестали генериться
orignal
так погоди
onon
Как они с 24 до 800 должны увеличиваться
orignal
это было в прелелах 800 тагов?
orignal
ну там есть алгритм в коде
onon
Нет, похоже сервер просто нагенерил мало тагов.
onon
только 53 штуки
orignal
но в твоем случае должно быть сразу 800
orignal
то есть вот создалась сессия и сразу 800
onon
Ну значит почему-то не сработало
onon
Хотя в конфиге стоит
orignal
вот это и надо разбираться
orignal
то есть на сервере сгенерировалосб только 53 тага а сколько сервер насрать успел?
orignal
*клиент
onon
На 117 больше
onon
166 вроде
orignal
так все я погляжу почему не 800
orignal
отличный анализ проделал ты
onon
Будешь должен
onon
Монет мне пришлёшь потом
onon
Я буду их всяким флументалам раздавать итешить своё эго
onon
xD
orignal
пришлю
orignal
если пообещаешь нытиками не отсылась
onon
Не, такого обещать не могу
onon
=)
onon
Пробежался по докам i2p-projekt.i2p/spec/ecies нигде не нашёл упоминаний сколько должно генериться тагов на приёмнике и алгоритма их увеличения.
orignal
ты не то смотрел
orignal
посмоотри пропозал 123
orignal
пардон 144
orignal
а цифры я от деда знаю
orignal
они такие используют
orignal
но у них врод 400 тагов максимум
onon
Вроде где-то видел что 160
onon
У дрозда пытался уточнить, тот ответить не смог
onon
А дед проигнорировал вопрос
orignal
я уже не помню
orignal
надо в их коде смотреть
orignal
мне просто дед сказал столько
orignal
сколько
vade
Что скажите про Tailscale / Zerotier? Пользуется кто-нибудь?
vade
Ой канал перепутал
onon
Recommended parameters and timeouts:
onon
NSR tagset size: 12 tsmin and tsmax
onon
ES tagset 0 size: tsmin 24, tsmax 160
onon
Наверное это
onon
Минимум 24 тага максимум 160
orignal
вроде он поднимал выше
orignal
я вот что думаю
orignal
у нас наверное ставится 24 а потом пересчитывается до 800
orignal
буду разбираться
orignal
GenerateMoreReceiveTags (receiveTagset, (GetOwner () && GetOwner ()->GetNumRatchetInboundTags () > 0) ?
orignal
GetOwner ()->GetNumRatchetInboundTags () : ECIESX25519_MIN_NUM_GENERATED_TAGS);
onon
Это чего значит?
orignal
тут должно сразу генериться 800
onon
Это только при условии что параметр стоит
orignal
сессия создалась сразу 800 должо быть в твоем случае
onon
Ну или специально для UDP
orignal
ну да
orignal
только если параметр
orignal
ну так для UDP мы его поставим принудиельно
orignal
вопрос то почему у тебя стоит 800 а фейлится
onon
Ну потому что не генерит он 800
onon
А только 24
onon
И потом постепенно увеличивает
onon
С каждым полученным
onon
Я так думаю
orignal
moreTags = (receiveTagset->GetTagSetID () > 0) ? ECIESX25519_MAX_NUM_GENERATED_TAGS : // for non first tagset
orignal
(ECIESX25519_MIN_NUM_GENERATED_TAGS + (index >> 1)); // N/2
orignal
а вот тут неправильно
orignal
так по коду этому должен сразу
orignal
или это только на клиенте
orignal
счас проверим
orignal
скорее всего так и есть
orignal
после обеда починю
orignal
счас дела
orignal
и да на сервер этого не делается
orignal
на стримах это не проявляется
orignal
потому что поток обычно в другую сторону
onon
Ну и потому что там разгон окна наверное
onon
Он не сможет сразу всё в пустоту отправить
onon
Как здесь
orignal
короче починю вечером
orignal
хорошая находка
onon
Да не горит
orignal
так потом забуду
onon
Я напомню
onon
Если сам не забуду...
orignal
и для последующих тагсетов
orignal
ты скажи ты сколько тагов видел на сервере сгенирированных?
onon
В какой момент
orignal
к моменту затыка
orignal
сколько не обработал а нагенерил
orignal
иными словами сколько раз вызвалось AddECIESx25519SessionNextTag
onon
Это GetNextSessionTag?
orignal
это m_ECIESx25519Tags.emplace (tag, ECIESX25519AEADRatchetIndexTagset{index, tagset});
orignal
53 это на котором встало и сколько всего нагенерилось
onon
На 1092 строке?
onon
или где-то в этом районе?
orignal
да в Gralic.cpp
orignal
меня интересут сколько вставилось тагов
onon
Ну вот значит 53
onon
По разному бывает
orignal
ну последний раз
orignal
понял
onon
Это был единственный от которого я логи сохранил
orignal
не важно
orignal
на сервере точно стоит 800?
onon
Да
orignal
вроде должно сразу быть 800
onon
Может для сервера синтаксис какой иной?
onon
У меня там crypto.ratchet.inboundTags = 800
orignal
GenerateMoreReceiveTags (receiveTagset, (GetOwner () && GetOwner ()->GetNumRatchetInboundTags () > 0) ?
orignal
GetOwner ()->GetNumRatchetInboundTags () : ECIESX25519_MIN_NUM_GENERATED_TAGS);
orignal
i2p::crypto::HKDF (keydata + 32, nullptr, 0, "AttachPayloadKDF", m_NSRKey, 32); // k = HKDF(k_ba, ZEROLEN, "AttachPayloadKDF", 32)
orignal
строка 701
orignal
вот и я думаю
orignal
я проверю сам это место
orignal
возможно GetOwner () еще пустой
orignal
в этот момент
orignal
разберусь дальше
onon
Mea culpa
orignal
чего?
onon
У меня там очепятка в конфиге на сервере
orignal
лол
orignal
два дня голову ломали ))
onon
В слове Tags
onon
Я исправил всё начало правильно генриться
orignal
но все равно багу нашли про след тагсет
orignal
давай тестируй
onon
Но это не отменяет что нужно по умолчанию сделать 800
onon
А не выставлять вручную
orignal
естественно