5 @subsection Релиз 7.5.0
9 @command{nncp-daemon} соблюдает UCSPI-TCP интерфейс, благодаря чему в
10 журнале будет присутствовать адрес удалённой системы (при запуске под
11 совместимой утилитой). Желательно применять @option{-ucspi} опцию вместо
15 @command{nncp-call} может быть UCSPI-TCP клиентом, используя
16 @option{-ucspi} опцию.
21 @subsection Релиз 7.4.0
25 Исправлена работоспособность MCD при одновременном использовании
26 @command{nncp-daemon} и @command{nncp-caller}.
31 @subsection Релиз 7.3.2
35 @command{hjson-cli} утилита теперь собирается в vendor-режиме.
40 @subsection Релиз 7.3.1
44 Исправлена проблема с возможно остающимся открытым файловым
45 дескриптором в online командах.
48 Существенно снижено потребление памяти MTH хэширования.
53 @subsection Релиз 7.3.0
57 Поправлены проблемы работоспособности на 32-бит системах с большими файлами.
60 Возможность использовать конфигурацию в виде директории с набором
61 файлов. Появилась команда @command{nncp-cfgdir}.
66 @subsection Релиз 7.2.1
70 Небольшие оптимизации в online командах.
75 @subsection Релиз 7.2.0
79 Появилась @command{nncp-trns} команда для ручного создания транзитных пакетов.
82 Если у целевой ноды транзитного пакета задан @option{via} маршрут, то
83 использовать его, а не игнорировать.
86 Не отправлять multicast пакет оригинатору сообщения, очевидно точно
87 видящего свой собственный пакет.
90 Намного меньшее потребление памяти во время MTH хэширования когда
91 смещение равно нулю: когда пакет не является докачиванием, а например
92 проверяется @command{nncp-check} командой.
97 @subsection Релиз 7.1.1
101 Исправлено падение при fsync директорий после создания @file{.seen} файлов.
106 @subsection Релиз 7.1.0
110 Появилась возможность мультивещательной (multicast) рассылки пакетов.
111 Реализовано всего лишь дополнительным типом простых пакетов и изменением
112 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
115 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
116 команд использующих временный файл (stdin и @option{-use-tmp}).
119 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
122 Исправлено некорректное генерирование @file{.hdr} при использовании
126 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
130 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
131 проверку в бесконечный цикл.
134 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
137 @command{nncp-pkt} может парсить @file{.hdr} файлы.
142 @subsection Релиз 7.0.0
146 Минимальная требуемая версия Go 1.13.
149 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
150 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
151 изменение формата шифрованных файлов (всего что находится в spool
152 области) и формата @file{.meta} файла при chunked передаче.
154 Текущая реализация далека от оптимальной: в ней нет распараллеливания
155 вычислений и имеет повышенное потребление памяти: около 512 KiB на
156 каждый 1 GiB данных файла. Будущая оптимизация производительности и
157 потребления памяти не должна привести к изменению формата пакетов. Но
158 это всё равно в несколько раз быстрее BLAKE2b.
161 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
162 чтения с диска только предшествующей части, а не полностью всего файла,
166 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
169 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
170 уменьшая количество примитивов. А также заголовок шифрованного файла
171 теперь является ассоциированными данными при шифровании.
174 MultiCast Discovery использует
175 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
178 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
181 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
184 Обновлены зависимые библиотеки.
189 @subsection Релиз 6.6.0
193 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
194 ожидают завершения всех процессов фоновой проверки контрольных сумм,
195 после того как соединение закрыто.
198 Добавлена возможность определения адреса через multicast оповещение в
199 локальной сети, так называемый MCD (MultiCast Discovery).
204 @subsection Релиз 6.5.0
208 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
211 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
214 Исправлена гонка при закрытии файловых дескрипторов во время завершения
215 работы online протокола, которая могла привести к ошибке записи
216 принятого фрагмента пакета.
219 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
220 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
225 @subsection Релиз 6.4.0
229 Исправлена возможная гонка в online протоколе, приводящая к падению
235 @subsection Релиз 6.3.0
239 Исправлено возможное падение программы во время показа прогресса online
245 @subsection Релиз 6.2.1
249 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
254 @subsection Релиз 6.2.0
258 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
261 Очередной рефакторинг и упрощение системы журналирования.
262 Не должно быть видимых изменений для конечного пользователя.
267 @subsection Релиз 6.1.0
271 Оптимизация: большинство команд теперь не держат открытыми файловые
272 дескрипторы. Прежде вы легко могли выйти за пределы максимально
273 допустимого количества открытых файлов, если у вас было много пакетов в
277 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
278 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
281 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
282 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
283 online демоны не выполнят проверку целостности.
286 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
287 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
290 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
291 файлах, рядом с самими пакетами. Это может существенно повысить скорость
292 получения списка пакетов на файловых системах с большим размером блока.
297 @subsection Релиз 6.0.0
301 Журнал использует человеко-читаемый и легко обрабатываемый машиной
302 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
303 записей, вместо структурированных строчек RFC 3339. Старый формат
304 журналов не поддерживается @command{nncp-log}.
307 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
308 @command{nncp-daemon}.
311 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
312 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
313 выражением содержащим секунды, это можно использовать как возможность
314 вызова только при появлении исходящих пакетов.
317 @command{nncp-cronexpr} команда позволяет проверить корректность и
318 ожидаемый результат от указанного cron выражения.
323 @subsection Релиз 5.6.0
327 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
328 во время него ежесекундно.
331 В @option{calls} секции конфигурации появились опции
332 @option{autotoss}, @option{autotoss-doseen},
333 @option{autotoss-nofile}, @option{autotoss-nofreq},
334 @option{autotoss-noexec}, @option{autotoss-notrns}.
335 Вы можете настраивать опции автоматического tosser для каждого вызова.
338 Использовать vendoring вместо переопределения @env{GOPATH} во время
339 установки tarball, так как текущая минимальная версия Go это 1.12,
340 поддерживающая модули.
345 @subsection Релиз 5.5.1
349 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
350 в @file{config} во время установки.
355 @subsection Релиз 5.5.0
359 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
360 @command{nncp-bundle}, @command{nncp-stat} командах.
363 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
366 У команды @command{nncp-exec} появились @option{-use-tmp} и
367 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
371 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
372 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
375 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
380 @subsection Релиз 5.4.1
384 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
389 @subsection Релиз 5.4.0
393 Обновлены зависимые библиотеки.
396 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
397 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
398 реализация @command{redo} включена в tarball.
403 @subsection Релиз 5.3.3
407 Больше различных проверок в коде на ошибки.
410 Обновлены зависимые библиотеки.
415 @subsection Релиз 5.3.2
419 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
420 котором соединение могло не учитывать факты прихода пакетов и обрывать
426 @subsection Релиз 5.3.1
430 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
431 использующими внешние команды (@verb{#"|somecmd"#}).
434 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
435 каждому пакету в spool.
440 @subsection Релиз 5.3.0
444 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
447 Исправлено не происходящее дополнение (padding) handshake сообщений.
450 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
453 SP протокол порождает меньше вызовов записей (соответственно, и TCP
457 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
458 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
461 Раз в минуту, если нет более никакого другого трафика, посылаются PING
462 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
463 более не работоспособно.
466 @command{nncp-toss} использует lock-file для предотвращения
467 одновременной обработки зашифрованных пакетов.
472 @subsection Релиз 5.2.1
476 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
481 @subsection Релиз 5.2.0
485 Большинство команд по умолчанию показывают однострочный прогресс
486 выполнения операции. Появились @option{-progress}, @option{-noprogress}
487 опции командной строки, @option{noprogress} опция конфигурационного
491 Исправлен некорректный код возврата @command{nncp-check} команды,
492 который возвращал ошибку когда всё хорошо.
495 Проверка свободного места для пакетов, во время выполнения
496 @command{nncp-bundle -rx}.
501 @subsection Релиз 5.1.2
505 Исправлена @strong{критичная} уязвимость: аутентификация online нод
506 могла приводить к некорректной идентификации удалённой стороны, позволяя
507 скачивать чужие зашифрованные пакеты.
510 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
511 публичный ключ Noise были поменяны местами, что приводило к
512 невозможности online аутентификации нод.
515 Явная синхронизация (fsync) директорий для гарантированного
516 переименования файлов.
521 @subsection Релиз 5.1.1
525 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
530 @subsection Релиз 5.1.0
534 @command{nncp-file} может отправлять директории, автоматически на лету
538 Во время создания исходящих сообщений проверяется наличие свободного
539 места на файловой системе.
542 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
543 конфигурационного файла заменены на структуру
544 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
547 Добавлена @option{freq.maxsize} опция конфигурационного файл,
548 запрещающая ответ на файловый запрос больше заданного размера.
551 Возможность оповещения об успешно выполненных командах (exec) через
552 @option{notify.exec} опцию конфигурационного файла.
557 @subsection Релиз 5.0.0
561 @strong{Несовместимое} изменение формата конфигурационного файла:
562 YAML заменён на Hjson, из-за его гораздо большей простоты, без
563 заметной потери функционала и удобства.
566 @strong{Несовместимое} изменение формата простых пакетов. Работа со
567 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
568 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
569 смотря на то, что версия библиотеки ещё не проверена временем.
572 Возможность соединяться с удалёнными нодами не только по TCP, но и через
573 pipe вызов сторонней команды.
576 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
577 комментариев. Можно использовать @option{-nocomments} опцию для старого
581 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
582 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
585 Возможность переопределить umask процесса через опцию конфигурационного
589 По умолчанию файлы и директории создаются с 666/777 правами доступа,
590 позволяя управлять ими @command{umask}-ом.
593 Обновлены зависимости.
596 Полное использование go модулей для управления зависимостями
597 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
600 Отмена автоматического использования более новых версий GNU GPL
601 (лицензия проекта GNU GPLv3-только).
606 @subsection Релиз 4.1
608 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
612 @subsection Релиз 4.0
616 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
617 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
618 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
619 отсылать дешифрованные данные внешней команде. Старые версии не
623 Проверка доступного места перед копированием во время работы
624 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
627 @command{nncp-call} имеет возможность только показывать список пакетов
628 на удалённой машине, без их передачи.
631 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
634 Восстановлена работоспособность @option{xxrate} настройки в
635 @option{calls} секции конфигурационного файла.
638 Зависимые библиотеки обновлены.
641 Небольшие исправления ошибок.
644 Начало использования @code{go.mod} подсистемы.
649 @subsection Релиз 3.4
651 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
655 @subsection Релиз 3.3
659 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
660 проверяют существование @file{.seen} файла и расценивают его как то, что
661 файл уже был скачан. Возможно передача данных была осуществлена
662 сторонним способом и удалённая сторона должна быть оповещена об этом.
665 Если более высокоприоритетный пакет попадает в спул, то
666 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
667 низкоприоритетные передачи.
670 К средствам связанным с online-соединениями (@command{nncp-daemon},
671 @command{nncp-call}, @command{nncp-caller}) добавлен простой
672 ограничитель скорости.
675 Возможность задания приоритета символьными обозначениями:
676 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
679 Изменены значения приоритетов по-умолчанию:
680 для @command{nncp-exec} с 64 на 96,
681 для @command{nncp-freq} с 64 на 160,
682 для @command{nncp-file} с 196 на 224.
687 @subsection Релиз 3.2
690 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
691 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
692 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
693 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
694 Явное добавление @file{NNCP/} директории в архив восстанавливает
695 работоспособность с корректными tar архивами.
699 @subsection Релиз 3.1
702 Возможность отключать пересылку через промежуточные ноды используя
703 @verb{|-via -|} опцию командной строки.
707 @subsection Релиз 3.0
711 @strong{Несовместимое} изменение формата простых пакетов. Работа со
712 старыми версиями не поддерживается.
715 Добавлена возможность удалённого исполнения команд, путём
716 конфигурирования @option{exec} опции конфигурационного файла и
717 использования команды @command{nncp-exec}:
720 Команда @command{nncp-mail} заменена более гибкой и широкой
721 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
722 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
724 @option{sendmail} опция конфигурационного файла заменена на более гибкую
725 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
730 Возможность переопределить @option{via} опцию конфигурации для целевого
731 узла через @option{-via} опцию командной строки для следующих команд:
732 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
735 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
739 Exec команды вызываются с дополнительными переменными окружения
740 @env{NNCP_NICE} и @env{NNCP_SELF}.
743 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
744 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
745 аргументом @option{-replynice}.
748 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
749 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
750 @option{-noexec}, @option{-notrns}.
753 По-умолчанию @command{nncp-file} команда для
754 @option{-minsize}/@option{-chunked} опций использует
755 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
756 Это можно отключить указав нулевое значение.
761 @subsection Релиз 2.0
765 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
766 Работа со старыми версиями не поддерживается.
769 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
770 Одним криптографическим примитивом меньше.
773 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
774 криптографическим примитивом меньше (предполагая, что BLAKE2X
775 практически идентичен BLAKE2).
780 @subsection Релиз 1.0
784 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
785 со старыми версиями не поддерживается.
788 @command{nncp-bundle} команда может создавать потоки зашифрованных
789 пакетов или потреблять их. Это полезно когда речь идёт о
790 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
791 без создания промежуточного подготовленного ISO образа или работа с
792 ленточными накопителями).
795 @command{nncp-toss} команда может создавать @file{.seen} файлы,
796 предотвращая приём дублированных пакетов.
799 В команде @command{nncp-call} разрешается иметь только одного
800 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
801 входящих пакетов могут создать много горутин.
804 Возможность переопределить путь до spool директории и файла журнала
805 через аргумент командной строки или переменную окружения.
808 @command{nncp-rm} команда может удалять все исходящие/входящие,
809 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
814 @subsection Релиз 0.12
816 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
820 @subsection Релиз 0.11
822 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
826 @subsection Релиз 0.10
829 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
830 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
834 @subsection Релиз 0.9
837 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
838 команды. Они игнорировались.
842 @subsection Релиз 0.8
845 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
846 @option{-minsize} для передачи без разбиения на части была в байтах, а
851 @subsection Релиз 0.7
855 Возможность предоставлять данные для @command{nncp-file} через
856 стандартный ввод, используя временный зашифрованный файл для этого.
859 Появилась возможность передачи файлов разбитых на части, с сопутствующей
860 @command{nncp-reass} командой и @option{freqchunked} опцией
861 конфигурационного файла. Полезно для передачи больших файлов через
862 маленькие устройства хранения.
865 @option{freqminsize} опция конфигурационного файла, аналогичная
869 Опция @option{-force} команды @command{nncp-xfer} переименована в
870 @option{-mkdir} для ясности.
873 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
876 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
877 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
878 имели общий префикс и были сгруппированы для удобства.
881 Появилась команда @command{nncp-cfgenc}, позволяющая
882 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
883 без использования OpenPGP или других подобных инструментов.
886 Обновлены зависимые криптографические библиотеки.
891 @subsection Релиз 0.6
893 @item Появилась небольшая команда @command{nncp-rm}.
894 @item Обновлены зависимые криптографические библиотеки.
898 @subsection Релиз 0.5
901 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
902 @command{nncp-file} и @command{nncp-freq} командах.
906 @subsection Релиз 0.4
910 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
911 @command{nncp-daemon}: иногда они могли падать с segmentation fault
912 ошибкой (данные не терялись).
915 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
916 это короче и удобнее для использования.
919 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
920 позволяющая создать минималистичный урезанный конфигурационный файл без
921 приватных ключей, что полезно во время использования @command{nncp-xfer}.
926 @subsection Релиз 0.3
928 @item Исправлена совместимость с Go 1.6.
932 @subsection Релиз 0.2
936 @strong{Несовместимое} изменение формата пакета (магическое число тоже
937 изменено): поле размера пакета шифруется и не посылается в открытом виде.
940 @option{-minsize} опция даёт возможность автоматически дополнять
941 исходящие пакеты до указанного минимального размера.
944 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
945 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
946 Удалённая сторона сразу же оповещается об этом.
949 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
950 неактивность в online соединении, когда оно должно быть отключено. Она
951 может быть использована для сохранения соединения на долгое время.
954 @option{-maxonlinetime} опция даёт возможность указания максимального
955 возможного времени жизни соединения.
958 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
962 @command{nncp-pkt} команда может разжимать данные.