56 @subsection Релиз 7.2.1
60 Небольшие оптимизации в online командах.
65 @subsection Релиз 7.2.0
69 Появилась @command{nncp-trns} команда для ручного создания транзитных пакетов.
72 Если у целевой ноды транзитного пакета задан @option{via} маршрут, то
73 использовать его, а не игнорировать.
76 Не отправлять multicast пакет оригинатору сообщения, очевидно точно
77 видящего свой собственный пакет.
80 Намного меньшее потребление памяти во время MTH хэширования когда
81 смещение равно нулю: когда пакет не является докачиванием, а например
82 проверяется @command{nncp-check} командой.
87 @subsection Релиз 7.1.1
91 Исправлено падение при fsync директорий после создания @file{.seen} файлов.
96 @subsection Релиз 7.1.0
100 Появилась возможность мультивещательной (multicast) рассылки пакетов.
101 Реализовано всего лишь дополнительным типом простых пакетов и изменением
102 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
105 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
106 команд использующих временный файл (stdin и @option{-use-tmp}).
109 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
112 Исправлено некорректное генерирование @file{.hdr} при использовании
116 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
120 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
121 проверку в бесконечный цикл.
124 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
127 @command{nncp-pkt} может парсить @file{.hdr} файлы.
132 @subsection Релиз 7.0.0
136 Минимальная требуемая версия Go 1.13.
139 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
140 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
141 изменение формата шифрованных файлов (всего что находится в spool
142 области) и формата @file{.meta} файла при chunked передаче.
144 Текущая реализация далека от оптимальной: в ней нет распараллеливания
145 вычислений и имеет повышенное потребление памяти: около 512 KiB на
146 каждый 1 GiB данных файла. Будущая оптимизация производительности и
147 потребления памяти не должна привести к изменению формата пакетов. Но
148 это всё равно в несколько раз быстрее BLAKE2b.
151 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
152 чтения с диска только предшествующей части, а не полностью всего файла,
156 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
159 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
160 уменьшая количество примитивов. А также заголовок шифрованного файла
161 теперь является ассоциированными данными при шифровании.
164 MultiCast Discovery использует
165 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
168 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
171 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
174 Обновлены зависимые библиотеки.
179 @subsection Релиз 6.6.0
183 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
184 ожидают завершения всех процессов фоновой проверки контрольных сумм,
185 после того как соединение закрыто.
188 Добавлена возможность определения адреса через multicast оповещение в
189 локальной сети, так называемый MCD (MultiCast Discovery).
194 @subsection Релиз 6.5.0
198 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
201 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
204 Исправлена гонка при закрытии файловых дескрипторов во время завершения
205 работы online протокола, которая могла привести к ошибке записи
206 принятого фрагмента пакета.
209 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
210 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
215 @subsection Релиз 6.4.0
219 Исправлена возможная гонка в online протоколе, приводящая к падению
225 @subsection Релиз 6.3.0
229 Исправлено возможное падение программы во время показа прогресса online
235 @subsection Релиз 6.2.1
239 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
244 @subsection Релиз 6.2.0
248 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
251 Очередной рефакторинг и упрощение системы журналирования.
252 Не должно быть видимых изменений для конечного пользователя.
257 @subsection Релиз 6.1.0
261 Оптимизация: большинство команд теперь не держат открытыми файловые
262 дескрипторы. Прежде вы легко могли выйти за пределы максимально
263 допустимого количества открытых файлов, если у вас было много пакетов в
267 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
268 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
271 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
272 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
273 online демоны не выполнят проверку целостности.
276 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
277 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
280 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
281 файлах, рядом с самими пакетами. Это может существенно повысить скорость
282 получения списка пакетов на файловых системах с большим размером блока.
287 @subsection Релиз 6.0.0
291 Журнал использует человеко-читаемый и легко обрабатываемый машиной
292 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
293 записей, вместо структурированных строчек RFC 3339. Старый формат
294 журналов не поддерживается @command{nncp-log}.
297 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
298 @command{nncp-daemon}.
301 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
302 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
303 выражением содержащим секунды, это можно использовать как возможность
304 вызова только при появлении исходящих пакетов.
307 @command{nncp-cronexpr} команда позволяет проверить корректность и
308 ожидаемый результат от указанного cron выражения.
313 @subsection Релиз 5.6.0
317 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
318 во время него ежесекундно.
321 В @option{calls} секции конфигурации появились опции
322 @option{autotoss}, @option{autotoss-doseen},
323 @option{autotoss-nofile}, @option{autotoss-nofreq},
324 @option{autotoss-noexec}, @option{autotoss-notrns}.
325 Вы можете настраивать опции автоматического tosser для каждого вызова.
328 Использовать vendoring вместо переопределения @env{GOPATH} во время
329 установки tarball, так как текущая минимальная версия Go это 1.12,
330 поддерживающая модули.
335 @subsection Релиз 5.5.1
339 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
340 в @file{config} во время установки.
345 @subsection Релиз 5.5.0
349 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
350 @command{nncp-bundle}, @command{nncp-stat} командах.
353 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
356 У команды @command{nncp-exec} появились @option{-use-tmp} и
357 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
361 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
362 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
365 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
370 @subsection Релиз 5.4.1
374 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
379 @subsection Релиз 5.4.0
383 Обновлены зависимые библиотеки.
386 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
387 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
388 реализация @command{redo} включена в tarball.
393 @subsection Релиз 5.3.3
397 Больше различных проверок в коде на ошибки.
400 Обновлены зависимые библиотеки.
405 @subsection Релиз 5.3.2
409 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
410 котором соединение могло не учитывать факты прихода пакетов и обрывать
416 @subsection Релиз 5.3.1
420 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
421 использующими внешние команды (@verb{#"|somecmd"#}).
424 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
425 каждому пакету в spool.
430 @subsection Релиз 5.3.0
434 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
437 Исправлено не происходящее дополнение (padding) handshake сообщений.
440 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
443 SP протокол порождает меньше вызовов записей (соответственно, и TCP
447 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
448 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
451 Раз в минуту, если нет более никакого другого трафика, посылаются PING
452 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
453 более не работоспособно.
456 @command{nncp-toss} использует lock-file для предотвращения
457 одновременной обработки зашифрованных пакетов.
462 @subsection Релиз 5.2.1
466 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
471 @subsection Релиз 5.2.0
475 Большинство команд по умолчанию показывают однострочный прогресс
476 выполнения операции. Появились @option{-progress}, @option{-noprogress}
477 опции командной строки, @option{noprogress} опция конфигурационного
481 Исправлен некорректный код возврата @command{nncp-check} команды,
482 который возвращал ошибку когда всё хорошо.
485 Проверка свободного места для пакетов, во время выполнения
486 @command{nncp-bundle -rx}.
491 @subsection Релиз 5.1.2
495 Исправлена @strong{критичная} уязвимость: аутентификация online нод
496 могла приводить к некорректной идентификации удалённой стороны, позволяя
497 скачивать чужие зашифрованные пакеты.
500 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
501 публичный ключ Noise были поменяны местами, что приводило к
502 невозможности online аутентификации нод.
505 Явная синхронизация (fsync) директорий для гарантированного
506 переименования файлов.
511 @subsection Релиз 5.1.1
515 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
520 @subsection Релиз 5.1.0
524 @command{nncp-file} может отправлять директории, автоматически на лету
528 Во время создания исходящих сообщений проверяется наличие свободного
529 места на файловой системе.
532 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
533 конфигурационного файла заменены на структуру
534 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
537 Добавлена @option{freq.maxsize} опция конфигурационного файл,
538 запрещающая ответ на файловый запрос больше заданного размера.
541 Возможность оповещения об успешно выполненных командах (exec) через
542 @option{notify.exec} опцию конфигурационного файла.
547 @subsection Релиз 5.0.0
551 @strong{Несовместимое} изменение формата конфигурационного файла:
552 YAML заменён на Hjson, из-за его гораздо большей простоты, без
553 заметной потери функционала и удобства.
556 @strong{Несовместимое} изменение формата простых пакетов. Работа со
557 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
558 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
559 смотря на то, что версия библиотеки ещё не проверена временем.
562 Возможность соединяться с удалёнными нодами не только по TCP, но и через
563 pipe вызов сторонней команды.
566 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
567 комментариев. Можно использовать @option{-nocomments} опцию для старого
571 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
572 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
575 Возможность переопределить umask процесса через опцию конфигурационного
579 По умолчанию файлы и директории создаются с 666/777 правами доступа,
580 позволяя управлять ими @command{umask}-ом.
583 Обновлены зависимости.
586 Полное использование go модулей для управления зависимостями
587 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
590 Отмена автоматического использования более новых версий GNU GPL
591 (лицензия проекта GNU GPLv3-только).
596 @subsection Релиз 4.1
598 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
602 @subsection Релиз 4.0
606 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
607 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
608 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
609 отсылать дешифрованные данные внешней команде. Старые версии не
613 Проверка доступного места перед копированием во время работы
614 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
617 @command{nncp-call} имеет возможность только показывать список пакетов
618 на удалённой машине, без их передачи.
621 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
624 Восстановлена работоспособность @option{xxrate} настройки в
625 @option{calls} секции конфигурационного файла.
628 Зависимые библиотеки обновлены.
631 Небольшие исправления ошибок.
634 Начало использования @code{go.mod} подсистемы.
639 @subsection Релиз 3.4
641 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
645 @subsection Релиз 3.3
649 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
650 проверяют существование @file{.seen} файла и расценивают его как то, что
651 файл уже был скачан. Возможно передача данных была осуществлена
652 сторонним способом и удалённая сторона должна быть оповещена об этом.
655 Если более высокоприоритетный пакет попадает в спул, то
656 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
657 низкоприоритетные передачи.
660 К средствам связанным с online-соединениями (@command{nncp-daemon},
661 @command{nncp-call}, @command{nncp-caller}) добавлен простой
662 ограничитель скорости.
665 Возможность задания приоритета символьными обозначениями:
666 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
669 Изменены значения приоритетов по-умолчанию:
670 для @command{nncp-exec} с 64 на 96,
671 для @command{nncp-freq} с 64 на 160,
672 для @command{nncp-file} с 196 на 224.
677 @subsection Релиз 3.2
680 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
681 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
682 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
683 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
684 Явное добавление @file{NNCP/} директории в архив восстанавливает
685 работоспособность с корректными tar архивами.
689 @subsection Релиз 3.1
692 Возможность отключать пересылку через промежуточные ноды используя
693 @verb{|-via -|} опцию командной строки.
697 @subsection Релиз 3.0
701 @strong{Несовместимое} изменение формата простых пакетов. Работа со
702 старыми версиями не поддерживается.
705 Добавлена возможность удалённого исполнения команд, путём
706 конфигурирования @option{exec} опции конфигурационного файла и
707 использования команды @command{nncp-exec}:
710 Команда @command{nncp-mail} заменена более гибкой и широкой
711 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
712 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
714 @option{sendmail} опция конфигурационного файла заменена на более гибкую
715 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
720 Возможность переопределить @option{via} опцию конфигурации для целевого
721 узла через @option{-via} опцию командной строки для следующих команд:
722 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
725 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
729 Exec команды вызываются с дополнительными переменными окружения
730 @env{NNCP_NICE} и @env{NNCP_SELF}.
733 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
734 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
735 аргументом @option{-replynice}.
738 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
739 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
740 @option{-noexec}, @option{-notrns}.
743 По-умолчанию @command{nncp-file} команда для
744 @option{-minsize}/@option{-chunked} опций использует
745 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
746 Это можно отключить указав нулевое значение.
751 @subsection Релиз 2.0
755 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
756 Работа со старыми версиями не поддерживается.
759 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
760 Одним криптографическим примитивом меньше.
763 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
764 криптографическим примитивом меньше (предполагая, что BLAKE2X
765 практически идентичен BLAKE2).
770 @subsection Релиз 1.0
774 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
775 со старыми версиями не поддерживается.
778 @command{nncp-bundle} команда может создавать потоки зашифрованных
779 пакетов или потреблять их. Это полезно когда речь идёт о
780 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
781 без создания промежуточного подготовленного ISO образа или работа с
782 ленточными накопителями).
785 @command{nncp-toss} команда может создавать @file{.seen} файлы,
786 предотвращая приём дублированных пакетов.
789 В команде @command{nncp-call} разрешается иметь только одного
790 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
791 входящих пакетов могут создать много горутин.
794 Возможность переопределить путь до spool директории и файла журнала
795 через аргумент командной строки или переменную окружения.
798 @command{nncp-rm} команда может удалять все исходящие/входящие,
799 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
804 @subsection Релиз 0.12
806 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
810 @subsection Релиз 0.11
812 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
816 @subsection Релиз 0.10
819 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
820 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
824 @subsection Релиз 0.9
827 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
828 команды. Они игнорировались.
832 @subsection Релиз 0.8
835 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
836 @option{-minsize} для передачи без разбиения на части была в байтах, а
841 @subsection Релиз 0.7
845 Возможность предоставлять данные для @command{nncp-file} через
846 стандартный ввод, используя временный зашифрованный файл для этого.
849 Появилась возможность передачи файлов разбитых на части, с сопутствующей
850 @command{nncp-reass} командой и @option{freqchunked} опцией
851 конфигурационного файла. Полезно для передачи больших файлов через
852 маленькие устройства хранения.
855 @option{freqminsize} опция конфигурационного файла, аналогичная
859 Опция @option{-force} команды @command{nncp-xfer} переименована в
860 @option{-mkdir} для ясности.
863 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
866 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
867 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
868 имели общий префикс и были сгруппированы для удобства.
871 Появилась команда @command{nncp-cfgenc}, позволяющая
872 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
873 без использования OpenPGP или других подобных инструментов.
876 Обновлены зависимые криптографические библиотеки.
881 @subsection Релиз 0.6
883 @item Появилась небольшая команда @command{nncp-rm}.
884 @item Обновлены зависимые криптографические библиотеки.
888 @subsection Релиз 0.5
891 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
892 @command{nncp-file} и @command{nncp-freq} командах.
896 @subsection Релиз 0.4
900 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
901 @command{nncp-daemon}: иногда они могли падать с segmentation fault
902 ошибкой (данные не терялись).
905 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
906 это короче и удобнее для использования.
909 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
910 позволяющая создать минималистичный урезанный конфигурационный файл без
911 приватных ключей, что полезно во время использования @command{nncp-xfer}.
916 @subsection Релиз 0.3
918 @item Исправлена совместимость с Go 1.6.
922 @subsection Релиз 0.2
926 @strong{Несовместимое} изменение формата пакета (магическое число тоже
927 изменено): поле размера пакета шифруется и не посылается в открытом виде.
930 @option{-minsize} опция даёт возможность автоматически дополнять
931 исходящие пакеты до указанного минимального размера.
934 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
935 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
936 Удалённая сторона сразу же оповещается об этом.
939 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
940 неактивность в online соединении, когда оно должно быть отключено. Она
941 может быть использована для сохранения соединения на долгое время.
944 @option{-maxonlinetime} опция даёт возможность указания максимального
945 возможного времени жизни соединения.
948 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
952 @command{nncp-pkt} команда может разжимать данные.