Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp356858ybt; Wed, 8 Jul 2020 01:29:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxifayYR62L7P4NMQ2EwL5aAAcJtyzixdrffSjXTs6eK05QWEEoAlP8TRzQQRu5mnWS+ao9 X-Received: by 2002:a17:906:e294:: with SMTP id gg20mr49179215ejb.521.1594196979046; Wed, 08 Jul 2020 01:29:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594196979; cv=none; d=google.com; s=arc-20160816; b=GTJBhVabPzu4ubra6hFCk6iJ+Fby2WFcZ3HySnKiTXGLtU+skQMcuwFF9C2ER7kQXZ +aVDOydL67UX83nw1+jTeZbilkws4z1VnfL3UklFAJXeP3g6nO5vIMPeJGOyV0m3PUzz 7Dr2TI+h+zmrEatJtti8X6tVVC0qY7A4IEJtbQnN7yFARBi8drndA12WJLZUj/HMTJ3z Q52dWN2iWnCqVabEo3VjUnprkIXAC33IkZxoLS17K8QVzpNUKfHGwLFcC5kwFztW+QKu FLfRZmEMg4Rx5KO/41LIrF2c+JgakkfYZkcMS0V3fQF2JD/SB95tC3qGnw3+61DU8h2A mKjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=lUbc7KfT2gmB98jZlXNdiP5LRIRWAdX/z4XeIQP2P4M=; b=nmE7jZMeoj+SrtLMAtCRz77vJYni2IBJ+s4/d45JbL6L/qOidD5fWo0WI2IX4VLe9T ojvcEC3pYcWCPzDJDcTPAhKdiXMVgtJdG0XDTTQDS5Z3EII99O4RNcQ+kOlmSaouah2M Rn89yoXbFBgAsjehheYrvXNv+dDoJ3JD++vGdsZDkAchSNCajzDvhZVfpcSlsMcLk4K6 ofrg9fgpl21jceMbqHkPfKsJJTwo51gTNtSAfE3DNYOeHROQpCpvFHrnFqk8N7zde4CP b3GxJP1lBS6+j1Vr5KEYq78CY+Te2fidr0C83qvEoFQeJt+6tYx56ftgcA6laq2UJPol vkqQ== ARC-Authentication-Results: i=1; mx.google.com; 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; 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 ob20si15901192ejb.646.2020.07.08.01.29.15; Wed, 08 Jul 2020 01:29:39 -0700 (PDT) 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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728140AbgGHI21 (ORCPT + 99 others); Wed, 8 Jul 2020 04:28:27 -0400 Received: from out30-56.freemail.mail.aliyun.com ([115.124.30.56]:36088 "EHLO out30-56.freemail.mail.aliyun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727818AbgGHI20 (ORCPT ); Wed, 8 Jul 2020 04:28:26 -0400 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R201e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e07484;MF=tianjia.zhang@linux.alibaba.com;NM=1;PH=DS;RN=21;SR=0;TI=SMTPD_---0U25h8qW_1594196898; Received: from localhost(mailfrom:tianjia.zhang@linux.alibaba.com fp:SMTPD_---0U25h8qW_1594196898) by smtp.aliyun-inc.com(127.0.0.1); Wed, 08 Jul 2020 16:28:18 +0800 From: Tianjia Zhang To: herbert@gondor.apana.org.au, davem@davemloft.net, dhowells@redhat.com, mcoquelin.stm32@gmail.com, alexandre.torgue@st.com, jmorris@namei.org, serge@hallyn.com, nramas@linux.microsoft.com, tusharsu@linux.microsoft.com, zohar@linux.ibm.com, gilad@benyossef.com, pvanleeuwen@rambus.com Cc: linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org, keyrings@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-security-module@vger.kernel.org, linux-integrity@vger.kernel.org, zhang.jia@linux.alibaba.com, tianjia.zhang@linux.alibaba.com Subject: [PATCH v4 0/8] crpyto: introduce OSCCA certificate and SM2 asymmetric algorithm Date: Wed, 8 Jul 2020 16:28:10 +0800 Message-Id: <20200708082818.5511-1-tianjia.zhang@linux.alibaba.com> X-Mailer: git-send-email 2.17.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello all, This new module implement the OSCCA certificate and SM2 public key algorithm. It was published by State Encryption Management Bureau, China. List of specifications for OSCCA certificate and SM2 elliptic curve public key cryptography: * GM/T 0003.1-2012 * GM/T 0003.2-2012 * GM/T 0003.3-2012 * GM/T 0003.4-2012 * GM/T 0003.5-2012 * GM/T 0015-2012 * GM/T 0009-2012 IETF: https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02 oscca: http://www.oscca.gov.cn/sca/xxgk/2010-12/17/content_1002386.shtml scctc: http://www.gmbz.org.cn/main/bzlb.html These patchs add the OID object identifier defined by OSCCA. The x509 certificate supports sm2-with-sm3 type certificate parsing and verification. The sm2 algorithm is based on libgcrypt's mpi implementation, and has made some additions to the kernel's original mpi library, and added the implementation of ec to better support elliptic curve-like algorithms. sm2 has good support in both openssl and gnupg projects, and sm3 and sm4 of the OSCCA algorithm family have also been implemented in the kernel. Among them, sm3 and sm4 have been well implemented in the kernel. This group of patches has newly introduced sm2. In order to implement sm2 more perfectly, I expanded the mpi library and introduced the ec implementation of the mpi library as the basic algorithm. Compared to the kernel's crypto/ecc.c, the implementation of mpi/ec.c is more complete and elegant, sm2 is implemented based on these algorithms. --- v4 changes: 1. Pass data directly when calculating sm2 certificate digest 2. rebase on mainline. v3 changes: 1. integrity asymmetric digsig support sm2-with-sm3 algorithm. 2. remove unused sm2_set_priv_key(). 3. rebase on mainline. v2 changes: 1. simplify the sm2 algorithm and only retain the verify function. 2. extract the sm2 certificate code into a separate file. Tianjia Zhang (8): crypto: sm3 - export crypto_sm3_final function lib/mpi: Extend the MPI library lib/mpi: Introduce ec implementation to MPI library crypto: sm2 - introduce OSCCA SM2 asymmetric cipher algorithm crypto: testmgr - support test with different ciphertext per encryption X.509: support OSCCA certificate parse X.509: support OSCCA sm2-with-sm3 certificate verification integrity: Asymmetric digsig supports SM2-with-SM3 algorithm crypto/Kconfig | 17 + crypto/Makefile | 8 + crypto/asymmetric_keys/Makefile | 1 + crypto/asymmetric_keys/public_key.c | 6 + crypto/asymmetric_keys/public_key_sm2.c | 57 + crypto/asymmetric_keys/x509_cert_parser.c | 14 +- crypto/asymmetric_keys/x509_public_key.c | 3 + crypto/sm2.c | 473 +++++++ crypto/sm2signature.asn1 | 4 + crypto/sm3_generic.c | 7 +- crypto/testmgr.c | 7 +- include/crypto/public_key.h | 15 + include/crypto/sm2.h | 25 + include/crypto/sm3.h | 2 + include/linux/mpi.h | 193 +++ include/linux/oid_registry.h | 6 + lib/mpi/Makefile | 6 + lib/mpi/ec.c | 1538 +++++++++++++++++++++ lib/mpi/mpi-add.c | 207 +++ lib/mpi/mpi-bit.c | 251 ++++ lib/mpi/mpi-cmp.c | 46 +- lib/mpi/mpi-div.c | 259 ++++ lib/mpi/mpi-internal.h | 53 + lib/mpi/mpi-inv.c | 143 ++ lib/mpi/mpi-mod.c | 155 +++ lib/mpi/mpi-mul.c | 166 +++ lib/mpi/mpicoder.c | 336 +++++ lib/mpi/mpih-div.c | 294 ++++ lib/mpi/mpih-mul.c | 25 + lib/mpi/mpiutil.c | 204 +++ security/integrity/digsig_asymmetric.c | 14 +- 31 files changed, 4517 insertions(+), 18 deletions(-) create mode 100644 crypto/asymmetric_keys/public_key_sm2.c create mode 100644 crypto/sm2.c create mode 100644 crypto/sm2signature.asn1 create mode 100644 include/crypto/sm2.h create mode 100644 lib/mpi/ec.c create mode 100644 lib/mpi/mpi-add.c create mode 100644 lib/mpi/mpi-div.c create mode 100644 lib/mpi/mpi-inv.c create mode 100644 lib/mpi/mpi-mod.c create mode 100644 lib/mpi/mpi-mul.c -- 2.17.1