aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2019-01-16 22:07:17 -0600
committerAlex Gaynor <alex.gaynor@gmail.com>2019-01-16 23:07:17 -0500
commitb480d2d4dbc6339f476d49faa0900eae2f4c1d07 (patch)
tree6e2345d51feefdec0abbdc878b44b84bdb859628
parentbfc6fae472457c37abafb3818b44f0bd639be6cc (diff)
downloadplatform_external_python_cryptography-b480d2d4dbc6339f476d49faa0900eae2f4c1d07.tar.gz
platform_external_python_cryptography-b480d2d4dbc6339f476d49faa0900eae2f4c1d07.tar.bz2
platform_external_python_cryptography-b480d2d4dbc6339f476d49faa0900eae2f4c1d07.zip
support byteslike in hash updates (#4702)
This is needed to handle keying material in some of the KDFs
-rw-r--r--src/cryptography/hazmat/backends/openssl/hashes.py5
-rw-r--r--src/cryptography/hazmat/primitives/hashes.py2
-rw-r--r--tests/hazmat/primitives/test_hashes.py12
3 files changed, 17 insertions, 2 deletions
diff --git a/src/cryptography/hazmat/backends/openssl/hashes.py b/src/cryptography/hazmat/backends/openssl/hashes.py
index c39f57dc..e9a50705 100644
--- a/src/cryptography/hazmat/backends/openssl/hashes.py
+++ b/src/cryptography/hazmat/backends/openssl/hashes.py
@@ -47,7 +47,10 @@ class _HashContext(object):
return _HashContext(self._backend, self.algorithm, ctx=copied_ctx)
def update(self, data):
- res = self._backend._lib.EVP_DigestUpdate(self._ctx, data, len(data))
+ data_ptr = self._backend._ffi.from_buffer(data)
+ res = self._backend._lib.EVP_DigestUpdate(
+ self._ctx, data_ptr, len(data)
+ )
self._backend.openssl_assert(res != 0)
def finalize(self):
diff --git a/src/cryptography/hazmat/primitives/hashes.py b/src/cryptography/hazmat/primitives/hashes.py
index 35b7d646..0d6e47fb 100644
--- a/src/cryptography/hazmat/primitives/hashes.py
+++ b/src/cryptography/hazmat/primitives/hashes.py
@@ -82,7 +82,7 @@ class Hash(object):
def update(self, data):
if self._ctx is None:
raise AlreadyFinalized("Context was already finalized.")
- utils._check_bytes("data", data)
+ utils._check_byteslike("data", data)
self._ctx.update(data)
def copy(self):
diff --git a/tests/hazmat/primitives/test_hashes.py b/tests/hazmat/primitives/test_hashes.py
index c2b866f7..6cba84b5 100644
--- a/tests/hazmat/primitives/test_hashes.py
+++ b/tests/hazmat/primitives/test_hashes.py
@@ -4,6 +4,8 @@
from __future__ import absolute_import, division, print_function
+import binascii
+
import pytest
from cryptography.exceptions import AlreadyFinalized, _Reasons
@@ -167,3 +169,13 @@ def test_invalid_backend():
with raises_unsupported_algorithm(_Reasons.BACKEND_MISSING_INTERFACE):
hashes.Hash(hashes.SHA1(), pretend_backend)
+
+
+@pytest.mark.requires_backend_interface(interface=HashBackend)
+def test_buffer_protocol_hash(backend):
+ data = binascii.unhexlify(b"b4190e")
+ h = hashes.Hash(hashes.SHA256(), backend)
+ h.update(bytearray(data))
+ assert h.finalize() == binascii.unhexlify(
+ b"dff2e73091f6c05e528896c4c831b9448653dc2ff043528f6769437bc7b975c2"
+ )