5 @subsection Релиз 7.0.0
9 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
10 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
11 изменение формата шифрованных файлов (всего что находится в spool
12 области) и формата @file{.meta} файла при chunked передаче.
14 Текущая реализация далека от оптимальной: в ней нет распараллеливания
15 вычислений и имеет повышенное потребление памяти: около 512 KiB на
16 каждый 1 GiB данных файла. Будущая оптимизация производительности и
17 потребления памяти не должна привести к изменению формата пакетов. Но
18 это всё равно в несколько раз быстрее BLAKE2b.
21 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
22 чтения с диска только предшествующей части, а не полностью всего файла,
26 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
29 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
30 уменьшая количество примитивов. А также заголовок шифрованного файла
31 теперь является ассоциированными данными при шифровании.
34 MultiCast Discovery использует
35 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
38 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
41 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
44 Обновлены зависимые библиотеки.
49 @subsection Релиз 6.6.0
53 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
54 ожидают завершения всех процессов фоновой проверки контрольных сумм,
55 после того как соединение закрыто.
58 Добавлена возможность определения адреса через multicast оповещение в
59 локальной сети, так называемый MCD (MultiCast Discovery).
64 @subsection Релиз 6.5.0
68 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
71 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
74 Исправлена гонка при закрытии файловых дескрипторов во время завершения
75 работы online протокола, которая могла привести к ошибке записи
76 принятого фрагмента пакета.
79 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
80 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
85 @subsection Релиз 6.4.0
89 Исправлена возможная гонка в online протоколе, приводящая к падению
95 @subsection Релиз 6.3.0
99 Исправлено возможное падение программы во время показа прогресса online
105 @subsection Релиз 6.2.1
109 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
114 @subsection Релиз 6.2.0
118 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
121 Очередной рефакторинг и упрощение системы журналирования.
122 Не должно быть видимых изменений для конечного пользователя.
127 @subsection Релиз 6.1.0
131 Оптимизация: большинство команд теперь не держат открытыми файловые
132 дескрипторы. Прежде вы легко могли выйти за пределы максимально
133 допустимого количества открытых файлов, если у вас было много пакетов в
137 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
138 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
141 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
142 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
143 online демоны не выполнят проверку целостности.
146 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
147 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
150 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
151 файлах, рядом с самими пакетами. Это может существенно повысить скорость
152 получения списка пакетов на файловых системах с большим размером блока.
157 @subsection Релиз 6.0.0
161 Журнал использует человеко-читаемый и легко обрабатываемый машиной
162 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
163 записей, вместо структурированных строчек RFC 3339. Старый формат
164 журналов не поддерживается @command{nncp-log}.
167 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
168 @command{nncp-daemon}.
171 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
172 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
173 выражением содержащим секунды, это можно использовать как возможность
174 вызова только при появлении исходящих пакетов.
177 @command{nncp-cronexpr} команда позволяет проверить корректность и
178 ожидаемый результат от указанного cron выражения.
183 @subsection Релиз 5.6.0
187 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
188 во время него ежесекундно.
191 В @option{calls} секции конфигурации появились опции
192 @option{autotoss}, @option{autotoss-doseen},
193 @option{autotoss-nofile}, @option{autotoss-nofreq},
194 @option{autotoss-noexec}, @option{autotoss-notrns}.
195 Вы можете настраивать опции автоматического tosser для каждого вызова.
198 Использовать vendoring вместо переопределения @env{GOPATH} во время
199 установки tarball, так как текущая минимальная версия Go это 1.12,
200 поддерживающая модули.
205 @subsection Релиз 5.5.1
209 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
210 в @file{config} во время установки.
215 @subsection Релиз 5.5.0
219 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
220 @command{nncp-bundle}, @command{nncp-stat} командах.
223 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
226 У команды @command{nncp-exec} появились @option{-use-tmp} и
227 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
231 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
232 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
235 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
240 @subsection Релиз 5.4.1
244 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
249 @subsection Релиз 5.4.0
253 Обновлены зависимые библиотеки.
256 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
257 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
258 реализация @command{redo} включена в tarball.
263 @subsection Релиз 5.3.3
267 Больше различных проверок в коде на ошибки.
270 Обновлены зависимые библиотеки.
275 @subsection Релиз 5.3.2
279 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
280 котором соединение могло не учитывать факты прихода пакетов и обрывать
286 @subsection Релиз 5.3.1
290 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
291 использующими внешние команды (@verb{#"|somecmd"#}).
294 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
295 каждому пакету в spool.
300 @subsection Релиз 5.3.0
304 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
307 Исправлено не происходящее дополнение (padding) handshake сообщений.
310 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
313 SP протокол порождает меньше вызовов записей (соответственно, и TCP
317 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
318 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
321 Раз в минуту, если нет более никакого другого трафика, посылаются PING
322 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
323 более не работоспособно.
326 @command{nncp-toss} использует lock-file для предотвращения
327 одновременной обработки зашифрованных пакетов.
332 @subsection Релиз 5.2.1
336 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
341 @subsection Релиз 5.2.0
345 Большинство команд по умолчанию показывают однострочный прогресс
346 выполнения операции. Появились @option{-progress}, @option{-noprogress}
347 опции командной строки, @option{noprogress} опция конфигурационного
351 Исправлен некорректный код возврата @command{nncp-check} команды,
352 который возвращал ошибку когда всё хорошо.
355 Проверка свободного места для пакетов, во время выполнения
356 @command{nncp-bundle -rx}.
361 @subsection Релиз 5.1.2
365 Исправлена @strong{критичная} уязвимость: аутентификация online нод
366 могла приводить к некорректной идентификации удалённой стороны, позволяя
367 скачивать чужие зашифрованные пакеты.
370 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
371 публичный ключ Noise были поменяны местами, что приводило к
372 невозможности online аутентификации нод.
375 Явная синхронизация (fsync) директорий для гарантированного
376 переименования файлов.
381 @subsection Релиз 5.1.1
385 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
390 @subsection Релиз 5.1.0
394 @command{nncp-file} может отправлять директории, автоматически на лету
398 Во время создания исходящих сообщений проверяется наличие свободного
399 места на файловой системе.
402 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
403 конфигурационного файла заменены на структуру
404 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
407 Добавлена @option{freq.maxsize} опция конфигурационного файл,
408 запрещающая ответ на файловый запрос больше заданного размера.
411 Возможность оповещения об успешно выполненных командах (exec) через
412 @option{notify.exec} опцию конфигурационного файла.
417 @subsection Релиз 5.0.0
421 @strong{Несовместимое} изменение формата конфигурационного файла:
422 YAML заменён на Hjson, из-за его гораздо большей простоты, без
423 заметной потери функционала и удобства.
426 @strong{Несовместимое} изменение формата простых пакетов. Работа со
427 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
428 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
429 смотря на то, что версия библиотеки ещё не проверена временем.
432 Возможность соединяться с удалёнными нодами не только по TCP, но и через
433 pipe вызов сторонней команды.
436 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
437 комментариев. Можно использовать @option{-nocomments} опцию для старого
441 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
442 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
445 Возможность переопределить umask процесса через опцию конфигурационного
449 По умолчанию файлы и директории создаются с 666/777 правами доступа,
450 позволяя управлять ими @command{umask}-ом.
453 Обновлены зависимости.
456 Полное использование go модулей для управления зависимостями
457 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
460 Отмена автоматического использования более новых версий GNU GPL
461 (лицензия проекта GNU GPLv3-только).
466 @subsection Релиз 4.1
468 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
472 @subsection Релиз 4.0
476 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
477 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
478 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
479 отсылать дешифрованные данные внешней команде. Старые версии не
483 Проверка доступного места перед копированием во время работы
484 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
487 @command{nncp-call} имеет возможность только показывать список пакетов
488 на удалённой машине, без их передачи.
491 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
494 Восстановлена работоспособность @option{xxrate} настройки в
495 @option{calls} секции конфигурационного файла.
498 Зависимые библиотеки обновлены.
501 Небольшие исправления ошибок.
504 Начало использования @code{go.mod} подсистемы.
509 @subsection Релиз 3.4
511 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
515 @subsection Релиз 3.3
519 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
520 проверяют существование @file{.seen} файла и расценивают его как то, что
521 файл уже был скачан. Возможно передача данных была осуществлена
522 сторонним способом и удалённая сторона должна быть оповещена об этом.
525 Если более высокоприоритетный пакет попадает в спул, то
526 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
527 низкоприоритетные передачи.
530 К средствам связанным с online-соединениями (@command{nncp-daemon},
531 @command{nncp-call}, @command{nncp-caller}) добавлен простой
532 ограничитель скорости.
535 Возможность задания приоритета символьными обозначениями:
536 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
539 Изменены значения приоритетов по-умолчанию:
540 для @command{nncp-exec} с 64 на 96,
541 для @command{nncp-freq} с 64 на 160,
542 для @command{nncp-file} с 196 на 224.
547 @subsection Релиз 3.2
550 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
551 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
552 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
553 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
554 Явное добавление @file{NNCP/} директории в архив восстанавливает
555 работоспособность с корректными tar архивами.
559 @subsection Релиз 3.1
562 Возможность отключать пересылку через промежуточные ноды используя
563 @verb{|-via -|} опцию командной строки.
567 @subsection Релиз 3.0
571 @strong{Несовместимое} изменение формата простых пакетов. Работа со
572 старыми версиями не поддерживается.
575 Добавлена возможность удалённого исполнения команд, путём
576 конфигурирования @option{exec} опции конфигурационного файла и
577 использования команды @command{nncp-exec}:
580 Команда @command{nncp-mail} заменена более гибкой и широкой
581 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
582 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
584 @option{sendmail} опция конфигурационного файла заменена на более гибкую
585 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
590 Возможность переопределить @option{via} опцию конфигурации для целевого
591 узла через @option{-via} опцию командной строки для следующих команд:
592 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
595 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
599 Exec команды вызываются с дополнительными переменными окружения
600 @env{NNCP_NICE} и @env{NNCP_SELF}.
603 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
604 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
605 аргументом @option{-replynice}.
608 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
609 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
610 @option{-noexec}, @option{-notrns}.
613 По-умолчанию @command{nncp-file} команда для
614 @option{-minsize}/@option{-chunked} опций использует
615 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
616 Это можно отключить указав нулевое значение.
621 @subsection Релиз 2.0
625 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
626 Работа со старыми версиями не поддерживается.
629 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
630 Одним криптографическим примитивом меньше.
633 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
634 криптографическим примитивом меньше (предполагая, что BLAKE2X
635 практически идентичен BLAKE2).
640 @subsection Релиз 1.0
644 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
645 со старыми версиями не поддерживается.
648 @command{nncp-bundle} команда может создавать потоки зашифрованных
649 пакетов или потреблять их. Это полезно когда речь идёт о
650 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
651 без создания промежуточного подготовленного ISO образа или работа с
652 ленточными накопителями).
655 @command{nncp-toss} команда может создавать @file{.seen} файлы,
656 предотвращая приём дублированных пакетов.
659 В команде @command{nncp-call} разрешается иметь только одного
660 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
661 входящих пакетов могут создать много горутин.
664 Возможность переопределить путь до spool директории и файла журнала
665 через аргумент командной строки или переменную окружения.
668 @command{nncp-rm} команда может удалять все исходящие/входящие,
669 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
674 @subsection Релиз 0.12
676 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
680 @subsection Релиз 0.11
682 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
686 @subsection Релиз 0.10
689 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
690 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
694 @subsection Релиз 0.9
697 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
698 команды. Они игнорировались.
702 @subsection Релиз 0.8
705 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
706 @option{-minsize} для передачи без разбиения на части была в байтах, а
711 @subsection Релиз 0.7
715 Возможность предоставлять данные для @command{nncp-file} через
716 стандартный ввод, используя временный зашифрованный файл для этого.
719 Появилась возможность передачи файлов разбитых на части, с сопутствующей
720 @command{nncp-reass} командой и @option{freqchunked} опцией
721 конфигурационного файла. Полезно для передачи больших файлов через
722 маленькие устройства хранения.
725 @option{freqminsize} опция конфигурационного файла, аналогичная
729 Опция @option{-force} команды @command{nncp-xfer} переименована в
730 @option{-mkdir} для ясности.
733 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
736 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
737 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
738 имели общий префикс и были сгруппированы для удобства.
741 Появилась команда @command{nncp-cfgenc}, позволяющая
742 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
743 без использования OpenPGP или других подобных инструментов.
746 Обновлены зависимые криптографические библиотеки.
751 @subsection Релиз 0.6
753 @item Появилась небольшая команда @command{nncp-rm}.
754 @item Обновлены зависимые криптографические библиотеки.
758 @subsection Релиз 0.5
761 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
762 @command{nncp-file} и @command{nncp-freq} командах.
766 @subsection Релиз 0.4
770 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
771 @command{nncp-daemon}: иногда они могли падать с segmentation fault
772 ошибкой (данные не терялись).
775 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
776 это короче и удобнее для использования.
779 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
780 позволяющая создать минималистичный урезанный конфигурационный файл без
781 приватных ключей, что полезно во время использования @command{nncp-xfer}.
786 @subsection Релиз 0.3
788 @item Исправлена совместимость с Go 1.6.
792 @subsection Релиз 0.2
796 @strong{Несовместимое} изменение формата пакета (магическое число тоже
797 изменено): поле размера пакета шифруется и не посылается в открытом виде.
800 @option{-minsize} опция даёт возможность автоматически дополнять
801 исходящие пакеты до указанного минимального размера.
804 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
805 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
806 Удалённая сторона сразу же оповещается об этом.
809 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
810 неактивность в online соединении, когда оно должно быть отключено. Она
811 может быть использована для сохранения соединения на долгое время.
814 @option{-maxonlinetime} опция даёт возможность указания максимального
815 возможного времени жизни соединения.
818 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
822 @command{nncp-pkt} команда может разжимать данные.