Bug in KangarooTwelve's reference implementation posted May 2017
When playing around with KangarooTwelve I noticed that the python implementation's right_encode()
function was not consistent with the C version:
python implementation of right_encode
λ python right_encode.py
right_encode(0): [0]
right_encode(1): [1][3]
right_encode(2): [2][3]
right_encode(255): [255][5]
right_encode(256): [1][0][6]
right_encode(257): [1][1][6]
C implementation of right_encode:
λ ./right_encode
right_encode(0): 00
right_encode(1): 0101
right_encode(2): 0201
right_encode(255): ff01
right_encode(256): 010002
right_encode(257): 010102
The problem was that the python implementation used the function bytes()
to create byte strings, which has breaking behaviors between python2 and python3.
python2:
>>> bytes([1])
'[1]'
python3:
>>> bytes([1])
b'\x01'
The fix was to use bytearray() instead which is consistent across the two versions of Python.
Comments
leave a comment...