Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions Lib/test/test_hashlib.py
Original file line number Diff line number Diff line change
Expand Up @@ -618,6 +618,24 @@ def test_case_blake2b_1(self):
"ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1"+
"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'):
Expand All @@ -643,6 +661,24 @@ def test_case_blake2s_1(self):
self.check('blake2s', b"abc",
"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'):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fix Blake2 params leaf_size and node_offset on big endian platforms. Patch
by Jack O'Connor.
6 changes: 4 additions & 2 deletions Modules/_blake2/blake2b_impl.c
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,8 @@ py_blake2b_new_impl(PyTypeObject *type, PyObject *data, int digest_size,
goto error;
}
}
self->param.leaf_length = (unsigned int)leaf_size;
// NB: Simple assignment here would be incorrect on big endian platforms.
store32(&(self->param.leaf_length), leaf_size);

if (node_offset_obj != NULL) {
node_offset = PyLong_AsUnsignedLongLong(node_offset_obj);
Expand All @@ -182,7 +183,8 @@ py_blake2b_new_impl(PyTypeObject *type, PyObject *data, int digest_size,
}
store48(&(self->param.node_offset), node_offset);
#else
self->param.node_offset = node_offset;
// NB: Simple assignment here would be incorrect on big endian platforms.
store64(&(self->param.node_offset), node_offset);
#endif

if (node_depth < 0 || node_depth > 255) {
Expand Down
6 changes: 4 additions & 2 deletions Modules/_blake2/blake2s_impl.c
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,8 @@ py_blake2s_new_impl(PyTypeObject *type, PyObject *data, int digest_size,
goto error;
}
}
self->param.leaf_length = (unsigned int)leaf_size;
// NB: Simple assignment here would be incorrect on big endian platforms.
store32(&(self->param.leaf_length), leaf_size);

if (node_offset_obj != NULL) {
node_offset = PyLong_AsUnsignedLongLong(node_offset_obj);
Expand All @@ -182,7 +183,8 @@ py_blake2s_new_impl(PyTypeObject *type, PyObject *data, int digest_size,
}
store48(&(self->param.node_offset), node_offset);
#else
self->param.node_offset = node_offset;
// NB: Simple assignment here would be incorrect on big endian platforms.
store64(&(self->param.node_offset), node_offset);
#endif

if (node_depth < 0 || node_depth > 255) {
Expand Down