]> Cypherpunks.ru repositories - nncp.git/blob - doc/news.texi
Restore nonce state before temporary file decryption
[nncp.git] / doc / news.texi
1 @node News
2 @unnumbered News
3
4 See also this page @ref{Новости, on russian}.
5
6 @node Release 7_1_0
7 @section Release 7.1.0
8 @itemize
9
10 @item
11 Fixed workability of @command{nncp-file} and @command{nncp-exec}
12 commands, that use temporary file (stdin and @option{-use-tmp}).
13
14 @item
15 Fixed invalid @file{.hdr} generation when transitional packets are used.
16
17 @item
18 @option{-all} option appeared in @command{nncp-rm} command, applying to
19 all the nodes at once.
20
21 @item
22 @command{nncp-pkt} can parse @file{.hdr} files.
23
24 @item
25 Multicasting areas feature appeared. Implemented merely by an additional
26 plain packet type with @command{nncp-toss}, @command{nncp-file} and
27 @command{nncp-exec} commands modification.
28
29 @end itemize
30
31 @node Release 7_0_0
32 @section Release 7.0.0
33 @itemize
34
35 @item
36 Minimal required Go version 1.13.
37
38 @item
39 Merkle Tree-based Hashing with BLAKE3 (MTH) is used instead of BLAKE2b.
40 Because of that, there are backward @strong{incompatible} changes of
41 encrypted files (everything laying in the spool directory) and
42 @file{.meta} files of chunked transfer.
43
44 Current implementation is far from being optimal: it lacks
45 parallelizable calculations and has higher memory consumption: nearly
46 512 KiB for each 1 GiB of file's data. Future performance and memory
47 size optimizations should not lead to packet's format change. But it is
48 still several times faster than BLAKE2b.
49
50 @item
51 Resumed online downloads, because of MTH, require reading only of the
52 preceding part of file, not the whole one as was before.
53
54 @item
55 @command{nncp-hash} utility appeared for calculating file's MTH hash.
56
57 @item
58 BLAKE2 KDF and XOF functions are replaced with BLAKE3 in encrypted
59 packets. Lowering number of used primitives. Also, its encrypted
60 packet's header is used as an associated data during encryption.
61
62 @item
63 MultiCast Discovery uses
64 @verb{|ff02::4e4e:4350|} address instead of @verb{|ff02::1|}.
65
66 @item
67 @command{nncp-cfgenc} mistakenly asked passphrase three times during encryption.
68
69 @item
70 @command{nncp-stat} reports about partly downloaded packets.
71
72 @item
73 Updated dependencies.
74
75 @end itemize
76
77 @node Release 6_6_0
78 @section Release 6.6.0
79 @itemize
80
81 @item
82 @command{nncp-daemon}, @command{nncp-call} and @command{nncp-caller}
83 commands wait for all background checksummers completion after
84 connection is finished.
85
86 @item
87 Added possibility of address determining through multicast announcement
88 in local area network, so called MCD (MultiCast Discovery).
89
90 @end itemize
91
92 @node Release 6_5_0
93 @section Release 6.5.0
94 @itemize
95
96 @item
97 Fixed segfault in @command{nncp-daemon} when SP handshake did not succeed.
98
99 @item
100 Fixed possible bad return code ignoring in automatic tosser.
101
102 @item
103 Fixed race during file descriptors closing when online protocol call is
104 finished, that could lead to write error of received packet fragment.
105
106 @item
107 Kill all packet transmission progress bars in @command{nncp-daemon},
108 @command{nncp-call} and @command{nncp-caller} when call is finished.
109
110 @end itemize
111
112 @node Release 6_4_0
113 @section Release 6.4.0
114 @itemize
115
116 @item
117 Fixed possible race in online protocol, that lead to panic.
118
119 @end itemize
120
121 @node Release 6_3_0
122 @section Release 6.3.0
123 @itemize
124
125 @item
126 Fixed possible panic while showing progress during online protocol.
127
128 @end itemize
129
130 @node Release 6_2_1
131 @section Release 6.2.1
132 @itemize
133
134 @item
135 Three places in logs contained excess @code{%s}.
136
137 @end itemize
138
139 @node Release 6_2_0
140 @section Release 6.2.0
141 @itemize
142
143 @item
144 Returned @command{nncp-caller}'s @option{-autotoss*} options workability.
145
146 @item
147 Yet another logging refactoring and simplification.
148 Should be no visible differences to the end user.
149
150 @end itemize
151
152 @node Release 6_1_0
153 @section Release 6.1.0
154 @itemize
155
156 @item
157 Optimization: most commands do not keep opened file descriptors now.
158 Previously you can exceed maximal number of opened files if you have got
159 many packets in the spool directory.
160
161 @item
162 Optimization: do not close file descriptor of the file we download
163 online. Previously each chunk lead to expensive open/close calls.
164
165 @item
166 Online downloaded files are saved with @file{.nock} (non-checksummed)
167 suffix, waiting either for @command{nncp-check}, or online daemons to
168 perform integrity check.
169
170 @item
171 Optimization: files, that are not resumed, are checksummed immediately
172 during the online download, skipping @file{.nock}-intermediate step.
173
174 @item
175 Ability to store encrypted packet's header in @file{.hdr} file, close to
176 the packet itself. That can greatly increase performance of packets
177 listing on filesystems with big block's size.
178
179 @end itemize
180
181 @node Release 6_0_0
182 @section Release 6.0.0
183 @itemize
184
185 @item
186 Log uses human readable and easy machine parseable
187 @url{https://www.gnu.org/software/recutils/, recfile} format for the
188 records, instead of structured RFC 3339 lines. Old logs are not readable
189 by @command{nncp-log} anymore.
190
191 @item
192 @option{-autotoss*} option workability with @command{nncp-daemon}'s
193 @option{-inetd} mode.
194
195 @item
196 Call's @option{when-tx-exists} allows to make a call only when outbound
197 packets exists. Combined with seconds-aware cron expression that can be
198 used as some kind of auto dialler.
199
200 @item
201 @command{nncp-cronexpr} command allows you to check validity and
202 expectations of specified cron expression.
203
204 @end itemize
205
206 @node Release 5_6_0
207 @section Release 5.6.0
208 @itemize
209
210 @item
211 @option{-autotoss*} option runs tosser not after the call, but every
212 second while it is active.
213
214 @item
215 @option{autotoss}, @option{autotoss-doseen},
216 @option{autotoss-nofile}, @option{autotoss-nofreq},
217 @option{autotoss-noexec}, @option{autotoss-notrns} options available in
218 @option{calls} configuration section. You can configure per-call
219 automatic tosser options.
220
221 @item
222 Use vendoring, instead of @env{GOPATH} overriding during tarball
223 installation, because current minimal Go's version is 1.12 and it
224 supports modules.
225
226 @end itemize
227
228 @node Release 5_5_1
229 @section Release 5.5.1
230 @itemize
231
232 @item
233 Respect for @env{BINDIR}, @env{INFODIR} and @env{DOCDIR} environment
234 variables in @file{config} during installation.
235
236 @end itemize
237
238 @node Release 5_5_0
239 @section Release 5.5.0
240 @itemize
241
242 @item
243 Bugfixes in @command{nncp-call(er)}/@command{nncp-daemon},
244 @command{nncp-bundle} and @command{nncp-stat}.
245
246 @item
247 @command{nncp-rm} has @option{-dryrun} and @option{-older} options now.
248
249 @item
250 @command{nncp-exec} has @option{-use-tmp} and @option{-nocompress}
251 options now. Uncompressed packets are not compatible with previous NNCP
252 versions.
253
254 @item
255 @command{nncp-call}, @command{nncp-caller} and @command{nncp-daemon} commands
256 have @option{-autotoss*} options for running tosser after call is ended.
257
258 @item
259 Updated dependencies. Minimal required Go version is 1.12.
260
261 @end itemize
262
263 @node Release 5_4_1
264 @section Release 5.4.1
265 @itemize
266
267 @item
268 Fixed @code{SENDMAIL} variable usage during the build.
269
270 @end itemize
271
272 @node Release 5_4_0
273 @section Release 5.4.0
274 @itemize
275
276 @item
277 Updated dependencies.
278
279 @item
280 Build system is moved from Makefiles to @url{http://cr.yp.to/redo.html, redo}.
281 This should not influence package maintainers, because minimal @command{redo}
282 implementation is included in tarball.
283
284 @end itemize
285
286 @node Release 5_3_3
287 @section Release 5.3.3
288 @itemize
289
290 @item
291 More various error checks.
292
293 @item
294 Updated dependencies.
295
296 @end itemize
297
298 @node Release 5_3_2
299 @section Release 5.3.2
300 @itemize
301
302 @item
303 Fixed incorrect logic of @option{onlinedeadline} timeout, where
304 connection won't take into account incoming packets events and will
305 forcefully disconnect.
306
307 @end itemize
308
309 @node Release 5_3_1
310 @section Release 5.3.1
311 @itemize
312
313 @item
314 Fixed @option{onlinedeadline} workability with call addresses that use
315 external commands (@verb{#"|somecmd"#}).
316
317 @item
318 @command{nncp-stat} has @option{-pkt} option displaying information
319 about each packet in the spool.
320
321 @end itemize
322
323 @node Release 5_3_0
324 @section Release 5.3.0
325 @itemize
326
327 @item
328 Progress messages contain prefix, describing the running action.
329
330 @item
331 Fixed not occurring handshake messages padding.
332
333 @item
334 Finish all SP protocol related goroutines, less memory leak.
335
336 @item
337 SP protocol generates less socket write calls, thus generating less TCP
338 packets.
339
340 @item
341 Check @option{onlinedeadline} and @option{maxonlinetime} options every
342 second, independently from socket reads (up to 10 seconds).
343
344 @item
345 Once per minute, if no other traffic exists, PING packets are sent in
346 SP-connection. That allows faster determining of connection unworkability.
347
348 @item
349 @command{nncp-toss} uses lock-file to prevent simultaneous tossing.
350
351 @end itemize
352
353 @node Release 5_2_1
354 @section Release 5.2.1
355 @itemize
356
357 @item
358 Fixed SP protocol error handling, sometimes causing program panic.
359
360 @end itemize
361
362 @node Release 5_2_0
363 @section Release 5.2.0
364 @itemize
365
366 @item
367 Most commands by default show oneline operations progress.
368 @option{-progress}, @option{-noprogress} command line options,
369 @option{noprogress} configuration file option appeared.
370
371 @item
372 Fixed incorrect @command{nncp-check} command return code, that returned
373 bad code when everything is good.
374
375 @item
376 Free disk space check during @command{nncp-bundle -rx} call.
377
378 @end itemize
379
380 @node Release 5_1_2
381 @section Release 5.1.2
382 @itemize
383
384 @item
385 @strong{Critical} vulnerability: remote peers authentication could lead
386 to incorrect identification of remote side, allowing foreign encrypted
387 packets downloading.
388
389 @item
390 Bugfix: private and public Noise keys were swapped in newly created
391 configuration files, that lead to inability to authenticate online peers.
392
393 @item
394 Explicit directories fsync-ing for guaranteed files renaming.
395
396 @end itemize
397
398 @node Release 5_1_1
399 @section Release 5.1.1
400 @itemize
401
402 @item
403 Fixed workability of @command{nncp-file} with @option{-chunked 0} option.
404
405 @end itemize
406
407 @node Release 5_1_0
408 @section Release 5.1.0
409 @itemize
410
411 @item
412 @command{nncp-file} can send directories, automatically creating pax
413 archive on the fly.
414
415 @item
416 Free disk space is checked during outbound packets creation.
417
418 @item
419 @option{freq}, @option{freqminsize}, @option{freqchunked} configuration
420 file options replaced with the structure:
421 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
422
423 @item
424 Added @option{freq.maxsize} configuration file option, forbidding of
425 freq sending larger than specified size.
426
427 @item
428 Ability to notify about successfully executed commands (exec) with
429 @option{notify.exec} configuration file option.
430
431 @end itemize
432
433 @node Release 5_0_0
434 @section Release 5.0.0
435 @itemize
436
437 @item
438 @strong{Incompatible} configuration file format change: YAML is
439 replaced with Hjson, due to its simplicity, without noticeable lack
440 of either functionality or convenience.
441
442 @item
443 @strong{Incompatible} plain packet format changes. Older versions are
444 not supported. @code{zlib} compression is replaced with
445 @code{Zstandard}, due to its speed and efficiency, despite library
446 version is not mature enough.
447
448 @item
449 Ability to call remote nodes via pipe call of external command, not only
450 through TCP.
451
452 @item
453 @command{nncp-cfgnew} generates configuration file with many
454 comments. @option{-nocomments} option can be used for an old
455 behaviour.
456
457 @item
458 Duplicate filenames have @file{.CTR} suffix, instead of @file{CTR}, to
459 avoid possible collisions with @file{.nncp.chunkCTR}.
460
461 @item
462 Ability to override process umask through configuration file option.
463
464 @item
465 Files and directories are created with 666/777 permissions by default,
466 allowing control with @command{umask}.
467
468 @item
469 Updated dependencies.
470
471 @item
472 Full usage of go modules for dependencies management
473 (@code{go.cypherpunks.ru/nncp/v5} namespace is used).
474
475 @item
476 Forbid any later GNU GPL version autousage
477 (project's licence now is GNU GPLv3-only).
478
479 @end itemize
480
481 @node Release 4_1
482 @section Release 4.1
483 @itemize
484 @item Workability on GNU/Linux systems and Go 1.10 is fixed.
485 @end itemize
486
487 @node Release 4_0
488 @section Release 4.0
489 @itemize
490
491 @item
492 @strong{Incompatible} encrypted and eblob packet format change: AEAD
493 encryption mode with 128 KiB blocks is used now, because previously
494 @command{nncp-toss} did not verify encrypted packet's MAC before feeding
495 decrypted data to external command. Older versions are not supported.
496
497 @item
498 Available free space checking before copying in @command{nncp-xfer},
499 @command{nncp-daemon}, @command{nncp-call(er)}.
500
501 @item
502 @command{nncp-call} has ability only to list packets on remote node,
503 without their transmission.
504
505 @item
506 @command{nncp-call} has ability to transfer only specified packets.
507
508 @item
509 Workability of @option{xxrate} preference in @option{calls}
510 configuration file section.
511
512 @item
513 Dependant libraries are updated.
514
515 @item
516 Minor bugfixes.
517
518 @item
519 Begin using of @code{go.mod} subsystem.
520
521 @end itemize
522
523 @node Release 3_4
524 @section Release 3.4
525 @itemize
526 @item @command{nncp-daemon} can be run as @command{inetd}-service.
527 @end itemize
528
529 @node Release 3_3
530 @section Release 3.3
531 @itemize
532
533 @item
534 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller} check
535 if @file{.seen} exists and treat it like file was already downloaded.
536 Possibly it was transferred out-of-bound and remote side needs to be
537 notifier about that.
538
539 @item
540 If higher priority packet is spooled, then @command{nncp-daemon} will
541 queue its sending first, interrupting lower priority transmissions.
542
543 @item
544 Simple packet rate limiter added to online-related tools
545 (@command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}).
546
547 @item
548 Ability to specify niceness with symbolic notation:
549 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, etc.
550
551 @item
552 Changed default niceness levels:
553 for @command{nncp-exec} from 64 to 96,
554 for @command{nncp-freq} from 64 to 160,
555 for @command{nncp-file} from 196 to 224.
556
557 @end itemize
558
559 @node Release 3_2
560 @section Release 3.2
561 @itemize
562 @item
563 @strong{Incompatible} @emph{bundle} archive format changes and
564 @command{nncp-bundle} workability with Go 1.10+. Bundles must be
565 valid tar archives, but Go 1.9 made them invalid because of long paths
566 inside. NNCP accidentally was dependant on that bug. Explicit adding of
567 @file{NNCP/} directory in archive restores workability with valid tar
568 archives.
569 @end itemize
570
571 @node Release 3_1
572 @section Release 3.1
573 @itemize
574 @item
575 Ability to disable relaying at all using @verb{|-via -|} command line option.
576 @end itemize
577
578 @node Release 3_0
579 @section Release 3.0
580 @itemize
581
582 @item
583 @strong{Incompatible} plain packet format changes. Older versions are
584 not supported.
585
586 @item
587 Ability to queue remote command execution, by configuring @option{exec}
588 option in configuration file and using @command{nncp-exec} command:
589     @itemize
590     @item
591     @command{nncp-mail} command is replaced with more flexible
592     @command{nncp-exec}. Instead of @verb{|nncp-mail NODE RECIPIENT|}
593     you must use @verb{|nncp-exec NODE sendmail RECIPIENT|}.
594     @item
595     @option{sendmail} configuration file option is replaced with
596     @option{exec}. @verb{|sendmail: [...]|} must be replaced with
597     @verb{|exec: sendmail: [...]|}.
598     @end itemize
599
600 @item
601 Ability to override @option{via} configuration option for destination
602 node via @option{-via} command line option for following commands:
603 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
604
605 @item
606 Chunked files, having size less than specified chunk size, will be sent
607 as an ordinary single file.
608
609 @item
610 Exec commands are invoked with additional @env{NNCP_NICE} and
611 @env{NNCP_SELF} environment variables.
612
613 @item
614 Files, that are sent as a reply to freq, have niceness level taken from
615 the freq packet. You can set desired niceness during @command{nncp-freq}
616 invocation using @option{-replynice} option.
617
618 @item
619 @command{nncp-toss} command can ignore specified packet types during
620 processing: @option{-nofile}, @option{-nofreq}, @option{-noexec},
621 @option{-notrns}.
622
623 @item
624 @command{nncp-file} command uses
625 @option{FreqMinSize}/@option{FreqChunked} configuration file options
626 for @option{-minsize}/@option{-chunked} by default. You can turn this
627 off by specifying zero value.
628
629 @end itemize
630
631 @node Release 2_0
632 @section Release 2.0
633 @itemize
634
635 @item
636 @strong{Incompatible} encrypted/eblob packet format changes. Older
637 versions are not supported.
638
639 @item
640 Twofish encryption algorithm is replaced with ChaCha20. It is much more
641 faster. One cryptographic primitive less.
642
643 @item
644 HKDF-BLAKE2b-256 KDF algorithm is replaced with BLAKE2Xb XOF. Yet
645 another cryptographic primitive less (assuming that BLAKE2X is nearly
646 identical to BLAKE2).
647
648 @end itemize
649
650 @node Release 1_0
651 @section Release 1.0
652 @itemize
653
654 @item
655 @strong{Incompatible} encrypted packet format changes. Older versions
656 are not supported.
657
658 @item
659 @command{nncp-bundle} command can either create stream of encrypted
660 packets, or digest it. It is useful when dealing with
661 @code{stdin}/@code{stdout} based transmission methods (like writing to
662 CD-ROM without intermediate prepared ISO image and working with tape
663 drives).
664
665 @item
666 @command{nncp-toss} is able to create @file{.seen} files preventing
667 duplicate packets receiving.
668
669 @item
670 Single background checksum verifier worker is allowed in
671 @command{nncp-call}. This is helpful when thousands of small inbound
672 packets could create many goroutines.
673
674 @item
675 Ability to override path to spool directory and logfile through either
676 command line argument, or environment variable.
677
678 @item
679 @command{nncp-rm} is able to delete outbound/inbound, @file{.seen},
680 @file{.part}, @file{.lock} and temporary files.
681
682 @end itemize
683
684 @node Release 0_12
685 @section Release 0.12
686 @itemize
687 @item Sendmail command is called with @env{NNCP_SENDER} environment variable.
688 @end itemize
689
690 @node Release 0_11
691 @section Release 0.11
692 @itemize
693 @item @command{nncp-stat}'s command output is sorted by node name.
694 @end itemize
695
696 @node Release 0_10
697 @section Release 0.10
698 @itemize
699 @item
700 @command{nncp-freq}'s @file{DST} argument is optional now. Last
701 @file{SRC} path's element will be used by default.
702 @end itemize
703
704 @node Release 0_9
705 @section Release 0.9
706 @itemize
707 @item
708 Fix @option{-rx}/@option{-tx} arguments processing in
709 @command{nncp-call} command. They were ignored.
710 @end itemize
711
712 @node Release 0_8
713 @section Release 0.8
714 @itemize
715 @item
716 Little bugfix in @command{nncp-file} command, where @option{-minsize}
717 option for unchunked transfer was not in KiBs, but in bytes.
718 @end itemize
719
720 @node Release 0_7
721 @section Release 0.7
722 @itemize
723
724 @item
725 Ability to feed @command{nncp-file} from @code{stdin}, that uses an
726 encrypted temporary file for that.
727
728 @item
729 Chunked files transmission appeared with corresponding
730 @command{nncp-reass} command and @option{freqchunked} configuration file
731 entry. Useful for transferring big files over small storage devices.
732
733 @item
734 @option{freqminsize} configuration file option, analogue to
735 @option{-minsize} one.
736
737 @item
738 @command{nncp-xfer}'s @option{-force} option is renamed to
739 @option{-mkdir} for clarity.
740
741 @item
742 @option{-minsize} option is specified in KiBs, not bytes, for
743 convenience.
744
745 @item
746 @command{nncp-newcfg} command is renamed to @command{nncp-cfgnew},
747 and @command{nncp-mincfg} to @command{nncp-cfgmin} -- now they have
748 common prefix and are grouped together for convenience.
749
750 @item
751 @command{nncp-cfgenc} command appeared, allowing configuration file
752 encryption/decryption, for keeping it safe without any either OpenPGP or
753 similar tools usage.
754
755 @item
756 Cryptographic libraries (dependencies) are updated.
757
758 @end itemize
759
760 @node Release 0_6
761 @section Release 0.6
762 @itemize
763 @item Small @command{nncp-rm} command appeared.
764 @item Cryptographic libraries (dependencies) are updated.
765 @end itemize
766
767 @node Release 0_5
768 @section Release 0.5
769 @itemize
770 @item
771 Trivial small fix in default niceness level of @command{nncp-file}
772 and @command{nncp-freq} commands.
773 @end itemize
774
775 @node Release 0_4
776 @section Release 0.4
777 @itemize
778
779 @item
780 Small fix in @command{nncp-call}, @command{nncp-caller},
781 @command{nncp-daemon}: they can segmentation fail sometimes (no data is
782 lost).
783
784 @item
785 @command{nncp-newnode} renamed to @command{nncp-newcfg} -- it is shorter
786 and more convenient to use.
787
788 @item
789 @command{nncp-mincfg} command appeared: helper allowing to create
790 minimalistic stripped down configuration file without private keys, that
791 is useful during @command{nncp-xfer} usage.
792
793 @end itemize
794
795 @node Release 0_3
796 @section Release 0.3
797 @itemize
798 @item Fixed compatibility with Go 1.6.
799 @end itemize
800
801 @node Release 0_2
802 @section Release 0.2
803 @itemize
804
805 @item
806 @strong{Incompatible} packet's format change (magic number is changed
807 too): size field is encrypted and is not send in plaintext anymore.
808
809 @item
810 @option{-minsize} option gives ability to automatically pad outgoing
811 packets to specified minimal size.
812
813 @item
814 @command{nncp-daemon} and @command{nncp-call}/@command{nncp-caller}
815 always check new @emph{tx} packets appearance in the background while
816 connected. Remote side is immediately notified.
817
818 @item
819 @option{-onlinedeadline} option gives ability to configure timeout of
820 inactivity of online connection, when it could be disconnected. It could
821 be used to keep connection alive for a long time.
822
823 @item
824 @option{-maxonlinetime} option gives ability to set maximal allowable
825 online connection aliveness time.
826
827 @item
828 @command{nncp-caller} command appeared: cron-ed TCP daemon caller.
829
830 @item
831 @command{nncp-pkt} command can decompress the data.
832
833 @end itemize