fix 'false midnight' bug (https://lwn.net/Articles/590299/ for an explanation)
Check version semantically instead of by string (the old code answers wrong for '0.10.0').
Fix: old code could raise a KeyError because choices[c] preceded the if c in choices
Load the bouncer file just once. The previous code read it twice, which could create inconsistent datastructures if the file got edited at the wrong time.
Export ssl_helpers. (Or was it meant to be left out?)
Make validateNettest work like validateInputHash. Previously the code was clearly redundant and thus probably wrong.
More-direct code for validateNettest, as long as I'm messing with it. You could do the same to validateInputHash.
Most of the body of this doesn't need to be in the scope of the 'with'. (This comes up in lots of the other 'with's in this codebase.)
Avoid the possibility of accidentally sharing the same mutable list for self.input and self.nettest.
If p is a dictionary (as I assume) then you don't need the .keys().