Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1035013imu; Fri, 11 Jan 2019 13:46:48 -0800 (PST) X-Google-Smtp-Source: ALg8bN5LeSEBQOhwrQENMZ0u2BNX1cUGiqVppF1MyrSEryLEmKhEVIlWFPNnNS11bl9QLEjRCC73 X-Received: by 2002:a62:11c7:: with SMTP id 68mr16135450pfr.21.1547243208725; Fri, 11 Jan 2019 13:46:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547243208; cv=none; d=google.com; s=arc-20160816; b=rAlNXtWhQQG9B9aSQVwrljFU8r0P1QNlwj1R7qhn+lu4OErcDfM+ElW56SVrRoMZPc TEscW3PO9+wAdGf7gaUDfNWNS8b29X5cxzw1oep1rsUmQZpjwz69Sc0FQxv4EPeQzra/ 976Am73yh2jVGPYKz5/naNGROJwGt+7CHtThj4pjSWVZxpzyOXYV471yGgULSZ8VoTPq UdqNu8KzivMRQ2dm1aYjS+J4mO+z8pngpScQJSm8ZQVuVvvMy4d+YD8b09+qBGRqa/AO yBgwi1xJwLlTz9o4ZkYUna2vulYEXcopnHzIXiY3N/0remVRsGiWX+aU1y9Mj4yJJlHp +oqA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=xVDNMA4x3xNK9BgtVUxaQwWYMgOno7oBx3A0xWT0wh4=; b=T1Vez0MSgC3MJe7vC4DGs5ThI+3qgid//nf9PXzCyU9EGl1Yj8GVrgPM4SLBJ8RLl5 xxrjnpbTvUiSUVjHViv1aV6Qi8VqK4AeE9a+fpFLopRdHzw4NEADET7Y40NPmdgm5vwD 4c37nqztAiY4TbDRPeDGnoK9gBg66BPKwCK4X2685eGe+kitNsfJlTK7gpPvgTXnokqJ q536hvdPrm4kDJKRnHihhZ6hPgKLqzX0Wv8tHSFvpQ7UJO1EUYcFKu84oCqDPBaLgF3+ p2V2tj3wA9Yb/dhp/5Q1968koBBjN2Sd2g524jVOyMYouI/dVc8u7tZnhRe+371S7Lpu eLVg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@chronox.de header.s=strato-dkim-0002 header.b="CkM3/MFz"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 31si1019441plk.310.2019.01.11.13.46.33; Fri, 11 Jan 2019 13:46:48 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@chronox.de header.s=strato-dkim-0002 header.b="CkM3/MFz"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390399AbfAKTOE (ORCPT + 99 others); Fri, 11 Jan 2019 14:14:04 -0500 Received: from mo4-p02-ob.smtp.rzone.de ([85.215.255.81]:12942 "EHLO mo4-p02-ob.smtp.rzone.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390315AbfAKTN4 (ORCPT ); Fri, 11 Jan 2019 14:13:56 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1547234033; s=strato-dkim-0002; d=chronox.de; h=References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: X-RZG-CLASS-ID:X-RZG-AUTH:From:Subject:Sender; bh=xVDNMA4x3xNK9BgtVUxaQwWYMgOno7oBx3A0xWT0wh4=; b=CkM3/MFzXqU8eWcyRMNCbhhn6zu/po3EbZkcuJ8bcmqTw5DkeVs+36WJWHFlwwesK3 HpaZaps0JI0htB3+WHYaGO40V7sgMc0l3DAuWPmLCOMtirUtUSBMPz/0wPpBTuI+RR3m sWxjc4MEhp64MUbiXWZhqNG3Z4BjYwmiLfAQSkSZDProF0xcW2sgd4DQwz5LvB0pevun jIdgFdPmgZ48/Kl6xNCZArtdihMqXiN3hCZUmHDuiFDtunHJGHswM0DeDv4WCW4MRT9S T+IDu1YyRZ1E76RRgLY6ezXyizIokFugFlF4+9l7uPKBtW/MWXB9zSXf2jOtubdxuk6E QgkQ== X-RZG-AUTH: ":P2ERcEykfu11Y98lp/T7+hdri+uKZK8TKWEqNyiHySGSa9k9xmwdNnzGHXPaLvSbdkg=" X-RZG-CLASS-ID: mo00 Received: from positron.chronox.de by smtp.strato.de (RZmta 44.9 DYNA|AUTH) with ESMTPSA id 309bcfv0BJDSfl9 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA)) (Client did not present a certificate); Fri, 11 Jan 2019 20:13:28 +0100 (CET) From: Stephan =?ISO-8859-1?Q?M=FCller?= To: Eric Biggers Cc: Herbert Xu , James Bottomley , Andy Lutomirski , "Lee, Chun-Yi" , "Rafael J . Wysocki" , Pavel Machek , linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, keyrings@vger.kernel.org, "Rafael J. Wysocki" , Chen Yu , Oliver Neukum , Ryan Chen , David Howells , Giovanni Gherdovich , Randy Dunlap , Jann Horn , Andy Lutomirski , linux-crypto@vger.kernel.org Subject: [PATCH 5/6] crypto: hkdf - add known answer tests Date: Fri, 11 Jan 2019 20:10:56 +0100 Message-ID: <9857029.1Sm7LFDBlJ@positron.chronox.de> In-Reply-To: <9733066.Vrs4h5eWcW@positron.chronox.de> References: <20190103143227.9138-1-jlee@suse.com> <20190109082103.GA8586@sol.localdomain> <9733066.Vrs4h5eWcW@positron.chronox.de> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add known answer tests to the testmgr for the HKDF (RFC5869) cipher. The known answer tests are derived from RFC 5869 appendix A. Note, the HKDF is considered to be a FIPS 140-2 allowed (not approved) cipher as of now. Yet, an allowed cipher is usable under FIPS 140-2 rules. Signed-off-by: Stephan Mueller --- crypto/testmgr.c | 32 +++++++++++++ crypto/testmgr.h | 115 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+) diff --git a/crypto/testmgr.c b/crypto/testmgr.c index ff9051bffa1f..aba7a3645293 100644 --- a/crypto/testmgr.c +++ b/crypto/testmgr.c @@ -3187,6 +3187,38 @@ static const struct alg_test_desc alg_test_descs[] = { .suite = { .hash = __VECS(ghash_tv_template) } + }, { + .alg = "hkdf(hmac(sha1))", + .test = alg_test_kdf, + .fips_allowed = 1, + .suite = { + .kdf = { + .vecs = hkdf_hmac_sha1_tv_template, + .count = ARRAY_SIZE(hkdf_hmac_sha1_tv_template) + } + } + }, { + .alg = "hkdf(hmac(sha224))", + .test = alg_test_null, + .fips_allowed = 1, + }, { + .alg = "hkdf(hmac(sha256))", + .test = alg_test_kdf, + .fips_allowed = 1, + .suite = { + .kdf = { + .vecs = hkdf_hmac_sha256_tv_template, + .count = ARRAY_SIZE(hkdf_hmac_sha256_tv_template) + } + } + }, { + .alg = "hkdf(hmac(sha384))", + .test = alg_test_null, + .fips_allowed = 1, + }, { + .alg = "hkdf(hmac(sha512))", + .test = alg_test_null, + .fips_allowed = 1, }, { .alg = "hmac(md5)", .test = alg_test_hash, diff --git a/crypto/testmgr.h b/crypto/testmgr.h index a729b66f8757..7c4aa694e0f3 100644 --- a/crypto/testmgr.h +++ b/crypto/testmgr.h @@ -28002,6 +28002,121 @@ static struct kdf_testvec kdf_dpi_hmac_sha256_tv_template[] = { } }; +/* Test vectors from RFC 5869 appendix A */ +static struct kdf_testvec hkdf_hmac_sha256_tv_template[] = { + { + .K1 = (unsigned char *) +#ifdef __LITTLE_ENDIAN + "\x08\x00" /* rta length */ + "\x01\x00" /* rta type */ + "\x0d\x00\x00\x00" /* salt length */ +#else + "\x00\x08" /* rta length */ + "\x00\x01" /* rta type */ + "\x00\x00\x00\x0d" /* salt length */ +#endif + "\x00\x01\x02\x03\x04\x05\x06\x07" + "\x08\x09\x0a\x0b\x0c" /* salt */ + "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" + "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" + "\x0b\x0b\x0b\x0b\x0b\x0b", /* IKM */ + .K1len = 43, + .context = (unsigned char *) + "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7" + "\xf8\xf9", + .contextlen = 10, + .expected = (unsigned char *) + "\x3c\xb2\x5f\x25\xfa\xac\xd5\x7a" + "\x90\x43\x4f\x64\xd0\x36\x2f\x2a" + "\x2d\x2d\x0a\x90\xcf\x1a\x5a\x4c" + "\x5d\xb0\x2d\x56\xec\xc4\xc5\xbf" + "\x34\x00\x72\x08\xd5\xb8\x87\x18" + "\x58\x65", + .expectedlen = 42 + }, { + .K1 = (unsigned char *) +#ifdef __LITTLE_ENDIAN + "\x08\x00" /* rta length */ + "\x01\x00" /* rta type */ +#else + "\x00\x08" /* rta length */ + "\x00\x01" /* rta type */ +#endif + "\x00\x00\x00\x00" /* salt length */ + "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" + "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" + "\x0b\x0b\x0b\x0b\x0b\x0b", /* IKM */ + .K1len = 30, + .context = NULL, + .contextlen = 0, + .expected = (unsigned char *) + "\x8d\xa4\xe7\x75\xa5\x63\xc1\x8f" + "\x71\x5f\x80\x2a\x06\x3c\x5a\x31" + "\xb8\xa1\x1f\x5c\x5e\xe1\x87\x9e" + "\xc3\x45\x4e\x5f\x3c\x73\x8d\x2d" + "\x9d\x20\x13\x95\xfa\xa4\xb6\x1a" + "\x96\xc8", + .expectedlen = 42 + } +}; + +/* Test vectors from RFC 5869 appendix A */ +static struct kdf_testvec hkdf_hmac_sha1_tv_template[] = { + { + .K1 = (unsigned char *) +#ifdef __LITTLE_ENDIAN + "\x08\x00" /* rta length */ + "\x01\x00" /* rta type */ + "\x0d\x00\x00\x00" /* salt length */ +#else + "\x00\x08" /* rta length */ + "\x00\x01" /* rta type */ + "\x00\x00\x00\x0d" /* salt length */ +#endif + "\x00\x01\x02\x03\x04\x05\x06\x07" + "\x08\x09\x0a\x0b\x0c" /* salt */ + "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" + "\x0b\x0b\x0b", /* IKM */ + .K1len = 32, + .context = (unsigned char *) + "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7" + "\xf8\xf9", + .contextlen = 10, + .expected = (unsigned char *) + "\x08\x5a\x01\xea\x1b\x10\xf3\x69" + "\x33\x06\x8b\x56\xef\xa5\xad\x81" + "\xa4\xf1\x4b\x82\x2f\x5b\x09\x15" + "\x68\xa9\xcd\xd4\xf1\x55\xfd\xa2" + "\xc2\x2e\x42\x24\x78\xd3\x05\xf3" + "\xf8\x96", + .expectedlen = 42 + }, { + .K1 = (unsigned char *) +#ifdef __LITTLE_ENDIAN + "\x08\x00" /* rta length */ + "\x01\x00" /* rta type */ +#else + "\x00\x08" /* rta length */ + "\x00\x01" /* rta type */ +#endif + "\x00\x00\x00\x00" /* salt length */ + "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" + "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" + "\x0b\x0b\x0b\x0b\x0b\x0b", /* IKM */ + .K1len = 30, + .context = NULL, + .contextlen = 0, + .expected = (unsigned char *) + "\x0a\xc1\xaf\x70\x02\xb3\xd7\x61" + "\xd1\xe5\x52\x98\xda\x9d\x05\x06" + "\xb9\xae\x52\x05\x72\x20\xa3\x06" + "\xe0\x7b\x6b\x87\xe8\xdf\x21\xd0" + "\xea\x00\x03\x3d\xe0\x39\x84\xd3" + "\x49\x18", + .expectedlen = 42 + } +}; + /* Cast5 test vectors from RFC 2144 */ static const struct cipher_testvec cast5_tv_template[] = { { -- 2.20.1