mirror of
https://github.com/python/cpython.git
synced 2025-11-01 02:38:53 +00:00
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.
This commit is contained in:
parent
485e715cb1
commit
1ae035b7e8
13 changed files with 219 additions and 112 deletions
|
|
@ -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,12 +31,7 @@ class SHA256Type "SHAobject *" "&PyType_Type"
|
|||
/* Some useful types */
|
||||
|
||||
typedef unsigned char SHA_BYTE;
|
||||
|
||||
#if SIZEOF_INT == 4
|
||||
typedef unsigned int SHA_INT32; /* 32-bit integer */
|
||||
#else
|
||||
/* not defined. compilation will die. */
|
||||
#endif
|
||||
typedef uint32_t SHA_INT32; /* 32-bit integer */
|
||||
|
||||
/* The SHA block size and message digest sizes, in bytes */
|
||||
|
||||
|
|
@ -61,14 +57,9 @@ typedef struct {
|
|||
#if PY_LITTLE_ENDIAN
|
||||
static void longReverse(SHA_INT32 *buffer, int byteCount)
|
||||
{
|
||||
SHA_INT32 value;
|
||||
|
||||
byteCount /= sizeof(*buffer);
|
||||
while (byteCount--) {
|
||||
value = *buffer;
|
||||
value = ( ( value & 0xFF00FF00L ) >> 8 ) | \
|
||||
( ( value & 0x00FF00FFL ) << 8 );
|
||||
*buffer++ = ( value << 16 ) | ( value >> 16 );
|
||||
for (; byteCount--; buffer++) {
|
||||
*buffer = _Py_bswap32(*buffer);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue