55 @subsection Релиз 7.2.0
59 Появилась @command{nncp-trns} команда для ручного создания транзитных пакетов.
62 Если у целевой ноды транзитного пакета задан @option{via} маршрут, то
63 использовать его, а не игнорировать.
66 Не отправлять multicast пакет оригинатору сообщения, очевидно точно
67 видящего свой собственный пакет.
70 Намного меньшее потребление памяти во время MTH хэширования когда
71 смещение равно нулю: когда пакет не является докачиванием, а например
72 проверяется @command{nncp-check} командой.
77 @subsection Релиз 7.1.1
81 Исправлено падение при fsync директорий после создания @file{.seen} файлов.
86 @subsection Релиз 7.1.0
90 Появилась возможность мультивещательной (multicast) рассылки пакетов.
91 Реализовано всего лишь дополнительным типом простых пакетов и изменением
92 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
95 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
96 команд использующих временный файл (stdin и @option{-use-tmp}).
99 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
102 Исправлено некорректное генерирование @file{.hdr} при использовании
106 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
110 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
111 проверку в бесконечный цикл.
114 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
117 @command{nncp-pkt} может парсить @file{.hdr} файлы.
122 @subsection Релиз 7.0.0
126 Минимальная требуемая версия Go 1.13.
129 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
130 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
131 изменение формата шифрованных файлов (всего что находится в spool
132 области) и формата @file{.meta} файла при chunked передаче.
134 Текущая реализация далека от оптимальной: в ней нет распараллеливания
135 вычислений и имеет повышенное потребление памяти: около 512 KiB на
136 каждый 1 GiB данных файла. Будущая оптимизация производительности и
137 потребления памяти не должна привести к изменению формата пакетов. Но
138 это всё равно в несколько раз быстрее BLAKE2b.
141 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
142 чтения с диска только предшествующей части, а не полностью всего файла,
146 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
149 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
150 уменьшая количество примитивов. А также заголовок шифрованного файла
151 теперь является ассоциированными данными при шифровании.
154 MultiCast Discovery использует
155 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
158 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
161 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
164 Обновлены зависимые библиотеки.
169 @subsection Релиз 6.6.0
173 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
174 ожидают завершения всех процессов фоновой проверки контрольных сумм,
175 после того как соединение закрыто.
178 Добавлена возможность определения адреса через multicast оповещение в
179 локальной сети, так называемый MCD (MultiCast Discovery).
184 @subsection Релиз 6.5.0
188 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
191 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
194 Исправлена гонка при закрытии файловых дескрипторов во время завершения
195 работы online протокола, которая могла привести к ошибке записи
196 принятого фрагмента пакета.
199 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
200 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
205 @subsection Релиз 6.4.0
209 Исправлена возможная гонка в online протоколе, приводящая к падению
215 @subsection Релиз 6.3.0
219 Исправлено возможное падение программы во время показа прогресса online
225 @subsection Релиз 6.2.1
229 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
234 @subsection Релиз 6.2.0
238 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
241 Очередной рефакторинг и упрощение системы журналирования.
242 Не должно быть видимых изменений для конечного пользователя.
247 @subsection Релиз 6.1.0
251 Оптимизация: большинство команд теперь не держат открытыми файловые
252 дескрипторы. Прежде вы легко могли выйти за пределы максимально
253 допустимого количества открытых файлов, если у вас было много пакетов в
257 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
258 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
261 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
262 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
263 online демоны не выполнят проверку целостности.
266 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
267 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
270 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
271 файлах, рядом с самими пакетами. Это может существенно повысить скорость
272 получения списка пакетов на файловых системах с большим размером блока.
277 @subsection Релиз 6.0.0
281 Журнал использует человеко-читаемый и легко обрабатываемый машиной
282 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
283 записей, вместо структурированных строчек RFC 3339. Старый формат
284 журналов не поддерживается @command{nncp-log}.
287 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
288 @command{nncp-daemon}.
291 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
292 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
293 выражением содержащим секунды, это можно использовать как возможность
294 вызова только при появлении исходящих пакетов.
297 @command{nncp-cronexpr} команда позволяет проверить корректность и
298 ожидаемый результат от указанного cron выражения.
303 @subsection Релиз 5.6.0
307 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
308 во время него ежесекундно.
311 В @option{calls} секции конфигурации появились опции
312 @option{autotoss}, @option{autotoss-doseen},
313 @option{autotoss-nofile}, @option{autotoss-nofreq},
314 @option{autotoss-noexec}, @option{autotoss-notrns}.
315 Вы можете настраивать опции автоматического tosser для каждого вызова.
318 Использовать vendoring вместо переопределения @env{GOPATH} во время
319 установки tarball, так как текущая минимальная версия Go это 1.12,
320 поддерживающая модули.
325 @subsection Релиз 5.5.1
329 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
330 в @file{config} во время установки.
335 @subsection Релиз 5.5.0
339 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
340 @command{nncp-bundle}, @command{nncp-stat} командах.
343 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
346 У команды @command{nncp-exec} появились @option{-use-tmp} и
347 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
351 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
352 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
355 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
360 @subsection Релиз 5.4.1
364 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
369 @subsection Релиз 5.4.0
373 Обновлены зависимые библиотеки.
376 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
377 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
378 реализация @command{redo} включена в tarball.
383 @subsection Релиз 5.3.3
387 Больше различных проверок в коде на ошибки.
390 Обновлены зависимые библиотеки.
395 @subsection Релиз 5.3.2
399 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
400 котором соединение могло не учитывать факты прихода пакетов и обрывать
406 @subsection Релиз 5.3.1
410 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
411 использующими внешние команды (@verb{#"|somecmd"#}).
414 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
415 каждому пакету в spool.
420 @subsection Релиз 5.3.0
424 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
427 Исправлено не происходящее дополнение (padding) handshake сообщений.
430 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
433 SP протокол порождает меньше вызовов записей (соответственно, и TCP
437 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
438 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
441 Раз в минуту, если нет более никакого другого трафика, посылаются PING
442 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
443 более не работоспособно.
446 @command{nncp-toss} использует lock-file для предотвращения
447 одновременной обработки зашифрованных пакетов.
452 @subsection Релиз 5.2.1
456 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
461 @subsection Релиз 5.2.0
465 Большинство команд по умолчанию показывают однострочный прогресс
466 выполнения операции. Появились @option{-progress}, @option{-noprogress}
467 опции командной строки, @option{noprogress} опция конфигурационного
471 Исправлен некорректный код возврата @command{nncp-check} команды,
472 который возвращал ошибку когда всё хорошо.
475 Проверка свободного места для пакетов, во время выполнения
476 @command{nncp-bundle -rx}.
481 @subsection Релиз 5.1.2
485 Исправлена @strong{критичная} уязвимость: аутентификация online нод
486 могла приводить к некорректной идентификации удалённой стороны, позволяя
487 скачивать чужие зашифрованные пакеты.
490 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
491 публичный ключ Noise были поменяны местами, что приводило к
492 невозможности online аутентификации нод.
495 Явная синхронизация (fsync) директорий для гарантированного
496 переименования файлов.
501 @subsection Релиз 5.1.1
505 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
510 @subsection Релиз 5.1.0
514 @command{nncp-file} может отправлять директории, автоматически на лету
518 Во время создания исходящих сообщений проверяется наличие свободного
519 места на файловой системе.
522 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
523 конфигурационного файла заменены на структуру
524 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
527 Добавлена @option{freq.maxsize} опция конфигурационного файл,
528 запрещающая ответ на файловый запрос больше заданного размера.
531 Возможность оповещения об успешно выполненных командах (exec) через
532 @option{notify.exec} опцию конфигурационного файла.
537 @subsection Релиз 5.0.0
541 @strong{Несовместимое} изменение формата конфигурационного файла:
542 YAML заменён на Hjson, из-за его гораздо большей простоты, без
543 заметной потери функционала и удобства.
546 @strong{Несовместимое} изменение формата простых пакетов. Работа со
547 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
548 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
549 смотря на то, что версия библиотеки ещё не проверена временем.
552 Возможность соединяться с удалёнными нодами не только по TCP, но и через
553 pipe вызов сторонней команды.
556 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
557 комментариев. Можно использовать @option{-nocomments} опцию для старого
561 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
562 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
565 Возможность переопределить umask процесса через опцию конфигурационного
569 По умолчанию файлы и директории создаются с 666/777 правами доступа,
570 позволяя управлять ими @command{umask}-ом.
573 Обновлены зависимости.
576 Полное использование go модулей для управления зависимостями
577 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
580 Отмена автоматического использования более новых версий GNU GPL
581 (лицензия проекта GNU GPLv3-только).
586 @subsection Релиз 4.1
588 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
592 @subsection Релиз 4.0
596 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
597 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
598 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
599 отсылать дешифрованные данные внешней команде. Старые версии не
603 Проверка доступного места перед копированием во время работы
604 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
607 @command{nncp-call} имеет возможность только показывать список пакетов
608 на удалённой машине, без их передачи.
611 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
614 Восстановлена работоспособность @option{xxrate} настройки в
615 @option{calls} секции конфигурационного файла.
618 Зависимые библиотеки обновлены.
621 Небольшие исправления ошибок.
624 Начало использования @code{go.mod} подсистемы.
629 @subsection Релиз 3.4
631 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
635 @subsection Релиз 3.3
639 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
640 проверяют существование @file{.seen} файла и расценивают его как то, что
641 файл уже был скачан. Возможно передача данных была осуществлена
642 сторонним способом и удалённая сторона должна быть оповещена об этом.
645 Если более высокоприоритетный пакет попадает в спул, то
646 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
647 низкоприоритетные передачи.
650 К средствам связанным с online-соединениями (@command{nncp-daemon},
651 @command{nncp-call}, @command{nncp-caller}) добавлен простой
652 ограничитель скорости.
655 Возможность задания приоритета символьными обозначениями:
656 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
659 Изменены значения приоритетов по-умолчанию:
660 для @command{nncp-exec} с 64 на 96,
661 для @command{nncp-freq} с 64 на 160,
662 для @command{nncp-file} с 196 на 224.
667 @subsection Релиз 3.2
670 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
671 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
672 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
673 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
674 Явное добавление @file{NNCP/} директории в архив восстанавливает
675 работоспособность с корректными tar архивами.
679 @subsection Релиз 3.1
682 Возможность отключать пересылку через промежуточные ноды используя
683 @verb{|-via -|} опцию командной строки.
687 @subsection Релиз 3.0
691 @strong{Несовместимое} изменение формата простых пакетов. Работа со
692 старыми версиями не поддерживается.
695 Добавлена возможность удалённого исполнения команд, путём
696 конфигурирования @option{exec} опции конфигурационного файла и
697 использования команды @command{nncp-exec}:
700 Команда @command{nncp-mail} заменена более гибкой и широкой
701 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
702 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
704 @option{sendmail} опция конфигурационного файла заменена на более гибкую
705 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
710 Возможность переопределить @option{via} опцию конфигурации для целевого
711 узла через @option{-via} опцию командной строки для следующих команд:
712 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
715 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
719 Exec команды вызываются с дополнительными переменными окружения
720 @env{NNCP_NICE} и @env{NNCP_SELF}.
723 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
724 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
725 аргументом @option{-replynice}.
728 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
729 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
730 @option{-noexec}, @option{-notrns}.
733 По-умолчанию @command{nncp-file} команда для
734 @option{-minsize}/@option{-chunked} опций использует
735 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
736 Это можно отключить указав нулевое значение.
741 @subsection Релиз 2.0
745 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
746 Работа со старыми версиями не поддерживается.
749 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
750 Одним криптографическим примитивом меньше.
753 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
754 криптографическим примитивом меньше (предполагая, что BLAKE2X
755 практически идентичен BLAKE2).
760 @subsection Релиз 1.0
764 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
765 со старыми версиями не поддерживается.
768 @command{nncp-bundle} команда может создавать потоки зашифрованных
769 пакетов или потреблять их. Это полезно когда речь идёт о
770 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
771 без создания промежуточного подготовленного ISO образа или работа с
772 ленточными накопителями).
775 @command{nncp-toss} команда может создавать @file{.seen} файлы,
776 предотвращая приём дублированных пакетов.
779 В команде @command{nncp-call} разрешается иметь только одного
780 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
781 входящих пакетов могут создать много горутин.
784 Возможность переопределить путь до spool директории и файла журнала
785 через аргумент командной строки или переменную окружения.
788 @command{nncp-rm} команда может удалять все исходящие/входящие,
789 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
794 @subsection Релиз 0.12
796 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
800 @subsection Релиз 0.11
802 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
806 @subsection Релиз 0.10
809 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
810 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
814 @subsection Релиз 0.9
817 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
818 команды. Они игнорировались.
822 @subsection Релиз 0.8
825 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
826 @option{-minsize} для передачи без разбиения на части была в байтах, а
831 @subsection Релиз 0.7
835 Возможность предоставлять данные для @command{nncp-file} через
836 стандартный ввод, используя временный зашифрованный файл для этого.
839 Появилась возможность передачи файлов разбитых на части, с сопутствующей
840 @command{nncp-reass} командой и @option{freqchunked} опцией
841 конфигурационного файла. Полезно для передачи больших файлов через
842 маленькие устройства хранения.
845 @option{freqminsize} опция конфигурационного файла, аналогичная
849 Опция @option{-force} команды @command{nncp-xfer} переименована в
850 @option{-mkdir} для ясности.
853 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
856 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
857 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
858 имели общий префикс и были сгруппированы для удобства.
861 Появилась команда @command{nncp-cfgenc}, позволяющая
862 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
863 без использования OpenPGP или других подобных инструментов.
866 Обновлены зависимые криптографические библиотеки.
871 @subsection Релиз 0.6
873 @item Появилась небольшая команда @command{nncp-rm}.
874 @item Обновлены зависимые криптографические библиотеки.
878 @subsection Релиз 0.5
881 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
882 @command{nncp-file} и @command{nncp-freq} командах.
886 @subsection Релиз 0.4
890 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
891 @command{nncp-daemon}: иногда они могли падать с segmentation fault
892 ошибкой (данные не терялись).
895 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
896 это короче и удобнее для использования.
899 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
900 позволяющая создать минималистичный урезанный конфигурационный файл без
901 приватных ключей, что полезно во время использования @command{nncp-xfer}.
906 @subsection Релиз 0.3
908 @item Исправлена совместимость с Go 1.6.
912 @subsection Релиз 0.2
916 @strong{Несовместимое} изменение формата пакета (магическое число тоже
917 изменено): поле размера пакета шифруется и не посылается в открытом виде.
920 @option{-minsize} опция даёт возможность автоматически дополнять
921 исходящие пакеты до указанного минимального размера.
924 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
925 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
926 Удалённая сторона сразу же оповещается об этом.
929 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
930 неактивность в online соединении, когда оно должно быть отключено. Она
931 может быть использована для сохранения соединения на долгое время.
934 @option{-maxonlinetime} опция даёт возможность указания максимального
935 возможного времени жизни соединения.
938 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
942 @command{nncp-pkt} команда может разжимать данные.