News
****

See also this page on russian.

Release 8.10.0
==============

  * Updated dependant libraries, including Yggdrasil one (its network moved to v0.5).

Release 8.9.0
=============

  * nncp-toss command has -gen-ack option. nncp-daemon, nncp-caller, nncp-call commands have -autotoss-gen-ack option. They automatically generate ACK packets and store corresponding spool/tx/ack/ references to them, to be able to remove them after the transfer.

  * autotoss-gen-ack appeared in call configuration. ack section appeared in neighbour configuration.

  * nncp-rm command has -ack option to remove packets referenced by stored spool/tx/ack/ files generated during tossing.

  * Get rid of redo build system during installation, as there are virtually none dependencies, just only compilation of the Go code.

  * Updated some dependencies.

Release 8.8.3
=============

  * Fixed nncp-reass command, that incorrectly reported about wrong last chunk's size if it is multiple of the chunk-size.

  * Updated dependencies. Go 1.20+ is required now.

Release 8.8.2
=============

  * Updated Yggdrasil library, with several other ones.

Release 8.8.1
=============

  * Fixed nncp-daemon failing with unauthenticated connection and enabled -autotoss.

  * Updated dependencies.

Release 8.8.0
=============

  * Fixed buildability under Go 1.19.

  * Minimal required Go version is 1.17.

  * Updated dependencies.

Release 8.7.2
=============

  * More intuitive, clear and slightly more flexible behaviour of nncp-rm.

  * nncp-rm also removes corresponding hdr/ file for each removed packet.

Release 8.7.1
=============

  * nncp-xfer now correctly checks for seen/ files for inbound packets.

Release 8.7.0
=============

  * nncp-ack does not acknowledge ACK-packets, preventing an endless loop of ACKs.

  * nncp-ack previously did not remove corresponding hdr/ files.

  * nncp-rm now takes list of packet from stdin when -pkt option is used.

  * nncp-ack now generates list of ACK packets it created, that could be used as an input to nncp-rm to remove outbound ACK packets.

Release 8.6.0
=============

  * nncp-xfer checks if locally copied packet's checksum differs from the source's one.

  * nncp-call has bad return code if its queues contain unfinished jobs.

  * nncp-ack command appeared, that sends explicit packet receipt acknowledgement (ACK packet). That acknowledgement deletes referenced packet from the outbound spool.

  * Ability to turn fsync operation off using $NNCPNOSYNC=1 environment variable.

  * Added various indices in documentation, that should help searching in it.

Release 8.5.0
=============

  * Fixed nncp-bundle workability.

  * Mistakenly -mcd-wait option was enabled by default in nncp-call.

  * Ability to override internal default timeout for online protocol through $NNCPDEADLINE environment variable. Can be useful for very high delay links.

  * NNCP builds on OpenBSD.

Release 8.4.0
=============

  * Multicast related interface names (mcd-listen and mcd-send configuration options) are now regular expressions. By default nncp-cfgnew uncomments them now with .* interface name.

  * nncp-call command has -mcd-wait option to wait for multicast packet about node's address.

  * nncp-file command skips everything that is neither regular file nor directory during pax-archive creation.

Release 8.3.0
=============

  * Fixed building issues on 32-bit systems.

Release 8.2.0
=============

  * Yggdrasil uses pure-Go IPv6+TCP network stack, instead of naked μTP transport protocol, making it able to work as an ordinary TCP server inside overlay network.

  * Yggdrasil's prv;bind1,bind2;pub...-like configuration strings are replaced with URL-like ones (yggdrasils://PRV?bind=BIND1&bind=BIND2&pub=PUB).

  * Ability to pass multicast-related parameters to Yggdrasil configuration.

  * nncp-daemon is able to listen on both TCP and Yggdrasil-driven sockets simultaneously.

  * nncp-daemon's listening on peering endpoint socket is optional -- you can be reached through the peers.

Release 8.1.0
=============

  * nncp-cfgdir does not require self section existence in configuration file.

  * Ability to act as Yggdrasil network client, using online protocol on top of it.

Release 8.0.2
=============

  * Fixed sending ability to areas.

Release 8.0.1
=============

  * Fixed incorrect freq.chunked value calculation. If it was missed, then chunked transfer mode was forcefully turned on anyway.

  * Fixed incorrect full file's size calculation in .nncp.meta.

Release 8.0.0
=============

  * Incompatible encrypted packet format change: payload and pad sizes are sent in-bound in the encrypted stream. That gives ability to streamingly create encrypted packets, without knowing sizes in advance, without creating temporary file or buffer data in memory.

  * Proper encrypted packet padding verification is done now. This is not critical issue, but previously neither padding value, nor its size were authenticated, giving ability to iteratively strip trailing bytes and determine payload's size by observing the reaction of the encrypted packet processing.

  * nncp-exec loses its -use-tmp option, because of streaming-compatible encrypted packets format.

  * nncp-file and nncp-exec commands have -maxsize option, limiting maximal resulting encrypted packet's maximal size (returning error if it is exceeded). Could be useful, because no payload size could be known in advance.

Release 7.7.0
=============

  * Experimental kqueue and inotify based notifications support about spool directory changes, for reducing their often reading overhead.

  * .seen and .hdr files moved to seen/ and hdr/ subdirectories, for faster scanning of spool directories. Current files migration required:

          $ find $NNCPSPOOL -type f -name "*.hdr" -exec rm {} +

          $ find $NNCPSPOOL -type d -name rx | while read rx ; do
              cd $rx
              mkdir -p seen
              find . -type f -name "*.seen" | while read fn ; do
                  mv $fn seen/${fn%.seen}
              done
          done

          $ find $NNCPSPOOL -type d -name area | while read area ; do
              find $area -type f -name "*.seen" | while read fn ; do
                  mv $fn ${fn%.seen}
              done
          done

Release 7.6.0
=============

  * Logging may be done to specified opened file descriptor ($NNCPLOG=FD:5 for example). That is friendly to use under daemontools.

  * Added additional checks of public keys existence in configuration file, preventing some commands from failing.

Release 7.5.1
=============

  * NNCP builds on NetBSD.

Release 7.5.0
=============

  * nncp-daemon is compatible with UCSPI-TCP interface, so log will contain remote side's address (when running under appropriate utility). -ucspi option should be used instead of -inetd.

  * nncp-call can be UCSPI-TCP client, using -ucspi option.

  * Do not exit if some of MCD network interfaces can not be listened -- only warn about that.

Release 7.4.0
=============

  * Fixed simultaneous nncp-daemon and nncp-caller MCD work.

Release 7.3.2
=============

  * hjson-cli utility builds in vendor-mode now.

Release 7.3.1
=============

  * Fixed possibly left opened file descriptor in online commands.

  * Severely decreased memory usage of MTH hashing.

Release 7.3.0
=============

  * Fixed some workability problems on 32-bit systems with big files.

  * Ability to use directory with a bunch of files as a configuration. nncp-cfgdir command appeared.

Release 7.2.1
=============

  * Small optimizations in online commands.

Release 7.2.0
=============

  * nncp-trns command appeared for manual transition packets creation.

  * If destination node of transitional packet has non empty via route, then do not ignore, but use it.

  * Do not relay multicast packet to area message's originator, that obviously has seen its own packet.

  * Much less memory usage during MTH hashing when offset is zero: when packet is not resumed, but for example checked with nncp-check command.

Release 7.1.1
=============

  * Fixed failing directories fsync after .seen file creation.

Release 7.1.0
=============

  * Multicasting areas feature appeared. Implemented merely by an additional plain packet type with nncp-toss, nncp-file and nncp-exec commands modification.

  * Fixed workability of nncp-file and nncp-exec commands, that use temporary file (stdin and -use-tmp).

  * Fixed disappearing bad return code in nncp-exec command.

  * Fixed invalid .hdr generation when transitional packets are used.

  * -all option appeared in nncp-rm command, applying to all the nodes at once.

  * -cycle option appeared in nncp-check command, looping the check in infinite cycle.

  * nncp-rm command can take node alias name.

  * nncp-pkt can parse .hdr files.

Release 7.0.0
=============

  * Minimal required Go version is 1.13.

  * Merkle Tree-based Hashing with BLAKE3 (MTH) is used instead of BLAKE2b. Because of that, there are backward incompatible changes of encrypted files (everything laying in the spool directory) and .meta files of chunked transfer.

     Current implementation is far from being optimal: it lacks parallelizable calculations and has higher memory consumption: nearly 512 KiB for each 1 GiB of file's data. Future performance and memory size optimizations should not lead to packet's format change. But it is still several times faster than BLAKE2b.

  * Resumed online downloads, because of MTH, require reading only of the preceding part of file, not the whole one as was before.

  * nncp-hash utility appeared for calculating file's MTH hash.

  * BLAKE2 KDF and XOF functions are replaced with BLAKE3 in encrypted packets. Lowering number of used primitives. Also, its encrypted packet's header is used as an associated data during encryption.

  * MultiCast Discovery uses ff02::4e4e:4350 address instead of ff02::1.

  * nncp-cfgenc mistakenly asked passphrase three times during encryption.

  * nncp-stat reports about partly downloaded packets.

  * Updated dependencies.

