Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp3896175pxb; Mon, 1 Feb 2021 07:24:42 -0800 (PST) X-Google-Smtp-Source: ABdhPJzp/ozI2HGk4/fRspqKlWpJzSYq61nZelGE+i29XCH84M1EvUSt5L3vyLnN1NEz8w6sks92 X-Received: by 2002:a50:8004:: with SMTP id 4mr19058180eda.155.1612193082148; Mon, 01 Feb 2021 07:24:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612193082; cv=none; d=google.com; s=arc-20160816; b=xbmqMQrFOQVKTsaoNY5vFTYVR9bhtUwlyjxnFWTC3QzHc6vD1NxumGNSMN8Vyj33Wm pVbsPcAkCHWieJrGDcKz9m0TLciXhN3zlnL2Z9WqC0u/j4ubHKXbfzaNNYWBrMtCruOx l9Yc0c6qjw8Lkyoy9nQyLOXC6386A0R78B7hiD7AEZi9VuYixvWBRwN2BvQRPtEc9G1C zR6P4m5ENq0jBsHZwjVnP3EbJ/INnH/uJWBO4xoI2hgM4G1YSLM+d4W9EmhLg9CU/uTb ia+A4VdeDwepD17jOLn56jlSQOO76wLOIPoHv3P/ocBfnIyQnWJDgSJxT7KdlCTUqs9D 2Reg== 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=1KiVvY0uZ3kqyy2p1kczsWyx17pJ+hFxKOOOeeok3sg=; b=s2r+gOAw3lw36x+ghipAcGnegmNMtFRHBOdX07Tq1+B6q4CgDjP6jZIzD1+EuzT/2u MeCuBpCliRdMkj1peId+6jPVjV9kz6ywfEBP9p7mxz5999Dlsr6dkrDji0Cbxnse+z3W 70ExmE0AeytvtZJDi6/xIQR8SnAmvyO9TqFp0vwR/1uMeKhWKPBKd6dVchD4TzB3SD9t DR9e9etRlsC3WTiSnHPvTFvmuM6sWhCY4MJzfoP5cpQ0x8Tcjms9LdYQWRRs9SJV2Soq woSP0+iGi5vMXur27dO9Fxk8ReM3u03PP/2gR0mVqi5+NyuufAddOQsKtv3VL+BnPgVP z2tg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ibm.com header.s=pp1 header.b=QL9qNOGF; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l23si1260585ejx.701.2021.02.01.07.24.16; Mon, 01 Feb 2021 07:24:42 -0800 (PST) Received-SPF: pass (google.com: domain of linux-crypto-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=@ibm.com header.s=pp1 header.b=QL9qNOGF; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231321AbhBAPXh (ORCPT + 99 others); Mon, 1 Feb 2021 10:23:37 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:31322 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231180AbhBAPUM (ORCPT ); Mon, 1 Feb 2021 10:20:12 -0500 Received: from pps.filterd (m0098404.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 111FCM0O031308; Mon, 1 Feb 2021 10:19:24 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=pp1; bh=1KiVvY0uZ3kqyy2p1kczsWyx17pJ+hFxKOOOeeok3sg=; b=QL9qNOGFWWQYmpXk/Osr8EIfaRkTmq8gx++GlCnugPxY0nt2yabkG2r3yVPy876AvqvO 7vAdp4odBGymscMB1sijcvPsDTzBXVrvtVGQpezefjXESBN6rMttmVsiKPEwRYbRF2xy jgnHXtydj5cuAaw0DvsNSNWLE4UtGA1hvqcLznqtGQVMEFpAvawCFxw/xnP4YNnRS0PJ LxIqw9E9Qocm5i63GqIiQciUrkwHM8+sfFNyacBitjucl5hVVL4I2gtknZKucfic+gyD vmxRpdJSeV07EnU/xUEEbndJe+vxDCg9lv+S+YlU+HtlWkwZJk5H98HLYUxdnLjFh/HP rg== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 36em2yr7v0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 01 Feb 2021 10:19:24 -0500 Received: from m0098404.ppops.net (m0098404.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 111FCbQO032441; Mon, 1 Feb 2021 10:19:24 -0500 Received: from ppma03dal.us.ibm.com (b.bd.3ea9.ip4.static.sl-reverse.com [169.62.189.11]) by mx0a-001b2d01.pphosted.com with ESMTP id 36em2yr7uc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 01 Feb 2021 10:19:23 -0500 Received: from pps.filterd (ppma03dal.us.ibm.com [127.0.0.1]) by ppma03dal.us.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 111FBuNW016849; Mon, 1 Feb 2021 15:19:22 GMT Received: from b03cxnp08028.gho.boulder.ibm.com (b03cxnp08028.gho.boulder.ibm.com [9.17.130.20]) by ppma03dal.us.ibm.com with ESMTP id 36ehek9evw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 01 Feb 2021 15:19:22 +0000 Received: from b03ledav001.gho.boulder.ibm.com (b03ledav001.gho.boulder.ibm.com [9.17.130.232]) by b03cxnp08028.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 111FJL7920185466 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 1 Feb 2021 15:19:21 GMT Received: from b03ledav001.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5F1A56E05D; Mon, 1 Feb 2021 15:19:21 +0000 (GMT) Received: from b03ledav001.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5FD7C6E05E; Mon, 1 Feb 2021 15:19:20 +0000 (GMT) Received: from sbct-3.pok.ibm.com (unknown [9.47.158.153]) by b03ledav001.gho.boulder.ibm.com (Postfix) with ESMTP; Mon, 1 Feb 2021 15:19:20 +0000 (GMT) From: Stefan Berger To: keyrings@vger.kernel.org, linux-crypto@vger.kernel.org, davem@davemloft.net, herbert@gondor.apana.org.au, dhowells@redhat.com, zohar@linux.ibm.com Cc: linux-kernel@vger.kernel.org, patrick@puiterwijk.org, linux-integrity@vger.kernel.org, Stefan Berger , Vitaly Chikunov , Tianjia Zhang , Dmitry Kasatkin Subject: [PATCH v7 4/4] ima: Support EC keys for signature verification Date: Mon, 1 Feb 2021 10:19:10 -0500 Message-Id: <20210201151910.1465705-5-stefanb@linux.ibm.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210201151910.1465705-1-stefanb@linux.ibm.com> References: <20210201151910.1465705-1-stefanb@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.369,18.0.737 definitions=2021-02-01_05:2021-01-29,2021-02-01 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 clxscore=1015 priorityscore=1501 bulkscore=0 impostorscore=0 mlxscore=0 lowpriorityscore=0 mlxlogscore=999 adultscore=0 phishscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2102010077 Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org Add support for IMA signature verification for EC keys. Since SHA type of hashes can be used by RSA and ECDSA signature schemes we need to look at the key and derive from the key which signature scheme to use. Since this can be applied to all types of keys, we change the selection of the encoding type to be driven by the key's signature scheme rather than by the hash type. Signed-off-by: Stefan Berger Reviewed-by: Vitaly Chikunov Reviewed-by: Tianjia Zhang Cc: Mimi Zohar Cc: Dmitry Kasatkin Cc: linux-integrity@vger.kernel.org Cc: Vitaly Chikunov Cc: Tianjia Zhang Cc: David Howells Cc: keyrings@vger.kernel.org --- include/keys/asymmetric-type.h | 6 ++++++ security/integrity/digsig_asymmetric.c | 29 ++++++++++++-------------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/include/keys/asymmetric-type.h b/include/keys/asymmetric-type.h index a29d3ff2e7e8..c432fdb8547f 100644 --- a/include/keys/asymmetric-type.h +++ b/include/keys/asymmetric-type.h @@ -72,6 +72,12 @@ const struct asymmetric_key_ids *asymmetric_key_ids(const struct key *key) return key->payload.data[asym_key_ids]; } +static inline +const struct public_key *asymmetric_key_public_key(const struct key *key) +{ + return key->payload.data[asym_crypto]; +} + extern struct key *find_asymmetric_key(struct key *keyring, const struct asymmetric_key_id *id_0, const struct asymmetric_key_id *id_1, diff --git a/security/integrity/digsig_asymmetric.c b/security/integrity/digsig_asymmetric.c index a662024b4c70..29002d016607 100644 --- a/security/integrity/digsig_asymmetric.c +++ b/security/integrity/digsig_asymmetric.c @@ -84,6 +84,7 @@ int asymmetric_verify(struct key *keyring, const char *sig, { struct public_key_signature pks; struct signature_v2_hdr *hdr = (struct signature_v2_hdr *)sig; + const struct public_key *pk; struct key *key; int ret; @@ -105,23 +106,19 @@ int asymmetric_verify(struct key *keyring, const char *sig, memset(&pks, 0, sizeof(pks)); pks.hash_algo = hash_algo_name[hdr->hash_algo]; - switch (hdr->hash_algo) { - case HASH_ALGO_STREEBOG_256: - case HASH_ALGO_STREEBOG_512: - /* EC-RDSA and Streebog should go together. */ - pks.pkey_algo = "ecrdsa"; - pks.encoding = "raw"; - break; - case HASH_ALGO_SM3_256: - /* SM2 and SM3 should go together. */ - pks.pkey_algo = "sm2"; - pks.encoding = "raw"; - break; - default: - pks.pkey_algo = "rsa"; + + pk = asymmetric_key_public_key(key); + pks.pkey_algo = pk->pkey_algo; + if (!strcmp(pk->pkey_algo, "rsa")) pks.encoding = "pkcs1"; - break; - } + else if (!strcmp(pk->pkey_algo, "ecdsa")) + pks.encoding = "x962"; + else if (!strcmp(pk->pkey_algo, "ecrdsa") || + !strcmp(pk->pkey_algo, "sm2")) + pks.encoding = "raw"; + else + return -ENOPKG; + pks.digest = (u8 *)data; pks.digest_size = datalen; pks.s = hdr->sig; -- 2.29.2