forked from alistair23/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
X.509: support OSCCA SM2-with-SM3 certificate verification
The digital certificate format based on SM2 crypto algorithm as specified in GM/T 0015-2012. It was published by State Encryption Management Bureau, China. The method of generating Other User Information is defined as ZA=H256(ENTLA || IDA || a || b || xG || yG || xA || yA), it also specified in https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02. The x509 certificate supports SM2-with-SM3 type certificate verification. Because certificate verification requires ZA in addition to tbs data, ZA also depends on elliptic curve parameters and public key data, so you need to access tbs in sig and calculate ZA. Finally calculate the digest of the signature and complete the verification work. The calculation process of ZA is declared in specifications GM/T 0009-2012 and GM/T 0003.2-2012. Signed-off-by: Tianjia Zhang <[email protected]> Tested-by: Xufeng Zhang <[email protected]> Reviewed-by: Gilad Ben-Yossef <[email protected]> Signed-off-by: Herbert Xu <[email protected]>
- Loading branch information
Showing
5 changed files
with
86 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
/* SPDX-License-Identifier: GPL-2.0-or-later */ | ||
/* | ||
* asymmetric public-key algorithm for SM2-with-SM3 certificate | ||
* as specified by OSCCA GM/T 0003.1-2012 -- 0003.5-2012 SM2 and | ||
* described at https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02 | ||
* | ||
* Copyright (c) 2020, Alibaba Group. | ||
* Authors: Tianjia Zhang <[email protected]> | ||
*/ | ||
|
||
#include <crypto/sm3_base.h> | ||
#include <crypto/sm2.h> | ||
#include <crypto/public_key.h> | ||
|
||
#if IS_REACHABLE(CONFIG_CRYPTO_SM2) | ||
|
||
int cert_sig_digest_update(const struct public_key_signature *sig, | ||
struct crypto_akcipher *tfm_pkey) | ||
{ | ||
struct crypto_shash *tfm; | ||
struct shash_desc *desc; | ||
size_t desc_size; | ||
unsigned char dgst[SM3_DIGEST_SIZE]; | ||
int ret; | ||
|
||
BUG_ON(!sig->data); | ||
|
||
ret = sm2_compute_z_digest(tfm_pkey, SM2_DEFAULT_USERID, | ||
SM2_DEFAULT_USERID_LEN, dgst); | ||
if (ret) | ||
return ret; | ||
|
||
tfm = crypto_alloc_shash(sig->hash_algo, 0, 0); | ||
if (IS_ERR(tfm)) | ||
return PTR_ERR(tfm); | ||
|
||
desc_size = crypto_shash_descsize(tfm) + sizeof(*desc); | ||
desc = kzalloc(desc_size, GFP_KERNEL); | ||
if (!desc) | ||
goto error_free_tfm; | ||
|
||
desc->tfm = tfm; | ||
|
||
ret = crypto_shash_init(desc); | ||
if (ret < 0) | ||
goto error_free_desc; | ||
|
||
ret = crypto_shash_update(desc, dgst, SM3_DIGEST_SIZE); | ||
if (ret < 0) | ||
goto error_free_desc; | ||
|
||
ret = crypto_shash_finup(desc, sig->data, sig->data_size, sig->digest); | ||
|
||
error_free_desc: | ||
kfree(desc); | ||
error_free_tfm: | ||
crypto_free_shash(tfm); | ||
return ret; | ||
} | ||
|
||
#endif /* ! IS_REACHABLE(CONFIG_CRYPTO_SM2) */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters