404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@18.191.195.2: ~ $
#ifndef Py_HASH_H

#define Py_HASH_H
#ifdef __cplusplus
extern "C" {
#endif

/* Helpers for hash functions */
#ifndef Py_LIMITED_API
PyAPI_FUNC(Py_hash_t) _Py_HashDouble(double);
PyAPI_FUNC(Py_hash_t) _Py_HashPointer(void*);
PyAPI_FUNC(Py_hash_t) _Py_HashBytes(const void*, Py_ssize_t);
#endif

/* Prime multiplier used in string and various other hashes. */
#define _PyHASH_MULTIPLIER 1000003UL  /* 0xf4243 */

/* Parameters used for the numeric hash implementation.  See notes for
   _Py_HashDouble in Objects/object.c.  Numeric hashes are based on
   reduction modulo the prime 2**_PyHASH_BITS - 1. */

#if SIZEOF_VOID_P >= 8
#  define _PyHASH_BITS 61
#else
#  define _PyHASH_BITS 31
#endif

#define _PyHASH_MODULUS (((size_t)1 << _PyHASH_BITS) - 1)
#define _PyHASH_INF 314159
#define _PyHASH_NAN 0
#define _PyHASH_IMAG _PyHASH_MULTIPLIER


/* hash secret
 *
 * memory layout on 64 bit systems
 *   cccccccc cccccccc cccccccc  uc -- unsigned char[24]
 *   pppppppp ssssssss ........  fnv -- two Py_hash_t
 *   k0k0k0k0 k1k1k1k1 ........  siphash -- two PY_UINT64_T
 *   ........ ........ ssssssss  djbx33a -- 16 bytes padding + one Py_hash_t
 *   ........ ........ eeeeeeee  pyexpat XML hash salt
 *
 * memory layout on 32 bit systems
 *   cccccccc cccccccc cccccccc  uc
 *   ppppssss ........ ........  fnv -- two Py_hash_t
 *   k0k0k0k0 k1k1k1k1 ........  siphash -- two PY_UINT64_T (*)
 *   ........ ........ ssss....  djbx33a -- 16 bytes padding + one Py_hash_t
 *   ........ ........ eeee....  pyexpat XML hash salt
 *
 * (*) The siphash member may not be available on 32 bit platforms without
 *     an unsigned int64 data type.
 */
#ifndef Py_LIMITED_API
typedef union {
    /* ensure 24 bytes */
    unsigned char uc[24];
    /* two Py_hash_t for FNV */
    struct {
        Py_hash_t prefix;
        Py_hash_t suffix;
    } fnv;
#ifdef PY_UINT64_T
    /* two uint64 for SipHash24 */
    struct {
        PY_UINT64_T k0;
        PY_UINT64_T k1;
    } siphash;
#endif
    /* a different (!) Py_hash_t for small string optimization */
    struct {
        unsigned char padding[16];
        Py_hash_t suffix;
    } djbx33a;
    struct {
        unsigned char padding[16];
        Py_hash_t hashsalt;
    } expat;
} _Py_HashSecret_t;
PyAPI_DATA(_Py_HashSecret_t) _Py_HashSecret;
#endif

#ifdef Py_DEBUG
PyAPI_DATA(int) _Py_HashSecret_Initialized;
#endif


/* hash function definition */
#ifndef Py_LIMITED_API
typedef struct {
    Py_hash_t (*const hash)(const void *, Py_ssize_t);
    const char *name;
    const int hash_bits;
    const int seed_bits;
} PyHash_FuncDef;

PyAPI_FUNC(PyHash_FuncDef*) PyHash_GetFuncDef(void);
#endif


/* cutoff for small string DJBX33A optimization in range [1, cutoff).
 *
 * About 50% of the strings in a typical Python application are smaller than
 * 6 to 7 chars. However DJBX33A is vulnerable to hash collision attacks.
 * NEVER use DJBX33A for long strings!
 *
 * A Py_HASH_CUTOFF of 0 disables small string optimization. 32 bit platforms
 * should use a smaller cutoff because it is easier to create colliding
 * strings. A cutoff of 7 on 64bit platforms and 5 on 32bit platforms should
 * provide a decent safety margin.
 */
#ifndef Py_HASH_CUTOFF
#  define Py_HASH_CUTOFF 0
#elif (Py_HASH_CUTOFF > 7 || Py_HASH_CUTOFF < 0)
#  error Py_HASH_CUTOFF must in range 0...7.
#endif /* Py_HASH_CUTOFF */


/* hash algorithm selection
 *
 * The values for Py_HASH_SIPHASH24 and Py_HASH_FNV are hard-coded in the
 * configure script.
 *
 * - FNV is available on all platforms and architectures.
 * - SIPHASH24 only works on plaforms that provide PY_UINT64_T and doesn't
 *   require aligned memory for integers.
 * - With EXTERNAL embedders can provide an alternative implementation with::
 *
 *     PyHash_FuncDef PyHash_Func = {...};
 *
 * XXX: Figure out __declspec() for extern PyHash_FuncDef.
 */
#define Py_HASH_EXTERNAL 0
#define Py_HASH_SIPHASH24 1
#define Py_HASH_FNV 2

#ifndef Py_HASH_ALGORITHM
#  if (defined(PY_UINT64_T) && defined(PY_UINT32_T) \
       && !defined(HAVE_ALIGNED_REQUIRED))
