From patchwork Wed Dec 14 03:59:25 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Jason A. Donenfeld" X-Patchwork-Id: 9473709 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 357B86021C for ; Wed, 14 Dec 2016 04:01:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 24EC5286EF for ; Wed, 14 Dec 2016 04:01:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 19AA3286F0; Wed, 14 Dec 2016 04:01:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 04DCE286ED for ; Wed, 14 Dec 2016 04:01:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754752AbcLNEAA (ORCPT ); Tue, 13 Dec 2016 23:00:00 -0500 Received: from frisell.zx2c4.com ([192.95.5.64]:60423 "EHLO frisell.zx2c4.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753230AbcLND7z (ORCPT ); Tue, 13 Dec 2016 22:59:55 -0500 Received: by frisell.zx2c4.com (ZX2C4 Mail Server) with ESMTP id f00b2c77; Wed, 14 Dec 2016 03:53:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=zx2c4.com; h=from:to:cc :subject:date:message-id:in-reply-to:references; s=mail; bh=Diub g/5s1RjClg6hCOMva80Fbq0=; b=o7c92kepq7QE/+FxcFbTQ9uXX78r6N4BqCjJ Zxu5ZqReBPg3HWdVqk742odLdO1Ud/G0QMQo557uyt0patirwm4xEdR+tdnFI5+q EeHaBFoxkzs5f69fWOenLv7anBAwJuOaS+rmkuKVyWO7ikerEpN+neKjPBkpF+Or MPhpDhFAysybvpwuvXwyb2JolEnEctly6a7vhIUwKl0EHtcTFeUUKH00nxiT+OdL R/6bDpMMY/HJf61fU+Z23HDtaTm4a8OkCXYMzFj6dfMr2hkJSx8ACl+kqXu4viFk au7f1PsGPyOhLS5xNLXhLMwumtr2pJSWsqL1Ms5hIHMxdt7HyQ== Received: by frisell.zx2c4.com (ZX2C4 Mail Server) with ESMTPSA id 80fa34b3 (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256:NO); Wed, 14 Dec 2016 03:53:36 +0000 (UTC) From: "Jason A. Donenfeld" To: Netdev , kernel-hardening@lists.openwall.com, LKML , linux-crypto@vger.kernel.org Cc: "Jason A. Donenfeld" Subject: [PATCH v2 2/4] siphash: add convenience functions for jhash converts Date: Wed, 14 Dec 2016 04:59:25 +0100 Message-Id: <20161214035927.30004-2-Jason@zx2c4.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20161214035927.30004-1-Jason@zx2c4.com> References: <20161214035927.30004-1-Jason@zx2c4.com> Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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 --- 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 */