Release 6.6.0
=============

  * nncp-daemon, nncp-call and nncp-caller commands wait for all background checksummers completion after connection is finished.

  * Added possibility of address determining through multicast announcement in local area network, so called MCD (MultiCast Discovery).

Release 6.5.0
=============

  * Fixed segfault in nncp-daemon when SP handshake did not succeed.

  * Fixed possible bad return code ignoring in automatic tosser.

  * Fixed race during file descriptors closing when online protocol call is finished, that could lead to write error of received packet fragment.

  * Kill all packet transmission progress bars in nncp-daemon, nncp-call and nncp-caller when call is finished.

Release 6.4.0
=============

  * Fixed possible race in online protocol, that lead to panic.

Release 6.3.0
=============

  * Fixed possible panic while showing progress during online protocol.

Release 6.2.1
=============

  * Three places in logs contained excess %s.

Release 6.2.0
=============

  * Returned nncp-caller's -autotoss* options workability.

  * Yet another logging refactoring and simplification. Should be no visible differences to the end user.

Release 6.1.0
=============

  * Optimization: most commands do not keep opened file descriptors now. Previously you can exceed maximal number of opened files if you have got many packets in the spool directory.

  * Optimization: do not close file descriptor of the file we download online. Previously each chunk lead to expensive open/close calls.

  * Online downloaded files are saved with .nock (non-checksummed) suffix, waiting either for nncp-check, or online daemons to perform integrity check.

  * Optimization: files, that are not resumed, are checksummed immediately during the online download, skipping .nock-intermediate step.

  * Ability to store encrypted packet's header in .hdr file, close to the packet itself. That can greatly increase performance of packets listing on filesystems with big block's size.

