Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp3712324pxb; Mon, 1 Feb 2021 02:42:15 -0800 (PST) X-Google-Smtp-Source: ABdhPJy/z60ihTy2KXA0m4OPR/s6YD09HuFjk6vt8hc1Fsq7sSgex6WM4df2k5fno2buEJCxEEMz X-Received: by 2002:a05:6402:151:: with SMTP id s17mr17546638edu.107.1612176135143; Mon, 01 Feb 2021 02:42:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612176135; cv=none; d=google.com; s=arc-20160816; b=l1EdoUF/DnRg0aestpjrjsXLZE5BmC2TMQvezwWYZEY5VMBTowjvefJgPb3iIwlKEJ ipdMWsQOk9pxgiBJl/h+19hJjjZUWB14p/FymMiJzz17OSoRknljccUHDXvO/zQIlwb4 Wr/4ootx/uw5ODNFEKYtRzyy94DmwYvCapJuHclNLfFD+voZxZWdPQv4ToSUZbg5pWeL yJsGTEXJ1qQA21W3pHZ+qhCgw91dqANOXtO03FdAy4wsuFcCrS5U67N6eH+QNNB39n3/ WXFSQRkLbF6LV7kRK8Qis+yhYi8MboLViBOVTComEvBIwW6MgteSJa1WFY0Jjy6l6k1e YmKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=iss+1MfXIxkYfCMc2HBqm5bNw0by475GCcdTDr69KHQ=; b=GgFqKKP0/TCWlcviIGHv4RPbXPclZ3FkRSva43EbJV7RpCu0XFLCbAx2TVI0c2w3or cx1P9PQyyhMaDaxQwC/rKAWADVcHZHcP4DZ7RtbRbMRA8s0eZ2g4hEbfpenyJZ6977tQ +vaOIAxU5NYLKs8cRxOzj4vZ4EbocFsY7hNbHvHUxgBRfjLMAoOtBvdRuxmnq+BTvE4b 7n+ReTjW6c+xA/QgFsxvgwHD244aOVYSVjCDbEw59rFfExmtMt8EiXXRYK4VEV3N+R9e yD1tyttBSSNbAOombFDDWFQUngTvZCwYLAwJLKmjj58jRlA2OI46z9Odx0QyRDVDKRut 6Kug== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s6si1924697edc.573.2021.02.01.02.41.48; Mon, 01 Feb 2021 02:42:15 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233300AbhBAKkc (ORCPT + 99 others); Mon, 1 Feb 2021 05:40:32 -0500 Received: from out30-130.freemail.mail.aliyun.com ([115.124.30.130]:46948 "EHLO out30-130.freemail.mail.aliyun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233296AbhBAKjw (ORCPT ); Mon, 1 Feb 2021 05:39:52 -0500 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R171e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e04423;MF=tianjia.zhang@linux.alibaba.com;NM=1;PH=DS;RN=7;SR=0;TI=SMTPD_---0UNYB3r1_1612175940; Received: from B-455UMD6M-2027.local(mailfrom:tianjia.zhang@linux.alibaba.com fp:SMTPD_---0UNYB3r1_1612175940) by smtp.aliyun-inc.com(127.0.0.1); Mon, 01 Feb 2021 18:39:01 +0800 Subject: Re: [PATCH v6 2/4] x509: Detect sm2 keys by their parameters OID To: Stefan Berger , keyrings@vger.kernel.org, linux-crypto@vger.kernel.org Cc: linux-kernel@vger.kernel.org, patrick@puiterwijk.org, linux-integrity@vger.kernel.org, David Howells References: <20210131233301.1301787-1-stefanb@linux.ibm.com> <20210131233301.1301787-3-stefanb@linux.ibm.com> From: Tianjia Zhang Message-ID: <75a8ff37-3c23-6cf1-f844-cf692eb8adfc@linux.alibaba.com> Date: Mon, 1 Feb 2021 18:39:00 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.7.0 MIME-Version: 1.0 In-Reply-To: <20210131233301.1301787-3-stefanb@linux.ibm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org On 2/1/21 7:32 AM, Stefan Berger wrote: > Detect whether a key is an sm2 type of key by its OID in the parameters > array rather than assuming that everything under OID_id_ecPublicKey > is sm2, which is not the case. > > Signed-off-by: Stefan Berger > Cc: David Howells > Cc: keyrings@vger.kernel.org > --- > crypto/asymmetric_keys/x509_cert_parser.c | 12 +++++++++++- > include/linux/oid_registry.h | 1 + > lib/oid_registry.c | 13 +++++++++++++ > 3 files changed, 25 insertions(+), 1 deletion(-) > > diff --git a/crypto/asymmetric_keys/x509_cert_parser.c b/crypto/asymmetric_keys/x509_cert_parser.c > index 52c9b455fc7d..1621ceaf5c95 100644 > --- a/crypto/asymmetric_keys/x509_cert_parser.c > +++ b/crypto/asymmetric_keys/x509_cert_parser.c > @@ -459,6 +459,7 @@ int x509_extract_key_data(void *context, size_t hdrlen, > const void *value, size_t vlen) > { > struct x509_parse_context *ctx = context; > + enum OID oid; > > ctx->key_algo = ctx->last_oid; > switch (ctx->last_oid) { > @@ -470,7 +471,16 @@ int x509_extract_key_data(void *context, size_t hdrlen, > ctx->cert->pub->pkey_algo = "ecrdsa"; > break; > case OID_id_ecPublicKey: > - ctx->cert->pub->pkey_algo = "sm2"; > + if (parse_OID(ctx->params, ctx->params_size, &oid) != 0) > + return -EBADMSG; > + > + switch (oid) { > + case OID_sm2: > + ctx->cert->pub->pkey_algo = "sm2"; > + break; > + default: > + return -ENOPKG; > + } > break; > default: > return -ENOPKG; > diff --git a/include/linux/oid_registry.h b/include/linux/oid_registry.h > index 4462ed2c18cd..d4982e42c0d2 100644 > --- a/include/linux/oid_registry.h > +++ b/include/linux/oid_registry.h > @@ -117,6 +117,7 @@ enum OID { > }; > > extern enum OID look_up_OID(const void *data, size_t datasize); > +extern int parse_OID(const void *data, size_t datasize, enum OID *oid); > extern int sprint_oid(const void *, size_t, char *, size_t); > extern int sprint_OID(enum OID, char *, size_t); > > diff --git a/lib/oid_registry.c b/lib/oid_registry.c > index f7ad43f28579..508e0b34b5f0 100644 > --- a/lib/oid_registry.c > +++ b/lib/oid_registry.c > @@ -11,6 +11,7 @@ > #include > #include > #include > +#include > #include "oid_registry_data.c" > > MODULE_DESCRIPTION("OID Registry"); > @@ -92,6 +93,18 @@ enum OID look_up_OID(const void *data, size_t datasize) > } > EXPORT_SYMBOL_GPL(look_up_OID); > > +int parse_OID(const void *data, size_t datasize, enum OID *oid) > +{ > + const unsigned char *v = data; > + > + if (datasize < 2 || v[0] != ASN1_OID || v[1] != datasize - 2) > + return -EBADMSG; > + > + *oid = look_up_OID(data + 2, datasize - 2); > + return 0; > +} > +EXPORT_SYMBOL_GPL(parse_OID); > + > /* > * sprint_OID - Print an Object Identifier into a buffer > * @data: The encoded OID to print > Great job, I'm just curious why we need to add a new function, this seems unnecessary, if possible, please add Reviewed-by: Tianjia Zhang Best regards, Tianjia