[noise] Transport protocol spec finalizing

Trevor Perrin trevp at trevp.net
Fri Jul 14 01:37:33 PDT 2017


On Fri, Jul 14, 2017 at 8:11 AM, Alexey Ermishkin <scratch.net at gmail.com> wrote:
> Yes, that's seems legit.
>
> However I'd like to talk about the term "server_version != client_version"
>
> If we use negotiation_data, we might put all necessary info into it and use version as, well, version.
>
> For example if we wanted to support a broader range of available options, suggested by NoiseC,
> https://github.com/rweather/noise-c/blob/master/include/noise/protocol/constants.h
> we would have to put 5 or 6 enums into 4 byte version and I guess the number will only increase over time.
>
> So, would it be more correct to say that the way server is able to switch to another protocol is not only by changing version but also by supplying an additional negotiation_data without having to change the version?


Should we remove the version field?

For handshake messages after ClientHello, the rules could be:

If noise_message is non-empty:
  - If negotiation_data is empty, the sender accepted the previous
Noise protocol
  - If negotiation_data is non-empty, the sender has switched to a
different Noise protocol

If noise_message is empty:
 - The sender is rejecting the previous Noise protocol, and can send
error or retry data in the negotiation_data. The sender may leave the
connection open so the recipient can try again.

(Of course, you could add your own version field or enums etc in
negotiation_data).

?

Trevor


More information about the Noise mailing list