brintos

brintos / linux-shallow public Read only

0
0
Text · 1.5 KiB · 5d3a7ec Raw
65 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Copyright Amazon.com Inc. or its affiliates. */3 4#ifndef _TEST_SIPHASH_H5#define _TEST_SIPHASH_H6 7/* include/linux/bitops.h */8static inline u64 rol64(u64 word, unsigned int shift)9{10	return (word << (shift & 63)) | (word >> ((-shift) & 63));11}12 13/* include/linux/siphash.h */14#define SIPHASH_PERMUTATION(a, b, c, d) ( \15	(a) += (b), (b) = rol64((b), 13), (b) ^= (a), (a) = rol64((a), 32), \16	(c) += (d), (d) = rol64((d), 16), (d) ^= (c), \17	(a) += (d), (d) = rol64((d), 21), (d) ^= (a), \18	(c) += (b), (b) = rol64((b), 17), (b) ^= (c), (c) = rol64((c), 32))19 20#define SIPHASH_CONST_0 0x736f6d6570736575ULL21#define SIPHASH_CONST_1 0x646f72616e646f6dULL22#define SIPHASH_CONST_2 0x6c7967656e657261ULL23#define SIPHASH_CONST_3 0x7465646279746573ULL24 25/* lib/siphash.c */26#define SIPROUND SIPHASH_PERMUTATION(v0, v1, v2, v3)27 28#define PREAMBLE(len) \29	u64 v0 = SIPHASH_CONST_0; \30	u64 v1 = SIPHASH_CONST_1; \31	u64 v2 = SIPHASH_CONST_2; \32	u64 v3 = SIPHASH_CONST_3; \33	u64 b = ((u64)(len)) << 56; \34	v3 ^= key->key[1]; \35	v2 ^= key->key[0]; \36	v1 ^= key->key[1]; \37	v0 ^= key->key[0];38 39#define POSTAMBLE \40	v3 ^= b; \41	SIPROUND; \42	SIPROUND; \43	v0 ^= b; \44	v2 ^= 0xff; \45	SIPROUND; \46	SIPROUND; \47	SIPROUND; \48	SIPROUND; \49	return (v0 ^ v1) ^ (v2 ^ v3);50 51static inline u64 siphash_2u64(const u64 first, const u64 second, const siphash_key_t *key)52{53	PREAMBLE(16)54	v3 ^= first;55	SIPROUND;56	SIPROUND;57	v0 ^= first;58	v3 ^= second;59	SIPROUND;60	SIPROUND;61	v0 ^= second;62	POSTAMBLE63}64#endif65