Skip to content

Commit 1caa130

Browse files
committed
Fixes bad zero-prefix padding bug in older _int2bytes to pass all tests.
1 parent 03c51e7 commit 1caa130

1 file changed

Lines changed: 10 additions & 8 deletions

File tree

rsa/transform.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,7 @@
3333
import binascii
3434
from struct import pack
3535
from rsa import common
36-
from rsa._compat import is_integer, b, byte, get_word_alignment
37-
38-
39-
ZERO_BYTE = b('\x00')
36+
from rsa._compat import is_integer, b, byte, get_word_alignment, ZERO_BYTE, EMPTY_BYTE
4037

4138

4239
def bytes2int(raw_bytes):
@@ -74,14 +71,19 @@ def _int2bytes(number, block_size=0):
7471
raise ValueError('Negative numbers cannot be used: %i' % number)
7572

7673
# Do some bounds checking
77-
needed_bytes = common.byte_size(number)
74+
if number == 0:
75+
needed_bytes = 1
76+
raw_bytes = [ZERO_BYTE]
77+
else:
78+
needed_bytes = common.byte_size(number)
79+
raw_bytes = []
80+
7881
if block_size > 0:
7982
if needed_bytes > block_size:
8083
raise OverflowError('Needed %i bytes for number, but block size '
8184
'is %i' % (needed_bytes, block_size))
8285

8386
# Convert the number to bytes.
84-
raw_bytes = []
8587
while number > 0:
8688
raw_bytes.insert(0, byte(number & 0xFF))
8789
number >>= 8
@@ -90,9 +92,9 @@ def _int2bytes(number, block_size=0):
9092
if block_size > 0:
9193
padding = (block_size - needed_bytes) * ZERO_BYTE
9294
else:
93-
padding = b('')
95+
padding = EMPTY_BYTE
9496

95-
return padding + b('').join(raw_bytes)
97+
return padding + EMPTY_BYTE.join(raw_bytes)
9698

9799

98100
def bytes_leading(raw_bytes, needle=ZERO_BYTE):

0 commit comments

Comments
 (0)