Switch to using a custom exception on error conditions
Switch symmetric ciphers over to using their own exception as well
Some python cleanups suggested by pylint.