Ignore unsupported decoder providers during chain discovery

Cherry-picked from: https://gitcode.com/openHiTLS/openhitls/merge_requests/1507

Signed-off-by: Dongjianwei001 <dongjianwei1@huawei.com>
This commit is contained in:
jchx
2026-05-23 10:56:04 +00:00
committed by Dongjianwei001
parent 448b67161a
commit 3db04fa4af
4 changed files with 65 additions and 3 deletions
+1 -1
View File
@@ -414,7 +414,7 @@ static int32_t ProcessEachProviderDecoder(CRYPT_EAL_ProvMgrCtx *ctx, void *args)
}
ret = CRYPT_EAL_ProviderQuery(ctx, CRYPT_EAL_OPERAID_DECODER, &algInfos);
if (ret == CRYPT_NOT_SUPPORT) {
if (algInfos == NULL) {
return CRYPT_SUCCESS;
}
if (ret != CRYPT_SUCCESS) {
@@ -36,9 +36,11 @@
#include "sal_file.h"
#include "crypt_codecskey.h"
#include "crypt_eal_codecs.h"
#include "crypt_eal_provider.h"
#include "crypt_eal_rand.h"
#include "hitls_x509_local.h"
#include "stub_utils.h"
#include "test.h"
/* END_HEADER */
/* ============================================================================
@@ -49,6 +51,32 @@ STUB_DEFINE_RET1(void *, BSL_SAL_Malloc, uint32_t);
#endif
STUB_DEFINE_RET2(int32_t, HITLS_X509_ParseCertTbs, BSL_ASN1_Buffer *, HITLS_X509_Cert *);
#if defined(HITLS_PKI_X509_CRT_PARSE) && defined(HITLS_CRYPTO_PROVIDER)
#define HITLS_X509_SHA256_LIB_NAME "provider_sha256." BSL_SAL_DL_EXT
#define HITLS_X509_SHA256_PROVIDER_PATH "provider_test_data/path2"
static CRYPT_EAL_LibCtx *X509_LoadSha256ProviderWithDefault(void)
{
CRYPT_EAL_LibCtx *libCtx = NULL;
int32_t ret = CRYPT_EAL_RandInit(CRYPT_RAND_SHA256, NULL, NULL, NULL, 0);
if (ret != CRYPT_SUCCESS && ret != CRYPT_EAL_ERR_DRBG_REPEAT_INIT) {
ASSERT_EQ(ret, CRYPT_SUCCESS);
}
libCtx = CRYPT_EAL_LibCtxNew();
ASSERT_TRUE(libCtx != NULL);
ASSERT_EQ(CRYPT_EAL_ProviderSetLoadPath(libCtx, HITLS_X509_SHA256_PROVIDER_PATH), CRYPT_SUCCESS);
ASSERT_EQ(CRYPT_EAL_ProviderLoad(libCtx, 0, HITLS_X509_SHA256_LIB_NAME, NULL, NULL), CRYPT_SUCCESS);
ASSERT_EQ(CRYPT_EAL_ProviderLoad(libCtx, 0, "default", NULL, NULL), CRYPT_SUCCESS);
return libCtx;
EXIT:
CRYPT_EAL_LibCtxFree(libCtx);
return NULL;
}
#endif
static uint32_t g_certSerialMemAllocCount = 0;
static uint32_t g_certSerialMemFreeCount = 0;
@@ -926,6 +954,36 @@ EXIT:
}
/* END_CASE */
/* BEGIN_CASE */
void SDV_X509_PROVIDER_CERT_PARSE_WITH_UNSUPPORTED_PROVIDER_TC001(char *attrName, char *format, char *path, int certNum)
{
#if !defined(HITLS_PKI_X509_CRT_PARSE) || !defined(HITLS_CRYPTO_PROVIDER)
(void)attrName;
(void)format;
(void)path;
(void)certNum;
SKIP_TEST();
#else
TestMemInit();
BSL_GLOBAL_Init();
CRYPT_EAL_LibCtx *libCtx = X509_LoadSha256ProviderWithDefault();
HITLS_X509_List *list = NULL;
ASSERT_TRUE(libCtx != NULL);
ASSERT_EQ(HITLS_X509_ProviderCertParseBundleFile((HITLS_PKI_LibCtx *)libCtx, attrName, format, path, &list),
HITLS_PKI_SUCCESS);
ASSERT_EQ(BSL_LIST_COUNT(list), certNum);
ASSERT_TRUE(TestIsErrStackEmpty());
EXIT:
BSL_LIST_FREE(list, (BSL_LIST_PFUNC_FREE)HITLS_X509_CertFree);
CRYPT_EAL_RandDeinitEx(libCtx);
CRYPT_EAL_LibCtxFree(libCtx);
BSL_GLOBAL_DeInit();
#endif
}
/* END_CASE */
/* BEGIN_CASE */
void SDV_X509_CERT_SET_VERIOSN_FUNC_TC001(void)
{
@@ -3436,6 +3436,9 @@ SDV_X509_PROVIDER_CERT_PARSE_BUNDLE_BUFF_FUNC_TC001:"ASN1":"../testdata/cert/sm2
SDV_X509_PROVIDER_CERT_PARSE_BUNDLE_BUFF_FUNC_TC001 provider parse bundle buff with 1 der cert
SDV_X509_PROVIDER_CERT_PARSE_BUNDLE_BUFF_FUNC_TC001:"ASN1":"../testdata/cert/asn1/sha256Rsaca.crt":1
SDV_X509_PROVIDER_CERT_PARSE_WITH_UNSUPPORTED_PROVIDER_TC001 provider parse rsa bundle file with unsupported sha256 provider
SDV_X509_PROVIDER_CERT_PARSE_WITH_UNSUPPORTED_PROVIDER_TC001:"provider=default":"PEM":"../testdata/tls/certificate/pem/rsa_sha256/server.pem":1
SDV_X509_CERT_GET_BCONS_TEST_TC001
SDV_X509_CERT_GET_BCONS_TEST_TC001:BSL_FORMAT_ASN1:"../testdata/cert/asn1/ecdsa_cert/ca.der":1:1:-1
+2 -1
View File
@@ -29,6 +29,7 @@
#include "bsl_err_internal.h"
#define CRYPT_EAL_DEFAULT_ATTR "provider=sha256_test"
#define PROVIDER_SHA256_NOT_SUPPORT 0x7F000001
CRYPT_SHA2_256_Ctx *Sha256NewCtx(void *provCtx, int32_t algId)
@@ -65,7 +66,7 @@ static int32_t CRYPT_EAL_Sha256ProvQuery(void *provCtx, int32_t operaId, const C
*algInfos = defMds;
return CRYPT_SUCCESS;
default:
return CRYPT_NOT_SUPPORT;
return PROVIDER_SHA256_NOT_SUPPORT;
}
}