已合并
Modify the return value when no key usage. #1083
Modify the return value when no key usage. #1083
已合并
Dongjianwei001创建于 2月12日
5 个文件变更+18-15
@@ -39,6 +39,7 @@ typedef enum {
39 HITLS_X509_ERR_CHAIN_DEPTH_UP_LIMIT,39 HITLS_X509_ERR_CHAIN_DEPTH_UP_LIMIT,
40 HITLS_X509_ERR_VFY_AKI_SKI_NOT_MATCH,40 HITLS_X509_ERR_VFY_AKI_SKI_NOT_MATCH,
41 HITLS_X509_ERR_VFY_ERR_SM2_USER_ID,41 HITLS_X509_ERR_VFY_ERR_SM2_USER_ID,
42+ HITLS_X509_ERR_KU_IS_NONE,
42 43 
43 HITLS_X509_ERR_CERT_NOT_CA = 0x04010001,44 HITLS_X509_ERR_CERT_NOT_CA = 0x04010001,
44 HITLS_X509_ERR_CERT_EXIST,45 HITLS_X509_ERR_CERT_EXIST,
@@ -46,8 +46,6 @@ typedef void HITLS_PKI_LibCtx;
46#define HITLS_X509_EXT_KU_ENCIPHER_ONLY 0x000146#define HITLS_X509_EXT_KU_ENCIPHER_ONLY 0x0001
47#define HITLS_X509_EXT_KU_DECIPHER_ONLY 0x800047#define HITLS_X509_EXT_KU_DECIPHER_ONLY 0x8000
48 48 
49-#define HITLS_X509_EXT_KU_NONE 0xFFFF /* No Key Usage extension. */
50- 
51typedef enum {49typedef enum {
52 HITLS_X509_REF_UP = 0, /** Increase the reference count of the object */50 HITLS_X509_REF_UP = 0, /** Increase the reference count of the object */
53 51 
@@ -1235,7 +1235,10 @@ static int32_t GetExtKeyUsage(HITLS_X509_Ext *ext, uint32_t *val, uint32_t valLe
1235 return HITLS_X509_ERR_INVALID_PARAM;1235 return HITLS_X509_ERR_INVALID_PARAM;
1236 }1236 }
1237 HITLS_X509_CertExt *certExt = (HITLS_X509_CertExt *)ext->extData;1237 HITLS_X509_CertExt *certExt = (HITLS_X509_CertExt *)ext->extData;
1238- *val = certExt->extFlags & HITLS_X509_EXT_FLAG_KUSAGE ? certExt->keyUsage : HITLS_X509_EXT_KU_NONE;1238+ if ((certExt->extFlags & HITLS_X509_EXT_FLAG_KUSAGE) == 0) {
1239+ return HITLS_X509_ERR_KU_IS_NONE;
1240+ }
1241+ *val = certExt->keyUsage;
1239 return HITLS_PKI_SUCCESS;1242 return HITLS_PKI_SUCCESS;
1240}1243}
1241 1244 
@@ -483,9 +483,10 @@ void SDV_X509_CERT_CTRL_FUNC_TC001(char *path, int expRawDataLen, int expSignAlg
483 ASSERT_EQ(ref, 2);483 ASSERT_EQ(ref, 2);
484 HITLS_X509_CertFree(cert);484 HITLS_X509_CertFree(cert);
485 485 
486- ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_EXT_GET_KUSAGE, &keyUsage, sizeof(keyUsage)), HITLS_PKI_SUCCESS);486+ int32_t ret = HITLS_X509_CertCtrl(cert, HITLS_X509_EXT_GET_KUSAGE, &keyUsage, sizeof(keyUsage));
487- ASSERT_EQ(keyUsage, expKeyUsage);487+ ASSERT_TRUE(ret == HITLS_PKI_SUCCESS || ret == HITLS_X509_ERR_KU_IS_NONE);
488- if (expKeyUsage != HITLS_X509_EXT_KU_NONE) {488+ if (ret != HITLS_X509_ERR_KU_IS_NONE) {
489+ ASSERT_EQ(keyUsage, expKeyUsage);
489 ASSERT_EQ((keyUsage & HITLS_X509_EXT_KU_DIGITAL_SIGN) != 0, expKuDigitailSign);490 ASSERT_EQ((keyUsage & HITLS_X509_EXT_KU_DIGITAL_SIGN) != 0, expKuDigitailSign);
490 ASSERT_EQ((keyUsage & HITLS_X509_EXT_KU_KEY_CERT_SIGN) != 0, expKuCertSign);491 ASSERT_EQ((keyUsage & HITLS_X509_EXT_KU_KEY_CERT_SIGN) != 0, expKuCertSign);
491 ASSERT_EQ((keyUsage & HITLS_X509_EXT_KU_KEY_AGREEMENT) != 0, expKuKeyAgreement);492 ASSERT_EQ((keyUsage & HITLS_X509_EXT_KU_KEY_AGREEMENT) != 0, expKuKeyAgreement);
@@ -577,9 +578,10 @@ void SDV_X509_CERT_DUP_FUNC_TC001(char *path, int expSignAlg,
577 ASSERT_EQ(HITLS_X509_CertCtrl(dest, HITLS_X509_GET_SIGNALG, &alg, sizeof(alg)), HITLS_PKI_SUCCESS);578 ASSERT_EQ(HITLS_X509_CertCtrl(dest, HITLS_X509_GET_SIGNALG, &alg, sizeof(alg)), HITLS_PKI_SUCCESS);
578 ASSERT_EQ(alg, expSignAlg);579 ASSERT_EQ(alg, expSignAlg);
579 580 
580- ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_EXT_GET_KUSAGE, &keyUsage, sizeof(keyUsage)), HITLS_PKI_SUCCESS);581+ int32_t ret = HITLS_X509_CertCtrl(cert, HITLS_X509_EXT_GET_KUSAGE, &keyUsage, sizeof(keyUsage));
581- ASSERT_EQ(keyUsage, expKeyUsage);582+ ASSERT_TRUE(ret == HITLS_PKI_SUCCESS || ret == HITLS_X509_ERR_KU_IS_NONE);
582- if (expKeyUsage != HITLS_X509_EXT_KU_NONE) {583+ if (ret != HITLS_X509_ERR_KU_IS_NONE) {
584+ ASSERT_EQ(keyUsage, expKeyUsage);
583 ASSERT_EQ((keyUsage & HITLS_X509_EXT_KU_DIGITAL_SIGN) != 0, expKuDigitailSign);585 ASSERT_EQ((keyUsage & HITLS_X509_EXT_KU_DIGITAL_SIGN) != 0, expKuDigitailSign);
584 ASSERT_EQ((keyUsage & HITLS_X509_EXT_KU_KEY_CERT_SIGN) != 0, expKuCertSign);586 ASSERT_EQ((keyUsage & HITLS_X509_EXT_KU_KEY_CERT_SIGN) != 0, expKuCertSign);
585 ASSERT_EQ((keyUsage & HITLS_X509_EXT_KU_KEY_AGREEMENT) != 0, expKuKeyAgreement);587 ASSERT_EQ((keyUsage & HITLS_X509_EXT_KU_KEY_AGREEMENT) != 0, expKuKeyAgreement);
@@ -21,7 +21,7 @@
21#include "hitls_cert_type.h"21#include "hitls_cert_type.h"
22#include "hitls_type.h"22#include "hitls_type.h"
23#include "hitls_pki_cert.h"23#include "hitls_pki_cert.h"
24-#include "hitls_error.h"24+#include "hitls_pki_errno.h"
25#include "bsl_err_internal.h"25#include "bsl_err_internal.h"
26#include "tls_config.h"26#include "tls_config.h"
27#include "cert_mgr_ctx.h"27#include "cert_mgr_ctx.h"
@@ -171,11 +171,7 @@ static int32_t CertCheckKeyUsage(HITLS_Config *config, HITLS_CERT_X509 *cert, ui
171{171{
172 uint32_t keyUsage = 0;172 uint32_t keyUsage = 0;
173 int32_t ret = HITLS_X509_CertCtrl(cert, HITLS_X509_EXT_GET_KUSAGE, &keyUsage, sizeof(uint32_t));173 int32_t ret = HITLS_X509_CertCtrl(cert, HITLS_X509_EXT_GET_KUSAGE, &keyUsage, sizeof(uint32_t));
174- if (ret != HITLS_SUCCESS) {174+ if (ret == HITLS_X509_ERR_KU_IS_NONE) {
175- BSL_ERR_PUSH_ERROR(ret);
176- return ret;
177- }
178- if (keyUsage == HITLS_X509_EXT_KU_NONE) {
179#ifdef HITLS_TLS_PROTO_TLCP11175#ifdef HITLS_TLS_PROTO_TLCP11
180 // Key usage must be present, otherwise the chain is broken.176 // Key usage must be present, otherwise the chain is broken.
181 if (config == NULL) {177 if (config == NULL) {
@@ -188,6 +184,9 @@ static int32_t CertCheckKeyUsage(HITLS_Config *config, HITLS_CERT_X509 *cert, ui
188#endif184#endif
189 *res = true;185 *res = true;
190 return HITLS_SUCCESS;186 return HITLS_SUCCESS;
187+ } else if (ret != HITLS_SUCCESS) {
188+ BSL_ERR_PUSH_ERROR(ret);
189+ return ret;
191 }190 }
192 *res = (keyUsage & inKeyUsage) != 0;191 *res = (keyUsage & inKeyUsage) != 0;
193 return HITLS_SUCCESS;192 return HITLS_SUCCESS;