Might be easier to read if you split up in the way I did my original thread safety implementation?

https://github.com/pyca/cryptography/pull/352/files#diff-2a54efd127ef156e8b451060ecf1099dR170