diff options
author | Jack O'Connor <oconnor663@gmail.com> | 2017-11-03 19:02:41 (GMT) |
---|---|---|
committer | Christian Heimes <christian@python.org> | 2017-11-03 19:02:41 (GMT) |
commit | dcfb0e3c04f1b29a0d09bb0a81dcd5ee5a5fef1a (patch) | |
tree | 4f160c37de78a47989bdabea0bdb3f3a44330c99 /Lib/test/test_hashlib.py | |
parent | f6f90ff079a22b79a58d47b6117cc8a8c7d366f3 (diff) | |
download | cpython-dcfb0e3c04f1b29a0d09bb0a81dcd5ee5a5fef1a.zip cpython-dcfb0e3c04f1b29a0d09bb0a81dcd5ee5a5fef1a.tar.gz cpython-dcfb0e3c04f1b29a0d09bb0a81dcd5ee5a5fef1a.tar.bz2 |
bpo-31933: fix blake2 multi-byte params on big endian platforms (#4250)
All Blake2 params have to be encoded in little-endian byte order. For
the two multi-byte integer params, leaf_length and node_offset, that
means that assigning a native-endian integer to them appears to work on
little-endian platforms, but gives the wrong result on big-endian. The
current libb2 API doesn't make that very clear, and @sneves is working
on new API functions in the GH issue above. In the meantime, we can work
around the problem by explicitly assigning little-endian values to the
parameter block.
See https://github.com/BLAKE2/libb2/issues/12.
Diffstat (limited to 'Lib/test/test_hashlib.py')
-rw-r--r-- | Lib/test/test_hashlib.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py index 90e6a56..e4e5280 100644 --- a/Lib/test/test_hashlib.py +++ b/Lib/test/test_hashlib.py @@ -616,6 +616,24 @@ class HashLibTestCase(unittest.TestCase): "7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923") @requires_blake2 + def test_case_blake2b_all_parameters(self): + # This checks that all the parameters work in general, and also that + # parameter byte order doesn't get confused on big endian platforms. + self.check('blake2b', b"foo", + "920568b0c5873b2f0ab67bedb6cf1b2b", + digest_size=16, + key=b"bar", + salt=b"baz", + person=b"bing", + fanout=2, + depth=3, + leaf_size=4, + node_offset=5, + node_depth=6, + inner_size=7, + last_node=True) + + @requires_blake2 def test_blake2b_vectors(self): for msg, key, md in read_vectors('blake2b'): key = bytes.fromhex(key) @@ -641,6 +659,24 @@ class HashLibTestCase(unittest.TestCase): "508c5e8c327c14e2e1a72ba34eeb452f37458b209ed63a294d999b4c86675982") @requires_blake2 + def test_case_blake2s_all_parameters(self): + # This checks that all the parameters work in general, and also that + # parameter byte order doesn't get confused on big endian platforms. + self.check('blake2s', b"foo", + "bf2a8f7fe3c555012a6f8046e646bc75", + digest_size=16, + key=b"bar", + salt=b"baz", + person=b"bing", + fanout=2, + depth=3, + leaf_size=4, + node_offset=5, + node_depth=6, + inner_size=7, + last_node=True) + + @requires_blake2 def test_blake2s_vectors(self): for msg, key, md in read_vectors('blake2s'): key = bytes.fromhex(key) |