From 726c2ebd8c12fad24f29eb32bfdbaa6ecd4c3a4d Mon Sep 17 00:00:00 2001 From: Adrien Beraud Date: Fri, 7 Sep 2012 16:29:44 +0200 Subject: [PATCH] bug fix and encode func --- base91.py | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/base91.py b/base91.py index e970a09..60bfa04 100644 --- a/base91.py +++ b/base91.py @@ -11,14 +11,15 @@ base91_alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', ' decode_table = dict((v,k) for k,v in enumerate(base91_alphabet)) def decode(encoded_str): + ''' Decode Base91 string to a bytearray ''' v = -1 b = 0 n = 0 out = bytearray() for strletter in encoded_str: - if not strletter in dectable: + if not strletter in decode_table: continue - c = dectable[strletter] + c = decode_table[strletter] if(v < 0): v = c else: @@ -36,3 +37,33 @@ def decode(encoded_str): out += struct.pack('B', (b | v << n) & 255 ) return out +def encode(bindata): + ''' Encode a bytearray to a Base91 string ''' + l = len(bindata) + b = 0 + n = 0 + out = '' + for byte in bindata: + b |= struct.unpack('B', byte)[0] << n + n += 8 + if n>13: + v = b & 8191 + if v > 88: + b >>= 13 + n -= 13 + else: + v = b & 16383 + b >>= 14 + n -= 14 + out += base91_alphabet[v % 91] + base91_alphabet[v / 91] + if n: + out += base91_alphabet[b % 91] + if n>7 or b>90: + out += base91_alphabet[b / 91] + return out + + + + + + -- 2.30.2