Implement a higher-level API for the ntor v3 handshake

Merged eta requested to merge eta/arti:ntor3-high-level into main

This implements a higher-level API for the ntor v3 handshake, in line with that exposed by the ntor handshake. It does not, however, use the existing ClientHandshake trait, due to fundamental differences in the handshakes (namely, that the v3 handshake can include some additional extra extension data).

Currently, the higher-level API assumes circuit extension, and copies the (undocumented!) magic verification string from c-tor that indicates this usage.

A rudimentary set of functions for serializing and deserializing extensions to be sent with the handshake is also included, implementing the protocol in proposal 332 § A.2. Currently, it only implements the congestion control extensions specified in proposal 324 § 10.3.

part of #88

Merge request reports