Subversion Repositories pub

Compare Revisions

Ignore whitespace Rev 182 → Rev 183

/relevation/ext/cryptopy-1.2.5.patched/binascii_plus.py
0,0 → 1,73
""" binascii_plus
 
Enhanced hex packet input and display
 
Copyright © (c) 2002 by Paul A. Lambert
Read LICENSE.txt for license information.
"""
from binascii import a2b_hex, b2a_hex
import string
 
viewable = string.letters+string.digits+string.punctuation+' '
 
def a2b_p(s):
""" Convert ascii string of hex bytes to a binary string
this conversion allows any type of white space"""
s= ''.join(string.split(s))
return a2b_hex(s)
 
#---------------
 
def b2a(bString, separator=' '):
""" Simple conversion of binary string to
hex digits with default space separator """
return string.join(['%.2x'%ord(c) for c in bString], separator)
 
def b2a_p(binary_string, frnt=' '):
""" convert a binary string to formatted ascii hex output """
return b2a_pt(binary_string, frnt=frnt, text_trailer=None)
 
def b2a_pt(binary_string, frnt=' ', gap=' ', text_trailer=1):
""" convert a binary string to pretty ascii hex output
Optional display of ascii text provided at end of hex dump """
ascii_byte_list =['%.2x'%ord(c) for c in binary_string]
pretty_list = []
trailer = []
for i in range(len(ascii_byte_list)):
if i != 0:
if i % 16 == 0: # add trailer + \n every 16 bytes
if text_trailer != None:
pretty_list += [gap] + trailer
trailer = []
pretty_list += '\n'+frnt
elif i % 8 == 0: pretty_list += ' ' # add an extra space every 8 bytes
else: pretty_list += ' ' # space between bytes
else:
pretty_list += '\n'+frnt
pretty_list += ascii_byte_list[i]
if string.find(viewable,chr(int(ascii_byte_list[i],16))) >= 0: # if printable and not white space
trailer += chr(int(ascii_byte_list[i],16))
else:
trailer += '.'
if text_trailer != None:
nabs = (16-(len(ascii_byte_list)%16))%16
if nabs>7 : pretty_list += ' '
pretty_list += nabs*' '+gap+''.join(trailer)
return ''.join(pretty_list)
 
def b2a_pter(s, frnt=' ', gap=' ', text_trailer=None):
""" convert to pretty display or leave as string if printable and short """
if len(s)>50: return b2a_pt(s,' ',gap=gap,text_trailer=text_trailer)
for char in s:
if string.find(viewable,char) >= 0: # viewable?
pass
else:
return b2a_pt(s,frnt,gap=gap,text_trailer=text_trailer)
return '\n'+frnt+'"'+s+'"'