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 Обновлены зависимые библиотеки.
43 @subsection Релиз 6.6.0
47 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
48 ожидают завершения всех процессов фоновой проверки контрольных сумм,
49 после того как соединение закрыто.
52 Добавлена возможность определения адреса через multicast оповещение в
53 локальной сети, так называемый MCD (MultiCast Discovery).
58 @subsection Релиз 6.5.0
62 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
65 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
68 Исправлена гонка при закрытии файловых дескрипторов во время завершения
69 работы online протокола, которая могла привести к ошибке записи
70 принятого фрагмента пакета.
73 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
74 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
79 @subsection Релиз 6.4.0
83 Исправлена возможная гонка в online протоколе, приводящая к падению
89 @subsection Релиз 6.3.0
93 Исправлено возможное падение программы во время показа прогресса online
99 @subsection Релиз 6.2.1
103 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
108 @subsection Релиз 6.2.0
112 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
115 Очередной рефакторинг и упрощение системы журналирования.
116 Не должно быть видимых изменений для конечного пользователя.
121 @subsection Релиз 6.1.0
125 Оптимизация: большинство команд теперь не держат открытыми файловые
126 дескрипторы. Прежде вы легко могли выйти за пределы максимально
127 допустимого количества открытых файлов, если у вас было много пакетов в
131 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
132 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
135 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
136 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
137 online демоны не выполнят проверку целостности.
140 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
141 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
144 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
145 файлах, рядом с самими пакетами. Это может существенно повысить скорость
146 получения списка пакетов на файловых системах с большим размером блока.
151 @subsection Релиз 6.0.0
155 Журнал использует человеко-читаемый и легко обрабатываемый машиной
156 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
157 записей, вместо структурированных строчек RFC 3339. Старый формат
158 журналов не поддерживается @command{nncp-log}.
161 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
162 @command{nncp-daemon}.
165 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
166 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
167 выражением содержащим секунды, это можно использовать как возможность
168 вызова только при появлении исходящих пакетов.
171 @command{nncp-cronexpr} команда позволяет проверить корректность и
172 ожидаемый результат от указанного cron выражения.
177 @subsection Релиз 5.6.0
181 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
182 во время него ежесекундно.
185 В @option{calls} секции конфигурации появились опции
186 @option{autotoss}, @option{autotoss-doseen},
187 @option{autotoss-nofile}, @option{autotoss-nofreq},
188 @option{autotoss-noexec}, @option{autotoss-notrns}.
189 Вы можете настраивать опции автоматического tosser для каждого вызова.
192 Использовать vendoring вместо переопределения @env{GOPATH} во время
193 установки tarball, так как текущая минимальная версия Go это 1.12,
194 поддерживающая модули.
199 @subsection Релиз 5.5.1
203 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
204 в @file{config} во время установки.
209 @subsection Релиз 5.5.0
213 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
214 @command{nncp-bundle}, @command{nncp-stat} командах.
217 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
220 У команды @command{nncp-exec} появились @option{-use-tmp} и
221 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
225 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
226 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
229 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
234 @subsection Релиз 5.4.1
238 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
243 @subsection Релиз 5.4.0
247 Обновлены зависимые библиотеки.
250 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
251 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
252 реализация @command{redo} включена в tarball.
257 @subsection Релиз 5.3.3
261 Больше различных проверок в коде на ошибки.
264 Обновлены зависимые библиотеки.
269 @subsection Релиз 5.3.2
273 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
274 котором соединение могло не учитывать факты прихода пакетов и обрывать
280 @subsection Релиз 5.3.1
284 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
285 использующими внешние команды (@verb{#"|somecmd"#}).
288 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
289 каждому пакету в spool.
294 @subsection Релиз 5.3.0
298 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
301 Исправлено не происходящее дополнение (padding) handshake сообщений.
304 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
307 SP протокол порождает меньше вызовов записей (соответственно, и TCP
311 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
312 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
315 Раз в минуту, если нет более никакого другого трафика, посылаются PING
316 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
317 более не работоспособно.
320 @command{nncp-toss} использует lock-file для предотвращения
321 одновременной обработки зашифрованных пакетов.
326 @subsection Релиз 5.2.1
330 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
335 @subsection Релиз 5.2.0
339 Большинство команд по умолчанию показывают однострочный прогресс
340 выполнения операции. Появились @option{-progress}, @option{-noprogress}
341 опции командной строки, @option{noprogress} опция конфигурационного
345 Исправлен некорректный код возврата @command{nncp-check} команды,
346 который возвращал ошибку когда всё хорошо.
349 Проверка свободного места для пакетов, во время выполнения
350 @command{nncp-bundle -rx}.
355 @subsection Релиз 5.1.2
359 Исправлена @strong{критичная} уязвимость: аутентификация online нод
360 могла приводить к некорректной идентификации удалённой стороны, позволяя
361 скачивать чужие зашифрованные пакеты.
364 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
365 публичный ключ Noise были поменяны местами, что приводило к
366 невозможности online аутентификации нод.
369 Явная синхронизация (fsync) директорий для гарантированного
370 переименования файлов.
375 @subsection Релиз 5.1.1
379 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
384 @subsection Релиз 5.1.0
388 @command{nncp-file} может отправлять директории, автоматически на лету
392 Во время создания исходящих сообщений проверяется наличие свободного
393 места на файловой системе.
396 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
397 конфигурационного файла заменены на структуру
398 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
401 Добавлена @option{freq.maxsize} опция конфигурационного файл,
402 запрещающая ответ на файловый запрос больше заданного размера.
405 Возможность оповещения об успешно выполненных командах (exec) через
406 @option{notify.exec} опцию конфигурационного файла.
411 @subsection Релиз 5.0.0
415 @strong{Несовместимое} изменение формата конфигурационного файла:
416 YAML заменён на Hjson, из-за его гораздо большей простоты, без
417 заметной потери функционала и удобства.
420 @strong{Несовместимое} изменение формата простых пакетов. Работа со
421 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
422 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
423 смотря на то, что версия библиотеки ещё не проверена временем.
426 Возможность соединяться с удалёнными нодами не только по TCP, но и через
427 pipe вызов сторонней команды.
430 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
431 комментариев. Можно использовать @option{-nocomments} опцию для старого
435 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
436 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
439 Возможность переопределить umask процесса через опцию конфигурационного
443 По умолчанию файлы и директории создаются с 666/777 правами доступа,
444 позволяя управлять ими @command{umask}-ом.
447 Обновлены зависимости.
450 Полное использование go модулей для управления зависимостями
451 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
454 Отмена автоматического использования более новых версий GNU GPL
455 (лицензия проекта GNU GPLv3-только).
460 @subsection Релиз 4.1
462 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
466 @subsection Релиз 4.0
470 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
471 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
472 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
473 отсылать дешифрованные данные внешней команде. Старые версии не
477 Проверка доступного места перед копированием во время работы
478 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
481 @command{nncp-call} имеет возможность только показывать список пакетов
482 на удалённой машине, без их передачи.
485 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
488 Восстановлена работоспособность @option{xxrate} настройки в
489 @option{calls} секции конфигурационного файла.
492 Зависимые библиотеки обновлены.
495 Небольшие исправления ошибок.
498 Начало использования @code{go.mod} подсистемы.
503 @subsection Релиз 3.4
505 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
509 @subsection Релиз 3.3
513 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
514 проверяют существование @file{.seen} файла и расценивают его как то, что
515 файл уже был скачан. Возможно передача данных была осуществлена
516 сторонним способом и удалённая сторона должна быть оповещена об этом.
519 Если более высокоприоритетный пакет попадает в спул, то
520 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
521 низкоприоритетные передачи.
524 К средствам связанным с online-соединениями (@command{nncp-daemon},
525 @command{nncp-call}, @command{nncp-caller}) добавлен простой
526 ограничитель скорости.
529 Возможность задания приоритета символьными обозначениями:
530 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
533 Изменены значения приоритетов по-умолчанию:
534 для @command{nncp-exec} с 64 на 96,
535 для @command{nncp-freq} с 64 на 160,
536 для @command{nncp-file} с 196 на 224.
541 @subsection Релиз 3.2
544 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
545 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
546 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
547 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
548 Явное добавление @file{NNCP/} директории в архив восстанавливает
549 работоспособность с корректными tar архивами.
553 @subsection Релиз 3.1
556 Возможность отключать пересылку через промежуточные ноды используя
557 @verb{|-via -|} опцию командной строки.
561 @subsection Релиз 3.0
565 @strong{Несовместимое} изменение формата простых пакетов. Работа со
566 старыми версиями не поддерживается.
569 Добавлена возможность удалённого исполнения команд, путём
570 конфигурирования @option{exec} опции конфигурационного файла и
571 использования команды @command{nncp-exec}:
574 Команда @command{nncp-mail} заменена более гибкой и широкой
575 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
576 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
578 @option{sendmail} опция конфигурационного файла заменена на более гибкую
579 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
584 Возможность переопределить @option{via} опцию конфигурации для целевого
585 узла через @option{-via} опцию командной строки для следующих команд:
586 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
589 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
593 Exec команды вызываются с дополнительными переменными окружения
594 @env{NNCP_NICE} и @env{NNCP_SELF}.
597 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
598 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
599 аргументом @option{-replynice}.
602 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
603 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
604 @option{-noexec}, @option{-notrns}.
607 По-умолчанию @command{nncp-file} команда для
608 @option{-minsize}/@option{-chunked} опций использует
609 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
610 Это можно отключить указав нулевое значение.
615 @subsection Релиз 2.0
619 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
620 Работа со старыми версиями не поддерживается.
623 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
624 Одним криптографическим примитивом меньше.
627 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
628 криптографическим примитивом меньше (предполагая, что BLAKE2X
629 практически идентичен BLAKE2).
634 @subsection Релиз 1.0
638 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
639 со старыми версиями не поддерживается.
642 @command{nncp-bundle} команда может создавать потоки зашифрованных
643 пакетов или потреблять их. Это полезно когда речь идёт о
644 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
645 без создания промежуточного подготовленного ISO образа или работа с
646 ленточными накопителями).
649 @command{nncp-toss} команда может создавать @file{.seen} файлы,
650 предотвращая приём дублированных пакетов.
653 В команде @command{nncp-call} разрешается иметь только одного
654 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
655 входящих пакетов могут создать много горутин.
658 Возможность переопределить путь до spool директории и файла журнала
659 через аргумент командной строки или переменную окружения.
662 @command{nncp-rm} команда может удалять все исходящие/входящие,
663 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
668 @subsection Релиз 0.12
670 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
674 @subsection Релиз 0.11
676 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
680 @subsection Релиз 0.10
683 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
684 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
688 @subsection Релиз 0.9
691 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
692 команды. Они игнорировались.
696 @subsection Релиз 0.8
699 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
700 @option{-minsize} для передачи без разбиения на части была в байтах, а
705 @subsection Релиз 0.7
709 Возможность предоставлять данные для @command{nncp-file} через
710 стандартный ввод, используя временный зашифрованный файл для этого.
713 Появилась возможность передачи файлов разбитых на части, с сопутствующей
714 @command{nncp-reass} командой и @option{freqchunked} опцией
715 конфигурационного файла. Полезно для передачи больших файлов через
716 маленькие устройства хранения.
719 @option{freqminsize} опция конфигурационного файла, аналогичная
723 Опция @option{-force} команды @command{nncp-xfer} переименована в
724 @option{-mkdir} для ясности.
727 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
730 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
731 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
732 имели общий префикс и были сгруппированы для удобства.
735 Появилась команда @command{nncp-cfgenc}, позволяющая
736 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
737 без использования OpenPGP или других подобных инструментов.
740 Обновлены зависимые криптографические библиотеки.
745 @subsection Релиз 0.6
747 @item Появилась небольшая команда @command{nncp-rm}.
748 @item Обновлены зависимые криптографические библиотеки.
752 @subsection Релиз 0.5
755 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
756 @command{nncp-file} и @command{nncp-freq} командах.
760 @subsection Релиз 0.4
764 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
765 @command{nncp-daemon}: иногда они могли падать с segmentation fault
766 ошибкой (данные не терялись).
769 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
770 это короче и удобнее для использования.
773 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
774 позволяющая создать минималистичный урезанный конфигурационный файл без
775 приватных ключей, что полезно во время использования @command{nncp-xfer}.
780 @subsection Релиз 0.3
782 @item Исправлена совместимость с Go 1.6.
786 @subsection Релиз 0.2
790 @strong{Несовместимое} изменение формата пакета (магическое число тоже
791 изменено): поле размера пакета шифруется и не посылается в открытом виде.
794 @option{-minsize} опция даёт возможность автоматически дополнять
795 исходящие пакеты до указанного минимального размера.
798 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
799 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
800 Удалённая сторона сразу же оповещается об этом.
803 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
804 неактивность в online соединении, когда оно должно быть отключено. Она
805 может быть использована для сохранения соединения на долгое время.
808 @option{-maxonlinetime} опция даёт возможность указания максимального
809 возможного времени жизни соединения.
812 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
816 @command{nncp-pkt} команда может разжимать данные.