Subject: Updates on NNCP stuff

From: John Goerzen <[email-masked]>
Date: Tue, 31 Oct 2023 12:41:08 -0500

Hi everyone,

I thought I'd mention a few things I'm looking at...

First of all, I'm writing a Rust library to interact with NNCP packets.
The idea is to expose a high-level API that is separate from the details
of configuration and file manipulation, as a way to learn more about
NNCP packets and to possibly use them in other contexts.  (Random
thoughts: embed in emails, run through other queue systems, send over
UUCP, etc.)  I don't plan to re-implement NNCPgo, and particularly not
the network protocol.  My hope is to make it complimentary, to allow
things to hop across even more types of systems end-to-end, and to let
me do some research and experimentation on new types of auto-routing.

So far, I have a working parser for NNCP packets, complete with header
signature verification, decryption, and zstd decompression.

The next step is to fully test the different packet types (since I am
using the type system to decode them into more-specific structures; ie,
the path field is decoded as appropriate for different packet types.)

I hope to get the source code and crate up in a week or so.

The major thing I'm still puzzled about is writing a compatible Markle
tree hash.  There are various libraries for doing this, but it looks
like the one in NNCP is home-grown and I'm scratching my head at the
source code.  This isn't strictly necessary to parse packets, but it IS
necessary to interoperate with NNCPgo and to handle Ack packets, both of
which are goals of mine.

Secondly, I owe Sergey a documentation patch for the packet type enum.
I'll get that going.

Third, Yggdrasil just announced a major upgrade to 0.5.  Although keys
and IPs remain the same, the wire protocol has an incompatible change.
It also requires the newer hjson v5 go module.

I happen to maintain both Yggdrasil and NNCP in Debian, and because of
the coupling between them (both for Yggdrasil and hjson), they likely
have to be upgraded in tandem.  Sergey, if you have newer Yggdrasil and
hjson on your radar, that would be fantastic.  Hopefully it takes
minimal effort, but I have no idea how these things tend to work in Go.

Thanks!

- John