5 @subsection Релиз 7.2.0
9 Появилась @command{nncp-trns} команда для ручного создания транзитных пакетов.
14 @subsection Релиз 7.1.1
18 Исправлено падение при fsync директорий после создания @file{.seen} файлов.
23 @subsection Релиз 7.1.0
27 Появилась возможность мультивещательной (multicast) рассылки пакетов.
28 Реализовано всего лишь дополнительным типом простых пакетов и изменением
29 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
32 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
33 команд использующих временный файл (stdin и @option{-use-tmp}).
36 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
39 Исправлено некорректное генерирование @file{.hdr} при использовании
43 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
47 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
48 проверку в бесконечный цикл.
51 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
54 @command{nncp-pkt} может парсить @file{.hdr} файлы.
59 @subsection Релиз 7.0.0
63 Минимальная требуемая версия Go 1.13.
66 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
67 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
68 изменение формата шифрованных файлов (всего что находится в spool
69 области) и формата @file{.meta} файла при chunked передаче.
71 Текущая реализация далека от оптимальной: в ней нет распараллеливания
72 вычислений и имеет повышенное потребление памяти: около 512 KiB на
73 каждый 1 GiB данных файла. Будущая оптимизация производительности и
74 потребления памяти не должна привести к изменению формата пакетов. Но
75 это всё равно в несколько раз быстрее BLAKE2b.
78 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
79 чтения с диска только предшествующей части, а не полностью всего файла,
83 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
86 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
87 уменьшая количество примитивов. А также заголовок шифрованного файла
88 теперь является ассоциированными данными при шифровании.
91 MultiCast Discovery использует
92 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
95 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
98 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
101 Обновлены зависимые библиотеки.
106 @subsection Релиз 6.6.0
110 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
111 ожидают завершения всех процессов фоновой проверки контрольных сумм,
112 после того как соединение закрыто.
115 Добавлена возможность определения адреса через multicast оповещение в
116 локальной сети, так называемый MCD (MultiCast Discovery).
121 @subsection Релиз 6.5.0
125 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
128 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
131 Исправлена гонка при закрытии файловых дескрипторов во время завершения
132 работы online протокола, которая могла привести к ошибке записи
133 принятого фрагмента пакета.
136 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
137 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
142 @subsection Релиз 6.4.0
146 Исправлена возможная гонка в online протоколе, приводящая к падению
152 @subsection Релиз 6.3.0
156 Исправлено возможное падение программы во время показа прогресса online
162 @subsection Релиз 6.2.1
166 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
171 @subsection Релиз 6.2.0
175 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
178 Очередной рефакторинг и упрощение системы журналирования.
179 Не должно быть видимых изменений для конечного пользователя.
184 @subsection Релиз 6.1.0
188 Оптимизация: большинство команд теперь не держат открытыми файловые
189 дескрипторы. Прежде вы легко могли выйти за пределы максимально
190 допустимого количества открытых файлов, если у вас было много пакетов в
194 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
195 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
198 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
199 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
200 online демоны не выполнят проверку целостности.
203 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
204 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
207 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
208 файлах, рядом с самими пакетами. Это может существенно повысить скорость
209 получения списка пакетов на файловых системах с большим размером блока.
214 @subsection Релиз 6.0.0
218 Журнал использует человеко-читаемый и легко обрабатываемый машиной
219 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
220 записей, вместо структурированных строчек RFC 3339. Старый формат
221 журналов не поддерживается @command{nncp-log}.
224 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
225 @command{nncp-daemon}.
228 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
229 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
230 выражением содержащим секунды, это можно использовать как возможность
231 вызова только при появлении исходящих пакетов.
234 @command{nncp-cronexpr} команда позволяет проверить корректность и
235 ожидаемый результат от указанного cron выражения.
240 @subsection Релиз 5.6.0
244 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
245 во время него ежесекундно.
248 В @option{calls} секции конфигурации появились опции
249 @option{autotoss}, @option{autotoss-doseen},
250 @option{autotoss-nofile}, @option{autotoss-nofreq},
251 @option{autotoss-noexec}, @option{autotoss-notrns}.
252 Вы можете настраивать опции автоматического tosser для каждого вызова.
255 Использовать vendoring вместо переопределения @env{GOPATH} во время
256 установки tarball, так как текущая минимальная версия Go это 1.12,
257 поддерживающая модули.
262 @subsection Релиз 5.5.1
266 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
267 в @file{config} во время установки.
272 @subsection Релиз 5.5.0
276 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
277 @command{nncp-bundle}, @command{nncp-stat} командах.
280 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
283 У команды @command{nncp-exec} появились @option{-use-tmp} и
284 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
288 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
289 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
292 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
297 @subsection Релиз 5.4.1
301 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
306 @subsection Релиз 5.4.0
310 Обновлены зависимые библиотеки.
313 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
314 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
315 реализация @command{redo} включена в tarball.
320 @subsection Релиз 5.3.3
324 Больше различных проверок в коде на ошибки.
327 Обновлены зависимые библиотеки.
332 @subsection Релиз 5.3.2
336 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
337 котором соединение могло не учитывать факты прихода пакетов и обрывать
343 @subsection Релиз 5.3.1
347 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
348 использующими внешние команды (@verb{#"|somecmd"#}).
351 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
352 каждому пакету в spool.
357 @subsection Релиз 5.3.0
361 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
364 Исправлено не происходящее дополнение (padding) handshake сообщений.
367 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
370 SP протокол порождает меньше вызовов записей (соответственно, и TCP
374 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
375 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
378 Раз в минуту, если нет более никакого другого трафика, посылаются PING
379 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
380 более не работоспособно.
383 @command{nncp-toss} использует lock-file для предотвращения
384 одновременной обработки зашифрованных пакетов.
389 @subsection Релиз 5.2.1
393 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
398 @subsection Релиз 5.2.0
402 Большинство команд по умолчанию показывают однострочный прогресс
403 выполнения операции. Появились @option{-progress}, @option{-noprogress}
404 опции командной строки, @option{noprogress} опция конфигурационного
408 Исправлен некорректный код возврата @command{nncp-check} команды,
409 который возвращал ошибку когда всё хорошо.
412 Проверка свободного места для пакетов, во время выполнения
413 @command{nncp-bundle -rx}.
418 @subsection Релиз 5.1.2
422 Исправлена @strong{критичная} уязвимость: аутентификация online нод
423 могла приводить к некорректной идентификации удалённой стороны, позволяя
424 скачивать чужие зашифрованные пакеты.
427 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
428 публичный ключ Noise были поменяны местами, что приводило к
429 невозможности online аутентификации нод.
432 Явная синхронизация (fsync) директорий для гарантированного
433 переименования файлов.
438 @subsection Релиз 5.1.1
442 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
447 @subsection Релиз 5.1.0
451 @command{nncp-file} может отправлять директории, автоматически на лету
455 Во время создания исходящих сообщений проверяется наличие свободного
456 места на файловой системе.
459 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
460 конфигурационного файла заменены на структуру
461 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
464 Добавлена @option{freq.maxsize} опция конфигурационного файл,
465 запрещающая ответ на файловый запрос больше заданного размера.
468 Возможность оповещения об успешно выполненных командах (exec) через
469 @option{notify.exec} опцию конфигурационного файла.
474 @subsection Релиз 5.0.0
478 @strong{Несовместимое} изменение формата конфигурационного файла:
479 YAML заменён на Hjson, из-за его гораздо большей простоты, без
480 заметной потери функционала и удобства.
483 @strong{Несовместимое} изменение формата простых пакетов. Работа со
484 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
485 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
486 смотря на то, что версия библиотеки ещё не проверена временем.
489 Возможность соединяться с удалёнными нодами не только по TCP, но и через
490 pipe вызов сторонней команды.
493 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
494 комментариев. Можно использовать @option{-nocomments} опцию для старого
498 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
499 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
502 Возможность переопределить umask процесса через опцию конфигурационного
506 По умолчанию файлы и директории создаются с 666/777 правами доступа,
507 позволяя управлять ими @command{umask}-ом.
510 Обновлены зависимости.
513 Полное использование go модулей для управления зависимостями
514 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
517 Отмена автоматического использования более новых версий GNU GPL
518 (лицензия проекта GNU GPLv3-только).
523 @subsection Релиз 4.1
525 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
529 @subsection Релиз 4.0
533 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
534 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
535 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
536 отсылать дешифрованные данные внешней команде. Старые версии не
540 Проверка доступного места перед копированием во время работы
541 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
544 @command{nncp-call} имеет возможность только показывать список пакетов
545 на удалённой машине, без их передачи.
548 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
551 Восстановлена работоспособность @option{xxrate} настройки в
552 @option{calls} секции конфигурационного файла.
555 Зависимые библиотеки обновлены.
558 Небольшие исправления ошибок.
561 Начало использования @code{go.mod} подсистемы.
566 @subsection Релиз 3.4
568 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
572 @subsection Релиз 3.3
576 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
577 проверяют существование @file{.seen} файла и расценивают его как то, что
578 файл уже был скачан. Возможно передача данных была осуществлена
579 сторонним способом и удалённая сторона должна быть оповещена об этом.
582 Если более высокоприоритетный пакет попадает в спул, то
583 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
584 низкоприоритетные передачи.
587 К средствам связанным с online-соединениями (@command{nncp-daemon},
588 @command{nncp-call}, @command{nncp-caller}) добавлен простой
589 ограничитель скорости.
592 Возможность задания приоритета символьными обозначениями:
593 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
596 Изменены значения приоритетов по-умолчанию:
597 для @command{nncp-exec} с 64 на 96,
598 для @command{nncp-freq} с 64 на 160,
599 для @command{nncp-file} с 196 на 224.
604 @subsection Релиз 3.2
607 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
608 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
609 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
610 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
611 Явное добавление @file{NNCP/} директории в архив восстанавливает
612 работоспособность с корректными tar архивами.
616 @subsection Релиз 3.1
619 Возможность отключать пересылку через промежуточные ноды используя
620 @verb{|-via -|} опцию командной строки.
624 @subsection Релиз 3.0
628 @strong{Несовместимое} изменение формата простых пакетов. Работа со
629 старыми версиями не поддерживается.
632 Добавлена возможность удалённого исполнения команд, путём
633 конфигурирования @option{exec} опции конфигурационного файла и
634 использования команды @command{nncp-exec}:
637 Команда @command{nncp-mail} заменена более гибкой и широкой
638 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
639 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
641 @option{sendmail} опция конфигурационного файла заменена на более гибкую
642 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
647 Возможность переопределить @option{via} опцию конфигурации для целевого
648 узла через @option{-via} опцию командной строки для следующих команд:
649 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
652 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
656 Exec команды вызываются с дополнительными переменными окружения
657 @env{NNCP_NICE} и @env{NNCP_SELF}.
660 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
661 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
662 аргументом @option{-replynice}.
665 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
666 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
667 @option{-noexec}, @option{-notrns}.
670 По-умолчанию @command{nncp-file} команда для
671 @option{-minsize}/@option{-chunked} опций использует
672 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
673 Это можно отключить указав нулевое значение.
678 @subsection Релиз 2.0
682 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
683 Работа со старыми версиями не поддерживается.
686 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
687 Одним криптографическим примитивом меньше.
690 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
691 криптографическим примитивом меньше (предполагая, что BLAKE2X
692 практически идентичен BLAKE2).
697 @subsection Релиз 1.0
701 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
702 со старыми версиями не поддерживается.
705 @command{nncp-bundle} команда может создавать потоки зашифрованных
706 пакетов или потреблять их. Это полезно когда речь идёт о
707 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
708 без создания промежуточного подготовленного ISO образа или работа с
709 ленточными накопителями).
712 @command{nncp-toss} команда может создавать @file{.seen} файлы,
713 предотвращая приём дублированных пакетов.
716 В команде @command{nncp-call} разрешается иметь только одного
717 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
718 входящих пакетов могут создать много горутин.
721 Возможность переопределить путь до spool директории и файла журнала
722 через аргумент командной строки или переменную окружения.
725 @command{nncp-rm} команда может удалять все исходящие/входящие,
726 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
731 @subsection Релиз 0.12
733 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
737 @subsection Релиз 0.11
739 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
743 @subsection Релиз 0.10
746 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
747 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
751 @subsection Релиз 0.9
754 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
755 команды. Они игнорировались.
759 @subsection Релиз 0.8
762 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
763 @option{-minsize} для передачи без разбиения на части была в байтах, а
768 @subsection Релиз 0.7
772 Возможность предоставлять данные для @command{nncp-file} через
773 стандартный ввод, используя временный зашифрованный файл для этого.
776 Появилась возможность передачи файлов разбитых на части, с сопутствующей
777 @command{nncp-reass} командой и @option{freqchunked} опцией
778 конфигурационного файла. Полезно для передачи больших файлов через
779 маленькие устройства хранения.
782 @option{freqminsize} опция конфигурационного файла, аналогичная
786 Опция @option{-force} команды @command{nncp-xfer} переименована в
787 @option{-mkdir} для ясности.
790 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
793 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
794 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
795 имели общий префикс и были сгруппированы для удобства.
798 Появилась команда @command{nncp-cfgenc}, позволяющая
799 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
800 без использования OpenPGP или других подобных инструментов.
803 Обновлены зависимые криптографические библиотеки.
808 @subsection Релиз 0.6
810 @item Появилась небольшая команда @command{nncp-rm}.
811 @item Обновлены зависимые криптографические библиотеки.
815 @subsection Релиз 0.5
818 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
819 @command{nncp-file} и @command{nncp-freq} командах.
823 @subsection Релиз 0.4
827 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
828 @command{nncp-daemon}: иногда они могли падать с segmentation fault
829 ошибкой (данные не терялись).
832 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
833 это короче и удобнее для использования.
836 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
837 позволяющая создать минималистичный урезанный конфигурационный файл без
838 приватных ключей, что полезно во время использования @command{nncp-xfer}.
843 @subsection Релиз 0.3
845 @item Исправлена совместимость с Go 1.6.
849 @subsection Релиз 0.2
853 @strong{Несовместимое} изменение формата пакета (магическое число тоже
854 изменено): поле размера пакета шифруется и не посылается в открытом виде.
857 @option{-minsize} опция даёт возможность автоматически дополнять
858 исходящие пакеты до указанного минимального размера.
861 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
862 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
863 Удалённая сторона сразу же оповещается об этом.
866 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
867 неактивность в online соединении, когда оно должно быть отключено. Она
868 может быть использована для сохранения соединения на долгое время.
871 @option{-maxonlinetime} опция даёт возможность указания максимального
872 возможного времени жизни соединения.
875 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
879 @command{nncp-pkt} команда может разжимать данные.