Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp14143002pxu; Mon, 4 Jan 2021 14:03:04 -0800 (PST) X-Google-Smtp-Source: ABdhPJyjsBA4GK7Fs5wgImG61VvKbOmAHmqXLoUzocln3w3lYMpUBOAn8YT+pFFX6K0Mn9ubI33U X-Received: by 2002:a50:ac86:: with SMTP id x6mr20996013edc.197.1609797784281; Mon, 04 Jan 2021 14:03:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1609797784; cv=none; d=google.com; s=arc-20160816; b=RYzaOTDqL2zCyKbL2Iul5dkZ01E/hKAuQLf6DfifvX0us0Qla2Hf+TJuNIpm1JwPBA VJZAI5Jm3cPd8zSy+M6IoeICH9n9K1M7+rZRlaITgOMyakw6Buol+TdbmBrRUJ3A0DHn LmcC465NFx98/wLhCaQSQVy/SH33y5x2dgRXW5zIXwOU5P8JM0vz2ow/0hs8I0OoRdNt y+SCxcLx50zSafJsUWvmUKgQXqHGZYZ+ffK6vpDHpbVBcTmHOOKfdkQAsNvfSccLAoes 8a4gYbsy9B4c8d9PGJYaSH8V6obE58wcT0ZBa6RuVUsYPJWxR7yNfM79SF8tp9mch6pB C85Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=7m2tAgjw0olQMR4EnqbiK2mYFghGtcPIs/ldbj9WMRc=; b=P5v84dpZNHL5mKQNWgXtKyclKUONI9fS8TBsMOq/1wJgcMRrHe8Z4+9jfnprA8O7Ci S8zKyMQbFZcbQAnKuJ1Mxa+xv6SCqdg4IHqT8g03ernN4NLzzFwBtQi/qDFRSmP+TJJh 1EwWWD67dRSdWosjjGPngiod0JiVGAwcKG1+Puj4X+P9zhiMJXiT6XSPiDqpNLHeTj5o jeJnoFNCThLrwSdvdm0wEYCmbJq9LhgKui6RsGJ7eHzjT+ZD433jB57+NVuaowx0vPjj mQ/bSJ8oYJhsC+sTTw/ATOz50a9Z1iELmySlaxj6f25wr5U4yiAqZ4prEJ7wklaIHfLl 3TDA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chronox.de header.s=strato-dkim-0002 header.b=d9YH46k9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g25si31858374edr.220.2021.01.04.14.02.41; Mon, 04 Jan 2021 14:03:04 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@chronox.de header.s=strato-dkim-0002 header.b=d9YH46k9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726934AbhADWBn (ORCPT + 99 others); Mon, 4 Jan 2021 17:01:43 -0500 Received: from mo4-p02-ob.smtp.rzone.de ([85.215.255.84]:10396 "EHLO mo4-p02-ob.smtp.rzone.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726636AbhADWBm (ORCPT ); Mon, 4 Jan 2021 17:01:42 -0500 X-Greylist: delayed 364 seconds by postgrey-1.27 at vger.kernel.org; Mon, 04 Jan 2021 17:01:41 EST DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1609797530; s=strato-dkim-0002; d=chronox.de; h=References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:From: Subject:Sender; bh=7m2tAgjw0olQMR4EnqbiK2mYFghGtcPIs/ldbj9WMRc=; b=d9YH46k9T6BirSVAC6K/AIN3qp1OQ34JnWE/vumaQ5Pgp9eAW6RFxVn9lzXaVDCDrA +24H6BAR3s+FThuihmdMQ8ej0NhlQMTfK+aWiL6H26FCFBpubSAEVRYtx10ZcwPWfX8k NPmxejudRjNV4/AcPnRKihmYF3ijCXOTGaHbkuhIu8e6zbX4rWVSNfrb7cvo+Asb10qQ b4hEQNwbCDXsnRkwAjHr+W1cxXNutAowz87wmlBDiTk00UVt4TmsL0bgRDwNeO/uajKL Bm8nCT+RECs8uyhypJetFaetzlHgms2uu/LH7rmrD0Tv0CwTe+g6dTzYSwFEuTWdWbem 4QEQ== X-RZG-AUTH: ":P2ERcEykfu11Y98lp/T7+hdri+uKZK8TKWEqNyiHySGSa9k9xmwdNnzGHXPaIvSZFqc=" X-RZG-CLASS-ID: mo00 Received: from positron.chronox.de by smtp.strato.de (RZmta 47.10.7 DYNA|AUTH) with ESMTPSA id h02bd9x04LqlxfN (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate); Mon, 4 Jan 2021 22:52:47 +0100 (CET) From: Stephan =?ISO-8859-1?Q?M=FCller?= To: herbert@gondor.apana.org.au, ebiggers@kernel.org, mathew.j.martineau@linux.intel.com, dhowells@redhat.com Cc: linux-crypto@vger.kernel.org, linux-fscrypt@vger.kernel.org, linux-kernel@vger.kernel.org, keyrings@vger.kernel.org Subject: [PATCH 1/5] crypto: Add key derivation self-test support code Date: Mon, 04 Jan 2021 22:47:06 +0100 Message-ID: <2182726.ElGaqSPkdT@positron.chronox.de> In-Reply-To: <4616980.31r3eYUQgx@positron.chronox.de> References: <4616980.31r3eYUQgx@positron.chronox.de> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As a preparation to add the key derivation implementations, the self-test data structure definition and the common test code is made available. The test framework follows the testing applied by the NIST CAVP test approach. The structure of the test code follows the implementations found in crypto/testmgr.c|h. In case the KDF implementations will be made available via a kernel crypto API templates, the test code is intended to be merged into testmgr.c|h. Signed-off-by: Stephan Mueller --- include/crypto/internal/kdf_selftest.h | 68 ++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 include/crypto/internal/kdf_selftest.h diff --git a/include/crypto/internal/kdf_selftest.h b/include/crypto/internal/kdf_selftest.h new file mode 100644 index 000000000000..c4f80d2cc61c --- /dev/null +++ b/include/crypto/internal/kdf_selftest.h @@ -0,0 +1,68 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +/* + * Copyright (C) 2020, Stephan Mueller + */ + +#ifndef _CRYPTO_KDF_SELFTEST_H +#define _CRYPTO_KDF_SELFTEST_H + +#include +#include + +struct kdf_testvec { + struct kvec seed[2]; + unsigned int seed_nvec; + struct kvec info; + unsigned char *expected; + size_t expectedlen; +}; + +static inline int +kdf_test(const struct kdf_testvec *test, const char *name, + int (*crypto_kdf_setkey)(struct crypto_shash *kmd, + const struct kvec *seed, + unsigned int seed_nvec), + int (*crypto_kdf_generate)(struct crypto_shash *kmd, + const struct kvec *info, + unsigned int info_nvec, + u8 *dst, unsigned int dlen)) +{ + struct crypto_shash *kmd; + int ret; + u8 *buf = kzalloc(test->expectedlen, GFP_KERNEL); + + if (!buf) + return -ENOMEM; + + kmd = crypto_alloc_shash(name, 0, 0); + if (IS_ERR(kmd)) { + pr_err("alg: kdf: could not allocate cipher handle for %s\n", + name); + kfree(buf); + return -ENOMEM; + } + + ret = crypto_kdf_setkey(kmd, test->seed, test->seed_nvec); + if (ret) { + pr_err("alg: kdf: could not set key derivation key\n"); + goto err; + } + + ret = crypto_kdf_generate(kmd, &test->info, 1, buf, test->expectedlen); + if (ret) { + pr_err("alg: kdf: could not obtain key data\n"); + goto err; + } + + ret = memcmp(test->expected, buf, test->expectedlen); + if (ret) + ret = -EINVAL; + +err: + crypto_free_shash(kmd); + kfree(buf); + return ret; +} + +#endif /* _CRYPTO_KDF_SELFTEST_H */ -- 2.26.2