5 @subsection Релиз 7.0.0
9 Минимальная требуемая версия Go 1.13.
12 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
13 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
14 изменение формата шифрованных файлов (всего что находится в spool
15 области) и формата @file{.meta} файла при chunked передаче.
17 Текущая реализация далека от оптимальной: в ней нет распараллеливания
18 вычислений и имеет повышенное потребление памяти: около 512 KiB на
19 каждый 1 GiB данных файла. Будущая оптимизация производительности и
20 потребления памяти не должна привести к изменению формата пакетов. Но
21 это всё равно в несколько раз быстрее BLAKE2b.
24 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
25 чтения с диска только предшествующей части, а не полностью всего файла,
29 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
32 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
33 уменьшая количество примитивов. А также заголовок шифрованного файла
34 теперь является ассоциированными данными при шифровании.
37 MultiCast Discovery использует
38 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
41 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
44 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
47 Обновлены зависимые библиотеки.
52 @subsection Релиз 6.6.0
56 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
57 ожидают завершения всех процессов фоновой проверки контрольных сумм,
58 после того как соединение закрыто.
61 Добавлена возможность определения адреса через multicast оповещение в
62 локальной сети, так называемый MCD (MultiCast Discovery).
67 @subsection Релиз 6.5.0
71 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
74 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
77 Исправлена гонка при закрытии файловых дескрипторов во время завершения
78 работы online протокола, которая могла привести к ошибке записи
79 принятого фрагмента пакета.
82 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
83 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
88 @subsection Релиз 6.4.0
92 Исправлена возможная гонка в online протоколе, приводящая к падению
98 @subsection Релиз 6.3.0
102 Исправлено возможное падение программы во время показа прогресса online
108 @subsection Релиз 6.2.1
112 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
117 @subsection Релиз 6.2.0
121 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
124 Очередной рефакторинг и упрощение системы журналирования.
125 Не должно быть видимых изменений для конечного пользователя.
130 @subsection Релиз 6.1.0
134 Оптимизация: большинство команд теперь не держат открытыми файловые
135 дескрипторы. Прежде вы легко могли выйти за пределы максимально
136 допустимого количества открытых файлов, если у вас было много пакетов в
140 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
141 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
144 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
145 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
146 online демоны не выполнят проверку целостности.
149 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
150 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
153 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
154 файлах, рядом с самими пакетами. Это может существенно повысить скорость
155 получения списка пакетов на файловых системах с большим размером блока.
160 @subsection Релиз 6.0.0
164 Журнал использует человеко-читаемый и легко обрабатываемый машиной
165 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
166 записей, вместо структурированных строчек RFC 3339. Старый формат
167 журналов не поддерживается @command{nncp-log}.
170 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
171 @command{nncp-daemon}.
174 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
175 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
176 выражением содержащим секунды, это можно использовать как возможность
177 вызова только при появлении исходящих пакетов.
180 @command{nncp-cronexpr} команда позволяет проверить корректность и
181 ожидаемый результат от указанного cron выражения.
186 @subsection Релиз 5.6.0
190 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
191 во время него ежесекундно.
194 В @option{calls} секции конфигурации появились опции
195 @option{autotoss}, @option{autotoss-doseen},
196 @option{autotoss-nofile}, @option{autotoss-nofreq},
197 @option{autotoss-noexec}, @option{autotoss-notrns}.
198 Вы можете настраивать опции автоматического tosser для каждого вызова.
201 Использовать vendoring вместо переопределения @env{GOPATH} во время
202 установки tarball, так как текущая минимальная версия Go это 1.12,
203 поддерживающая модули.
208 @subsection Релиз 5.5.1
212 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
213 в @file{config} во время установки.
218 @subsection Релиз 5.5.0
222 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
223 @command{nncp-bundle}, @command{nncp-stat} командах.
226 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
229 У команды @command{nncp-exec} появились @option{-use-tmp} и
230 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
234 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
235 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
238 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
243 @subsection Релиз 5.4.1
247 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
252 @subsection Релиз 5.4.0
256 Обновлены зависимые библиотеки.
259 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
260 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
261 реализация @command{redo} включена в tarball.
266 @subsection Релиз 5.3.3
270 Больше различных проверок в коде на ошибки.
273 Обновлены зависимые библиотеки.
278 @subsection Релиз 5.3.2
282 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
283 котором соединение могло не учитывать факты прихода пакетов и обрывать
289 @subsection Релиз 5.3.1
293 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
294 использующими внешние команды (@verb{#"|somecmd"#}).
297 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
298 каждому пакету в spool.
303 @subsection Релиз 5.3.0
307 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
310 Исправлено не происходящее дополнение (padding) handshake сообщений.
313 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
316 SP протокол порождает меньше вызовов записей (соответственно, и TCP
320 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
321 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
324 Раз в минуту, если нет более никакого другого трафика, посылаются PING
325 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
326 более не работоспособно.
329 @command{nncp-toss} использует lock-file для предотвращения
330 одновременной обработки зашифрованных пакетов.
335 @subsection Релиз 5.2.1
339 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
344 @subsection Релиз 5.2.0
348 Большинство команд по умолчанию показывают однострочный прогресс
349 выполнения операции. Появились @option{-progress}, @option{-noprogress}
350 опции командной строки, @option{noprogress} опция конфигурационного
354 Исправлен некорректный код возврата @command{nncp-check} команды,
355 который возвращал ошибку когда всё хорошо.
358 Проверка свободного места для пакетов, во время выполнения
359 @command{nncp-bundle -rx}.
364 @subsection Релиз 5.1.2
368 Исправлена @strong{критичная} уязвимость: аутентификация online нод
369 могла приводить к некорректной идентификации удалённой стороны, позволяя
370 скачивать чужие зашифрованные пакеты.
373 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
374 публичный ключ Noise были поменяны местами, что приводило к
375 невозможности online аутентификации нод.
378 Явная синхронизация (fsync) директорий для гарантированного
379 переименования файлов.
384 @subsection Релиз 5.1.1
388 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
393 @subsection Релиз 5.1.0
397 @command{nncp-file} может отправлять директории, автоматически на лету
401 Во время создания исходящих сообщений проверяется наличие свободного
402 места на файловой системе.
405 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
406 конфигурационного файла заменены на структуру
407 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
410 Добавлена @option{freq.maxsize} опция конфигурационного файл,
411 запрещающая ответ на файловый запрос больше заданного размера.
414 Возможность оповещения об успешно выполненных командах (exec) через
415 @option{notify.exec} опцию конфигурационного файла.
420 @subsection Релиз 5.0.0
424 @strong{Несовместимое} изменение формата конфигурационного файла:
425 YAML заменён на Hjson, из-за его гораздо большей простоты, без
426 заметной потери функционала и удобства.
429 @strong{Несовместимое} изменение формата простых пакетов. Работа со
430 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
431 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
432 смотря на то, что версия библиотеки ещё не проверена временем.
435 Возможность соединяться с удалёнными нодами не только по TCP, но и через
436 pipe вызов сторонней команды.
439 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
440 комментариев. Можно использовать @option{-nocomments} опцию для старого
444 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
445 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
448 Возможность переопределить umask процесса через опцию конфигурационного
452 По умолчанию файлы и директории создаются с 666/777 правами доступа,
453 позволяя управлять ими @command{umask}-ом.
456 Обновлены зависимости.
459 Полное использование go модулей для управления зависимостями
460 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
463 Отмена автоматического использования более новых версий GNU GPL
464 (лицензия проекта GNU GPLv3-только).
469 @subsection Релиз 4.1
471 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
475 @subsection Релиз 4.0
479 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
480 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
481 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
482 отсылать дешифрованные данные внешней команде. Старые версии не
486 Проверка доступного места перед копированием во время работы
487 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
490 @command{nncp-call} имеет возможность только показывать список пакетов
491 на удалённой машине, без их передачи.
494 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
497 Восстановлена работоспособность @option{xxrate} настройки в
498 @option{calls} секции конфигурационного файла.
501 Зависимые библиотеки обновлены.
504 Небольшие исправления ошибок.
507 Начало использования @code{go.mod} подсистемы.
512 @subsection Релиз 3.4
514 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
518 @subsection Релиз 3.3
522 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
523 проверяют существование @file{.seen} файла и расценивают его как то, что
524 файл уже был скачан. Возможно передача данных была осуществлена
525 сторонним способом и удалённая сторона должна быть оповещена об этом.
528 Если более высокоприоритетный пакет попадает в спул, то
529 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
530 низкоприоритетные передачи.
533 К средствам связанным с online-соединениями (@command{nncp-daemon},
534 @command{nncp-call}, @command{nncp-caller}) добавлен простой
535 ограничитель скорости.
538 Возможность задания приоритета символьными обозначениями:
539 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
542 Изменены значения приоритетов по-умолчанию:
543 для @command{nncp-exec} с 64 на 96,
544 для @command{nncp-freq} с 64 на 160,
545 для @command{nncp-file} с 196 на 224.
550 @subsection Релиз 3.2
553 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
554 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
555 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
556 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
557 Явное добавление @file{NNCP/} директории в архив восстанавливает
558 работоспособность с корректными tar архивами.
562 @subsection Релиз 3.1
565 Возможность отключать пересылку через промежуточные ноды используя
566 @verb{|-via -|} опцию командной строки.
570 @subsection Релиз 3.0
574 @strong{Несовместимое} изменение формата простых пакетов. Работа со
575 старыми версиями не поддерживается.
578 Добавлена возможность удалённого исполнения команд, путём
579 конфигурирования @option{exec} опции конфигурационного файла и
580 использования команды @command{nncp-exec}:
583 Команда @command{nncp-mail} заменена более гибкой и широкой
584 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
585 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
587 @option{sendmail} опция конфигурационного файла заменена на более гибкую
588 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
593 Возможность переопределить @option{via} опцию конфигурации для целевого
594 узла через @option{-via} опцию командной строки для следующих команд:
595 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
598 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
602 Exec команды вызываются с дополнительными переменными окружения
603 @env{NNCP_NICE} и @env{NNCP_SELF}.
606 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
607 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
608 аргументом @option{-replynice}.
611 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
612 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
613 @option{-noexec}, @option{-notrns}.
616 По-умолчанию @command{nncp-file} команда для
617 @option{-minsize}/@option{-chunked} опций использует
618 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
619 Это можно отключить указав нулевое значение.
624 @subsection Релиз 2.0
628 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
629 Работа со старыми версиями не поддерживается.
632 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
633 Одним криптографическим примитивом меньше.
636 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
637 криптографическим примитивом меньше (предполагая, что BLAKE2X
638 практически идентичен BLAKE2).
643 @subsection Релиз 1.0
647 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
648 со старыми версиями не поддерживается.
651 @command{nncp-bundle} команда может создавать потоки зашифрованных
652 пакетов или потреблять их. Это полезно когда речь идёт о
653 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
654 без создания промежуточного подготовленного ISO образа или работа с
655 ленточными накопителями).
658 @command{nncp-toss} команда может создавать @file{.seen} файлы,
659 предотвращая приём дублированных пакетов.
662 В команде @command{nncp-call} разрешается иметь только одного
663 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
664 входящих пакетов могут создать много горутин.
667 Возможность переопределить путь до spool директории и файла журнала
668 через аргумент командной строки или переменную окружения.
671 @command{nncp-rm} команда может удалять все исходящие/входящие,
672 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
677 @subsection Релиз 0.12
679 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
683 @subsection Релиз 0.11
685 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
689 @subsection Релиз 0.10
692 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
693 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
697 @subsection Релиз 0.9
700 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
701 команды. Они игнорировались.
705 @subsection Релиз 0.8
708 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
709 @option{-minsize} для передачи без разбиения на части была в байтах, а
714 @subsection Релиз 0.7
718 Возможность предоставлять данные для @command{nncp-file} через
719 стандартный ввод, используя временный зашифрованный файл для этого.
722 Появилась возможность передачи файлов разбитых на части, с сопутствующей
723 @command{nncp-reass} командой и @option{freqchunked} опцией
724 конфигурационного файла. Полезно для передачи больших файлов через
725 маленькие устройства хранения.
728 @option{freqminsize} опция конфигурационного файла, аналогичная
732 Опция @option{-force} команды @command{nncp-xfer} переименована в
733 @option{-mkdir} для ясности.
736 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
739 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
740 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
741 имели общий префикс и были сгруппированы для удобства.
744 Появилась команда @command{nncp-cfgenc}, позволяющая
745 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
746 без использования OpenPGP или других подобных инструментов.
749 Обновлены зависимые криптографические библиотеки.
754 @subsection Релиз 0.6
756 @item Появилась небольшая команда @command{nncp-rm}.
757 @item Обновлены зависимые криптографические библиотеки.
761 @subsection Релиз 0.5
764 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
765 @command{nncp-file} и @command{nncp-freq} командах.
769 @subsection Релиз 0.4
773 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
774 @command{nncp-daemon}: иногда они могли падать с segmentation fault
775 ошибкой (данные не терялись).
778 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
779 это короче и удобнее для использования.
782 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
783 позволяющая создать минималистичный урезанный конфигурационный файл без
784 приватных ключей, что полезно во время использования @command{nncp-xfer}.
789 @subsection Релиз 0.3
791 @item Исправлена совместимость с Go 1.6.
795 @subsection Релиз 0.2
799 @strong{Несовместимое} изменение формата пакета (магическое число тоже
800 изменено): поле размера пакета шифруется и не посылается в открытом виде.
803 @option{-minsize} опция даёт возможность автоматически дополнять
804 исходящие пакеты до указанного минимального размера.
807 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
808 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
809 Удалённая сторона сразу же оповещается об этом.
812 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
813 неактивность в online соединении, когда оно должно быть отключено. Она
814 может быть использована для сохранения соединения на долгое время.
817 @option{-maxonlinetime} опция даёт возможность указания максимального
818 возможного времени жизни соединения.
821 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
825 @command{nncp-pkt} команда может разжимать данные.