5 @subsection Релиз 7.3.2
9 @command{hjson-cli} утилита теперь собирается в vendor-режиме.
14 @subsection Релиз 7.3.1
18 Исправлена проблема с возможно остающимся открытым файловым
19 дескриптором в online командах.
22 Существенно снижено потребление памяти MTH хэширования.
27 @subsection Релиз 7.3.0
31 Поправлены проблемы работоспособности на 32-бит системах с большими файлами.
34 Возможность использовать конфигурацию в виде директории с набором
35 файлов. Появилась команда @command{nncp-cfgdir}.
40 @subsection Релиз 7.2.1
44 Небольшие оптимизации в online командах.
49 @subsection Релиз 7.2.0
53 Появилась @command{nncp-trns} команда для ручного создания транзитных пакетов.
56 Если у целевой ноды транзитного пакета задан @option{via} маршрут, то
57 использовать его, а не игнорировать.
60 Не отправлять multicast пакет оригинатору сообщения, очевидно точно
61 видящего свой собственный пакет.
64 Намного меньшее потребление памяти во время MTH хэширования когда
65 смещение равно нулю: когда пакет не является докачиванием, а например
66 проверяется @command{nncp-check} командой.
71 @subsection Релиз 7.1.1
75 Исправлено падение при fsync директорий после создания @file{.seen} файлов.
80 @subsection Релиз 7.1.0
84 Появилась возможность мультивещательной (multicast) рассылки пакетов.
85 Реализовано всего лишь дополнительным типом простых пакетов и изменением
86 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
89 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
90 команд использующих временный файл (stdin и @option{-use-tmp}).
93 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
96 Исправлено некорректное генерирование @file{.hdr} при использовании
100 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
104 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
105 проверку в бесконечный цикл.
108 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
111 @command{nncp-pkt} может парсить @file{.hdr} файлы.
116 @subsection Релиз 7.0.0
120 Минимальная требуемая версия Go 1.13.
123 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
124 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
125 изменение формата шифрованных файлов (всего что находится в spool
126 области) и формата @file{.meta} файла при chunked передаче.
128 Текущая реализация далека от оптимальной: в ней нет распараллеливания
129 вычислений и имеет повышенное потребление памяти: около 512 KiB на
130 каждый 1 GiB данных файла. Будущая оптимизация производительности и
131 потребления памяти не должна привести к изменению формата пакетов. Но
132 это всё равно в несколько раз быстрее BLAKE2b.
135 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
136 чтения с диска только предшествующей части, а не полностью всего файла,
140 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
143 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
144 уменьшая количество примитивов. А также заголовок шифрованного файла
145 теперь является ассоциированными данными при шифровании.
148 MultiCast Discovery использует
149 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
152 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
155 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
158 Обновлены зависимые библиотеки.
163 @subsection Релиз 6.6.0
167 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
168 ожидают завершения всех процессов фоновой проверки контрольных сумм,
169 после того как соединение закрыто.
172 Добавлена возможность определения адреса через multicast оповещение в
173 локальной сети, так называемый MCD (MultiCast Discovery).
178 @subsection Релиз 6.5.0
182 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
185 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
188 Исправлена гонка при закрытии файловых дескрипторов во время завершения
189 работы online протокола, которая могла привести к ошибке записи
190 принятого фрагмента пакета.
193 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
194 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
199 @subsection Релиз 6.4.0
203 Исправлена возможная гонка в online протоколе, приводящая к падению
209 @subsection Релиз 6.3.0
213 Исправлено возможное падение программы во время показа прогресса online
219 @subsection Релиз 6.2.1
223 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
228 @subsection Релиз 6.2.0
232 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
235 Очередной рефакторинг и упрощение системы журналирования.
236 Не должно быть видимых изменений для конечного пользователя.
241 @subsection Релиз 6.1.0
245 Оптимизация: большинство команд теперь не держат открытыми файловые
246 дескрипторы. Прежде вы легко могли выйти за пределы максимально
247 допустимого количества открытых файлов, если у вас было много пакетов в
251 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
252 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
255 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
256 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
257 online демоны не выполнят проверку целостности.
260 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
261 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
264 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
265 файлах, рядом с самими пакетами. Это может существенно повысить скорость
266 получения списка пакетов на файловых системах с большим размером блока.
271 @subsection Релиз 6.0.0
275 Журнал использует человеко-читаемый и легко обрабатываемый машиной
276 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
277 записей, вместо структурированных строчек RFC 3339. Старый формат
278 журналов не поддерживается @command{nncp-log}.
281 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
282 @command{nncp-daemon}.
285 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
286 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
287 выражением содержащим секунды, это можно использовать как возможность
288 вызова только при появлении исходящих пакетов.
291 @command{nncp-cronexpr} команда позволяет проверить корректность и
292 ожидаемый результат от указанного cron выражения.
297 @subsection Релиз 5.6.0
301 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
302 во время него ежесекундно.
305 В @option{calls} секции конфигурации появились опции
306 @option{autotoss}, @option{autotoss-doseen},
307 @option{autotoss-nofile}, @option{autotoss-nofreq},
308 @option{autotoss-noexec}, @option{autotoss-notrns}.
309 Вы можете настраивать опции автоматического tosser для каждого вызова.
312 Использовать vendoring вместо переопределения @env{GOPATH} во время
313 установки tarball, так как текущая минимальная версия Go это 1.12,
314 поддерживающая модули.
319 @subsection Релиз 5.5.1
323 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
324 в @file{config} во время установки.
329 @subsection Релиз 5.5.0
333 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
334 @command{nncp-bundle}, @command{nncp-stat} командах.
337 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
340 У команды @command{nncp-exec} появились @option{-use-tmp} и
341 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
345 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
346 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
349 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
354 @subsection Релиз 5.4.1
358 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
363 @subsection Релиз 5.4.0
367 Обновлены зависимые библиотеки.
370 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
371 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
372 реализация @command{redo} включена в tarball.
377 @subsection Релиз 5.3.3
381 Больше различных проверок в коде на ошибки.
384 Обновлены зависимые библиотеки.
389 @subsection Релиз 5.3.2
393 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
394 котором соединение могло не учитывать факты прихода пакетов и обрывать
400 @subsection Релиз 5.3.1
404 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
405 использующими внешние команды (@verb{#"|somecmd"#}).
408 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
409 каждому пакету в spool.
414 @subsection Релиз 5.3.0
418 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
421 Исправлено не происходящее дополнение (padding) handshake сообщений.
424 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
427 SP протокол порождает меньше вызовов записей (соответственно, и TCP
431 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
432 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
435 Раз в минуту, если нет более никакого другого трафика, посылаются PING
436 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
437 более не работоспособно.
440 @command{nncp-toss} использует lock-file для предотвращения
441 одновременной обработки зашифрованных пакетов.
446 @subsection Релиз 5.2.1
450 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
455 @subsection Релиз 5.2.0
459 Большинство команд по умолчанию показывают однострочный прогресс
460 выполнения операции. Появились @option{-progress}, @option{-noprogress}
461 опции командной строки, @option{noprogress} опция конфигурационного
465 Исправлен некорректный код возврата @command{nncp-check} команды,
466 который возвращал ошибку когда всё хорошо.
469 Проверка свободного места для пакетов, во время выполнения
470 @command{nncp-bundle -rx}.
475 @subsection Релиз 5.1.2
479 Исправлена @strong{критичная} уязвимость: аутентификация online нод
480 могла приводить к некорректной идентификации удалённой стороны, позволяя
481 скачивать чужие зашифрованные пакеты.
484 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
485 публичный ключ Noise были поменяны местами, что приводило к
486 невозможности online аутентификации нод.
489 Явная синхронизация (fsync) директорий для гарантированного
490 переименования файлов.
495 @subsection Релиз 5.1.1
499 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
504 @subsection Релиз 5.1.0
508 @command{nncp-file} может отправлять директории, автоматически на лету
512 Во время создания исходящих сообщений проверяется наличие свободного
513 места на файловой системе.
516 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
517 конфигурационного файла заменены на структуру
518 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
521 Добавлена @option{freq.maxsize} опция конфигурационного файл,
522 запрещающая ответ на файловый запрос больше заданного размера.
525 Возможность оповещения об успешно выполненных командах (exec) через
526 @option{notify.exec} опцию конфигурационного файла.
531 @subsection Релиз 5.0.0
535 @strong{Несовместимое} изменение формата конфигурационного файла:
536 YAML заменён на Hjson, из-за его гораздо большей простоты, без
537 заметной потери функционала и удобства.
540 @strong{Несовместимое} изменение формата простых пакетов. Работа со
541 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
542 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
543 смотря на то, что версия библиотеки ещё не проверена временем.
546 Возможность соединяться с удалёнными нодами не только по TCP, но и через
547 pipe вызов сторонней команды.
550 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
551 комментариев. Можно использовать @option{-nocomments} опцию для старого
555 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
556 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
559 Возможность переопределить umask процесса через опцию конфигурационного
563 По умолчанию файлы и директории создаются с 666/777 правами доступа,
564 позволяя управлять ими @command{umask}-ом.
567 Обновлены зависимости.
570 Полное использование go модулей для управления зависимостями
571 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
574 Отмена автоматического использования более новых версий GNU GPL
575 (лицензия проекта GNU GPLv3-только).
580 @subsection Релиз 4.1
582 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
586 @subsection Релиз 4.0
590 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
591 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
592 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
593 отсылать дешифрованные данные внешней команде. Старые версии не
597 Проверка доступного места перед копированием во время работы
598 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
601 @command{nncp-call} имеет возможность только показывать список пакетов
602 на удалённой машине, без их передачи.
605 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
608 Восстановлена работоспособность @option{xxrate} настройки в
609 @option{calls} секции конфигурационного файла.
612 Зависимые библиотеки обновлены.
615 Небольшие исправления ошибок.
618 Начало использования @code{go.mod} подсистемы.
623 @subsection Релиз 3.4
625 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
629 @subsection Релиз 3.3
633 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
634 проверяют существование @file{.seen} файла и расценивают его как то, что
635 файл уже был скачан. Возможно передача данных была осуществлена
636 сторонним способом и удалённая сторона должна быть оповещена об этом.
639 Если более высокоприоритетный пакет попадает в спул, то
640 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
641 низкоприоритетные передачи.
644 К средствам связанным с online-соединениями (@command{nncp-daemon},
645 @command{nncp-call}, @command{nncp-caller}) добавлен простой
646 ограничитель скорости.
649 Возможность задания приоритета символьными обозначениями:
650 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
653 Изменены значения приоритетов по-умолчанию:
654 для @command{nncp-exec} с 64 на 96,
655 для @command{nncp-freq} с 64 на 160,
656 для @command{nncp-file} с 196 на 224.
661 @subsection Релиз 3.2
664 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
665 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
666 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
667 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
668 Явное добавление @file{NNCP/} директории в архив восстанавливает
669 работоспособность с корректными tar архивами.
673 @subsection Релиз 3.1
676 Возможность отключать пересылку через промежуточные ноды используя
677 @verb{|-via -|} опцию командной строки.
681 @subsection Релиз 3.0
685 @strong{Несовместимое} изменение формата простых пакетов. Работа со
686 старыми версиями не поддерживается.
689 Добавлена возможность удалённого исполнения команд, путём
690 конфигурирования @option{exec} опции конфигурационного файла и
691 использования команды @command{nncp-exec}:
694 Команда @command{nncp-mail} заменена более гибкой и широкой
695 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
696 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
698 @option{sendmail} опция конфигурационного файла заменена на более гибкую
699 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
704 Возможность переопределить @option{via} опцию конфигурации для целевого
705 узла через @option{-via} опцию командной строки для следующих команд:
706 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
709 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
713 Exec команды вызываются с дополнительными переменными окружения
714 @env{NNCP_NICE} и @env{NNCP_SELF}.
717 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
718 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
719 аргументом @option{-replynice}.
722 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
723 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
724 @option{-noexec}, @option{-notrns}.
727 По-умолчанию @command{nncp-file} команда для
728 @option{-minsize}/@option{-chunked} опций использует
729 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
730 Это можно отключить указав нулевое значение.
735 @subsection Релиз 2.0
739 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
740 Работа со старыми версиями не поддерживается.
743 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
744 Одним криптографическим примитивом меньше.
747 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
748 криптографическим примитивом меньше (предполагая, что BLAKE2X
749 практически идентичен BLAKE2).
754 @subsection Релиз 1.0
758 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
759 со старыми версиями не поддерживается.
762 @command{nncp-bundle} команда может создавать потоки зашифрованных
763 пакетов или потреблять их. Это полезно когда речь идёт о
764 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
765 без создания промежуточного подготовленного ISO образа или работа с
766 ленточными накопителями).
769 @command{nncp-toss} команда может создавать @file{.seen} файлы,
770 предотвращая приём дублированных пакетов.
773 В команде @command{nncp-call} разрешается иметь только одного
774 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
775 входящих пакетов могут создать много горутин.
778 Возможность переопределить путь до spool директории и файла журнала
779 через аргумент командной строки или переменную окружения.
782 @command{nncp-rm} команда может удалять все исходящие/входящие,
783 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
788 @subsection Релиз 0.12
790 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
794 @subsection Релиз 0.11
796 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
800 @subsection Релиз 0.10
803 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
804 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
808 @subsection Релиз 0.9
811 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
812 команды. Они игнорировались.
816 @subsection Релиз 0.8
819 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
820 @option{-minsize} для передачи без разбиения на части была в байтах, а
825 @subsection Релиз 0.7
829 Возможность предоставлять данные для @command{nncp-file} через
830 стандартный ввод, используя временный зашифрованный файл для этого.
833 Появилась возможность передачи файлов разбитых на части, с сопутствующей
834 @command{nncp-reass} командой и @option{freqchunked} опцией
835 конфигурационного файла. Полезно для передачи больших файлов через
836 маленькие устройства хранения.
839 @option{freqminsize} опция конфигурационного файла, аналогичная
843 Опция @option{-force} команды @command{nncp-xfer} переименована в
844 @option{-mkdir} для ясности.
847 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
850 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
851 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
852 имели общий префикс и были сгруппированы для удобства.
855 Появилась команда @command{nncp-cfgenc}, позволяющая
856 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
857 без использования OpenPGP или других подобных инструментов.
860 Обновлены зависимые криптографические библиотеки.
865 @subsection Релиз 0.6
867 @item Появилась небольшая команда @command{nncp-rm}.
868 @item Обновлены зависимые криптографические библиотеки.
872 @subsection Релиз 0.5
875 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
876 @command{nncp-file} и @command{nncp-freq} командах.
880 @subsection Релиз 0.4
884 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
885 @command{nncp-daemon}: иногда они могли падать с segmentation fault
886 ошибкой (данные не терялись).
889 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
890 это короче и удобнее для использования.
893 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
894 позволяющая создать минималистичный урезанный конфигурационный файл без
895 приватных ключей, что полезно во время использования @command{nncp-xfer}.
900 @subsection Релиз 0.3
902 @item Исправлена совместимость с Go 1.6.
906 @subsection Релиз 0.2
910 @strong{Несовместимое} изменение формата пакета (магическое число тоже
911 изменено): поле размера пакета шифруется и не посылается в открытом виде.
914 @option{-minsize} опция даёт возможность автоматически дополнять
915 исходящие пакеты до указанного минимального размера.
918 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
919 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
920 Удалённая сторона сразу же оповещается об этом.
923 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
924 неактивность в online соединении, когда оно должно быть отключено. Она
925 может быть использована для сохранения соединения на долгое время.
928 @option{-maxonlinetime} опция даёт возможность указания максимального
929 возможного времени жизни соединения.
932 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
936 @command{nncp-pkt} команда может разжимать данные.