summaryrefslogtreecommitdiffstats
path: root/Modules/sha512module.c
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2020-04-17 15:47:20 (GMT)
committerGitHub <noreply@github.com>2020-04-17 15:47:20 (GMT)
commit1ae035b7e847064d09df01ca62b8a761e9b5aae3 (patch)
treec19d137bda77399ba49996f69a14fce4029c8120 /Modules/sha512module.c
parent485e715cb1ff92bc9882cd51ec32589f9cb30503 (diff)
downloadcpython-1ae035b7e847064d09df01ca62b8a761e9b5aae3.zip
cpython-1ae035b7e847064d09df01ca62b8a761e9b5aae3.tar.gz
cpython-1ae035b7e847064d09df01ca62b8a761e9b5aae3.tar.bz2
bpo-40302: Add pycore_byteswap.h header file (GH-19552)
Add a new internal pycore_byteswap.h header file with the following functions: * _Py_bswap16() * _Py_bswap32() * _Py_bswap64() Use these functions in _ctypes, sha256 and sha512 modules, and also use in the UTF-32 encoder. sha256, sha512 and _ctypes modules are now built with the internal C API.
Diffstat (limited to 'Modules/sha512module.c')
-rw-r--r--Modules/sha512module.c27
1 files changed, 5 insertions, 22 deletions
diff --git a/Modules/sha512module.c b/Modules/sha512module.c
index 38d303d..780f8e7 100644
--- a/Modules/sha512module.c
+++ b/Modules/sha512module.c
@@ -17,6 +17,7 @@
/* SHA objects */
#include "Python.h"
+#include "pycore_byteswap.h" // _Py_bswap32()
#include "structmember.h" // PyMemberDef
#include "hashlib.h"
#include "pystrhex.h"
@@ -30,13 +31,8 @@ class SHA512Type "SHAobject *" "&PyType_Type"
/* Some useful types */
typedef unsigned char SHA_BYTE;
-
-#if SIZEOF_INT == 4
-typedef unsigned int SHA_INT32; /* 32-bit integer */
-typedef unsigned long long SHA_INT64; /* 64-bit integer */
-#else
-/* not defined. compilation will die. */
-#endif
+typedef uint32_t SHA_INT32; /* 32-bit integer */
+typedef uint64_t SHA_INT64; /* 64-bit integer */
/* The SHA block size and message digest sizes, in bytes */
@@ -62,22 +58,9 @@ typedef struct {
#if PY_LITTLE_ENDIAN
static void longReverse(SHA_INT64 *buffer, int byteCount)
{
- SHA_INT64 value;
-
byteCount /= sizeof(*buffer);
- while (byteCount--) {
- value = *buffer;
-
- ((unsigned char*)buffer)[0] = (unsigned char)(value >> 56) & 0xff;
- ((unsigned char*)buffer)[1] = (unsigned char)(value >> 48) & 0xff;
- ((unsigned char*)buffer)[2] = (unsigned char)(value >> 40) & 0xff;
- ((unsigned char*)buffer)[3] = (unsigned char)(value >> 32) & 0xff;
- ((unsigned char*)buffer)[4] = (unsigned char)(value >> 24) & 0xff;
- ((unsigned char*)buffer)[5] = (unsigned char)(value >> 16) & 0xff;
- ((unsigned char*)buffer)[6] = (unsigned char)(value >> 8) & 0xff;
- ((unsigned char*)buffer)[7] = (unsigned char)(value ) & 0xff;
-
- buffer++;
+ for (; byteCount--; buffer++) {
+ *buffer = _Py_bswap64(*buffer);
}
}
#endif