Release 6.0.0
=============

  * Log uses human readable and easy machine parseable recfile (https://www.gnu.org/software/recutils/) format for the records, instead of structured RFC 3339 lines. Old logs are not readable by nncp-log anymore.

  * -autotoss* option workability with nncp-daemon's -inetd mode.

  * Call's when-tx-exists allows to make a call only when outbound packets exists. Combined with seconds-aware cron expression that can be used as some kind of auto dialler.

  * nncp-cronexpr command allows you to check validity and expectations of specified cron expression.

Release 5.6.0
=============

  * -autotoss* option runs tosser not after the call, but every second while it is active.

  * autotoss, autotoss-doseen, autotoss-nofile, autotoss-nofreq, autotoss-noexec, autotoss-notrns options available in calls configuration section. You can configure per-call automatic tosser options.

  * Use vendoring, instead of $GOPATH overriding during tarball installation, because current minimal Go's version is 1.12 and it supports modules.

Release 5.5.1
=============

  * Respect for $BINDIR, $INFODIR and $DOCDIR environment variables in config during installation.

Release 5.5.0
=============

  * Bugfixes in nncp-call(er)/nncp-daemon, nncp-bundle and nncp-stat.

  * nncp-rm has -dryrun and -older options now.

  * nncp-exec has -use-tmp and -nocompress options now. Uncompressed packets are not compatible with previous NNCP versions.

  * nncp-call, nncp-caller and nncp-daemon commands have -autotoss* options for running tosser after call is ended.

  * Updated dependencies. Minimal required Go version is 1.12.

Release 5.4.1
=============

  * Fixed SENDMAIL variable usage during the build.

Release 5.4.0
=============

  * Updated dependencies.

  * Build system is moved from Makefiles to redo (http://cr.yp.to/redo.html). This should not influence package maintainers, because minimal redo implementation is included in tarball.

Release 5.3.3
=============

  * More various error checks.

  * Updated dependencies.

Release 5.3.2
=============

  * Fixed incorrect logic of onlinedeadline timeout, where connection won't take into account incoming packets events and will forcefully disconnect.

Release 5.3.1
=============

  * Fixed onlinedeadline workability with call addresses that use external commands ("|somecmd").

  * nncp-stat has -pkt option displaying information about each packet in the spool.

Release 5.3.0
=============

  * Progress messages contain prefix, describing the running action.

  * Fixed not occurring handshake messages padding.

  * Finish all SP protocol related goroutines, less memory leak.

  * SP protocol generates less socket write calls, thus generating less TCP packets.

  * Check onlinedeadline and maxonlinetime options every second, independently from socket reads (up to 10 seconds).

  * Once per minute, if no other traffic exists, PING packets are sent in SP-connection. That allows faster determining of connection unworkability.

  * nncp-toss uses lock-file to prevent simultaneous tossing.

Release 5.2.1
=============

  * Fixed SP protocol error handling, sometimes causing program panic.

Release 5.2.0
=============

  * Most commands by default show oneline operations progress. -progress, -noprogress command line options, noprogress configuration file option appeared.

  * Fixed incorrect nncp-check command return code, that returned bad code when everything is good.

  * Free disk space check during nncp-bundle -rx call.

Release 5.1.2
=============

  * Critical vulnerability: remote peers authentication could lead to incorrect identification of remote side, allowing foreign encrypted packets downloading.

  * Bugfix: private and public Noise keys were swapped in newly created configuration files, that lead to inability to authenticate online peers.

  * Explicit directories fsync-ing for guaranteed files renaming.

Release 5.1.1
=============

  * Fixed workability of nncp-file with -chunked 0 option.

Release 5.1.0
=============

  * nncp-file can send directories, automatically creating pax archive on the fly.

  * Free disk space is checked during outbound packets creation.

  * freq, freqminsize, freqchunked configuration file options replaced with the structure: freq: {path: ..., minsize: ..., chunked: ...}.

  * Added freq.maxsize configuration file option, forbidding of freq sending larger than specified size.

  * Ability to notify about successfully executed commands (exec) with notify.exec configuration file option.

Release 5.0.0
=============

  * Incompatible configuration file format change: YAML is replaced with Hjson, due to its simplicity, without noticeable lack of either functionality or convenience.

  * Incompatible plain packet format changes. Older versions are not supported. zlib compression is replaced with Zstandard, due to its speed and efficiency, despite library version is not mature enough.

  * Ability to call remote nodes via pipe call of external command, not only through TCP.

  * nncp-cfgnew generates configuration file with many comments. -nocomments option can be used for an old behaviour.

  * Duplicate filenames have .CTR suffix, instead of CTR, to avoid possible collisions with .nncp.chunkCTR.

  * Ability to override process umask through configuration file option.

  * Files and directories are created with 666/777 permissions by default, allowing control with umask.

  * Updated dependencies.

  * Full usage of go modules for dependencies management (go.cypherpunks.ru/nncp/v5 namespace is used).

  * Forbid any later GNU GPL version autousage (project's licence now is GNU GPLv3-only).

Release 4.1
===========

  * Workability on GNU/Linux systems and Go 1.10 is fixed.

Release 4.0
===========

  * Incompatible encrypted and eblob packet format change: AEAD encryption mode with 128 KiB blocks is used now, because previously nncp-toss did not verify encrypted packet's MAC before feeding decrypted data to external command. Older versions are not supported.

  * Available free space checking before copying in nncp-xfer, nncp-daemon, nncp-call(er).

  * nncp-call has ability only to list packets on remote node, without their transmission.

  * nncp-call has ability to transfer only specified packets.

  * Workability of xxrate preference in calls configuration file section.

  * Dependant libraries are updated.

  * Minor bugfixes.

  * Begin using of go.mod subsystem.

Release 3.4
===========

  * nncp-daemon can be run as inetd-service.

Release 3.3
===========

  * nncp-daemon, nncp-call, nncp-caller check if .seen exists and treat it like file was already downloaded. Possibly it was transferred out-of-bound and remote side needs to be notifier about that.

  * If higher priority packet is spooled, then nncp-daemon will queue its sending first, interrupting lower priority transmissions.

  * Simple packet rate limiter added to online-related tools (nncp-daemon, nncp-call, nncp-caller).

  * Ability to specify niceness with symbolic notation: NORMAL, BULK+10, PRIORITY-5, etc.

  * Changed default niceness levels: for nncp-exec from 64 to 96, for nncp-freq from 64 to 160, for nncp-file from 196 to 224.

Release 3.2
===========

  * Incompatible bundle archive format changes and nncp-bundle workability with Go 1.10+. Bundles must be valid tar archives, but Go 1.9 made them invalid because of long paths inside. NNCP accidentally was dependant on that bug. Explicit adding of NNCP/ directory in archive restores workability with valid tar archives.

Release 3.1
===========

  * Ability to disable relaying at all using -via - command line option.

Release 3.0
===========

  * Incompatible plain packet format changes. Older versions are not supported.

  * Ability to queue remote command execution, by configuring exec option in configuration file and using nncp-exec command:

       * nncp-mail command is replaced with more flexible nncp-exec. Instead of nncp-mail NODE RECIPIENT you must use nncp-exec NODE sendmail RECIPIENT.

       * sendmail configuration file option is replaced with exec. sendmail: [...] must be replaced with exec: sendmail: [...].

  * Ability to override via configuration option for destination node via -via command line option for following commands: nncp-file, nncp-freq, nncp-exec.

  * Chunked files, having size less than specified chunk size, will be sent as an ordinary single file.

  * Exec commands are invoked with additional $NNCP_NICE and $NNCP_SELF environment variables.

  * Files, that are sent as a reply to freq, have niceness level taken from the freq packet. You can set desired niceness during nncp-freq invocation using -replynice option.

  * nncp-toss command can ignore specified packet types during processing: -nofile, -nofreq, -noexec, -notrns.

  * nncp-file command uses FreqMinSize/FreqChunked configuration file options for -minsize/-chunked by default. You can turn this off by specifying zero value.

Release 2.0
===========

  * Incompatible encrypted/eblob packet format changes. Older versions are not supported.

  * Twofish encryption algorithm is replaced with ChaCha20. It is much more faster. One cryptographic primitive less.

  * HKDF-BLAKE2b-256 KDF algorithm is replaced with BLAKE2Xb XOF. Yet another cryptographic primitive less (assuming that BLAKE2X is nearly identical to BLAKE2).

Release 1.0
===========

  * Incompatible encrypted packet format changes. Older versions are not supported.

  * nncp-bundle command can either create stream of encrypted packets, or digest it. It is useful when dealing with stdin/stdout based transmission methods (like writing to CD-ROM without intermediate prepared ISO image and working with tape drives).

  * nncp-toss is able to create .seen files preventing duplicate packets receiving.

  * Single background checksum verifier worker is allowed in nncp-call. This is helpful when thousands of small inbound packets could create many goroutines.

  * Ability to override path to spool directory and logfile through either command line argument, or environment variable.

  * nncp-rm is able to delete outbound/inbound, .seen, .part, .lock and temporary files.

Release 0.12
============

  * Sendmail command is called with $NNCP_SENDER environment variable.

Release 0.11
============

  * nncp-stat's command output is sorted by node name.

Release 0.10
============

  * nncp-freq's DST argument is optional now. Last SRC path's element will be used by default.

Release 0.9
===========

  * Fix -rx/-tx arguments processing in nncp-call command. They were ignored.

Release 0.8
===========

  * Little bugfix in nncp-file command, where -minsize option for unchunked transfer was not in KiBs, but in bytes.

Release 0.7
===========

  * Ability to feed nncp-file from stdin, that uses an encrypted temporary file for that.

  * Chunked files transmission appeared with corresponding nncp-reass command and freqchunked configuration file entry. Useful for transferring big files over small storage devices.

  * freqminsize configuration file option, analogue to -minsize one.

  * nncp-xfer's -force option is renamed to -mkdir for clarity.

  * -minsize option is specified in KiBs, not bytes, for convenience.

  * nncp-newcfg command is renamed to nncp-cfgnew, and nncp-mincfg to nncp-cfgmin -- now they have common prefix and are grouped together for convenience.

  * nncp-cfgenc command appeared, allowing configuration file encryption/decryption, for keeping it safe without any either OpenPGP or similar tools usage.

  * Cryptographic libraries (dependencies) are updated.

Release 0.6
===========

  * Small nncp-rm command appeared.

  * Cryptographic libraries (dependencies) are updated.

Release 0.5
===========

  * Trivial small fix in default niceness level of nncp-file and nncp-freq commands.

Release 0.4
===========

  * Small fix in nncp-call, nncp-caller, nncp-daemon: they can segmentation fail sometimes (no data is lost).

  * nncp-newnode renamed to nncp-newcfg -- it is shorter and more convenient to use.

  * nncp-mincfg command appeared: helper allowing to create minimalistic stripped down configuration file without private keys, that is useful during nncp-xfer usage.

Release 0.3
===========

  * Fixed compatibility with Go 1.6.

Release 0.2
===========

  * Incompatible packet's format change (magic number is changed too): size field is encrypted and is not send in plaintext anymore.

  * -minsize option gives ability to automatically pad outgoing packets to specified minimal size.

  * nncp-daemon and nncp-call/nncp-caller always check new tx packets appearance in the background while connected. Remote side is immediately notified.

  * -onlinedeadline option gives ability to configure timeout of inactivity of online connection, when it could be disconnected. It could be used to keep connection alive for a long time.

  * -maxonlinetime option gives ability to set maximal allowable online connection aliveness time.

  * nncp-caller command appeared: cron-ed TCP daemon caller.

  * nncp-pkt command can decompress the data.