mbox series

[v7,00/10] crpyto: introduce OSCCA certificate and SM2 asymmetric algorithm

Message ID 20200920162103.83197-1-tianjia.zhang@linux.alibaba.com (mailing list archive)
Headers show
Series crpyto: introduce OSCCA certificate and SM2 asymmetric algorithm | expand

Message

tianjia.zhang Sept. 20, 2020, 4:20 p.m. UTC
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.

---
v7 changes:
  1. add sm2 test vectors to testmgr.
  2. fix potential memory leak in testmgr (PATCH 6/10).
  3. rebase on mainline.

v6 changes:
  1. remove mpi_sub_ui function from mpi library.
  2. rebase on mainline.

v5 changes:
  1. fix compilation failure when SM2 is configured as a module.
  2. simplify the mpi and ec code, remove unused functions reported by test robot.

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 (10):
  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
  crypto: testmgr - Fix potential memory leak in test_akcipher_one()
  crypto: sm2 - add SM2 test vectors to testmgr
  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   |   61 +
 crypto/asymmetric_keys/x509_cert_parser.c |   27 +-
 crypto/asymmetric_keys/x509_public_key.c  |    3 +
 crypto/sm2.c                              |  481 +++++++
 crypto/sm2signature.asn1                  |    4 +
 crypto/sm3_generic.c                      |    7 +-
 crypto/testmgr.c                          |   24 +-
 crypto/testmgr.h                          |   59 +
 include/crypto/public_key.h               |   15 +
 include/crypto/sm2.h                      |   25 +
 include/crypto/sm3.h                      |    2 +
 include/linux/mpi.h                       |  192 +++
 include/linux/oid_registry.h              |    6 +
 lib/mpi/Makefile                          |    6 +
 lib/mpi/ec.c                              | 1509 +++++++++++++++++++++
 lib/mpi/mpi-add.c                         |  155 +++
 lib/mpi/mpi-bit.c                         |  251 ++++
 lib/mpi/mpi-cmp.c                         |   46 +-
 lib/mpi/mpi-div.c                         |  238 ++++
 lib/mpi/mpi-internal.h                    |   53 +
 lib/mpi/mpi-inv.c                         |  143 ++
 lib/mpi/mpi-mod.c                         |  155 +++
 lib/mpi/mpi-mul.c                         |   94 ++
 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 +-
 32 files changed, 4435 insertions(+), 26 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

Comments

Herbert Xu Sept. 25, 2020, 8:17 a.m. UTC | #1
On Mon, Sep 21, 2020 at 12:20:53AM +0800, Tianjia Zhang wrote:
> 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.
> 
> ---
> v7 changes:
>   1. add sm2 test vectors to testmgr.
>   2. fix potential memory leak in testmgr (PATCH 6/10).
>   3. rebase on mainline.
> 
> v6 changes:
>   1. remove mpi_sub_ui function from mpi library.
>   2. rebase on mainline.
> 
> v5 changes:
>   1. fix compilation failure when SM2 is configured as a module.
>   2. simplify the mpi and ec code, remove unused functions reported by test robot.
> 
> 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 (10):
>   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
>   crypto: testmgr - Fix potential memory leak in test_akcipher_one()
>   crypto: sm2 - add SM2 test vectors to testmgr
>   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   |   61 +
>  crypto/asymmetric_keys/x509_cert_parser.c |   27 +-
>  crypto/asymmetric_keys/x509_public_key.c  |    3 +
>  crypto/sm2.c                              |  481 +++++++
>  crypto/sm2signature.asn1                  |    4 +
>  crypto/sm3_generic.c                      |    7 +-
>  crypto/testmgr.c                          |   24 +-
>  crypto/testmgr.h                          |   59 +
>  include/crypto/public_key.h               |   15 +
>  include/crypto/sm2.h                      |   25 +
>  include/crypto/sm3.h                      |    2 +
>  include/linux/mpi.h                       |  192 +++
>  include/linux/oid_registry.h              |    6 +
>  lib/mpi/Makefile                          |    6 +
>  lib/mpi/ec.c                              | 1509 +++++++++++++++++++++
>  lib/mpi/mpi-add.c                         |  155 +++
>  lib/mpi/mpi-bit.c                         |  251 ++++
>  lib/mpi/mpi-cmp.c                         |   46 +-
>  lib/mpi/mpi-div.c                         |  238 ++++
>  lib/mpi/mpi-internal.h                    |   53 +
>  lib/mpi/mpi-inv.c                         |  143 ++
>  lib/mpi/mpi-mod.c                         |  155 +++
>  lib/mpi/mpi-mul.c                         |   94 ++
>  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 +-
>  32 files changed, 4435 insertions(+), 26 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

All applied.  Thanks.