| # Author: Trevor Perrin |
| # See the LICENSE file for legal information regarding use of this file. |
| |
| """Miscellaneous functions to mask Python version differences.""" |
| |
| import sys |
| import os |
| import math |
| import binascii |
| |
| if sys.version_info >= (3,0): |
| |
| def compat26Str(x): return x |
| |
| # Python 3 requires bytes instead of bytearrays for HMAC |
| |
| # So, python 2.6 requires strings, python 3 requires 'bytes', |
| # and python 2.7 can handle bytearrays... |
| def compatHMAC(x): return bytes(x) |
| |
| def raw_input(s): |
| return input(s) |
| |
| # So, the python3 binascii module deals with bytearrays, and python2 |
| # deals with strings... I would rather deal with the "a" part as |
| # strings, and the "b" part as bytearrays, regardless of python version, |
| # so... |
| def a2b_hex(s): |
| try: |
| b = bytearray(binascii.a2b_hex(bytearray(s, "ascii"))) |
| except Exception as e: |
| raise SyntaxError("base16 error: %s" % e) |
| return b |
| |
| def a2b_base64(s): |
| try: |
| b = bytearray(binascii.a2b_base64(bytearray(s, "ascii"))) |
| except Exception as e: |
| raise SyntaxError("base64 error: %s" % e) |
| return b |
| |
| def b2a_hex(b): |
| return binascii.b2a_hex(b).decode("ascii") |
| |
| def b2a_base64(b): |
| return binascii.b2a_base64(b).decode("ascii") |
| |
| def readStdinBinary(): |
| return sys.stdin.buffer.read() |
| |
| else: |
| # Python 2.6 requires strings instead of bytearrays in a couple places, |
| # so we define this function so it does the conversion if needed. |
| if sys.version_info < (2,7): |
| def compat26Str(x): return str(x) |
| else: |
| def compat26Str(x): return x |
| |
| # So, python 2.6 requires strings, python 3 requires 'bytes', |
| # and python 2.7 can handle bytearrays... |
| def compatHMAC(x): return compat26Str(x) |
| |
| def a2b_hex(s): |
| try: |
| b = bytearray(binascii.a2b_hex(s)) |
| except Exception as e: |
| raise SyntaxError("base16 error: %s" % e) |
| return b |
| |
| def a2b_base64(s): |
| try: |
| b = bytearray(binascii.a2b_base64(s)) |
| except Exception as e: |
| raise SyntaxError("base64 error: %s" % e) |
| return b |
| |
| def b2a_hex(b): |
| return binascii.b2a_hex(compat26Str(b)) |
| |
| def b2a_base64(b): |
| return binascii.b2a_base64(compat26Str(b)) |
| |
| import traceback |
| def formatExceptionTrace(e): |
| newStr = "".join(traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback)) |
| return newStr |
| |