#    define Py_HASH_ALGORITHM Py_HASH_SIPHASH24
#  else
#    define Py_HASH_ALGORITHM Py_HASH_FNV
#  endif /* uint64_t && uint32_t && aligned */
#endif /* Py_HASH_ALGORITHM */

#ifdef __cplusplus
}
#endif

#endif /* !Py_HASH_H */

Filemanager

Name Type Size Permission Actions
Python-ast.h File 19.03 KB 0644
Python.h File 2.79 KB 0644
abstract.h File 42.07 KB 0644
accu.h File 1016 B 0644
asdl.h File 1.16 KB 0644
ast.h File 477 B 0644
bitset.h File 792 B 0644
bltinmodule.h File 264 B 0644
boolobject.h File 886 B 0644
bytearrayobject.h File 2.06 KB 0644
bytes_methods.h File 1.98 KB 0644
bytesobject.h File 4.81 KB 0644
cellobject.h File 701 B 0644
ceval.h File 7.03 KB 0644
classobject.h File 1.63 KB 0644
code.h File 4.13 KB 0644
codecs.h File 6.4 KB 0644
compile.h File 2.07 KB 0644
complexobject.h File 1.91 KB 0644
datetime.h File 8.34 KB 0644
descrobject.h File 2.84 KB 0644
dictobject.h File 5.06 KB 0644
dtoa.h File 458 B 0644
dynamic_annotations.h File 21.94 KB 0644
enumobject.h File 253 B 0644
errcode.h File 1.46 KB 0644
eval.h File 597 B 0644
fileobject.h File 1.82 KB 0644
fileutils.h File 1.47 KB 0644
floatobject.h File 4.53 KB 0644
frameobject.h File 3.47 KB 0644
funcobject.h File 3.68 KB 0644
genobject.h File 1.1 KB 0644
graminit.h File 1.83 KB 0644
grammar.h File 2 KB 0644
import.h File 3.81 KB 0644
intrcheck.h File 460 B 0644
iterobject.h File 567 B 0644
listobject.h File 2.77 KB 0644
longintrepr.h File 3.9 KB 0644
longobject.h File 7.98 KB 0644
marshal.h File 803 B 0644
memoryobject.h File 2.79 KB 0644
metagrammar.h File 253 B 0644
methodobject.h File 3.23 KB 0644
modsupport.h File 4.78 KB 0644
moduleobject.h File 1.58 KB 0644
namespaceobject.h File 297 B 0644
node.h File 1008 B 0644
object.h File 37.62 KB 0644
objimpl.h File 13.52 KB 0644
opcode.h File 5.09 KB 0644
osdefs.h File 848 B 0644
parsetok.h File 2.82 KB 0644
patchlevel.h File 1.1 KB 0644
pgen.h File 253 B 0644
pgenheaders.h File 1.12 KB 0644
py_curses.h File 4.08 KB 0644
pyarena.h File 2.68 KB 0644
pyatomic.h File 5.8 KB 0644
pycapsule.h File 1.69 KB 0644
pyconfig-64.h File 42.32 KB 0644
pyconfig.h File 162 B 0644
pyctype.h File 1.29 KB 0644
pydebug.h File 1019 B 0644
pyerrors.h File 15.65 KB 0644
pyexpat.h File 2.39 KB 0644
pyfpe.h File 8.29 KB 0644
pygetopt.h File 388 B 0644
pyhash.h File 4.17 KB 0644
pymacconfig.h File 2.92 KB 0644
pymacro.h File 2.75 KB 0644
pymath.h File 7.05 KB 0644
pymem.h File 6.62 KB 0644
pyport.h File 30.15 KB 0644
pystate.h File 8.91 KB 0644
pystrcmp.h File 436 B 0644
pystrtod.h File 1.25 KB 0644
pythonrun.h File 9.95 KB 0644
pythread.h File 2.96 KB 0644
pytime.h File 2.85 KB 0644
rangeobject.h File 629 B 0644
setobject.h File 3.22 KB 0644
sliceobject.h File 1.55 KB 0644
structmember.h File 2.02 KB 0644
structseq.h File 1.32 KB 0644
symtable.h File 4.98 KB 0644
sysmodule.h File 1.32 KB 0644
token.h File 1.84 KB 0644
traceback.h File 2.16 KB 0644
tupleobject.h File 2.39 KB 0644
typeslots.h File 1.95 KB 0644
ucnhash.h File 1.03 KB 0644
unicodeobject.h File 76.3 KB 0644
warnings.h File 1.39 KB 0644
weakrefobject.h File 2.8 KB 0644