mirror of
https://github.com/python/cpython.git
synced 2025-08-31 22:18:28 +00:00
Change hashlib to return bytes from digest() instead of str8.
This commit is contained in:
parent
867bcbcd6d
commit
5ed033b5a2
5 changed files with 32 additions and 29 deletions
|
@ -12,12 +12,12 @@ from test import test_support
|
||||||
|
|
||||||
|
|
||||||
def hexstr(s):
|
def hexstr(s):
|
||||||
import string
|
assert isinstance(s, bytes), repr(s)
|
||||||
h = string.hexdigits
|
h = b"0123456789abcdef"
|
||||||
r = ''
|
r = b''
|
||||||
for c in s:
|
for i in s:
|
||||||
i = ord(c)
|
r.append(h[(i >> 4) & 0xF])
|
||||||
r = r + h[(i >> 4) & 0xF] + h[i & 0xF]
|
r.append(h[i & 0xF])
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,7 +37,8 @@ class HashLibTestCase(unittest.TestCase):
|
||||||
def test_hexdigest(self):
|
def test_hexdigest(self):
|
||||||
for name in self.supported_hash_names:
|
for name in self.supported_hash_names:
|
||||||
h = hashlib.new(name)
|
h = hashlib.new(name)
|
||||||
self.assert_(hexstr(h.digest()) == h.hexdigest())
|
assert isinstance(h.digest(), bytes), name
|
||||||
|
self.assertEqual(hexstr(h.digest()), h.hexdigest())
|
||||||
|
|
||||||
|
|
||||||
def test_large_update(self):
|
def test_large_update(self):
|
||||||
|
@ -66,14 +67,15 @@ class HashLibTestCase(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
def test_case_md5_0(self):
|
def test_case_md5_0(self):
|
||||||
self.check('md5', '', 'd41d8cd98f00b204e9800998ecf8427e')
|
self.check('md5', b'', b'd41d8cd98f00b204e9800998ecf8427e')
|
||||||
|
|
||||||
def test_case_md5_1(self):
|
def test_case_md5_1(self):
|
||||||
self.check('md5', 'abc', '900150983cd24fb0d6963f7d28e17f72')
|
self.check('md5', b'abc', b'900150983cd24fb0d6963f7d28e17f72')
|
||||||
|
|
||||||
def test_case_md5_2(self):
|
def test_case_md5_2(self):
|
||||||
self.check('md5', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
|
self.check('md5',
|
||||||
'd174ab98d277d9f5a5611c2c9f419d9f')
|
b'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
|
||||||
|
b'd174ab98d277d9f5a5611c2c9f419d9f')
|
||||||
|
|
||||||
|
|
||||||
# use the three examples from Federal Information Processing Standards
|
# use the three examples from Federal Information Processing Standards
|
||||||
|
@ -81,20 +83,21 @@ class HashLibTestCase(unittest.TestCase):
|
||||||
# http://www.itl.nist.gov/div897/pubs/fip180-1.htm
|
# http://www.itl.nist.gov/div897/pubs/fip180-1.htm
|
||||||
|
|
||||||
def test_case_sha1_0(self):
|
def test_case_sha1_0(self):
|
||||||
self.check('sha1', "",
|
self.check('sha1', b"",
|
||||||
"da39a3ee5e6b4b0d3255bfef95601890afd80709")
|
b"da39a3ee5e6b4b0d3255bfef95601890afd80709")
|
||||||
|
|
||||||
def test_case_sha1_1(self):
|
def test_case_sha1_1(self):
|
||||||
self.check('sha1', "abc",
|
self.check('sha1', b"abc",
|
||||||
"a9993e364706816aba3e25717850c26c9cd0d89d")
|
b"a9993e364706816aba3e25717850c26c9cd0d89d")
|
||||||
|
|
||||||
def test_case_sha1_2(self):
|
def test_case_sha1_2(self):
|
||||||
self.check('sha1', "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
|
self.check('sha1',
|
||||||
"84983e441c3bd26ebaae4aa1f95129e5e54670f1")
|
b"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
|
||||||
|
b"84983e441c3bd26ebaae4aa1f95129e5e54670f1")
|
||||||
|
|
||||||
def test_case_sha1_3(self):
|
def test_case_sha1_3(self):
|
||||||
self.check('sha1', "a" * 1000000,
|
self.check('sha1', b"a" * 1000000,
|
||||||
"34aa973cd4c4daa4f61eeb2bdbad27316534016f")
|
b"34aa973cd4c4daa4f61eeb2bdbad27316534016f")
|
||||||
|
|
||||||
|
|
||||||
# use the examples from Federal Information Processing Standards
|
# use the examples from Federal Information Processing Standards
|
||||||
|
|
|
@ -528,7 +528,7 @@ def uuid3(namespace, name):
|
||||||
"""Generate a UUID from the MD5 hash of a namespace UUID and a name."""
|
"""Generate a UUID from the MD5 hash of a namespace UUID and a name."""
|
||||||
from hashlib import md5
|
from hashlib import md5
|
||||||
hash = md5(namespace.bytes + bytes(name, "utf-8")).digest()
|
hash = md5(namespace.bytes + bytes(name, "utf-8")).digest()
|
||||||
return UUID(bytes=bytes_(hash[:16]), version=3)
|
return UUID(bytes=hash[:16], version=3)
|
||||||
|
|
||||||
def uuid4():
|
def uuid4():
|
||||||
"""Generate a random UUID."""
|
"""Generate a random UUID."""
|
||||||
|
@ -551,7 +551,7 @@ def uuid5(namespace, name):
|
||||||
"""Generate a UUID from the SHA-1 hash of a namespace UUID and a name."""
|
"""Generate a UUID from the SHA-1 hash of a namespace UUID and a name."""
|
||||||
from hashlib import sha1
|
from hashlib import sha1
|
||||||
hash = sha1(namespace.bytes + bytes(name, "utf-8")).digest()
|
hash = sha1(namespace.bytes + bytes(name, "utf-8")).digest()
|
||||||
return UUID(bytes=bytes_(hash[:16]), version=5)
|
return UUID(bytes=hash[:16], version=5)
|
||||||
|
|
||||||
# The following standard UUIDs are for use with uuid3() or uuid5().
|
# The following standard UUIDs are for use with uuid3() or uuid5().
|
||||||
|
|
||||||
|
|
|
@ -103,7 +103,7 @@ EVP_digest(EVPobject *self, PyObject *unused)
|
||||||
digest_size = EVP_MD_CTX_size(&temp_ctx);
|
digest_size = EVP_MD_CTX_size(&temp_ctx);
|
||||||
EVP_DigestFinal(&temp_ctx, digest, NULL);
|
EVP_DigestFinal(&temp_ctx, digest, NULL);
|
||||||
|
|
||||||
retval = PyString_FromStringAndSize((const char *)digest, digest_size);
|
retval = PyBytes_FromStringAndSize((const char *)digest, digest_size);
|
||||||
EVP_MD_CTX_cleanup(&temp_ctx);
|
EVP_MD_CTX_cleanup(&temp_ctx);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
@ -133,7 +133,7 @@ EVP_hexdigest(EVPobject *self, PyObject *unused)
|
||||||
retval = PyString_FromStringAndSize(NULL, digest_size * 2);
|
retval = PyString_FromStringAndSize(NULL, digest_size * 2);
|
||||||
if (!retval)
|
if (!retval)
|
||||||
return NULL;
|
return NULL;
|
||||||
hex_digest = PyString_AsString(retval);
|
hex_digest = PyString_AS_STRING(retval);
|
||||||
if (!hex_digest) {
|
if (!hex_digest) {
|
||||||
Py_DECREF(retval);
|
Py_DECREF(retval);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -432,7 +432,7 @@ SHA256_digest(SHAobject *self, PyObject *unused)
|
||||||
|
|
||||||
SHAcopy(self, &temp);
|
SHAcopy(self, &temp);
|
||||||
sha_final(digest, &temp);
|
sha_final(digest, &temp);
|
||||||
return PyString_FromStringAndSize((const char *)digest, self->digestsize);
|
return PyBytes_FromStringAndSize((const char *)digest, self->digestsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(SHA256_hexdigest__doc__,
|
PyDoc_STRVAR(SHA256_hexdigest__doc__,
|
||||||
|
@ -510,9 +510,9 @@ static PyObject *
|
||||||
SHA256_get_name(PyObject *self, void *closure)
|
SHA256_get_name(PyObject *self, void *closure)
|
||||||
{
|
{
|
||||||
if (((SHAobject *)self)->digestsize == 32)
|
if (((SHAobject *)self)->digestsize == 32)
|
||||||
return PyString_FromStringAndSize("SHA256", 6);
|
return PyUnicode_FromStringAndSize("SHA256", 6);
|
||||||
else
|
else
|
||||||
return PyString_FromStringAndSize("SHA224", 6);
|
return PyUnicode_FromStringAndSize("SHA224", 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyGetSetDef SHA_getseters[] = {
|
static PyGetSetDef SHA_getseters[] = {
|
||||||
|
|
|
@ -498,7 +498,7 @@ SHA512_digest(SHAobject *self, PyObject *unused)
|
||||||
|
|
||||||
SHAcopy(self, &temp);
|
SHAcopy(self, &temp);
|
||||||
sha512_final(digest, &temp);
|
sha512_final(digest, &temp);
|
||||||
return PyString_FromStringAndSize((const char *)digest, self->digestsize);
|
return PyBytes_FromStringAndSize((const char *)digest, self->digestsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(SHA512_hexdigest__doc__,
|
PyDoc_STRVAR(SHA512_hexdigest__doc__,
|
||||||
|
@ -576,9 +576,9 @@ static PyObject *
|
||||||
SHA512_get_name(PyObject *self, void *closure)
|
SHA512_get_name(PyObject *self, void *closure)
|
||||||
{
|
{
|
||||||
if (((SHAobject *)self)->digestsize == 64)
|
if (((SHAobject *)self)->digestsize == 64)
|
||||||
return PyString_FromStringAndSize("SHA512", 6);
|
return PyUnicode_FromStringAndSize("SHA512", 6);
|
||||||
else
|
else
|
||||||
return PyString_FromStringAndSize("SHA384", 6);
|
return PyUnicode_FromStringAndSize("SHA384", 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyGetSetDef SHA_getseters[] = {
|
static PyGetSetDef SHA_getseters[] = {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue