57 @subsection Релиз 7.3.0
61 Возможность использовать конфигурацию в виде директории с набором
62 файлов. Появилась команда @command{nncp-cfgdir}.
67 @subsection Релиз 7.2.1
71 Небольшие оптимизации в online командах.
76 @subsection Релиз 7.2.0
80 Появилась @command{nncp-trns} команда для ручного создания транзитных пакетов.
83 Если у целевой ноды транзитного пакета задан @option{via} маршрут, то
84 использовать его, а не игнорировать.
87 Не отправлять multicast пакет оригинатору сообщения, очевидно точно
88 видящего свой собственный пакет.
91 Намного меньшее потребление памяти во время MTH хэширования когда
92 смещение равно нулю: когда пакет не является докачиванием, а например
93 проверяется @command{nncp-check} командой.
98 @subsection Релиз 7.1.1
102 Исправлено падение при fsync директорий после создания @file{.seen} файлов.
107 @subsection Релиз 7.1.0
111 Появилась возможность мультивещательной (multicast) рассылки пакетов.
112 Реализовано всего лишь дополнительным типом простых пакетов и изменением
113 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
116 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
117 команд использующих временный файл (stdin и @option{-use-tmp}).
120 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
123 Исправлено некорректное генерирование @file{.hdr} при использовании
127 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
131 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
132 проверку в бесконечный цикл.
135 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
138 @command{nncp-pkt} может парсить @file{.hdr} файлы.
143 @subsection Релиз 7.0.0
147 Минимальная требуемая версия Go 1.13.
150 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
151 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
152 изменение формата шифрованных файлов (всего что находится в spool
153 области) и формата @file{.meta} файла при chunked передаче.
155 Текущая реализация далека от оптимальной: в ней нет распараллеливания
156 вычислений и имеет повышенное потребление памяти: около 512 KiB на
157 каждый 1 GiB данных файла. Будущая оптимизация производительности и
158 потребления памяти не должна привести к изменению формата пакетов. Но
159 это всё равно в несколько раз быстрее BLAKE2b.
162 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
163 чтения с диска только предшествующей части, а не полностью всего файла,
167 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
170 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
171 уменьшая количество примитивов. А также заголовок шифрованного файла
172 теперь является ассоциированными данными при шифровании.
175 MultiCast Discovery использует
176 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
179 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
182 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
185 Обновлены зависимые библиотеки.
190 @subsection Релиз 6.6.0
194 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
195 ожидают завершения всех процессов фоновой проверки контрольных сумм,
196 после того как соединение закрыто.
199 Добавлена возможность определения адреса через multicast оповещение в
200 локальной сети, так называемый MCD (MultiCast Discovery).
205 @subsection Релиз 6.5.0
209 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
212 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
215 Исправлена гонка при закрытии файловых дескрипторов во время завершения
216 работы online протокола, которая могла привести к ошибке записи
217 принятого фрагмента пакета.
220 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
221 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
226 @subsection Релиз 6.4.0
230 Исправлена возможная гонка в online протоколе, приводящая к падению
236 @subsection Релиз 6.3.0
240 Исправлено возможное падение программы во время показа прогресса online
246 @subsection Релиз 6.2.1
250 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
255 @subsection Релиз 6.2.0
259 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
262 Очередной рефакторинг и упрощение системы журналирования.
263 Не должно быть видимых изменений для конечного пользователя.
268 @subsection Релиз 6.1.0
272 Оптимизация: большинство команд теперь не держат открытыми файловые
273 дескрипторы. Прежде вы легко могли выйти за пределы максимально
274 допустимого количества открытых файлов, если у вас было много пакетов в
278 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
279 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
282 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
283 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
284 online демоны не выполнят проверку целостности.
287 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
288 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
291 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
292 файлах, рядом с самими пакетами. Это может существенно повысить скорость
293 получения списка пакетов на файловых системах с большим размером блока.
298 @subsection Релиз 6.0.0
302 Журнал использует человеко-читаемый и легко обрабатываемый машиной
303 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
304 записей, вместо структурированных строчек RFC 3339. Старый формат
305 журналов не поддерживается @command{nncp-log}.
308 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
309 @command{nncp-daemon}.
312 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
313 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
314 выражением содержащим секунды, это можно использовать как возможность
315 вызова только при появлении исходящих пакетов.
318 @command{nncp-cronexpr} команда позволяет проверить корректность и
319 ожидаемый результат от указанного cron выражения.
324 @subsection Релиз 5.6.0
328 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
329 во время него ежесекундно.
332 В @option{calls} секции конфигурации появились опции
333 @option{autotoss}, @option{autotoss-doseen},
334 @option{autotoss-nofile}, @option{autotoss-nofreq},
335 @option{autotoss-noexec}, @option{autotoss-notrns}.
336 Вы можете настраивать опции автоматического tosser для каждого вызова.
339 Использовать vendoring вместо переопределения @env{GOPATH} во время
340 установки tarball, так как текущая минимальная версия Go это 1.12,
341 поддерживающая модули.
346 @subsection Релиз 5.5.1
350 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
351 в @file{config} во время установки.
356 @subsection Релиз 5.5.0
360 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
361 @command{nncp-bundle}, @command{nncp-stat} командах.
364 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
367 У команды @command{nncp-exec} появились @option{-use-tmp} и
368 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
372 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
373 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
376 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
381 @subsection Релиз 5.4.1
385 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
390 @subsection Релиз 5.4.0
394 Обновлены зависимые библиотеки.
397 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
398 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
399 реализация @command{redo} включена в tarball.
404 @subsection Релиз 5.3.3
408 Больше различных проверок в коде на ошибки.
411 Обновлены зависимые библиотеки.
416 @subsection Релиз 5.3.2
420 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
421 котором соединение могло не учитывать факты прихода пакетов и обрывать
427 @subsection Релиз 5.3.1
431 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
432 использующими внешние команды (@verb{#"|somecmd"#}).
435 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
436 каждому пакету в spool.
441 @subsection Релиз 5.3.0
445 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
448 Исправлено не происходящее дополнение (padding) handshake сообщений.
451 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
454 SP протокол порождает меньше вызовов записей (соответственно, и TCP
458 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
459 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
462 Раз в минуту, если нет более никакого другого трафика, посылаются PING
463 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
464 более не работоспособно.
467 @command{nncp-toss} использует lock-file для предотвращения
468 одновременной обработки зашифрованных пакетов.
473 @subsection Релиз 5.2.1
477 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
482 @subsection Релиз 5.2.0
486 Большинство команд по умолчанию показывают однострочный прогресс
487 выполнения операции. Появились @option{-progress}, @option{-noprogress}
488 опции командной строки, @option{noprogress} опция конфигурационного
492 Исправлен некорректный код возврата @command{nncp-check} команды,
493 который возвращал ошибку когда всё хорошо.
496 Проверка свободного места для пакетов, во время выполнения
497 @command{nncp-bundle -rx}.
502 @subsection Релиз 5.1.2
506 Исправлена @strong{критичная} уязвимость: аутентификация online нод
507 могла приводить к некорректной идентификации удалённой стороны, позволяя
508 скачивать чужие зашифрованные пакеты.
511 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
512 публичный ключ Noise были поменяны местами, что приводило к
513 невозможности online аутентификации нод.
516 Явная синхронизация (fsync) директорий для гарантированного
517 переименования файлов.
522 @subsection Релиз 5.1.1
526 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
531 @subsection Релиз 5.1.0
535 @command{nncp-file} может отправлять директории, автоматически на лету
539 Во время создания исходящих сообщений проверяется наличие свободного
540 места на файловой системе.
543 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
544 конфигурационного файла заменены на структуру
545 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
548 Добавлена @option{freq.maxsize} опция конфигурационного файл,
549 запрещающая ответ на файловый запрос больше заданного размера.
552 Возможность оповещения об успешно выполненных командах (exec) через
553 @option{notify.exec} опцию конфигурационного файла.
558 @subsection Релиз 5.0.0
562 @strong{Несовместимое} изменение формата конфигурационного файла:
563 YAML заменён на Hjson, из-за его гораздо большей простоты, без
564 заметной потери функционала и удобства.
567 @strong{Несовместимое} изменение формата простых пакетов. Работа со
568 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
569 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
570 смотря на то, что версия библиотеки ещё не проверена временем.
573 Возможность соединяться с удалёнными нодами не только по TCP, но и через
574 pipe вызов сторонней команды.
577 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
578 комментариев. Можно использовать @option{-nocomments} опцию для старого
582 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
583 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
586 Возможность переопределить umask процесса через опцию конфигурационного
590 По умолчанию файлы и директории создаются с 666/777 правами доступа,
591 позволяя управлять ими @command{umask}-ом.
594 Обновлены зависимости.
597 Полное использование go модулей для управления зависимостями
598 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
601 Отмена автоматического использования более новых версий GNU GPL
602 (лицензия проекта GNU GPLv3-только).
607 @subsection Релиз 4.1
609 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
613 @subsection Релиз 4.0
617 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
618 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
619 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
620 отсылать дешифрованные данные внешней команде. Старые версии не
624 Проверка доступного места перед копированием во время работы
625 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
628 @command{nncp-call} имеет возможность только показывать список пакетов
629 на удалённой машине, без их передачи.
632 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
635 Восстановлена работоспособность @option{xxrate} настройки в
636 @option{calls} секции конфигурационного файла.
639 Зависимые библиотеки обновлены.
642 Небольшие исправления ошибок.
645 Начало использования @code{go.mod} подсистемы.
650 @subsection Релиз 3.4
652 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
656 @subsection Релиз 3.3
660 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
661 проверяют существование @file{.seen} файла и расценивают его как то, что
662 файл уже был скачан. Возможно передача данных была осуществлена
663 сторонним способом и удалённая сторона должна быть оповещена об этом.
666 Если более высокоприоритетный пакет попадает в спул, то
667 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
668 низкоприоритетные передачи.
671 К средствам связанным с online-соединениями (@command{nncp-daemon},
672 @command{nncp-call}, @command{nncp-caller}) добавлен простой
673 ограничитель скорости.
676 Возможность задания приоритета символьными обозначениями:
677 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
680 Изменены значения приоритетов по-умолчанию:
681 для @command{nncp-exec} с 64 на 96,
682 для @command{nncp-freq} с 64 на 160,
683 для @command{nncp-file} с 196 на 224.
688 @subsection Релиз 3.2
691 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
692 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
693 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
694 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
695 Явное добавление @file{NNCP/} директории в архив восстанавливает
696 работоспособность с корректными tar архивами.
700 @subsection Релиз 3.1
703 Возможность отключать пересылку через промежуточные ноды используя
704 @verb{|-via -|} опцию командной строки.
708 @subsection Релиз 3.0
712 @strong{Несовместимое} изменение формата простых пакетов. Работа со
713 старыми версиями не поддерживается.
716 Добавлена возможность удалённого исполнения команд, путём
717 конфигурирования @option{exec} опции конфигурационного файла и
718 использования команды @command{nncp-exec}:
721 Команда @command{nncp-mail} заменена более гибкой и широкой
722 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
723 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
725 @option{sendmail} опция конфигурационного файла заменена на более гибкую
726 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
731 Возможность переопределить @option{via} опцию конфигурации для целевого
732 узла через @option{-via} опцию командной строки для следующих команд:
733 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
736 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
740 Exec команды вызываются с дополнительными переменными окружения
741 @env{NNCP_NICE} и @env{NNCP_SELF}.
744 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
745 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
746 аргументом @option{-replynice}.
749 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
750 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
751 @option{-noexec}, @option{-notrns}.
754 По-умолчанию @command{nncp-file} команда для
755 @option{-minsize}/@option{-chunked} опций использует
756 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
757 Это можно отключить указав нулевое значение.
762 @subsection Релиз 2.0
766 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
767 Работа со старыми версиями не поддерживается.
770 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
771 Одним криптографическим примитивом меньше.
774 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
775 криптографическим примитивом меньше (предполагая, что BLAKE2X
776 практически идентичен BLAKE2).
781 @subsection Релиз 1.0
785 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
786 со старыми версиями не поддерживается.
789 @command{nncp-bundle} команда может создавать потоки зашифрованных
790 пакетов или потреблять их. Это полезно когда речь идёт о
791 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
792 без создания промежуточного подготовленного ISO образа или работа с
793 ленточными накопителями).
796 @command{nncp-toss} команда может создавать @file{.seen} файлы,
797 предотвращая приём дублированных пакетов.
800 В команде @command{nncp-call} разрешается иметь только одного
801 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
802 входящих пакетов могут создать много горутин.
805 Возможность переопределить путь до spool директории и файла журнала
806 через аргумент командной строки или переменную окружения.
809 @command{nncp-rm} команда может удалять все исходящие/входящие,
810 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
815 @subsection Релиз 0.12
817 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
821 @subsection Релиз 0.11
823 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
827 @subsection Релиз 0.10
830 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
831 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
835 @subsection Релиз 0.9
838 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
839 команды. Они игнорировались.
843 @subsection Релиз 0.8
846 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
847 @option{-minsize} для передачи без разбиения на части была в байтах, а
852 @subsection Релиз 0.7
856 Возможность предоставлять данные для @command{nncp-file} через
857 стандартный ввод, используя временный зашифрованный файл для этого.
860 Появилась возможность передачи файлов разбитых на части, с сопутствующей
861 @command{nncp-reass} командой и @option{freqchunked} опцией
862 конфигурационного файла. Полезно для передачи больших файлов через
863 маленькие устройства хранения.
866 @option{freqminsize} опция конфигурационного файла, аналогичная
870 Опция @option{-force} команды @command{nncp-xfer} переименована в
871 @option{-mkdir} для ясности.
874 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
877 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
878 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
879 имели общий префикс и были сгруппированы для удобства.
882 Появилась команда @command{nncp-cfgenc}, позволяющая
883 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
884 без использования OpenPGP или других подобных инструментов.
887 Обновлены зависимые криптографические библиотеки.
892 @subsection Релиз 0.6
894 @item Появилась небольшая команда @command{nncp-rm}.
895 @item Обновлены зависимые криптографические библиотеки.
899 @subsection Релиз 0.5
902 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
903 @command{nncp-file} и @command{nncp-freq} командах.
907 @subsection Релиз 0.4
911 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
912 @command{nncp-daemon}: иногда они могли падать с segmentation fault
913 ошибкой (данные не терялись).
916 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
917 это короче и удобнее для использования.
920 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
921 позволяющая создать минималистичный урезанный конфигурационный файл без
922 приватных ключей, что полезно во время использования @command{nncp-xfer}.
927 @subsection Релиз 0.3
929 @item Исправлена совместимость с Go 1.6.
933 @subsection Релиз 0.2
937 @strong{Несовместимое} изменение формата пакета (магическое число тоже
938 изменено): поле размера пакета шифруется и не посылается в открытом виде.
941 @option{-minsize} опция даёт возможность автоматически дополнять
942 исходящие пакеты до указанного минимального размера.
945 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
946 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
947 Удалённая сторона сразу же оповещается об этом.
950 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
951 неактивность в online соединении, когда оно должно быть отключено. Она
952 может быть использована для сохранения соединения на долгое время.
955 @option{-maxonlinetime} опция даёт возможность указания максимального
956 возможного времени жизни соединения.
959 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
963 @command{nncp-pkt} команда может разжимать данные.