Many jhash users currently rely on the Nwords functions. In order to make transitions to siphash fit something people already know about, we provide analog functions here. This also winds up being nice for the networking stack, where hashing 32-bit fields is common. Signed-off-by: Jason A. Donenfeld <Jason@xxxxxxxxx> --- Changes from v1->v2: - None in this patch, but see elsewhere in series. include/linux/siphash.h | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/include/linux/siphash.h b/include/linux/siphash.h index 6623b3090645..1391054c4c29 100644 --- a/include/linux/siphash.h +++ b/include/linux/siphash.h @@ -17,4 +17,37 @@ enum siphash_lengths { u64 siphash24(const u8 *data, size_t len, const u8 key[SIPHASH24_KEY_LEN]); +static inline u64 siphash24_1word(const u32 a, const u8 key[SIPHASH24_KEY_LEN]) +{ + return siphash24((u8 *)&a, sizeof(a), key); +} + +static inline u64 siphash24_2words(const u32 a, const u32 b, const u8 key[SIPHASH24_KEY_LEN]) +{ + const struct { + u32 a; + u32 b; + } __packed combined = { + .a = a, + .b = b + }; + + return siphash24((const u8 *)&combined, sizeof(combined), key); +} + +static inline u64 siphash24_3words(const u32 a, const u32 b, const u32 c, const u8 key[SIPHASH24_KEY_LEN]) +{ + const struct { + u32 a; + u32 b; + u32 c; + } __packed combined = { + .a = a, + .b = b, + .c = c + }; + + return siphash24((const u8 *)&combined, sizeof(combined), key); +} + #endif /* _LINUX_SIPHASH_H */ -- 2.11.0 -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html