58 @subsection Релиз 7.3.1
62 Исправлена проблема с возможно остающимся открытым файловым
63 дескриптором в online командах.
66 Существенно снижено потребление памяти MTH хэширования.
71 @subsection Релиз 7.3.0
75 Поправлены проблемы работоспособности на 32-бит системах с большими файлами.
78 Возможность использовать конфигурацию в виде директории с набором
79 файлов. Появилась команда @command{nncp-cfgdir}.
84 @subsection Релиз 7.2.1
88 Небольшие оптимизации в online командах.
93 @subsection Релиз 7.2.0
97 Появилась @command{nncp-trns} команда для ручного создания транзитных пакетов.
100 Если у целевой ноды транзитного пакета задан @option{via} маршрут, то
101 использовать его, а не игнорировать.
104 Не отправлять multicast пакет оригинатору сообщения, очевидно точно
105 видящего свой собственный пакет.
108 Намного меньшее потребление памяти во время MTH хэширования когда
109 смещение равно нулю: когда пакет не является докачиванием, а например
110 проверяется @command{nncp-check} командой.
115 @subsection Релиз 7.1.1
119 Исправлено падение при fsync директорий после создания @file{.seen} файлов.
124 @subsection Релиз 7.1.0
128 Появилась возможность мультивещательной (multicast) рассылки пакетов.
129 Реализовано всего лишь дополнительным типом простых пакетов и изменением
130 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
133 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
134 команд использующих временный файл (stdin и @option{-use-tmp}).
137 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
140 Исправлено некорректное генерирование @file{.hdr} при использовании
144 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
148 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
149 проверку в бесконечный цикл.
152 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
155 @command{nncp-pkt} может парсить @file{.hdr} файлы.
160 @subsection Релиз 7.0.0
164 Минимальная требуемая версия Go 1.13.
167 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
168 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
169 изменение формата шифрованных файлов (всего что находится в spool
170 области) и формата @file{.meta} файла при chunked передаче.
172 Текущая реализация далека от оптимальной: в ней нет распараллеливания
173 вычислений и имеет повышенное потребление памяти: около 512 KiB на
174 каждый 1 GiB данных файла. Будущая оптимизация производительности и
175 потребления памяти не должна привести к изменению формата пакетов. Но
176 это всё равно в несколько раз быстрее BLAKE2b.
179 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
180 чтения с диска только предшествующей части, а не полностью всего файла,
184 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
187 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
188 уменьшая количество примитивов. А также заголовок шифрованного файла
189 теперь является ассоциированными данными при шифровании.
192 MultiCast Discovery использует
193 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
196 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
199 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
202 Обновлены зависимые библиотеки.
207 @subsection Релиз 6.6.0
211 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
212 ожидают завершения всех процессов фоновой проверки контрольных сумм,
213 после того как соединение закрыто.
216 Добавлена возможность определения адреса через multicast оповещение в
217 локальной сети, так называемый MCD (MultiCast Discovery).
222 @subsection Релиз 6.5.0
226 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
229 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
232 Исправлена гонка при закрытии файловых дескрипторов во время завершения
233 работы online протокола, которая могла привести к ошибке записи
234 принятого фрагмента пакета.
237 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
238 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
243 @subsection Релиз 6.4.0
247 Исправлена возможная гонка в online протоколе, приводящая к падению
253 @subsection Релиз 6.3.0
257 Исправлено возможное падение программы во время показа прогресса online
263 @subsection Релиз 6.2.1
267 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
272 @subsection Релиз 6.2.0
276 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
279 Очередной рефакторинг и упрощение системы журналирования.
280 Не должно быть видимых изменений для конечного пользователя.
285 @subsection Релиз 6.1.0
289 Оптимизация: большинство команд теперь не держат открытыми файловые
290 дескрипторы. Прежде вы легко могли выйти за пределы максимально
291 допустимого количества открытых файлов, если у вас было много пакетов в
295 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
296 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
299 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
300 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
301 online демоны не выполнят проверку целостности.
304 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
305 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
308 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
309 файлах, рядом с самими пакетами. Это может существенно повысить скорость
310 получения списка пакетов на файловых системах с большим размером блока.
315 @subsection Релиз 6.0.0
319 Журнал использует человеко-читаемый и легко обрабатываемый машиной
320 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
321 записей, вместо структурированных строчек RFC 3339. Старый формат
322 журналов не поддерживается @command{nncp-log}.
325 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
326 @command{nncp-daemon}.
329 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
330 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
331 выражением содержащим секунды, это можно использовать как возможность
332 вызова только при появлении исходящих пакетов.
335 @command{nncp-cronexpr} команда позволяет проверить корректность и
336 ожидаемый результат от указанного cron выражения.
341 @subsection Релиз 5.6.0
345 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
346 во время него ежесекундно.
349 В @option{calls} секции конфигурации появились опции
350 @option{autotoss}, @option{autotoss-doseen},
351 @option{autotoss-nofile}, @option{autotoss-nofreq},
352 @option{autotoss-noexec}, @option{autotoss-notrns}.
353 Вы можете настраивать опции автоматического tosser для каждого вызова.
356 Использовать vendoring вместо переопределения @env{GOPATH} во время
357 установки tarball, так как текущая минимальная версия Go это 1.12,
358 поддерживающая модули.
363 @subsection Релиз 5.5.1
367 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
368 в @file{config} во время установки.
373 @subsection Релиз 5.5.0
377 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
378 @command{nncp-bundle}, @command{nncp-stat} командах.
381 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
384 У команды @command{nncp-exec} появились @option{-use-tmp} и
385 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
389 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
390 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
393 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
398 @subsection Релиз 5.4.1
402 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
407 @subsection Релиз 5.4.0
411 Обновлены зависимые библиотеки.
414 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
415 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
416 реализация @command{redo} включена в tarball.
421 @subsection Релиз 5.3.3
425 Больше различных проверок в коде на ошибки.
428 Обновлены зависимые библиотеки.
433 @subsection Релиз 5.3.2
437 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
438 котором соединение могло не учитывать факты прихода пакетов и обрывать
444 @subsection Релиз 5.3.1
448 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
449 использующими внешние команды (@verb{#"|somecmd"#}).
452 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
453 каждому пакету в spool.
458 @subsection Релиз 5.3.0
462 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
465 Исправлено не происходящее дополнение (padding) handshake сообщений.
468 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
471 SP протокол порождает меньше вызовов записей (соответственно, и TCP
475 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
476 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
479 Раз в минуту, если нет более никакого другого трафика, посылаются PING
480 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
481 более не работоспособно.
484 @command{nncp-toss} использует lock-file для предотвращения
485 одновременной обработки зашифрованных пакетов.
490 @subsection Релиз 5.2.1
494 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
499 @subsection Релиз 5.2.0
503 Большинство команд по умолчанию показывают однострочный прогресс
504 выполнения операции. Появились @option{-progress}, @option{-noprogress}
505 опции командной строки, @option{noprogress} опция конфигурационного
509 Исправлен некорректный код возврата @command{nncp-check} команды,
510 который возвращал ошибку когда всё хорошо.
513 Проверка свободного места для пакетов, во время выполнения
514 @command{nncp-bundle -rx}.
519 @subsection Релиз 5.1.2
523 Исправлена @strong{критичная} уязвимость: аутентификация online нод
524 могла приводить к некорректной идентификации удалённой стороны, позволяя
525 скачивать чужие зашифрованные пакеты.
528 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
529 публичный ключ Noise были поменяны местами, что приводило к
530 невозможности online аутентификации нод.
533 Явная синхронизация (fsync) директорий для гарантированного
534 переименования файлов.
539 @subsection Релиз 5.1.1
543 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
548 @subsection Релиз 5.1.0
552 @command{nncp-file} может отправлять директории, автоматически на лету
556 Во время создания исходящих сообщений проверяется наличие свободного
557 места на файловой системе.
560 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
561 конфигурационного файла заменены на структуру
562 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
565 Добавлена @option{freq.maxsize} опция конфигурационного файл,
566 запрещающая ответ на файловый запрос больше заданного размера.
569 Возможность оповещения об успешно выполненных командах (exec) через
570 @option{notify.exec} опцию конфигурационного файла.
575 @subsection Релиз 5.0.0
579 @strong{Несовместимое} изменение формата конфигурационного файла:
580 YAML заменён на Hjson, из-за его гораздо большей простоты, без
581 заметной потери функционала и удобства.
584 @strong{Несовместимое} изменение формата простых пакетов. Работа со
585 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
586 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
587 смотря на то, что версия библиотеки ещё не проверена временем.
590 Возможность соединяться с удалёнными нодами не только по TCP, но и через
591 pipe вызов сторонней команды.
594 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
595 комментариев. Можно использовать @option{-nocomments} опцию для старого
599 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
600 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
603 Возможность переопределить umask процесса через опцию конфигурационного
607 По умолчанию файлы и директории создаются с 666/777 правами доступа,
608 позволяя управлять ими @command{umask}-ом.
611 Обновлены зависимости.
614 Полное использование go модулей для управления зависимостями
615 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
618 Отмена автоматического использования более новых версий GNU GPL
619 (лицензия проекта GNU GPLv3-только).
624 @subsection Релиз 4.1
626 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
630 @subsection Релиз 4.0
634 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
635 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
636 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
637 отсылать дешифрованные данные внешней команде. Старые версии не
641 Проверка доступного места перед копированием во время работы
642 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
645 @command{nncp-call} имеет возможность только показывать список пакетов
646 на удалённой машине, без их передачи.
649 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
652 Восстановлена работоспособность @option{xxrate} настройки в
653 @option{calls} секции конфигурационного файла.
656 Зависимые библиотеки обновлены.
659 Небольшие исправления ошибок.
662 Начало использования @code{go.mod} подсистемы.
667 @subsection Релиз 3.4
669 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
673 @subsection Релиз 3.3
677 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
678 проверяют существование @file{.seen} файла и расценивают его как то, что
679 файл уже был скачан. Возможно передача данных была осуществлена
680 сторонним способом и удалённая сторона должна быть оповещена об этом.
683 Если более высокоприоритетный пакет попадает в спул, то
684 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
685 низкоприоритетные передачи.
688 К средствам связанным с online-соединениями (@command{nncp-daemon},
689 @command{nncp-call}, @command{nncp-caller}) добавлен простой
690 ограничитель скорости.
693 Возможность задания приоритета символьными обозначениями:
694 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
697 Изменены значения приоритетов по-умолчанию:
698 для @command{nncp-exec} с 64 на 96,
699 для @command{nncp-freq} с 64 на 160,
700 для @command{nncp-file} с 196 на 224.
705 @subsection Релиз 3.2
708 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
709 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
710 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
711 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
712 Явное добавление @file{NNCP/} директории в архив восстанавливает
713 работоспособность с корректными tar архивами.
717 @subsection Релиз 3.1
720 Возможность отключать пересылку через промежуточные ноды используя
721 @verb{|-via -|} опцию командной строки.
725 @subsection Релиз 3.0
729 @strong{Несовместимое} изменение формата простых пакетов. Работа со
730 старыми версиями не поддерживается.
733 Добавлена возможность удалённого исполнения команд, путём
734 конфигурирования @option{exec} опции конфигурационного файла и
735 использования команды @command{nncp-exec}:
738 Команда @command{nncp-mail} заменена более гибкой и широкой
739 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
740 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
742 @option{sendmail} опция конфигурационного файла заменена на более гибкую
743 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
748 Возможность переопределить @option{via} опцию конфигурации для целевого
749 узла через @option{-via} опцию командной строки для следующих команд:
750 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
753 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
757 Exec команды вызываются с дополнительными переменными окружения
758 @env{NNCP_NICE} и @env{NNCP_SELF}.
761 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
762 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
763 аргументом @option{-replynice}.
766 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
767 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
768 @option{-noexec}, @option{-notrns}.
771 По-умолчанию @command{nncp-file} команда для
772 @option{-minsize}/@option{-chunked} опций использует
773 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
774 Это можно отключить указав нулевое значение.
779 @subsection Релиз 2.0
783 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
784 Работа со старыми версиями не поддерживается.
787 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
788 Одним криптографическим примитивом меньше.
791 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
792 криптографическим примитивом меньше (предполагая, что BLAKE2X
793 практически идентичен BLAKE2).
798 @subsection Релиз 1.0
802 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
803 со старыми версиями не поддерживается.
806 @command{nncp-bundle} команда может создавать потоки зашифрованных
807 пакетов или потреблять их. Это полезно когда речь идёт о
808 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
809 без создания промежуточного подготовленного ISO образа или работа с
810 ленточными накопителями).
813 @command{nncp-toss} команда может создавать @file{.seen} файлы,
814 предотвращая приём дублированных пакетов.
817 В команде @command{nncp-call} разрешается иметь только одного
818 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
819 входящих пакетов могут создать много горутин.
822 Возможность переопределить путь до spool директории и файла журнала
823 через аргумент командной строки или переменную окружения.
826 @command{nncp-rm} команда может удалять все исходящие/входящие,
827 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
832 @subsection Релиз 0.12
834 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
838 @subsection Релиз 0.11
840 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
844 @subsection Релиз 0.10
847 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
848 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
852 @subsection Релиз 0.9
855 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
856 команды. Они игнорировались.
860 @subsection Релиз 0.8
863 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
864 @option{-minsize} для передачи без разбиения на части была в байтах, а
869 @subsection Релиз 0.7
873 Возможность предоставлять данные для @command{nncp-file} через
874 стандартный ввод, используя временный зашифрованный файл для этого.
877 Появилась возможность передачи файлов разбитых на части, с сопутствующей
878 @command{nncp-reass} командой и @option{freqchunked} опцией
879 конфигурационного файла. Полезно для передачи больших файлов через
880 маленькие устройства хранения.
883 @option{freqminsize} опция конфигурационного файла, аналогичная
887 Опция @option{-force} команды @command{nncp-xfer} переименована в
888 @option{-mkdir} для ясности.
891 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
894 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
895 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
896 имели общий префикс и были сгруппированы для удобства.
899 Появилась команда @command{nncp-cfgenc}, позволяющая
900 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
901 без использования OpenPGP или других подобных инструментов.
904 Обновлены зависимые криптографические библиотеки.
909 @subsection Релиз 0.6
911 @item Появилась небольшая команда @command{nncp-rm}.
912 @item Обновлены зависимые криптографические библиотеки.
916 @subsection Релиз 0.5
919 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
920 @command{nncp-file} и @command{nncp-freq} командах.
924 @subsection Релиз 0.4
928 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
929 @command{nncp-daemon}: иногда они могли падать с segmentation fault
930 ошибкой (данные не терялись).
933 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
934 это короче и удобнее для использования.
937 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
938 позволяющая создать минималистичный урезанный конфигурационный файл без
939 приватных ключей, что полезно во время использования @command{nncp-xfer}.
944 @subsection Релиз 0.3
946 @item Исправлена совместимость с Go 1.6.
950 @subsection Релиз 0.2
954 @strong{Несовместимое} изменение формата пакета (магическое число тоже
955 изменено): поле размера пакета шифруется и не посылается в открытом виде.
958 @option{-minsize} опция даёт возможность автоматически дополнять
959 исходящие пакеты до указанного минимального размера.
962 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
963 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
964 Удалённая сторона сразу же оповещается об этом.
967 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
968 неактивность в online соединении, когда оно должно быть отключено. Она
969 может быть использована для сохранения соединения на долгое время.
972 @option{-maxonlinetime} опция даёт возможность указания максимального
973 возможного времени жизни соединения.
976 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
980 @command{nncp-pkt} команда может разжимать данные.