1# Author: Trevor Perrin 2# See the LICENSE file for legal information regarding use of this file. 3 4"""Miscellaneous functions to mask Python version differences.""" 5 6import sys 7import os 8import math 9import binascii 10 11if sys.version_info >= (3,0): 12 13 def compat26Str(x): return x 14 15 # Python 3 requires bytes instead of bytearrays for HMAC 16 17 # So, python 2.6 requires strings, python 3 requires 'bytes', 18 # and python 2.7 can handle bytearrays... 19 def compatHMAC(x): return bytes(x) 20 21 def raw_input(s): 22 return input(s) 23 24 # So, the python3 binascii module deals with bytearrays, and python2 25 # deals with strings... I would rather deal with the "a" part as 26 # strings, and the "b" part as bytearrays, regardless of python version, 27 # so... 28 def a2b_hex(s): 29 try: 30 b = bytearray(binascii.a2b_hex(bytearray(s, "ascii"))) 31 except Exception as e: 32 raise SyntaxError("base16 error: %s" % e) 33 return b 34 35 def a2b_base64(s): 36 try: 37 b = bytearray(binascii.a2b_base64(bytearray(s, "ascii"))) 38 except Exception as e: 39 raise SyntaxError("base64 error: %s" % e) 40 return b 41 42 def b2a_hex(b): 43 return binascii.b2a_hex(b).decode("ascii") 44 45 def b2a_base64(b): 46 return binascii.b2a_base64(b).decode("ascii") 47 48 def b2a_base32(b): 49 return base64.b32encode(b).decode("ascii") 50 51 def readStdinBinary(): 52 return sys.stdin.buffer.read() 53 54 def long(n): 55 return n 56 57else: 58 # Python 2.6 requires strings instead of bytearrays in a couple places, 59 # so we define this function so it does the conversion if needed. 60 if sys.version_info < (2,7): 61 def compat26Str(x): return str(x) 62 else: 63 def compat26Str(x): return x 64 65 # So, python 2.6 requires strings, python 3 requires 'bytes', 66 # and python 2.7 can handle bytearrays... 67 def compatHMAC(x): return compat26Str(x) 68 69 def a2b_hex(s): 70 try: 71 b = bytearray(binascii.a2b_hex(s)) 72 except Exception as e: 73 raise SyntaxError("base16 error: %s" % e) 74 return b 75 76 def a2b_base64(s): 77 try: 78 b = bytearray(binascii.a2b_base64(s)) 79 except Exception as e: 80 raise SyntaxError("base64 error: %s" % e) 81 return b 82 83 def b2a_hex(b): 84 return binascii.b2a_hex(compat26Str(b)) 85 86 def b2a_base64(b): 87 return binascii.b2a_base64(compat26Str(b)) 88 89 def b2a_base32(b): 90 return base64.b32encode(str(b)) 91 92import traceback 93def formatExceptionTrace(e): 94 newStr = "".join(traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback)) 95 return newStr 96 97