Not Quite So Broken
nqsb.io
nqsb.io
State machines have well-defined semantics, can be visualized nicely, implemented in a straightforward manner, and tested against specification.
The only thing that I would point out to people is that "time" is an input to your state machine. That's single change makes most state machines deterministic in software.
I wonder if it's a domain-related thing. I got into software from hardware.
I suspect a lot of things like SSL have really complicated state machines that are hard to visualise. Perhaps that should count more heavily against their design.
I can't remember where, but I recently read that the TCP state machine in e.g. the Linux kernel is significantly more complex than any you'll find in any TCP RFC
RNG state is another usually non-deterministic input, but you are correct. This implementation takes time as input, and allows the manual passing of RNG state, but defaults to maintaining internal RNG state to make it halfway-nice to actually use. There's a trade-off between maintaining purity, and the complexity you impose on the users of the API. I think they made a good call in this case.
- TLSv1.2 and thus GCM and DHE are supported (and default).
- TLSv1.3 is in the works as we speak (which implies ECDHE), check back in a few months.
body > div class="content"