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 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
41 Обновлены зависимые библиотеки.
46 @subsection Релиз 6.6.0
50 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
51 ожидают завершения всех процессов фоновой проверки контрольных сумм,
52 после того как соединение закрыто.
55 Добавлена возможность определения адреса через multicast оповещение в
56 локальной сети, так называемый MCD (MultiCast Discovery).
61 @subsection Релиз 6.5.0
65 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
68 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
71 Исправлена гонка при закрытии файловых дескрипторов во время завершения
72 работы online протокола, которая могла привести к ошибке записи
73 принятого фрагмента пакета.
76 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
77 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
82 @subsection Релиз 6.4.0
86 Исправлена возможная гонка в online протоколе, приводящая к падению
92 @subsection Релиз 6.3.0
96 Исправлено возможное падение программы во время показа прогресса online
102 @subsection Релиз 6.2.1
106 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
111 @subsection Релиз 6.2.0
115 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
118 Очередной рефакторинг и упрощение системы журналирования.
119 Не должно быть видимых изменений для конечного пользователя.
124 @subsection Релиз 6.1.0
128 Оптимизация: большинство команд теперь не держат открытыми файловые
129 дескрипторы. Прежде вы легко могли выйти за пределы максимально
130 допустимого количества открытых файлов, если у вас было много пакетов в
134 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
135 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
138 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
139 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
140 online демоны не выполнят проверку целостности.
143 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
144 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
147 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
148 файлах, рядом с самими пакетами. Это может существенно повысить скорость
149 получения списка пакетов на файловых системах с большим размером блока.
154 @subsection Релиз 6.0.0
158 Журнал использует человеко-читаемый и легко обрабатываемый машиной
159 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
160 записей, вместо структурированных строчек RFC 3339. Старый формат
161 журналов не поддерживается @command{nncp-log}.
164 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
165 @command{nncp-daemon}.
168 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
169 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
170 выражением содержащим секунды, это можно использовать как возможность
171 вызова только при появлении исходящих пакетов.
174 @command{nncp-cronexpr} команда позволяет проверить корректность и
175 ожидаемый результат от указанного cron выражения.
180 @subsection Релиз 5.6.0
184 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
185 во время него ежесекундно.
188 В @option{calls} секции конфигурации появились опции
189 @option{autotoss}, @option{autotoss-doseen},
190 @option{autotoss-nofile}, @option{autotoss-nofreq},
191 @option{autotoss-noexec}, @option{autotoss-notrns}.
192 Вы можете настраивать опции автоматического tosser для каждого вызова.
195 Использовать vendoring вместо переопределения @env{GOPATH} во время
196 установки tarball, так как текущая минимальная версия Go это 1.12,
197 поддерживающая модули.
202 @subsection Релиз 5.5.1
206 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
207 в @file{config} во время установки.
212 @subsection Релиз 5.5.0
216 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
217 @command{nncp-bundle}, @command{nncp-stat} командах.
220 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
223 У команды @command{nncp-exec} появились @option{-use-tmp} и
224 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
228 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
229 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
232 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
237 @subsection Релиз 5.4.1
241 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
246 @subsection Релиз 5.4.0
250 Обновлены зависимые библиотеки.
253 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
254 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
255 реализация @command{redo} включена в tarball.
260 @subsection Релиз 5.3.3
264 Больше различных проверок в коде на ошибки.
267 Обновлены зависимые библиотеки.
272 @subsection Релиз 5.3.2
276 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
277 котором соединение могло не учитывать факты прихода пакетов и обрывать
283 @subsection Релиз 5.3.1
287 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
288 использующими внешние команды (@verb{#"|somecmd"#}).
291 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
292 каждому пакету в spool.
297 @subsection Релиз 5.3.0
301 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
304 Исправлено не происходящее дополнение (padding) handshake сообщений.
307 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
310 SP протокол порождает меньше вызовов записей (соответственно, и TCP
314 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
315 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
318 Раз в минуту, если нет более никакого другого трафика, посылаются PING
319 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
320 более не работоспособно.
323 @command{nncp-toss} использует lock-file для предотвращения
324 одновременной обработки зашифрованных пакетов.
329 @subsection Релиз 5.2.1
333 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
338 @subsection Релиз 5.2.0
342 Большинство команд по умолчанию показывают однострочный прогресс
343 выполнения операции. Появились @option{-progress}, @option{-noprogress}
344 опции командной строки, @option{noprogress} опция конфигурационного
348 Исправлен некорректный код возврата @command{nncp-check} команды,
349 который возвращал ошибку когда всё хорошо.
352 Проверка свободного места для пакетов, во время выполнения
353 @command{nncp-bundle -rx}.
358 @subsection Релиз 5.1.2
362 Исправлена @strong{критичная} уязвимость: аутентификация online нод
363 могла приводить к некорректной идентификации удалённой стороны, позволяя
364 скачивать чужие зашифрованные пакеты.
367 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
368 публичный ключ Noise были поменяны местами, что приводило к
369 невозможности online аутентификации нод.
372 Явная синхронизация (fsync) директорий для гарантированного
373 переименования файлов.
378 @subsection Релиз 5.1.1
382 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
387 @subsection Релиз 5.1.0
391 @command{nncp-file} может отправлять директории, автоматически на лету
395 Во время создания исходящих сообщений проверяется наличие свободного
396 места на файловой системе.
399 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
400 конфигурационного файла заменены на структуру
401 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
404 Добавлена @option{freq.maxsize} опция конфигурационного файл,
405 запрещающая ответ на файловый запрос больше заданного размера.
408 Возможность оповещения об успешно выполненных командах (exec) через
409 @option{notify.exec} опцию конфигурационного файла.
414 @subsection Релиз 5.0.0
418 @strong{Несовместимое} изменение формата конфигурационного файла:
419 YAML заменён на Hjson, из-за его гораздо большей простоты, без
420 заметной потери функционала и удобства.
423 @strong{Несовместимое} изменение формата простых пакетов. Работа со
424 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
425 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
426 смотря на то, что версия библиотеки ещё не проверена временем.
429 Возможность соединяться с удалёнными нодами не только по TCP, но и через
430 pipe вызов сторонней команды.
433 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
434 комментариев. Можно использовать @option{-nocomments} опцию для старого
438 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
439 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
442 Возможность переопределить umask процесса через опцию конфигурационного
446 По умолчанию файлы и директории создаются с 666/777 правами доступа,
447 позволяя управлять ими @command{umask}-ом.
450 Обновлены зависимости.
453 Полное использование go модулей для управления зависимостями
454 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
457 Отмена автоматического использования более новых версий GNU GPL
458 (лицензия проекта GNU GPLv3-только).
463 @subsection Релиз 4.1
465 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
469 @subsection Релиз 4.0
473 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
474 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
475 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
476 отсылать дешифрованные данные внешней команде. Старые версии не
480 Проверка доступного места перед копированием во время работы
481 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
484 @command{nncp-call} имеет возможность только показывать список пакетов
485 на удалённой машине, без их передачи.
488 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
491 Восстановлена работоспособность @option{xxrate} настройки в
492 @option{calls} секции конфигурационного файла.
495 Зависимые библиотеки обновлены.
498 Небольшие исправления ошибок.
501 Начало использования @code{go.mod} подсистемы.
506 @subsection Релиз 3.4
508 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
512 @subsection Релиз 3.3
516 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
517 проверяют существование @file{.seen} файла и расценивают его как то, что
518 файл уже был скачан. Возможно передача данных была осуществлена
519 сторонним способом и удалённая сторона должна быть оповещена об этом.
522 Если более высокоприоритетный пакет попадает в спул, то
523 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
524 низкоприоритетные передачи.
527 К средствам связанным с online-соединениями (@command{nncp-daemon},
528 @command{nncp-call}, @command{nncp-caller}) добавлен простой
529 ограничитель скорости.
532 Возможность задания приоритета символьными обозначениями:
533 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
536 Изменены значения приоритетов по-умолчанию:
537 для @command{nncp-exec} с 64 на 96,
538 для @command{nncp-freq} с 64 на 160,
539 для @command{nncp-file} с 196 на 224.
544 @subsection Релиз 3.2
547 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
548 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
549 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
550 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
551 Явное добавление @file{NNCP/} директории в архив восстанавливает
552 работоспособность с корректными tar архивами.
556 @subsection Релиз 3.1
559 Возможность отключать пересылку через промежуточные ноды используя
560 @verb{|-via -|} опцию командной строки.
564 @subsection Релиз 3.0
568 @strong{Несовместимое} изменение формата простых пакетов. Работа со
569 старыми версиями не поддерживается.
572 Добавлена возможность удалённого исполнения команд, путём
573 конфигурирования @option{exec} опции конфигурационного файла и
574 использования команды @command{nncp-exec}:
577 Команда @command{nncp-mail} заменена более гибкой и широкой
578 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
579 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
581 @option{sendmail} опция конфигурационного файла заменена на более гибкую
582 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
587 Возможность переопределить @option{via} опцию конфигурации для целевого
588 узла через @option{-via} опцию командной строки для следующих команд:
589 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
592 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
596 Exec команды вызываются с дополнительными переменными окружения
597 @env{NNCP_NICE} и @env{NNCP_SELF}.
600 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
601 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
602 аргументом @option{-replynice}.
605 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
606 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
607 @option{-noexec}, @option{-notrns}.
610 По-умолчанию @command{nncp-file} команда для
611 @option{-minsize}/@option{-chunked} опций использует
612 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
613 Это можно отключить указав нулевое значение.
618 @subsection Релиз 2.0
622 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
623 Работа со старыми версиями не поддерживается.
626 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
627 Одним криптографическим примитивом меньше.
630 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
631 криптографическим примитивом меньше (предполагая, что BLAKE2X
632 практически идентичен BLAKE2).
637 @subsection Релиз 1.0
641 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
642 со старыми версиями не поддерживается.
645 @command{nncp-bundle} команда может создавать потоки зашифрованных
646 пакетов или потреблять их. Это полезно когда речь идёт о
647 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
648 без создания промежуточного подготовленного ISO образа или работа с
649 ленточными накопителями).
652 @command{nncp-toss} команда может создавать @file{.seen} файлы,
653 предотвращая приём дублированных пакетов.
656 В команде @command{nncp-call} разрешается иметь только одного
657 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
658 входящих пакетов могут создать много горутин.
661 Возможность переопределить путь до spool директории и файла журнала
662 через аргумент командной строки или переменную окружения.
665 @command{nncp-rm} команда может удалять все исходящие/входящие,
666 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
671 @subsection Релиз 0.12
673 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
677 @subsection Релиз 0.11
679 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
683 @subsection Релиз 0.10
686 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
687 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
691 @subsection Релиз 0.9
694 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
695 команды. Они игнорировались.
699 @subsection Релиз 0.8
702 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
703 @option{-minsize} для передачи без разбиения на части была в байтах, а
708 @subsection Релиз 0.7
712 Возможность предоставлять данные для @command{nncp-file} через
713 стандартный ввод, используя временный зашифрованный файл для этого.
716 Появилась возможность передачи файлов разбитых на части, с сопутствующей
717 @command{nncp-reass} командой и @option{freqchunked} опцией
718 конфигурационного файла. Полезно для передачи больших файлов через
719 маленькие устройства хранения.
722 @option{freqminsize} опция конфигурационного файла, аналогичная
726 Опция @option{-force} команды @command{nncp-xfer} переименована в
727 @option{-mkdir} для ясности.
730 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
733 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
734 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
735 имели общий префикс и были сгруппированы для удобства.
738 Появилась команда @command{nncp-cfgenc}, позволяющая
739 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
740 без использования OpenPGP или других подобных инструментов.
743 Обновлены зависимые криптографические библиотеки.
748 @subsection Релиз 0.6
750 @item Появилась небольшая команда @command{nncp-rm}.
751 @item Обновлены зависимые криптографические библиотеки.
755 @subsection Релиз 0.5
758 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
759 @command{nncp-file} и @command{nncp-freq} командах.
763 @subsection Релиз 0.4
767 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
768 @command{nncp-daemon}: иногда они могли падать с segmentation fault
769 ошибкой (данные не терялись).
772 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
773 это короче и удобнее для использования.
776 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
777 позволяющая создать минималистичный урезанный конфигурационный файл без
778 приватных ключей, что полезно во время использования @command{nncp-xfer}.
783 @subsection Релиз 0.3
785 @item Исправлена совместимость с Go 1.6.
789 @subsection Релиз 0.2
793 @strong{Несовместимое} изменение формата пакета (магическое число тоже
794 изменено): поле размера пакета шифруется и не посылается в открытом виде.
797 @option{-minsize} опция даёт возможность автоматически дополнять
798 исходящие пакеты до указанного минимального размера.
801 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
802 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
803 Удалённая сторона сразу же оповещается об этом.
806 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
807 неактивность в online соединении, когда оно должно быть отключено. Она
808 может быть использована для сохранения соединения на долгое время.
811 @option{-maxonlinetime} опция даёт возможность указания максимального
812 возможного времени жизни соединения.
815 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
819 @command{nncp-pkt} команда может разжимать данные.