5 @subsection Релиз 7.4.0
9 Исправлена работоспособность MCD при одновременном использовании
10 @command{nncp-daemon} и @command{nncp-caller}.
15 @subsection Релиз 7.3.2
19 @command{hjson-cli} утилита теперь собирается в vendor-режиме.
24 @subsection Релиз 7.3.1
28 Исправлена проблема с возможно остающимся открытым файловым
29 дескриптором в online командах.
32 Существенно снижено потребление памяти MTH хэширования.
37 @subsection Релиз 7.3.0
41 Поправлены проблемы работоспособности на 32-бит системах с большими файлами.
44 Возможность использовать конфигурацию в виде директории с набором
45 файлов. Появилась команда @command{nncp-cfgdir}.
50 @subsection Релиз 7.2.1
54 Небольшие оптимизации в online командах.
59 @subsection Релиз 7.2.0
63 Появилась @command{nncp-trns} команда для ручного создания транзитных пакетов.
66 Если у целевой ноды транзитного пакета задан @option{via} маршрут, то
67 использовать его, а не игнорировать.
70 Не отправлять multicast пакет оригинатору сообщения, очевидно точно
71 видящего свой собственный пакет.
74 Намного меньшее потребление памяти во время MTH хэширования когда
75 смещение равно нулю: когда пакет не является докачиванием, а например
76 проверяется @command{nncp-check} командой.
81 @subsection Релиз 7.1.1
85 Исправлено падение при fsync директорий после создания @file{.seen} файлов.
90 @subsection Релиз 7.1.0
94 Появилась возможность мультивещательной (multicast) рассылки пакетов.
95 Реализовано всего лишь дополнительным типом простых пакетов и изменением
96 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
99 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
100 команд использующих временный файл (stdin и @option{-use-tmp}).
103 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
106 Исправлено некорректное генерирование @file{.hdr} при использовании
110 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
114 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
115 проверку в бесконечный цикл.
118 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
121 @command{nncp-pkt} может парсить @file{.hdr} файлы.
126 @subsection Релиз 7.0.0
130 Минимальная требуемая версия Go 1.13.
133 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
134 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
135 изменение формата шифрованных файлов (всего что находится в spool
136 области) и формата @file{.meta} файла при chunked передаче.
138 Текущая реализация далека от оптимальной: в ней нет распараллеливания
139 вычислений и имеет повышенное потребление памяти: около 512 KiB на
140 каждый 1 GiB данных файла. Будущая оптимизация производительности и
141 потребления памяти не должна привести к изменению формата пакетов. Но
142 это всё равно в несколько раз быстрее BLAKE2b.
145 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
146 чтения с диска только предшествующей части, а не полностью всего файла,
150 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
153 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
154 уменьшая количество примитивов. А также заголовок шифрованного файла
155 теперь является ассоциированными данными при шифровании.
158 MultiCast Discovery использует
159 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
162 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
165 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
168 Обновлены зависимые библиотеки.
173 @subsection Релиз 6.6.0
177 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
178 ожидают завершения всех процессов фоновой проверки контрольных сумм,
179 после того как соединение закрыто.
182 Добавлена возможность определения адреса через multicast оповещение в
183 локальной сети, так называемый MCD (MultiCast Discovery).
188 @subsection Релиз 6.5.0
192 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
195 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
198 Исправлена гонка при закрытии файловых дескрипторов во время завершения
199 работы online протокола, которая могла привести к ошибке записи
200 принятого фрагмента пакета.
203 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
204 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
209 @subsection Релиз 6.4.0
213 Исправлена возможная гонка в online протоколе, приводящая к падению
219 @subsection Релиз 6.3.0
223 Исправлено возможное падение программы во время показа прогресса online
229 @subsection Релиз 6.2.1
233 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
238 @subsection Релиз 6.2.0
242 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
245 Очередной рефакторинг и упрощение системы журналирования.
246 Не должно быть видимых изменений для конечного пользователя.
251 @subsection Релиз 6.1.0
255 Оптимизация: большинство команд теперь не держат открытыми файловые
256 дескрипторы. Прежде вы легко могли выйти за пределы максимально
257 допустимого количества открытых файлов, если у вас было много пакетов в
261 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
262 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
265 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
266 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
267 online демоны не выполнят проверку целостности.
270 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
271 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
274 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
275 файлах, рядом с самими пакетами. Это может существенно повысить скорость
276 получения списка пакетов на файловых системах с большим размером блока.
281 @subsection Релиз 6.0.0
285 Журнал использует человеко-читаемый и легко обрабатываемый машиной
286 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
287 записей, вместо структурированных строчек RFC 3339. Старый формат
288 журналов не поддерживается @command{nncp-log}.
291 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
292 @command{nncp-daemon}.
295 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
296 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
297 выражением содержащим секунды, это можно использовать как возможность
298 вызова только при появлении исходящих пакетов.
301 @command{nncp-cronexpr} команда позволяет проверить корректность и
302 ожидаемый результат от указанного cron выражения.
307 @subsection Релиз 5.6.0
311 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
312 во время него ежесекундно.
315 В @option{calls} секции конфигурации появились опции
316 @option{autotoss}, @option{autotoss-doseen},
317 @option{autotoss-nofile}, @option{autotoss-nofreq},
318 @option{autotoss-noexec}, @option{autotoss-notrns}.
319 Вы можете настраивать опции автоматического tosser для каждого вызова.
322 Использовать vendoring вместо переопределения @env{GOPATH} во время
323 установки tarball, так как текущая минимальная версия Go это 1.12,
324 поддерживающая модули.
329 @subsection Релиз 5.5.1
333 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
334 в @file{config} во время установки.
339 @subsection Релиз 5.5.0
343 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
344 @command{nncp-bundle}, @command{nncp-stat} командах.
347 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
350 У команды @command{nncp-exec} появились @option{-use-tmp} и
351 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
355 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
356 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
359 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
364 @subsection Релиз 5.4.1
368 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
373 @subsection Релиз 5.4.0
377 Обновлены зависимые библиотеки.
380 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
381 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
382 реализация @command{redo} включена в tarball.
387 @subsection Релиз 5.3.3
391 Больше различных проверок в коде на ошибки.
394 Обновлены зависимые библиотеки.
399 @subsection Релиз 5.3.2
403 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
404 котором соединение могло не учитывать факты прихода пакетов и обрывать
410 @subsection Релиз 5.3.1
414 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
415 использующими внешние команды (@verb{#"|somecmd"#}).
418 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
419 каждому пакету в spool.
424 @subsection Релиз 5.3.0
428 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
431 Исправлено не происходящее дополнение (padding) handshake сообщений.
434 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
437 SP протокол порождает меньше вызовов записей (соответственно, и TCP
441 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
442 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
445 Раз в минуту, если нет более никакого другого трафика, посылаются PING
446 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
447 более не работоспособно.
450 @command{nncp-toss} использует lock-file для предотвращения
451 одновременной обработки зашифрованных пакетов.
456 @subsection Релиз 5.2.1
460 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
465 @subsection Релиз 5.2.0
469 Большинство команд по умолчанию показывают однострочный прогресс
470 выполнения операции. Появились @option{-progress}, @option{-noprogress}
471 опции командной строки, @option{noprogress} опция конфигурационного
475 Исправлен некорректный код возврата @command{nncp-check} команды,
476 который возвращал ошибку когда всё хорошо.
479 Проверка свободного места для пакетов, во время выполнения
480 @command{nncp-bundle -rx}.
485 @subsection Релиз 5.1.2
489 Исправлена @strong{критичная} уязвимость: аутентификация online нод
490 могла приводить к некорректной идентификации удалённой стороны, позволяя
491 скачивать чужие зашифрованные пакеты.
494 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
495 публичный ключ Noise были поменяны местами, что приводило к
496 невозможности online аутентификации нод.
499 Явная синхронизация (fsync) директорий для гарантированного
500 переименования файлов.
505 @subsection Релиз 5.1.1
509 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
514 @subsection Релиз 5.1.0
518 @command{nncp-file} может отправлять директории, автоматически на лету
522 Во время создания исходящих сообщений проверяется наличие свободного
523 места на файловой системе.
526 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
527 конфигурационного файла заменены на структуру
528 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
531 Добавлена @option{freq.maxsize} опция конфигурационного файл,
532 запрещающая ответ на файловый запрос больше заданного размера.
535 Возможность оповещения об успешно выполненных командах (exec) через
536 @option{notify.exec} опцию конфигурационного файла.
541 @subsection Релиз 5.0.0
545 @strong{Несовместимое} изменение формата конфигурационного файла:
546 YAML заменён на Hjson, из-за его гораздо большей простоты, без
547 заметной потери функционала и удобства.
550 @strong{Несовместимое} изменение формата простых пакетов. Работа со
551 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
552 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
553 смотря на то, что версия библиотеки ещё не проверена временем.
556 Возможность соединяться с удалёнными нодами не только по TCP, но и через
557 pipe вызов сторонней команды.
560 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
561 комментариев. Можно использовать @option{-nocomments} опцию для старого
565 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
566 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
569 Возможность переопределить umask процесса через опцию конфигурационного
573 По умолчанию файлы и директории создаются с 666/777 правами доступа,
574 позволяя управлять ими @command{umask}-ом.
577 Обновлены зависимости.
580 Полное использование go модулей для управления зависимостями
581 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
584 Отмена автоматического использования более новых версий GNU GPL
585 (лицензия проекта GNU GPLv3-только).
590 @subsection Релиз 4.1
592 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
596 @subsection Релиз 4.0
600 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
601 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
602 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
603 отсылать дешифрованные данные внешней команде. Старые версии не
607 Проверка доступного места перед копированием во время работы
608 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
611 @command{nncp-call} имеет возможность только показывать список пакетов
612 на удалённой машине, без их передачи.
615 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
618 Восстановлена работоспособность @option{xxrate} настройки в
619 @option{calls} секции конфигурационного файла.
622 Зависимые библиотеки обновлены.
625 Небольшие исправления ошибок.
628 Начало использования @code{go.mod} подсистемы.
633 @subsection Релиз 3.4
635 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
639 @subsection Релиз 3.3
643 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
644 проверяют существование @file{.seen} файла и расценивают его как то, что
645 файл уже был скачан. Возможно передача данных была осуществлена
646 сторонним способом и удалённая сторона должна быть оповещена об этом.
649 Если более высокоприоритетный пакет попадает в спул, то
650 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
651 низкоприоритетные передачи.
654 К средствам связанным с online-соединениями (@command{nncp-daemon},
655 @command{nncp-call}, @command{nncp-caller}) добавлен простой
656 ограничитель скорости.
659 Возможность задания приоритета символьными обозначениями:
660 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
663 Изменены значения приоритетов по-умолчанию:
664 для @command{nncp-exec} с 64 на 96,
665 для @command{nncp-freq} с 64 на 160,
666 для @command{nncp-file} с 196 на 224.
671 @subsection Релиз 3.2
674 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
675 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
676 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
677 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
678 Явное добавление @file{NNCP/} директории в архив восстанавливает
679 работоспособность с корректными tar архивами.
683 @subsection Релиз 3.1
686 Возможность отключать пересылку через промежуточные ноды используя
687 @verb{|-via -|} опцию командной строки.
691 @subsection Релиз 3.0
695 @strong{Несовместимое} изменение формата простых пакетов. Работа со
696 старыми версиями не поддерживается.
699 Добавлена возможность удалённого исполнения команд, путём
700 конфигурирования @option{exec} опции конфигурационного файла и
701 использования команды @command{nncp-exec}:
704 Команда @command{nncp-mail} заменена более гибкой и широкой
705 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
706 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
708 @option{sendmail} опция конфигурационного файла заменена на более гибкую
709 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
714 Возможность переопределить @option{via} опцию конфигурации для целевого
715 узла через @option{-via} опцию командной строки для следующих команд:
716 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
719 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
723 Exec команды вызываются с дополнительными переменными окружения
724 @env{NNCP_NICE} и @env{NNCP_SELF}.
727 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
728 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
729 аргументом @option{-replynice}.
732 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
733 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
734 @option{-noexec}, @option{-notrns}.
737 По-умолчанию @command{nncp-file} команда для
738 @option{-minsize}/@option{-chunked} опций использует
739 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
740 Это можно отключить указав нулевое значение.
745 @subsection Релиз 2.0
749 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
750 Работа со старыми версиями не поддерживается.
753 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
754 Одним криптографическим примитивом меньше.
757 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
758 криптографическим примитивом меньше (предполагая, что BLAKE2X
759 практически идентичен BLAKE2).
764 @subsection Релиз 1.0
768 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
769 со старыми версиями не поддерживается.
772 @command{nncp-bundle} команда может создавать потоки зашифрованных
773 пакетов или потреблять их. Это полезно когда речь идёт о
774 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
775 без создания промежуточного подготовленного ISO образа или работа с
776 ленточными накопителями).
779 @command{nncp-toss} команда может создавать @file{.seen} файлы,
780 предотвращая приём дублированных пакетов.
783 В команде @command{nncp-call} разрешается иметь только одного
784 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
785 входящих пакетов могут создать много горутин.
788 Возможность переопределить путь до spool директории и файла журнала
789 через аргумент командной строки или переменную окружения.
792 @command{nncp-rm} команда может удалять все исходящие/входящие,
793 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
798 @subsection Релиз 0.12
800 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
804 @subsection Релиз 0.11
806 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
810 @subsection Релиз 0.10
813 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
814 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
818 @subsection Релиз 0.9
821 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
822 команды. Они игнорировались.
826 @subsection Релиз 0.8
829 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
830 @option{-minsize} для передачи без разбиения на части была в байтах, а
835 @subsection Релиз 0.7
839 Возможность предоставлять данные для @command{nncp-file} через
840 стандартный ввод, используя временный зашифрованный файл для этого.
843 Появилась возможность передачи файлов разбитых на части, с сопутствующей
844 @command{nncp-reass} командой и @option{freqchunked} опцией
845 конфигурационного файла. Полезно для передачи больших файлов через
846 маленькие устройства хранения.
849 @option{freqminsize} опция конфигурационного файла, аналогичная
853 Опция @option{-force} команды @command{nncp-xfer} переименована в
854 @option{-mkdir} для ясности.
857 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
860 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
861 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
862 имели общий префикс и были сгруппированы для удобства.
865 Появилась команда @command{nncp-cfgenc}, позволяющая
866 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
867 без использования OpenPGP или других подобных инструментов.
870 Обновлены зависимые криптографические библиотеки.
875 @subsection Релиз 0.6
877 @item Появилась небольшая команда @command{nncp-rm}.
878 @item Обновлены зависимые криптографические библиотеки.
882 @subsection Релиз 0.5
885 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
886 @command{nncp-file} и @command{nncp-freq} командах.
890 @subsection Релиз 0.4
894 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
895 @command{nncp-daemon}: иногда они могли падать с segmentation fault
896 ошибкой (данные не терялись).
899 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
900 это короче и удобнее для использования.
903 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
904 позволяющая создать минималистичный урезанный конфигурационный файл без
905 приватных ключей, что полезно во время использования @command{nncp-xfer}.
910 @subsection Релиз 0.3
912 @item Исправлена совместимость с Go 1.6.
916 @subsection Релиз 0.2
920 @strong{Несовместимое} изменение формата пакета (магическое число тоже
921 изменено): поле размера пакета шифруется и не посылается в открытом виде.
924 @option{-minsize} опция даёт возможность автоматически дополнять
925 исходящие пакеты до указанного минимального размера.
928 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
929 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
930 Удалённая сторона сразу же оповещается об этом.
933 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
934 неактивность в online соединении, когда оно должно быть отключено. Она
935 может быть использована для сохранения соединения на долгое время.
938 @option{-maxonlinetime} опция даёт возможность указания максимального
939 возможного времени жизни соединения.
942 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
946 @command{nncp-pkt} команда может разжимать данные.