58 @subsection Релиз 7.3.1
62 Исправлена проблема с возможно остающимся открытым файловым
63 дескриптором в online командах.
68 @subsection Релиз 7.3.0
72 Поправлены проблемы работоспособности на 32-бит системах с большими файлами.
75 Возможность использовать конфигурацию в виде директории с набором
76 файлов. Появилась команда @command{nncp-cfgdir}.
81 @subsection Релиз 7.2.1
85 Небольшие оптимизации в online командах.
90 @subsection Релиз 7.2.0
94 Появилась @command{nncp-trns} команда для ручного создания транзитных пакетов.
97 Если у целевой ноды транзитного пакета задан @option{via} маршрут, то
98 использовать его, а не игнорировать.
101 Не отправлять multicast пакет оригинатору сообщения, очевидно точно
102 видящего свой собственный пакет.
105 Намного меньшее потребление памяти во время MTH хэширования когда
106 смещение равно нулю: когда пакет не является докачиванием, а например
107 проверяется @command{nncp-check} командой.
112 @subsection Релиз 7.1.1
116 Исправлено падение при fsync директорий после создания @file{.seen} файлов.
121 @subsection Релиз 7.1.0
125 Появилась возможность мультивещательной (multicast) рассылки пакетов.
126 Реализовано всего лишь дополнительным типом простых пакетов и изменением
127 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
130 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
131 команд использующих временный файл (stdin и @option{-use-tmp}).
134 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
137 Исправлено некорректное генерирование @file{.hdr} при использовании
141 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
145 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
146 проверку в бесконечный цикл.
149 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
152 @command{nncp-pkt} может парсить @file{.hdr} файлы.
157 @subsection Релиз 7.0.0
161 Минимальная требуемая версия Go 1.13.
164 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
165 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
166 изменение формата шифрованных файлов (всего что находится в spool
167 области) и формата @file{.meta} файла при chunked передаче.
169 Текущая реализация далека от оптимальной: в ней нет распараллеливания
170 вычислений и имеет повышенное потребление памяти: около 512 KiB на
171 каждый 1 GiB данных файла. Будущая оптимизация производительности и
172 потребления памяти не должна привести к изменению формата пакетов. Но
173 это всё равно в несколько раз быстрее BLAKE2b.
176 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
177 чтения с диска только предшествующей части, а не полностью всего файла,
181 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
184 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
185 уменьшая количество примитивов. А также заголовок шифрованного файла
186 теперь является ассоциированными данными при шифровании.
189 MultiCast Discovery использует
190 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
193 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
196 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
199 Обновлены зависимые библиотеки.
204 @subsection Релиз 6.6.0
208 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
209 ожидают завершения всех процессов фоновой проверки контрольных сумм,
210 после того как соединение закрыто.
213 Добавлена возможность определения адреса через multicast оповещение в
214 локальной сети, так называемый MCD (MultiCast Discovery).
219 @subsection Релиз 6.5.0
223 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
226 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
229 Исправлена гонка при закрытии файловых дескрипторов во время завершения
230 работы online протокола, которая могла привести к ошибке записи
231 принятого фрагмента пакета.
234 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
235 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
240 @subsection Релиз 6.4.0
244 Исправлена возможная гонка в online протоколе, приводящая к падению
250 @subsection Релиз 6.3.0
254 Исправлено возможное падение программы во время показа прогресса online
260 @subsection Релиз 6.2.1
264 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
269 @subsection Релиз 6.2.0
273 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
276 Очередной рефакторинг и упрощение системы журналирования.
277 Не должно быть видимых изменений для конечного пользователя.
282 @subsection Релиз 6.1.0
286 Оптимизация: большинство команд теперь не держат открытыми файловые
287 дескрипторы. Прежде вы легко могли выйти за пределы максимально
288 допустимого количества открытых файлов, если у вас было много пакетов в
292 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
293 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
296 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
297 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
298 online демоны не выполнят проверку целостности.
301 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
302 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
305 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
306 файлах, рядом с самими пакетами. Это может существенно повысить скорость
307 получения списка пакетов на файловых системах с большим размером блока.
312 @subsection Релиз 6.0.0
316 Журнал использует человеко-читаемый и легко обрабатываемый машиной
317 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
318 записей, вместо структурированных строчек RFC 3339. Старый формат
319 журналов не поддерживается @command{nncp-log}.
322 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
323 @command{nncp-daemon}.
326 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
327 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
328 выражением содержащим секунды, это можно использовать как возможность
329 вызова только при появлении исходящих пакетов.
332 @command{nncp-cronexpr} команда позволяет проверить корректность и
333 ожидаемый результат от указанного cron выражения.
338 @subsection Релиз 5.6.0
342 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
343 во время него ежесекундно.
346 В @option{calls} секции конфигурации появились опции
347 @option{autotoss}, @option{autotoss-doseen},
348 @option{autotoss-nofile}, @option{autotoss-nofreq},
349 @option{autotoss-noexec}, @option{autotoss-notrns}.
350 Вы можете настраивать опции автоматического tosser для каждого вызова.
353 Использовать vendoring вместо переопределения @env{GOPATH} во время
354 установки tarball, так как текущая минимальная версия Go это 1.12,
355 поддерживающая модули.
360 @subsection Релиз 5.5.1
364 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
365 в @file{config} во время установки.
370 @subsection Релиз 5.5.0
374 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
375 @command{nncp-bundle}, @command{nncp-stat} командах.
378 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
381 У команды @command{nncp-exec} появились @option{-use-tmp} и
382 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
386 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
387 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
390 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
395 @subsection Релиз 5.4.1
399 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
404 @subsection Релиз 5.4.0
408 Обновлены зависимые библиотеки.
411 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
412 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
413 реализация @command{redo} включена в tarball.
418 @subsection Релиз 5.3.3
422 Больше различных проверок в коде на ошибки.
425 Обновлены зависимые библиотеки.
430 @subsection Релиз 5.3.2
434 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
435 котором соединение могло не учитывать факты прихода пакетов и обрывать
441 @subsection Релиз 5.3.1
445 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
446 использующими внешние команды (@verb{#"|somecmd"#}).
449 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
450 каждому пакету в spool.
455 @subsection Релиз 5.3.0
459 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
462 Исправлено не происходящее дополнение (padding) handshake сообщений.
465 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
468 SP протокол порождает меньше вызовов записей (соответственно, и TCP
472 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
473 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
476 Раз в минуту, если нет более никакого другого трафика, посылаются PING
477 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
478 более не работоспособно.
481 @command{nncp-toss} использует lock-file для предотвращения
482 одновременной обработки зашифрованных пакетов.
487 @subsection Релиз 5.2.1
491 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
496 @subsection Релиз 5.2.0
500 Большинство команд по умолчанию показывают однострочный прогресс
501 выполнения операции. Появились @option{-progress}, @option{-noprogress}
502 опции командной строки, @option{noprogress} опция конфигурационного
506 Исправлен некорректный код возврата @command{nncp-check} команды,
507 который возвращал ошибку когда всё хорошо.
510 Проверка свободного места для пакетов, во время выполнения
511 @command{nncp-bundle -rx}.
516 @subsection Релиз 5.1.2
520 Исправлена @strong{критичная} уязвимость: аутентификация online нод
521 могла приводить к некорректной идентификации удалённой стороны, позволяя
522 скачивать чужие зашифрованные пакеты.
525 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
526 публичный ключ Noise были поменяны местами, что приводило к
527 невозможности online аутентификации нод.
530 Явная синхронизация (fsync) директорий для гарантированного
531 переименования файлов.
536 @subsection Релиз 5.1.1
540 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
545 @subsection Релиз 5.1.0
549 @command{nncp-file} может отправлять директории, автоматически на лету
553 Во время создания исходящих сообщений проверяется наличие свободного
554 места на файловой системе.
557 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
558 конфигурационного файла заменены на структуру
559 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
562 Добавлена @option{freq.maxsize} опция конфигурационного файл,
563 запрещающая ответ на файловый запрос больше заданного размера.
566 Возможность оповещения об успешно выполненных командах (exec) через
567 @option{notify.exec} опцию конфигурационного файла.
572 @subsection Релиз 5.0.0
576 @strong{Несовместимое} изменение формата конфигурационного файла:
577 YAML заменён на Hjson, из-за его гораздо большей простоты, без
578 заметной потери функционала и удобства.
581 @strong{Несовместимое} изменение формата простых пакетов. Работа со
582 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
583 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
584 смотря на то, что версия библиотеки ещё не проверена временем.
587 Возможность соединяться с удалёнными нодами не только по TCP, но и через
588 pipe вызов сторонней команды.
591 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
592 комментариев. Можно использовать @option{-nocomments} опцию для старого
596 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
597 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
600 Возможность переопределить umask процесса через опцию конфигурационного
604 По умолчанию файлы и директории создаются с 666/777 правами доступа,
605 позволяя управлять ими @command{umask}-ом.
608 Обновлены зависимости.
611 Полное использование go модулей для управления зависимостями
612 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
615 Отмена автоматического использования более новых версий GNU GPL
616 (лицензия проекта GNU GPLv3-только).
621 @subsection Релиз 4.1
623 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
627 @subsection Релиз 4.0
631 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
632 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
633 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
634 отсылать дешифрованные данные внешней команде. Старые версии не
638 Проверка доступного места перед копированием во время работы
639 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
642 @command{nncp-call} имеет возможность только показывать список пакетов
643 на удалённой машине, без их передачи.
646 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
649 Восстановлена работоспособность @option{xxrate} настройки в
650 @option{calls} секции конфигурационного файла.
653 Зависимые библиотеки обновлены.
656 Небольшие исправления ошибок.
659 Начало использования @code{go.mod} подсистемы.
664 @subsection Релиз 3.4
666 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
670 @subsection Релиз 3.3
674 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
675 проверяют существование @file{.seen} файла и расценивают его как то, что
676 файл уже был скачан. Возможно передача данных была осуществлена
677 сторонним способом и удалённая сторона должна быть оповещена об этом.
680 Если более высокоприоритетный пакет попадает в спул, то
681 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
682 низкоприоритетные передачи.
685 К средствам связанным с online-соединениями (@command{nncp-daemon},
686 @command{nncp-call}, @command{nncp-caller}) добавлен простой
687 ограничитель скорости.
690 Возможность задания приоритета символьными обозначениями:
691 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
694 Изменены значения приоритетов по-умолчанию:
695 для @command{nncp-exec} с 64 на 96,
696 для @command{nncp-freq} с 64 на 160,
697 для @command{nncp-file} с 196 на 224.
702 @subsection Релиз 3.2
705 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
706 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
707 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
708 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
709 Явное добавление @file{NNCP/} директории в архив восстанавливает
710 работоспособность с корректными tar архивами.
714 @subsection Релиз 3.1
717 Возможность отключать пересылку через промежуточные ноды используя
718 @verb{|-via -|} опцию командной строки.
722 @subsection Релиз 3.0
726 @strong{Несовместимое} изменение формата простых пакетов. Работа со
727 старыми версиями не поддерживается.
730 Добавлена возможность удалённого исполнения команд, путём
731 конфигурирования @option{exec} опции конфигурационного файла и
732 использования команды @command{nncp-exec}:
735 Команда @command{nncp-mail} заменена более гибкой и широкой
736 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
737 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
739 @option{sendmail} опция конфигурационного файла заменена на более гибкую
740 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
745 Возможность переопределить @option{via} опцию конфигурации для целевого
746 узла через @option{-via} опцию командной строки для следующих команд:
747 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
750 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
754 Exec команды вызываются с дополнительными переменными окружения
755 @env{NNCP_NICE} и @env{NNCP_SELF}.
758 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
759 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
760 аргументом @option{-replynice}.
763 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
764 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
765 @option{-noexec}, @option{-notrns}.
768 По-умолчанию @command{nncp-file} команда для
769 @option{-minsize}/@option{-chunked} опций использует
770 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
771 Это можно отключить указав нулевое значение.
776 @subsection Релиз 2.0
780 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
781 Работа со старыми версиями не поддерживается.
784 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
785 Одним криптографическим примитивом меньше.
788 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
789 криптографическим примитивом меньше (предполагая, что BLAKE2X
790 практически идентичен BLAKE2).
795 @subsection Релиз 1.0
799 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
800 со старыми версиями не поддерживается.
803 @command{nncp-bundle} команда может создавать потоки зашифрованных
804 пакетов или потреблять их. Это полезно когда речь идёт о
805 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
806 без создания промежуточного подготовленного ISO образа или работа с
807 ленточными накопителями).
810 @command{nncp-toss} команда может создавать @file{.seen} файлы,
811 предотвращая приём дублированных пакетов.
814 В команде @command{nncp-call} разрешается иметь только одного
815 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
816 входящих пакетов могут создать много горутин.
819 Возможность переопределить путь до spool директории и файла журнала
820 через аргумент командной строки или переменную окружения.
823 @command{nncp-rm} команда может удалять все исходящие/входящие,
824 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
829 @subsection Релиз 0.12
831 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
835 @subsection Релиз 0.11
837 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
841 @subsection Релиз 0.10
844 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
845 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
849 @subsection Релиз 0.9
852 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
853 команды. Они игнорировались.
857 @subsection Релиз 0.8
860 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
861 @option{-minsize} для передачи без разбиения на части была в байтах, а
866 @subsection Релиз 0.7
870 Возможность предоставлять данные для @command{nncp-file} через
871 стандартный ввод, используя временный зашифрованный файл для этого.
874 Появилась возможность передачи файлов разбитых на части, с сопутствующей
875 @command{nncp-reass} командой и @option{freqchunked} опцией
876 конфигурационного файла. Полезно для передачи больших файлов через
877 маленькие устройства хранения.
880 @option{freqminsize} опция конфигурационного файла, аналогичная
884 Опция @option{-force} команды @command{nncp-xfer} переименована в
885 @option{-mkdir} для ясности.
888 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
891 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
892 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
893 имели общий префикс и были сгруппированы для удобства.
896 Появилась команда @command{nncp-cfgenc}, позволяющая
897 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
898 без использования OpenPGP или других подобных инструментов.
901 Обновлены зависимые криптографические библиотеки.
906 @subsection Релиз 0.6
908 @item Появилась небольшая команда @command{nncp-rm}.
909 @item Обновлены зависимые криптографические библиотеки.
913 @subsection Релиз 0.5
916 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
917 @command{nncp-file} и @command{nncp-freq} командах.
921 @subsection Релиз 0.4
925 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
926 @command{nncp-daemon}: иногда они могли падать с segmentation fault
927 ошибкой (данные не терялись).
930 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
931 это короче и удобнее для использования.
934 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
935 позволяющая создать минималистичный урезанный конфигурационный файл без
936 приватных ключей, что полезно во время использования @command{nncp-xfer}.
941 @subsection Релиз 0.3
943 @item Исправлена совместимость с Go 1.6.
947 @subsection Релиз 0.2
951 @strong{Несовместимое} изменение формата пакета (магическое число тоже
952 изменено): поле размера пакета шифруется и не посылается в открытом виде.
955 @option{-minsize} опция даёт возможность автоматически дополнять
956 исходящие пакеты до указанного минимального размера.
959 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
960 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
961 Удалённая сторона сразу же оповещается об этом.
964 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
965 неактивность в online соединении, когда оно должно быть отключено. Она
966 может быть использована для сохранения соединения на долгое время.
969 @option{-maxonlinetime} опция даёт возможность указания максимального
970 возможного времени жизни соединения.
973 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
977 @command{nncp-pkt} команда может разжимать данные.