5 @subsection Релиз 7.1.0
9 Появилась возможность мультивещательной (multicast) рассылки пакетов.
10 Реализовано всего лишь дополнительным типом простых пакетов и изменением
11 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
14 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
15 команд использующих временный файл (stdin и @option{-use-tmp}).
18 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
21 Исправлено некорректное генерирование @file{.hdr} при использовании
25 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
29 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
30 проверку в бесконечный цикл.
33 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
36 @command{nncp-pkt} может парсить @file{.hdr} файлы.
41 @subsection Релиз 7.0.0
45 Минимальная требуемая версия Go 1.13.
48 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
49 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
50 изменение формата шифрованных файлов (всего что находится в spool
51 области) и формата @file{.meta} файла при chunked передаче.
53 Текущая реализация далека от оптимальной: в ней нет распараллеливания
54 вычислений и имеет повышенное потребление памяти: около 512 KiB на
55 каждый 1 GiB данных файла. Будущая оптимизация производительности и
56 потребления памяти не должна привести к изменению формата пакетов. Но
57 это всё равно в несколько раз быстрее BLAKE2b.
60 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
61 чтения с диска только предшествующей части, а не полностью всего файла,
65 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
68 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
69 уменьшая количество примитивов. А также заголовок шифрованного файла
70 теперь является ассоциированными данными при шифровании.
73 MultiCast Discovery использует
74 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
77 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
80 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
83 Обновлены зависимые библиотеки.
88 @subsection Релиз 6.6.0
92 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
93 ожидают завершения всех процессов фоновой проверки контрольных сумм,
94 после того как соединение закрыто.
97 Добавлена возможность определения адреса через multicast оповещение в
98 локальной сети, так называемый MCD (MultiCast Discovery).
103 @subsection Релиз 6.5.0
107 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
110 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
113 Исправлена гонка при закрытии файловых дескрипторов во время завершения
114 работы online протокола, которая могла привести к ошибке записи
115 принятого фрагмента пакета.
118 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
119 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
124 @subsection Релиз 6.4.0
128 Исправлена возможная гонка в online протоколе, приводящая к падению
134 @subsection Релиз 6.3.0
138 Исправлено возможное падение программы во время показа прогресса online
144 @subsection Релиз 6.2.1
148 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
153 @subsection Релиз 6.2.0
157 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
160 Очередной рефакторинг и упрощение системы журналирования.
161 Не должно быть видимых изменений для конечного пользователя.
166 @subsection Релиз 6.1.0
170 Оптимизация: большинство команд теперь не держат открытыми файловые
171 дескрипторы. Прежде вы легко могли выйти за пределы максимально
172 допустимого количества открытых файлов, если у вас было много пакетов в
176 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
177 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
180 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
181 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
182 online демоны не выполнят проверку целостности.
185 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
186 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
189 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
190 файлах, рядом с самими пакетами. Это может существенно повысить скорость
191 получения списка пакетов на файловых системах с большим размером блока.
196 @subsection Релиз 6.0.0
200 Журнал использует человеко-читаемый и легко обрабатываемый машиной
201 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
202 записей, вместо структурированных строчек RFC 3339. Старый формат
203 журналов не поддерживается @command{nncp-log}.
206 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
207 @command{nncp-daemon}.
210 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
211 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
212 выражением содержащим секунды, это можно использовать как возможность
213 вызова только при появлении исходящих пакетов.
216 @command{nncp-cronexpr} команда позволяет проверить корректность и
217 ожидаемый результат от указанного cron выражения.
222 @subsection Релиз 5.6.0
226 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
227 во время него ежесекундно.
230 В @option{calls} секции конфигурации появились опции
231 @option{autotoss}, @option{autotoss-doseen},
232 @option{autotoss-nofile}, @option{autotoss-nofreq},
233 @option{autotoss-noexec}, @option{autotoss-notrns}.
234 Вы можете настраивать опции автоматического tosser для каждого вызова.
237 Использовать vendoring вместо переопределения @env{GOPATH} во время
238 установки tarball, так как текущая минимальная версия Go это 1.12,
239 поддерживающая модули.
244 @subsection Релиз 5.5.1
248 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
249 в @file{config} во время установки.
254 @subsection Релиз 5.5.0
258 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
259 @command{nncp-bundle}, @command{nncp-stat} командах.
262 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
265 У команды @command{nncp-exec} появились @option{-use-tmp} и
266 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
270 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
271 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
274 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
279 @subsection Релиз 5.4.1
283 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
288 @subsection Релиз 5.4.0
292 Обновлены зависимые библиотеки.
295 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
296 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
297 реализация @command{redo} включена в tarball.
302 @subsection Релиз 5.3.3
306 Больше различных проверок в коде на ошибки.
309 Обновлены зависимые библиотеки.
314 @subsection Релиз 5.3.2
318 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
319 котором соединение могло не учитывать факты прихода пакетов и обрывать
325 @subsection Релиз 5.3.1
329 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
330 использующими внешние команды (@verb{#"|somecmd"#}).
333 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
334 каждому пакету в spool.
339 @subsection Релиз 5.3.0
343 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
346 Исправлено не происходящее дополнение (padding) handshake сообщений.
349 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
352 SP протокол порождает меньше вызовов записей (соответственно, и TCP
356 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
357 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
360 Раз в минуту, если нет более никакого другого трафика, посылаются PING
361 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
362 более не работоспособно.
365 @command{nncp-toss} использует lock-file для предотвращения
366 одновременной обработки зашифрованных пакетов.
371 @subsection Релиз 5.2.1
375 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
380 @subsection Релиз 5.2.0
384 Большинство команд по умолчанию показывают однострочный прогресс
385 выполнения операции. Появились @option{-progress}, @option{-noprogress}
386 опции командной строки, @option{noprogress} опция конфигурационного
390 Исправлен некорректный код возврата @command{nncp-check} команды,
391 который возвращал ошибку когда всё хорошо.
394 Проверка свободного места для пакетов, во время выполнения
395 @command{nncp-bundle -rx}.
400 @subsection Релиз 5.1.2
404 Исправлена @strong{критичная} уязвимость: аутентификация online нод
405 могла приводить к некорректной идентификации удалённой стороны, позволяя
406 скачивать чужие зашифрованные пакеты.
409 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
410 публичный ключ Noise были поменяны местами, что приводило к
411 невозможности online аутентификации нод.
414 Явная синхронизация (fsync) директорий для гарантированного
415 переименования файлов.
420 @subsection Релиз 5.1.1
424 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
429 @subsection Релиз 5.1.0
433 @command{nncp-file} может отправлять директории, автоматически на лету
437 Во время создания исходящих сообщений проверяется наличие свободного
438 места на файловой системе.
441 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
442 конфигурационного файла заменены на структуру
443 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
446 Добавлена @option{freq.maxsize} опция конфигурационного файл,
447 запрещающая ответ на файловый запрос больше заданного размера.
450 Возможность оповещения об успешно выполненных командах (exec) через
451 @option{notify.exec} опцию конфигурационного файла.
456 @subsection Релиз 5.0.0
460 @strong{Несовместимое} изменение формата конфигурационного файла:
461 YAML заменён на Hjson, из-за его гораздо большей простоты, без
462 заметной потери функционала и удобства.
465 @strong{Несовместимое} изменение формата простых пакетов. Работа со
466 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
467 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
468 смотря на то, что версия библиотеки ещё не проверена временем.
471 Возможность соединяться с удалёнными нодами не только по TCP, но и через
472 pipe вызов сторонней команды.
475 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
476 комментариев. Можно использовать @option{-nocomments} опцию для старого
480 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
481 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
484 Возможность переопределить umask процесса через опцию конфигурационного
488 По умолчанию файлы и директории создаются с 666/777 правами доступа,
489 позволяя управлять ими @command{umask}-ом.
492 Обновлены зависимости.
495 Полное использование go модулей для управления зависимостями
496 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
499 Отмена автоматического использования более новых версий GNU GPL
500 (лицензия проекта GNU GPLv3-только).
505 @subsection Релиз 4.1
507 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
511 @subsection Релиз 4.0
515 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
516 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
517 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
518 отсылать дешифрованные данные внешней команде. Старые версии не
522 Проверка доступного места перед копированием во время работы
523 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
526 @command{nncp-call} имеет возможность только показывать список пакетов
527 на удалённой машине, без их передачи.
530 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
533 Восстановлена работоспособность @option{xxrate} настройки в
534 @option{calls} секции конфигурационного файла.
537 Зависимые библиотеки обновлены.
540 Небольшие исправления ошибок.
543 Начало использования @code{go.mod} подсистемы.
548 @subsection Релиз 3.4
550 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
554 @subsection Релиз 3.3
558 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
559 проверяют существование @file{.seen} файла и расценивают его как то, что
560 файл уже был скачан. Возможно передача данных была осуществлена
561 сторонним способом и удалённая сторона должна быть оповещена об этом.
564 Если более высокоприоритетный пакет попадает в спул, то
565 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
566 низкоприоритетные передачи.
569 К средствам связанным с online-соединениями (@command{nncp-daemon},
570 @command{nncp-call}, @command{nncp-caller}) добавлен простой
571 ограничитель скорости.
574 Возможность задания приоритета символьными обозначениями:
575 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
578 Изменены значения приоритетов по-умолчанию:
579 для @command{nncp-exec} с 64 на 96,
580 для @command{nncp-freq} с 64 на 160,
581 для @command{nncp-file} с 196 на 224.
586 @subsection Релиз 3.2
589 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
590 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
591 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
592 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
593 Явное добавление @file{NNCP/} директории в архив восстанавливает
594 работоспособность с корректными tar архивами.
598 @subsection Релиз 3.1
601 Возможность отключать пересылку через промежуточные ноды используя
602 @verb{|-via -|} опцию командной строки.
606 @subsection Релиз 3.0
610 @strong{Несовместимое} изменение формата простых пакетов. Работа со
611 старыми версиями не поддерживается.
614 Добавлена возможность удалённого исполнения команд, путём
615 конфигурирования @option{exec} опции конфигурационного файла и
616 использования команды @command{nncp-exec}:
619 Команда @command{nncp-mail} заменена более гибкой и широкой
620 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
621 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
623 @option{sendmail} опция конфигурационного файла заменена на более гибкую
624 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
629 Возможность переопределить @option{via} опцию конфигурации для целевого
630 узла через @option{-via} опцию командной строки для следующих команд:
631 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
634 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
638 Exec команды вызываются с дополнительными переменными окружения
639 @env{NNCP_NICE} и @env{NNCP_SELF}.
642 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
643 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
644 аргументом @option{-replynice}.
647 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
648 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
649 @option{-noexec}, @option{-notrns}.
652 По-умолчанию @command{nncp-file} команда для
653 @option{-minsize}/@option{-chunked} опций использует
654 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
655 Это можно отключить указав нулевое значение.
660 @subsection Релиз 2.0
664 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
665 Работа со старыми версиями не поддерживается.
668 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
669 Одним криптографическим примитивом меньше.
672 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
673 криптографическим примитивом меньше (предполагая, что BLAKE2X
674 практически идентичен BLAKE2).
679 @subsection Релиз 1.0
683 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
684 со старыми версиями не поддерживается.
687 @command{nncp-bundle} команда может создавать потоки зашифрованных
688 пакетов или потреблять их. Это полезно когда речь идёт о
689 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
690 без создания промежуточного подготовленного ISO образа или работа с
691 ленточными накопителями).
694 @command{nncp-toss} команда может создавать @file{.seen} файлы,
695 предотвращая приём дублированных пакетов.
698 В команде @command{nncp-call} разрешается иметь только одного
699 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
700 входящих пакетов могут создать много горутин.
703 Возможность переопределить путь до spool директории и файла журнала
704 через аргумент командной строки или переменную окружения.
707 @command{nncp-rm} команда может удалять все исходящие/входящие,
708 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
713 @subsection Релиз 0.12
715 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
719 @subsection Релиз 0.11
721 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
725 @subsection Релиз 0.10
728 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
729 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
733 @subsection Релиз 0.9
736 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
737 команды. Они игнорировались.
741 @subsection Релиз 0.8
744 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
745 @option{-minsize} для передачи без разбиения на части была в байтах, а
750 @subsection Релиз 0.7
754 Возможность предоставлять данные для @command{nncp-file} через
755 стандартный ввод, используя временный зашифрованный файл для этого.
758 Появилась возможность передачи файлов разбитых на части, с сопутствующей
759 @command{nncp-reass} командой и @option{freqchunked} опцией
760 конфигурационного файла. Полезно для передачи больших файлов через
761 маленькие устройства хранения.
764 @option{freqminsize} опция конфигурационного файла, аналогичная
768 Опция @option{-force} команды @command{nncp-xfer} переименована в
769 @option{-mkdir} для ясности.
772 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
775 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
776 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
777 имели общий префикс и были сгруппированы для удобства.
780 Появилась команда @command{nncp-cfgenc}, позволяющая
781 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
782 без использования OpenPGP или других подобных инструментов.
785 Обновлены зависимые криптографические библиотеки.
790 @subsection Релиз 0.6
792 @item Появилась небольшая команда @command{nncp-rm}.
793 @item Обновлены зависимые криптографические библиотеки.
797 @subsection Релиз 0.5
800 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
801 @command{nncp-file} и @command{nncp-freq} командах.
805 @subsection Релиз 0.4
809 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
810 @command{nncp-daemon}: иногда они могли падать с segmentation fault
811 ошибкой (данные не терялись).
814 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
815 это короче и удобнее для использования.
818 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
819 позволяющая создать минималистичный урезанный конфигурационный файл без
820 приватных ключей, что полезно во время использования @command{nncp-xfer}.
825 @subsection Релиз 0.3
827 @item Исправлена совместимость с Go 1.6.
831 @subsection Релиз 0.2
835 @strong{Несовместимое} изменение формата пакета (магическое число тоже
836 изменено): поле размера пакета шифруется и не посылается в открытом виде.
839 @option{-minsize} опция даёт возможность автоматически дополнять
840 исходящие пакеты до указанного минимального размера.
843 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
844 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
845 Удалённая сторона сразу же оповещается об этом.
848 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
849 неактивность в online соединении, когда оно должно быть отключено. Она
850 может быть использована для сохранения соединения на долгое время.
853 @option{-maxonlinetime} опция даёт возможность указания максимального
854 возможного времени жизни соединения.
857 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
861 @command{nncp-pkt} команда может разжимать данные.