4 See also this page @ref{Новости, on russian}.
11 @command{hjson-cli} utility builds in vendor-mode now.
16 @section Release 7.3.1
20 Fixed possibly left opened file descriptor in online commands.
23 Severely decreased memory usage of MTH hashing.
28 @section Release 7.3.0
32 Fixed some workability problems on 32-bit systems with big files.
35 Ability to use directory with a bunch of files as a configuration.
36 @command{nncp-cfgdir} command appeared.
41 @section Release 7.2.1
45 Small optimizations in online commands.
50 @section Release 7.2.0
54 @command{nncp-trns} command appeared for manual transition packets creation.
57 If destination node of transitional packet has non empty @option{via}
58 route, then do not ignore, but use it.
61 Do not relay multicast packet to area message's originator, that
62 obviously has seen its own packet.
65 Much less memory usage during MTH hashing when offset is zero: when
66 packet is not resumed, but for example checked with @command{nncp-check}
72 @section Release 7.1.1
76 Fixed failing directories fsync after @file{.seen} file creation.
81 @section Release 7.1.0
85 Multicasting areas feature appeared. Implemented merely by an additional
86 plain packet type with @command{nncp-toss}, @command{nncp-file} and
87 @command{nncp-exec} commands modification.
90 Fixed workability of @command{nncp-file} and @command{nncp-exec}
91 commands, that use temporary file (stdin and @option{-use-tmp}).
94 Fixed disappearing bad return code in @command{nncp-exec} command.
97 Fixed invalid @file{.hdr} generation when transitional packets are used.
100 @option{-all} option appeared in @command{nncp-rm} command, applying to
101 all the nodes at once.
104 @option{-cycle} option appeared in @command{nncp-check} command, looping
105 the check in infinite cycle.
108 @command{nncp-rm} command can take node alias name.
111 @command{nncp-pkt} can parse @file{.hdr} files.
116 @section Release 7.0.0
120 Minimal required Go version 1.13.
123 Merkle Tree-based Hashing with BLAKE3 (MTH) is used instead of BLAKE2b.
124 Because of that, there are backward @strong{incompatible} changes of
125 encrypted files (everything laying in the spool directory) and
126 @file{.meta} files of chunked transfer.
128 Current implementation is far from being optimal: it lacks
129 parallelizable calculations and has higher memory consumption: nearly
130 512 KiB for each 1 GiB of file's data. Future performance and memory
131 size optimizations should not lead to packet's format change. But it is
132 still several times faster than BLAKE2b.
135 Resumed online downloads, because of MTH, require reading only of the
136 preceding part of file, not the whole one as was before.
139 @command{nncp-hash} utility appeared for calculating file's MTH hash.
142 BLAKE2 KDF and XOF functions are replaced with BLAKE3 in encrypted
143 packets. Lowering number of used primitives. Also, its encrypted
144 packet's header is used as an associated data during encryption.
147 MultiCast Discovery uses
148 @verb{|ff02::4e4e:4350|} address instead of @verb{|ff02::1|}.
151 @command{nncp-cfgenc} mistakenly asked passphrase three times during encryption.
154 @command{nncp-stat} reports about partly downloaded packets.
157 Updated dependencies.
162 @section Release 6.6.0
166 @command{nncp-daemon}, @command{nncp-call} and @command{nncp-caller}
167 commands wait for all background checksummers completion after
168 connection is finished.
171 Added possibility of address determining through multicast announcement
172 in local area network, so called MCD (MultiCast Discovery).
177 @section Release 6.5.0
181 Fixed segfault in @command{nncp-daemon} when SP handshake did not succeed.
184 Fixed possible bad return code ignoring in automatic tosser.
187 Fixed race during file descriptors closing when online protocol call is
188 finished, that could lead to write error of received packet fragment.
191 Kill all packet transmission progress bars in @command{nncp-daemon},
192 @command{nncp-call} and @command{nncp-caller} when call is finished.
197 @section Release 6.4.0
201 Fixed possible race in online protocol, that lead to panic.
206 @section Release 6.3.0
210 Fixed possible panic while showing progress during online protocol.
215 @section Release 6.2.1
219 Three places in logs contained excess @code{%s}.
224 @section Release 6.2.0
228 Returned @command{nncp-caller}'s @option{-autotoss*} options workability.
231 Yet another logging refactoring and simplification.
232 Should be no visible differences to the end user.
237 @section Release 6.1.0
241 Optimization: most commands do not keep opened file descriptors now.
242 Previously you can exceed maximal number of opened files if you have got
243 many packets in the spool directory.
246 Optimization: do not close file descriptor of the file we download
247 online. Previously each chunk lead to expensive open/close calls.
250 Online downloaded files are saved with @file{.nock} (non-checksummed)
251 suffix, waiting either for @command{nncp-check}, or online daemons to
252 perform integrity check.
255 Optimization: files, that are not resumed, are checksummed immediately
256 during the online download, skipping @file{.nock}-intermediate step.
259 Ability to store encrypted packet's header in @file{.hdr} file, close to
260 the packet itself. That can greatly increase performance of packets
261 listing on filesystems with big block's size.
266 @section Release 6.0.0
270 Log uses human readable and easy machine parseable
271 @url{https://www.gnu.org/software/recutils/, recfile} format for the
272 records, instead of structured RFC 3339 lines. Old logs are not readable
273 by @command{nncp-log} anymore.
276 @option{-autotoss*} option workability with @command{nncp-daemon}'s
277 @option{-inetd} mode.
280 Call's @option{when-tx-exists} allows to make a call only when outbound
281 packets exists. Combined with seconds-aware cron expression that can be
282 used as some kind of auto dialler.
285 @command{nncp-cronexpr} command allows you to check validity and
286 expectations of specified cron expression.
291 @section Release 5.6.0
295 @option{-autotoss*} option runs tosser not after the call, but every
296 second while it is active.
299 @option{autotoss}, @option{autotoss-doseen},
300 @option{autotoss-nofile}, @option{autotoss-nofreq},
301 @option{autotoss-noexec}, @option{autotoss-notrns} options available in
302 @option{calls} configuration section. You can configure per-call
303 automatic tosser options.
306 Use vendoring, instead of @env{GOPATH} overriding during tarball
307 installation, because current minimal Go's version is 1.12 and it
313 @section Release 5.5.1
317 Respect for @env{BINDIR}, @env{INFODIR} and @env{DOCDIR} environment
318 variables in @file{config} during installation.
323 @section Release 5.5.0
327 Bugfixes in @command{nncp-call(er)}/@command{nncp-daemon},
328 @command{nncp-bundle} and @command{nncp-stat}.
331 @command{nncp-rm} has @option{-dryrun} and @option{-older} options now.
334 @command{nncp-exec} has @option{-use-tmp} and @option{-nocompress}
335 options now. Uncompressed packets are not compatible with previous NNCP
339 @command{nncp-call}, @command{nncp-caller} and @command{nncp-daemon} commands
340 have @option{-autotoss*} options for running tosser after call is ended.
343 Updated dependencies. Minimal required Go version is 1.12.
348 @section Release 5.4.1
352 Fixed @code{SENDMAIL} variable usage during the build.
357 @section Release 5.4.0
361 Updated dependencies.
364 Build system is moved from Makefiles to @url{http://cr.yp.to/redo.html, redo}.
365 This should not influence package maintainers, because minimal @command{redo}
366 implementation is included in tarball.
371 @section Release 5.3.3
375 More various error checks.
378 Updated dependencies.
383 @section Release 5.3.2
387 Fixed incorrect logic of @option{onlinedeadline} timeout, where
388 connection won't take into account incoming packets events and will
389 forcefully disconnect.
394 @section Release 5.3.1
398 Fixed @option{onlinedeadline} workability with call addresses that use
399 external commands (@verb{#"|somecmd"#}).
402 @command{nncp-stat} has @option{-pkt} option displaying information
403 about each packet in the spool.
408 @section Release 5.3.0
412 Progress messages contain prefix, describing the running action.
415 Fixed not occurring handshake messages padding.
418 Finish all SP protocol related goroutines, less memory leak.
421 SP protocol generates less socket write calls, thus generating less TCP
425 Check @option{onlinedeadline} and @option{maxonlinetime} options every
426 second, independently from socket reads (up to 10 seconds).
429 Once per minute, if no other traffic exists, PING packets are sent in
430 SP-connection. That allows faster determining of connection unworkability.
433 @command{nncp-toss} uses lock-file to prevent simultaneous tossing.
438 @section Release 5.2.1
442 Fixed SP protocol error handling, sometimes causing program panic.
447 @section Release 5.2.0
451 Most commands by default show oneline operations progress.
452 @option{-progress}, @option{-noprogress} command line options,
453 @option{noprogress} configuration file option appeared.
456 Fixed incorrect @command{nncp-check} command return code, that returned
457 bad code when everything is good.
460 Free disk space check during @command{nncp-bundle -rx} call.
465 @section Release 5.1.2
469 @strong{Critical} vulnerability: remote peers authentication could lead
470 to incorrect identification of remote side, allowing foreign encrypted
474 Bugfix: private and public Noise keys were swapped in newly created
475 configuration files, that lead to inability to authenticate online peers.
478 Explicit directories fsync-ing for guaranteed files renaming.
483 @section Release 5.1.1
487 Fixed workability of @command{nncp-file} with @option{-chunked 0} option.
492 @section Release 5.1.0
496 @command{nncp-file} can send directories, automatically creating pax
500 Free disk space is checked during outbound packets creation.
503 @option{freq}, @option{freqminsize}, @option{freqchunked} configuration
504 file options replaced with the structure:
505 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
508 Added @option{freq.maxsize} configuration file option, forbidding of
509 freq sending larger than specified size.
512 Ability to notify about successfully executed commands (exec) with
513 @option{notify.exec} configuration file option.
518 @section Release 5.0.0
522 @strong{Incompatible} configuration file format change: YAML is
523 replaced with Hjson, due to its simplicity, without noticeable lack
524 of either functionality or convenience.
527 @strong{Incompatible} plain packet format changes. Older versions are
528 not supported. @code{zlib} compression is replaced with
529 @code{Zstandard}, due to its speed and efficiency, despite library
530 version is not mature enough.
533 Ability to call remote nodes via pipe call of external command, not only
537 @command{nncp-cfgnew} generates configuration file with many
538 comments. @option{-nocomments} option can be used for an old
542 Duplicate filenames have @file{.CTR} suffix, instead of @file{CTR}, to
543 avoid possible collisions with @file{.nncp.chunkCTR}.
546 Ability to override process umask through configuration file option.
549 Files and directories are created with 666/777 permissions by default,
550 allowing control with @command{umask}.
553 Updated dependencies.
556 Full usage of go modules for dependencies management
557 (@code{go.cypherpunks.ru/nncp/v5} namespace is used).
560 Forbid any later GNU GPL version autousage
561 (project's licence now is GNU GPLv3-only).
568 @item Workability on GNU/Linux systems and Go 1.10 is fixed.
576 @strong{Incompatible} encrypted and eblob packet format change: AEAD
577 encryption mode with 128 KiB blocks is used now, because previously
578 @command{nncp-toss} did not verify encrypted packet's MAC before feeding
579 decrypted data to external command. Older versions are not supported.
582 Available free space checking before copying in @command{nncp-xfer},
583 @command{nncp-daemon}, @command{nncp-call(er)}.
586 @command{nncp-call} has ability only to list packets on remote node,
587 without their transmission.
590 @command{nncp-call} has ability to transfer only specified packets.
593 Workability of @option{xxrate} preference in @option{calls}
594 configuration file section.
597 Dependant libraries are updated.
603 Begin using of @code{go.mod} subsystem.
610 @item @command{nncp-daemon} can be run as @command{inetd}-service.
618 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller} check
619 if @file{.seen} exists and treat it like file was already downloaded.
620 Possibly it was transferred out-of-bound and remote side needs to be
624 If higher priority packet is spooled, then @command{nncp-daemon} will
625 queue its sending first, interrupting lower priority transmissions.
628 Simple packet rate limiter added to online-related tools
629 (@command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}).
632 Ability to specify niceness with symbolic notation:
633 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, etc.
636 Changed default niceness levels:
637 for @command{nncp-exec} from 64 to 96,
638 for @command{nncp-freq} from 64 to 160,
639 for @command{nncp-file} from 196 to 224.
647 @strong{Incompatible} @emph{bundle} archive format changes and
648 @command{nncp-bundle} workability with Go 1.10+. Bundles must be
649 valid tar archives, but Go 1.9 made them invalid because of long paths
650 inside. NNCP accidentally was dependant on that bug. Explicit adding of
651 @file{NNCP/} directory in archive restores workability with valid tar
659 Ability to disable relaying at all using @verb{|-via -|} command line option.
667 @strong{Incompatible} plain packet format changes. Older versions are
671 Ability to queue remote command execution, by configuring @option{exec}
672 option in configuration file and using @command{nncp-exec} command:
675 @command{nncp-mail} command is replaced with more flexible
676 @command{nncp-exec}. Instead of @verb{|nncp-mail NODE RECIPIENT|}
677 you must use @verb{|nncp-exec NODE sendmail RECIPIENT|}.
679 @option{sendmail} configuration file option is replaced with
680 @option{exec}. @verb{|sendmail: [...]|} must be replaced with
681 @verb{|exec: sendmail: [...]|}.
685 Ability to override @option{via} configuration option for destination
686 node via @option{-via} command line option for following commands:
687 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
690 Chunked files, having size less than specified chunk size, will be sent
691 as an ordinary single file.
694 Exec commands are invoked with additional @env{NNCP_NICE} and
695 @env{NNCP_SELF} environment variables.
698 Files, that are sent as a reply to freq, have niceness level taken from
699 the freq packet. You can set desired niceness during @command{nncp-freq}
700 invocation using @option{-replynice} option.
703 @command{nncp-toss} command can ignore specified packet types during
704 processing: @option{-nofile}, @option{-nofreq}, @option{-noexec},
708 @command{nncp-file} command uses
709 @option{FreqMinSize}/@option{FreqChunked} configuration file options
710 for @option{-minsize}/@option{-chunked} by default. You can turn this
711 off by specifying zero value.
720 @strong{Incompatible} encrypted/eblob packet format changes. Older
721 versions are not supported.
724 Twofish encryption algorithm is replaced with ChaCha20. It is much more
725 faster. One cryptographic primitive less.
728 HKDF-BLAKE2b-256 KDF algorithm is replaced with BLAKE2Xb XOF. Yet
729 another cryptographic primitive less (assuming that BLAKE2X is nearly
730 identical to BLAKE2).
739 @strong{Incompatible} encrypted packet format changes. Older versions
743 @command{nncp-bundle} command can either create stream of encrypted
744 packets, or digest it. It is useful when dealing with
745 @code{stdin}/@code{stdout} based transmission methods (like writing to
746 CD-ROM without intermediate prepared ISO image and working with tape
750 @command{nncp-toss} is able to create @file{.seen} files preventing
751 duplicate packets receiving.
754 Single background checksum verifier worker is allowed in
755 @command{nncp-call}. This is helpful when thousands of small inbound
756 packets could create many goroutines.
759 Ability to override path to spool directory and logfile through either
760 command line argument, or environment variable.
763 @command{nncp-rm} is able to delete outbound/inbound, @file{.seen},
764 @file{.part}, @file{.lock} and temporary files.
769 @section Release 0.12
771 @item Sendmail command is called with @env{NNCP_SENDER} environment variable.
775 @section Release 0.11
777 @item @command{nncp-stat}'s command output is sorted by node name.
781 @section Release 0.10
784 @command{nncp-freq}'s @file{DST} argument is optional now. Last
785 @file{SRC} path's element will be used by default.
792 Fix @option{-rx}/@option{-tx} arguments processing in
793 @command{nncp-call} command. They were ignored.
800 Little bugfix in @command{nncp-file} command, where @option{-minsize}
801 option for unchunked transfer was not in KiBs, but in bytes.
809 Ability to feed @command{nncp-file} from @code{stdin}, that uses an
810 encrypted temporary file for that.
813 Chunked files transmission appeared with corresponding
814 @command{nncp-reass} command and @option{freqchunked} configuration file
815 entry. Useful for transferring big files over small storage devices.
818 @option{freqminsize} configuration file option, analogue to
819 @option{-minsize} one.
822 @command{nncp-xfer}'s @option{-force} option is renamed to
823 @option{-mkdir} for clarity.
826 @option{-minsize} option is specified in KiBs, not bytes, for
830 @command{nncp-newcfg} command is renamed to @command{nncp-cfgnew},
831 and @command{nncp-mincfg} to @command{nncp-cfgmin} -- now they have
832 common prefix and are grouped together for convenience.
835 @command{nncp-cfgenc} command appeared, allowing configuration file
836 encryption/decryption, for keeping it safe without any either OpenPGP or
840 Cryptographic libraries (dependencies) are updated.
847 @item Small @command{nncp-rm} command appeared.
848 @item Cryptographic libraries (dependencies) are updated.
855 Trivial small fix in default niceness level of @command{nncp-file}
856 and @command{nncp-freq} commands.
864 Small fix in @command{nncp-call}, @command{nncp-caller},
865 @command{nncp-daemon}: they can segmentation fail sometimes (no data is
869 @command{nncp-newnode} renamed to @command{nncp-newcfg} -- it is shorter
870 and more convenient to use.
873 @command{nncp-mincfg} command appeared: helper allowing to create
874 minimalistic stripped down configuration file without private keys, that
875 is useful during @command{nncp-xfer} usage.
882 @item Fixed compatibility with Go 1.6.
890 @strong{Incompatible} packet's format change (magic number is changed
891 too): size field is encrypted and is not send in plaintext anymore.
894 @option{-minsize} option gives ability to automatically pad outgoing
895 packets to specified minimal size.
898 @command{nncp-daemon} and @command{nncp-call}/@command{nncp-caller}
899 always check new @emph{tx} packets appearance in the background while
900 connected. Remote side is immediately notified.
903 @option{-onlinedeadline} option gives ability to configure timeout of
904 inactivity of online connection, when it could be disconnected. It could
905 be used to keep connection alive for a long time.
908 @option{-maxonlinetime} option gives ability to set maximal allowable
909 online connection aliveness time.
912 @command{nncp-caller} command appeared: cron-ed TCP daemon caller.
915 @command{nncp-pkt} command can decompress the data.