Lines 372-378
siphash24(const void *src, Py_ssize_t sr
Link Here
|
372 |
PY_UINT64_T k0 = _le64toh(_Py_HashSecret.siphash.k0); |
372 |
PY_UINT64_T k0 = _le64toh(_Py_HashSecret.siphash.k0); |
373 |
PY_UINT64_T k1 = _le64toh(_Py_HashSecret.siphash.k1); |
373 |
PY_UINT64_T k1 = _le64toh(_Py_HashSecret.siphash.k1); |
374 |
PY_UINT64_T b = (PY_UINT64_T)src_sz << 56; |
374 |
PY_UINT64_T b = (PY_UINT64_T)src_sz << 56; |
375 |
const PY_UINT64_T *in = (PY_UINT64_T*)src; |
375 |
const PY_UINT8_T *in = (PY_UINT8_T*)src; |
376 |
|
376 |
|
377 |
PY_UINT64_T v0 = k0 ^ 0x736f6d6570736575ULL; |
377 |
PY_UINT64_T v0 = k0 ^ 0x736f6d6570736575ULL; |
378 |
PY_UINT64_T v1 = k1 ^ 0x646f72616e646f6dULL; |
378 |
PY_UINT64_T v1 = k1 ^ 0x646f72616e646f6dULL; |
Lines 381-392
siphash24(const void *src, Py_ssize_t sr
Link Here
|
381 |
|
381 |
|
382 |
PY_UINT64_T t; |
382 |
PY_UINT64_T t; |
383 |
PY_UINT8_T *pt; |
383 |
PY_UINT8_T *pt; |
384 |
PY_UINT8_T *m; |
384 |
const PY_UINT8_T *m; |
385 |
|
385 |
|
386 |
while (src_sz >= 8) { |
386 |
while (src_sz >= 8) { |
387 |
PY_UINT64_T mi = _le64toh(*in); |
387 |
PY_UINT64_T mi; |
388 |
in += 1; |
388 |
memcpy(&mi, in, sizeof(mi)); |
389 |
src_sz -= 8; |
389 |
mi = _le64toh(mi); |
|
|
390 |
in += sizeof(mi); |
391 |
src_sz -= sizeof(mi); |
390 |
v3 ^= mi; |
392 |
v3 ^= mi; |
391 |
DOUBLE_ROUND(v0,v1,v2,v3); |
393 |
DOUBLE_ROUND(v0,v1,v2,v3); |
392 |
v0 ^= mi; |
394 |
v0 ^= mi; |
Lines 394-400
siphash24(const void *src, Py_ssize_t sr
Link Here
|
394 |
|
396 |
|
395 |
t = 0; |
397 |
t = 0; |
396 |
pt = (PY_UINT8_T *)&t; |
398 |
pt = (PY_UINT8_T *)&t; |
397 |
m = (PY_UINT8_T *)in; |
399 |
m = in; |
398 |
switch (src_sz) { |
400 |
switch (src_sz) { |
399 |
case 7: pt[6] = m[6]; |
401 |
case 7: pt[6] = m[6]; |
400 |
case 6: pt[5] = m[5]; |
402 |
case 6: pt[5] = m[5]; |