From ddbe716ca4b1938f70c36c8d0ffed0f355641fd3 Mon Sep 17 00:00:00 2001 From: Yesudeep Mangalapilly Date: Tue, 16 Aug 2011 14:44:53 +0530 Subject: Fixes bad zero-prefix padding bug in older _int2bytes to pass all tests. --- rsa/transform.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/rsa/transform.py b/rsa/transform.py index 9ba2fe7..9abc6ae 100644 --- a/rsa/transform.py +++ b/rsa/transform.py @@ -33,10 +33,7 @@ except ImportError: import binascii from struct import pack from rsa import common -from rsa._compat import is_integer, b, byte, get_word_alignment - - -ZERO_BYTE = b('\x00') +from rsa._compat import is_integer, b, byte, get_word_alignment, ZERO_BYTE, EMPTY_BYTE def bytes2int(raw_bytes): @@ -74,14 +71,19 @@ def _int2bytes(number, block_size=0): raise ValueError('Negative numbers cannot be used: %i' % number) # Do some bounds checking - needed_bytes = common.byte_size(number) + if number == 0: + needed_bytes = 1 + raw_bytes = [ZERO_BYTE] + else: + needed_bytes = common.byte_size(number) + raw_bytes = [] + if block_size > 0: if needed_bytes > block_size: raise OverflowError('Needed %i bytes for number, but block size ' 'is %i' % (needed_bytes, block_size)) # Convert the number to bytes. - raw_bytes = [] while number > 0: raw_bytes.insert(0, byte(number & 0xFF)) number >>= 8 @@ -90,9 +92,9 @@ def _int2bytes(number, block_size=0): if block_size > 0: padding = (block_size - needed_bytes) * ZERO_BYTE else: - padding = b('') + padding = EMPTY_BYTE - return padding + b('').join(raw_bytes) + return padding + EMPTY_BYTE.join(raw_bytes) def bytes_leading(raw_bytes, needle=ZERO_BYTE): -- cgit v1.2.1