From 3db55332c8a928c400e775fea2d2d7e074d45298 Mon Sep 17 00:00:00 2001 From: haixiangw Date: Wed, 4 Dec 2024 01:46:52 -0800 Subject: [PATCH] =?UTF-8?q?cherry=20pick=20b0bf7a7=20from=20https://gitee.?= =?UTF-8?q?com/haixiangw/security=5Fcertificate=5Fmanager/pulls/379=20?= =?UTF-8?q?=E8=AF=81=E4=B9=A6=E7=AE=A1=E7=90=86=E6=94=AF=E6=8C=81=E5=9B=BD?= =?UTF-8?q?=E5=AF=86=E7=AE=97=E6=B3=95=E7=9A=84=E8=AF=81=E4=B9=A6=E5=92=8C?= =?UTF-8?q?=E7=A7=81=E9=92=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: haixiangw --- .../main/include/cm_type.h | 1 + interfaces/kits/napi/include/cm_napi_common.h | 1 + interfaces/kits/napi/src/cm_napi.cpp | 1 + .../kits/napi/src/cm_napi_sign_verify.cpp | 1 + .../core/src/cert_manager_app_cert_process.c | 19 +- .../core/src/cert_manager_key_operation.c | 1 + test/unittest/include/cm_cert_data_ecc.h | 219 ++++++++++++++++++ test/unittest/include/cm_test_common.h | 2 + test/unittest/src/cm_app_cert_test.cpp | 69 ++++++ test/unittest/src/cm_finish_test.cpp | 125 ++++++++-- test/unittest/src/cm_init_test.cpp | 112 +++++++++ test/unittest/src/cm_sys_app_cert_test.cpp | 44 ++++ test/unittest/src/cm_test_common.cpp | 92 ++++---- 13 files changed, 622 insertions(+), 65 deletions(-) diff --git a/interfaces/innerkits/cert_manager_standard/main/include/cm_type.h b/interfaces/innerkits/cert_manager_standard/main/include/cm_type.h index caeee2d..080a9eb 100644 --- a/interfaces/innerkits/cert_manager_standard/main/include/cm_type.h +++ b/interfaces/innerkits/cert_manager_standard/main/include/cm_type.h @@ -85,6 +85,7 @@ extern "C" { enum CmKeyDigest { CM_DIGEST_NONE = 0, CM_DIGEST_MD5 = 1, + CM_DIGEST_SM3 = 2, CM_DIGEST_SHA1 = 10, CM_DIGEST_SHA224 = 11, CM_DIGEST_SHA256 = 12, diff --git a/interfaces/kits/napi/include/cm_napi_common.h b/interfaces/kits/napi/include/cm_napi_common.h index 37215ef..ec0c755 100644 --- a/interfaces/kits/napi/include/cm_napi_common.h +++ b/interfaces/kits/napi/include/cm_napi_common.h @@ -172,6 +172,7 @@ enum CmJSKeyDigest { CM_JS_DIGEST_SHA256 = 4, CM_JS_DIGEST_SHA384 = 5, CM_JS_DIGEST_SHA512 = 6, + CM_JS_DIGEST_SM3 = 7, }; enum CmJSKeyPadding { diff --git a/interfaces/kits/napi/src/cm_napi.cpp b/interfaces/kits/napi/src/cm_napi.cpp index 99e8aa0..81e4f65 100644 --- a/interfaces/kits/napi/src/cm_napi.cpp +++ b/interfaces/kits/napi/src/cm_napi.cpp @@ -86,6 +86,7 @@ namespace CMNapi { AddInt32Property(env, keyDigest, "CM_DIGEST_SHA256", CM_JS_DIGEST_SHA256); AddInt32Property(env, keyDigest, "CM_DIGEST_SHA384", CM_JS_DIGEST_SHA384); AddInt32Property(env, keyDigest, "CM_DIGEST_SHA512", CM_JS_DIGEST_SHA512); + AddInt32Property(env, keyDigest, "CM_DIGEST_SM3", CM_JS_DIGEST_SM3); return keyDigest; } diff --git a/interfaces/kits/napi/src/cm_napi_sign_verify.cpp b/interfaces/kits/napi/src/cm_napi_sign_verify.cpp index 8339424..a09ddca 100644 --- a/interfaces/kits/napi/src/cm_napi_sign_verify.cpp +++ b/interfaces/kits/napi/src/cm_napi_sign_verify.cpp @@ -100,6 +100,7 @@ const struct CmJSKeyDigestCmKeyDigestMap DIGEST_MAP[] = { { CM_JS_DIGEST_SHA256, CM_DIGEST_SHA256 }, { CM_JS_DIGEST_SHA384, CM_DIGEST_SHA384 }, { CM_JS_DIGEST_SHA512, CM_DIGEST_SHA512 }, + { CM_JS_DIGEST_SM3, CM_DIGEST_SM3 }, }; static napi_value GetPadding(napi_env env, napi_value object, uint32_t *paddingRet) diff --git a/services/cert_manager_standard/cert_manager_engine/main/core/src/cert_manager_app_cert_process.c b/services/cert_manager_standard/cert_manager_engine/main/core/src/cert_manager_app_cert_process.c index cee0f4d..4a3af16 100644 --- a/services/cert_manager_standard/cert_manager_engine/main/core/src/cert_manager_app_cert_process.c +++ b/services/cert_manager_standard/cert_manager_engine/main/core/src/cert_manager_app_cert_process.c @@ -99,7 +99,8 @@ static int32_t TransEccKeyToKeyBlob(const EC_KEY *eccKey, const struct HksKeyMat return ret; } -static int32_t SaveKeyMaterialEcc(const EC_KEY *eccKey, const uint32_t keySize, struct CmBlob *keyOut) +static int32_t SaveKeyMaterialEcc(const EC_KEY *eccKey, const uint32_t keySize, + const enum HksKeyAlg algType, struct CmBlob *keyOut) { struct CmBlob rawMaterial = { 0, NULL }; /* public exponent x and y, and private exponent, so need size is: keySize / 8 * 3 */ @@ -116,7 +117,7 @@ static int32_t SaveKeyMaterialEcc(const EC_KEY *eccKey, const uint32_t keySize, * struct KeyMaterialEcc + pubX_data + pubY_data + pri_data */ struct HksKeyMaterialEcc *keyMaterial = (struct HksKeyMaterialEcc *)rawMaterial.data; - keyMaterial->keyAlg = HKS_ALG_ECC; + keyMaterial->keyAlg = algType; keyMaterial->keySize = keySize; keyMaterial->xSize = CM_KEY_BYTES(keySize); keyMaterial->ySize = CM_KEY_BYTES(keySize); @@ -279,15 +280,20 @@ static int32_t ImportEccKey(const EVP_PKEY *priKey, const struct CmBlob *keyUri) break; } + enum HksKeyAlg algType = HKS_ALG_ECC; uint32_t keyLen = (uint32_t)EC_GROUP_order_bits(EC_KEY_get0_group(eccKey)); - ret = SaveKeyMaterialEcc(eccKey, keyLen, &keyPair); + int curveName = EC_GROUP_get_curve_name(EC_KEY_get0_group(eccKey)); + if (curveName == NID_sm2) { + algType = HKS_ALG_SM2; + } + ret = SaveKeyMaterialEcc(eccKey, keyLen, algType, &keyPair); if (ret != CMR_OK) { - CM_LOG_E("save ec key material failed ret=0x%x", ret); + CM_LOG_E("save ec key material failed ret=0x%x, curveName = %d", ret, curveName); break; } const struct CmKeyProperties props = { - .algType = HKS_ALG_ECC, + .algType = (uint32_t)algType, .keySize = keyLen, .purpose = CM_KEY_PURPOSE_SIGN | CM_KEY_PURPOSE_VERIFY, }; @@ -341,6 +347,9 @@ static int32_t ImportKeyPair(const EVP_PKEY *priKey, const struct CmBlob *keyUri return ImportEccKey(priKey, keyUri); case EVP_PKEY_ED25519: return ImportEd25519Key(priKey, keyUri); + case NID_undef: + CM_LOG_E("key's baseid is not specified"); + return CMR_ERROR_INVALID_CERT_FORMAT; default: CM_LOG_E("Import key type not suported"); return CMR_ERROR_INVALID_ARGUMENT; diff --git a/services/cert_manager_standard/cert_manager_engine/main/core/src/cert_manager_key_operation.c b/services/cert_manager_standard/cert_manager_engine/main/core/src/cert_manager_key_operation.c index b69eea5..9a16f45 100755 --- a/services/cert_manager_standard/cert_manager_engine/main/core/src/cert_manager_key_operation.c +++ b/services/cert_manager_standard/cert_manager_engine/main/core/src/cert_manager_key_operation.c @@ -53,6 +53,7 @@ static struct PropertyToHuks g_cmDigestProperty[] = { { CM_DIGEST_SHA256, HKS_DIGEST_SHA256 }, { CM_DIGEST_SHA384, HKS_DIGEST_SHA384 }, { CM_DIGEST_SHA512, HKS_DIGEST_SHA512 }, + { CM_DIGEST_SM3, HKS_DIGEST_SM3 }, }; #define INVALID_PROPERTY_VALUE 0xFFFF diff --git a/test/unittest/include/cm_cert_data_ecc.h b/test/unittest/include/cm_cert_data_ecc.h index 5db8d84..8b57cfb 100644 --- a/test/unittest/include/cm_cert_data_ecc.h +++ b/test/unittest/include/cm_cert_data_ecc.h @@ -16,6 +16,8 @@ #ifndef CM_CERT_DATA_ECC_H #define CM_CERT_DATA_ECC_H +#include "cm_type.h" + static const uint8_t g_eccP224P12CertInfo[] = { 0x30, 0x82, 0x03, 0x09, 0x02, 0x01, 0x03, 0x30, 0x82, 0x02, 0xcf, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x82, 0x02, 0xc0, 0x04, 0x82, 0x02, 0xbc, 0x30, 0x82, @@ -273,5 +275,222 @@ static const uint8_t g_eccP521P12CertInfo[] = { 0x29, 0xb4, 0xae, 0xcb, 0x78, 0x3b, 0x04, 0x08, 0xff, 0x70, 0xfd, 0xf4, 0x46, 0x3c, 0xad, 0x1a, 0x02, 0x02, 0x08, 0x00, }; + +/* + * OID: 1.2.840.10045.2.1 + * OID: 1.2.156.10197.1.301 + */ +static const uint8_t g_sm2PfxCertInfo[] = { + 0x30, 0x82, 0x03, 0xAA, 0x02, 0x01, 0x03, 0x30, 0x82, 0x03, 0x70, 0x06, 0x09, 0x2A, 0x86, 0x48, + 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x03, 0x61, 0x04, 0x82, 0x03, 0x5D, 0x30, 0x82, + 0x03, 0x59, 0x30, 0x82, 0x03, 0x55, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07, + 0x01, 0xA0, 0x82, 0x03, 0x46, 0x04, 0x82, 0x03, 0x42, 0x30, 0x82, 0x03, 0x3E, 0x30, 0x82, 0x02, + 0x74, 0x06, 0x0B, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x0A, 0x01, 0x03, 0xA0, 0x82, + 0x02, 0x19, 0x30, 0x82, 0x02, 0x15, 0x06, 0x0A, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, + 0x16, 0x01, 0xA0, 0x82, 0x02, 0x05, 0x04, 0x82, 0x02, 0x01, 0x30, 0x82, 0x01, 0xFD, 0x30, 0x82, + 0x01, 0xA0, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x06, 0x01, 0x91, 0x7E, 0x04, 0x90, 0x17, 0x30, + 0x0C, 0x06, 0x08, 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, 0x83, 0x75, 0x05, 0x00, 0x30, 0x4B, 0x31, + 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4E, 0x31, 0x0E, 0x30, 0x0C, + 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x05, 0x47, 0x4D, 0x53, 0x53, 0x4C, 0x31, 0x10, 0x30, 0x0E, + 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x07, 0x50, 0x4B, 0x49, 0x2F, 0x53, 0x4D, 0x32, 0x31, 0x1A, + 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x11, 0x4D, 0x69, 0x64, 0x64, 0x6C, 0x65, 0x43, + 0x41, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x54, 0x65, 0x73, 0x74, 0x30, 0x22, 0x18, 0x0F, 0x32, 0x30, + 0x32, 0x34, 0x30, 0x38, 0x32, 0x32, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x5A, 0x18, 0x0F, 0x32, + 0x30, 0x32, 0x35, 0x30, 0x38, 0x32, 0x32, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x5A, 0x30, 0x1B, + 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4E, 0x31, 0x0C, 0x30, + 0x0A, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x03, 0x41, 0x42, 0x43, 0x30, 0x59, 0x30, 0x13, 0x06, + 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, + 0x82, 0x2D, 0x03, 0x42, 0x00, 0x04, 0x96, 0x17, 0x50, 0x33, 0xC7, 0x4D, 0x58, 0x95, 0xE7, 0xB0, + 0xB2, 0x93, 0xDD, 0x81, 0xA2, 0xC3, 0x7B, 0xB0, 0xC0, 0x29, 0x3D, 0x9F, 0x0A, 0x84, 0xC4, 0x24, + 0x76, 0x46, 0x70, 0x2A, 0x5B, 0x7D, 0xCC, 0x87, 0xAC, 0x61, 0x78, 0x19, 0xBE, 0x1C, 0x26, 0x83, + 0x5A, 0xAF, 0x19, 0x4B, 0xBF, 0xE0, 0x3C, 0x05, 0x0A, 0x61, 0xDE, 0xB6, 0xBC, 0x9A, 0xAE, 0xB9, + 0xF4, 0xF9, 0x2D, 0x16, 0x7D, 0xD5, 0xA3, 0x81, 0x99, 0x30, 0x81, 0x96, 0x30, 0x1B, 0x06, 0x03, + 0x55, 0x1D, 0x23, 0x04, 0x14, 0x30, 0x12, 0x80, 0x10, 0xF9, 0x7F, 0x55, 0xB4, 0x27, 0x94, 0x33, + 0x62, 0xA6, 0x56, 0xCA, 0x6F, 0xCC, 0x5D, 0x1A, 0xFF, 0x30, 0x19, 0x06, 0x03, 0x55, 0x1D, 0x0E, + 0x04, 0x12, 0x04, 0x10, 0x46, 0x75, 0x24, 0xDD, 0x40, 0x09, 0x5B, 0x70, 0xDE, 0x9B, 0x5B, 0xAB, + 0x1F, 0xC1, 0x3A, 0xB9, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x11, 0x04, 0x07, 0x30, 0x05, 0x82, + 0x03, 0x41, 0x42, 0x43, 0x30, 0x31, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, + 0x04, 0x25, 0x30, 0x23, 0x30, 0x21, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x01, + 0x86, 0x15, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x6F, 0x63, 0x73, 0x70, 0x2E, 0x67, + 0x6D, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6E, 0x30, 0x09, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x04, 0x02, + 0x30, 0x00, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, + 0x00, 0xC0, 0x30, 0x0C, 0x06, 0x08, 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, 0x83, 0x75, 0x05, 0x00, + 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0xC5, 0x25, 0x8A, 0x10, 0xFD, 0x6E, 0x73, 0x2A, + 0x09, 0xE7, 0x4B, 0x11, 0x9F, 0xD9, 0x0A, 0x46, 0x26, 0xAF, 0x49, 0xFE, 0x9A, 0x85, 0xB1, 0x56, + 0x1C, 0x2E, 0x1D, 0x2A, 0x11, 0x9A, 0xAF, 0xB2, 0x02, 0x21, 0x00, 0xD2, 0x35, 0x98, 0xBC, 0xDC, + 0x6C, 0x2B, 0x72, 0xE3, 0x01, 0x9B, 0xC1, 0x8C, 0xE5, 0x51, 0xC4, 0x8C, 0xCD, 0xD7, 0x89, 0x76, + 0x20, 0xD8, 0x5F, 0x4C, 0xCD, 0xDC, 0x1D, 0x72, 0x46, 0x43, 0xCB, 0x31, 0x48, 0x30, 0x15, 0x06, + 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x14, 0x31, 0x08, 0x1E, 0x06, 0x00, 0x45, + 0x00, 0x6E, 0x00, 0x64, 0x30, 0x2F, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, + 0x15, 0x31, 0x22, 0x04, 0x20, 0x38, 0x37, 0x35, 0x35, 0x37, 0x66, 0x31, 0x31, 0x35, 0x37, 0x35, + 0x63, 0x30, 0x61, 0x64, 0x37, 0x38, 0x65, 0x34, 0x65, 0x32, 0x38, 0x61, 0x62, 0x65, 0x64, 0x63, + 0x31, 0x33, 0x62, 0x36, 0x65, 0x30, 0x81, 0xC3, 0x06, 0x0B, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, + 0x01, 0x0C, 0x0A, 0x01, 0x02, 0xA0, 0x6A, 0x30, 0x68, 0x30, 0x1C, 0x06, 0x0A, 0x2A, 0x86, 0x48, + 0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x01, 0x06, 0x30, 0x0E, 0x04, 0x08, 0xEE, 0xE1, 0xA4, 0x0B, 0xA4, + 0x69, 0xC7, 0x34, 0x02, 0x02, 0x04, 0x00, 0x04, 0x48, 0xC9, 0xC9, 0x7F, 0x0E, 0x72, 0xE9, 0xD5, + 0x6A, 0xED, 0x65, 0x2D, 0xBB, 0x55, 0x4B, 0x98, 0xFA, 0x7B, 0x8A, 0xCB, 0xD1, 0xEE, 0xAE, 0x63, + 0x0B, 0xD0, 0x1E, 0x48, 0xC6, 0x0D, 0x21, 0xB6, 0x74, 0x7C, 0x86, 0xCC, 0x25, 0x11, 0x5C, 0x1B, + 0x34, 0xDF, 0xF6, 0x3A, 0x13, 0xA1, 0xAA, 0x24, 0x7C, 0x4A, 0x57, 0xEB, 0xF7, 0x6D, 0x4D, 0xCB, + 0x1C, 0x2B, 0x60, 0xD7, 0xFF, 0xB3, 0xE7, 0x49, 0x4B, 0x38, 0x8B, 0xA2, 0x44, 0x48, 0xA1, 0xB1, + 0xC1, 0x31, 0x48, 0x30, 0x15, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x14, + 0x31, 0x08, 0x1E, 0x06, 0x00, 0x45, 0x00, 0x6E, 0x00, 0x64, 0x30, 0x2F, 0x06, 0x09, 0x2A, 0x86, + 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x15, 0x31, 0x22, 0x04, 0x20, 0x38, 0x37, 0x35, 0x35, 0x37, + 0x66, 0x31, 0x31, 0x35, 0x37, 0x35, 0x63, 0x30, 0x61, 0x64, 0x37, 0x38, 0x65, 0x34, 0x65, 0x32, + 0x38, 0x61, 0x62, 0x65, 0x64, 0x63, 0x31, 0x33, 0x62, 0x36, 0x65, 0x30, 0x31, 0x30, 0x21, 0x30, + 0x09, 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14, 0xCA, 0xE3, 0xF6, 0x6C, + 0x24, 0x6A, 0x5A, 0x2D, 0x42, 0x5A, 0x03, 0xA5, 0x9E, 0xCC, 0x8A, 0x8D, 0xCC, 0x92, 0xC8, 0x1A, + 0x04, 0x08, 0xAD, 0xA2, 0x42, 0x27, 0xF6, 0x3E, 0x93, 0x09, 0x02, 0x02, 0x04, 0x00 +}; + +/* + * OID: 1.2.840.10045.2.1 + * OID: 1.2.156.10197.1.301 + */ +static const uint8_t g_sm2PfxCertInfo2[] = { + 0x30, 0x82, 0x04, 0x29, 0x02, 0x01, 0x03, 0x30, 0x82, 0x03, 0xEF, 0x06, 0x09, 0x2A, 0x86, 0x48, + 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x03, 0xE0, 0x04, 0x82, 0x03, 0xDC, 0x30, 0x82, + 0x03, 0xD8, 0x30, 0x82, 0x03, 0xD4, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07, + 0x01, 0xA0, 0x82, 0x03, 0xC5, 0x04, 0x82, 0x03, 0xC1, 0x30, 0x82, 0x03, 0xBD, 0x30, 0x82, 0x02, + 0xF3, 0x06, 0x0B, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x0A, 0x01, 0x03, 0xA0, 0x82, + 0x02, 0x98, 0x30, 0x82, 0x02, 0x94, 0x06, 0x0A, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, + 0x16, 0x01, 0xA0, 0x82, 0x02, 0x84, 0x04, 0x82, 0x02, 0x80, 0x30, 0x82, 0x02, 0x7C, 0x30, 0x82, + 0x02, 0x20, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x06, 0x01, 0x93, 0x90, 0x84, 0x67, 0x30, 0x30, + 0x0C, 0x06, 0x08, 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, 0x83, 0x75, 0x05, 0x00, 0x30, 0x4B, 0x31, + 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4E, 0x31, 0x0E, 0x30, 0x0C, + 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x05, 0x47, 0x4D, 0x53, 0x53, 0x4C, 0x31, 0x10, 0x30, 0x0E, + 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x07, 0x50, 0x4B, 0x49, 0x2F, 0x53, 0x4D, 0x32, 0x31, 0x1A, + 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x11, 0x4D, 0x69, 0x64, 0x64, 0x6C, 0x65, 0x43, + 0x41, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x54, 0x65, 0x73, 0x74, 0x30, 0x22, 0x18, 0x0F, 0x32, 0x30, + 0x32, 0x34, 0x31, 0x32, 0x30, 0x33, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x5A, 0x18, 0x0F, 0x32, + 0x30, 0x32, 0x37, 0x31, 0x32, 0x30, 0x33, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x5A, 0x30, 0x81, + 0x92, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4E, 0x31, 0x11, + 0x30, 0x0F, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x08, 0x54, 0x65, 0x73, 0x74, 0x43, 0x69, 0x74, + 0x79, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0B, 0x54, 0x65, 0x73, 0x74, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x31, 0x11, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x04, 0x0A, + 0x13, 0x08, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6E, 0x69, 0x74, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, + 0x55, 0x04, 0x0B, 0x13, 0x07, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x70, 0x31, 0x14, 0x30, 0x12, + 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0B, 0x54, 0x65, 0x73, 0x74, 0x53, 0x4D, 0x32, 0x43, 0x65, + 0x72, 0x74, 0x31, 0x1F, 0x30, 0x1D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, + 0x01, 0x16, 0x10, 0x74, 0x65, 0x73, 0x74, 0x73, 0x6D, 0x32, 0x40, 0x74, 0x65, 0x73, 0x74, 0x2E, + 0x63, 0x6F, 0x6D, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, + 0x06, 0x08, 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, 0x82, 0x2D, 0x03, 0x42, 0x00, 0x04, 0xC9, 0xC1, + 0x92, 0xB2, 0x7A, 0xA9, 0x7A, 0x88, 0xCD, 0x9F, 0x4B, 0x54, 0xDD, 0x4F, 0x6E, 0xFF, 0xD7, 0x36, + 0x47, 0x51, 0x93, 0x8F, 0xC9, 0x7B, 0x67, 0x9E, 0x7B, 0x6A, 0xCA, 0x97, 0xB5, 0x92, 0xB9, 0xF4, + 0x4F, 0x8C, 0xF1, 0x8F, 0x3D, 0x45, 0xCE, 0x7F, 0x57, 0x3D, 0xF4, 0x80, 0x78, 0xAF, 0x01, 0x7E, + 0xEB, 0x17, 0x34, 0x50, 0x67, 0x09, 0x5C, 0x88, 0x33, 0x37, 0x5A, 0x7A, 0x44, 0x40, 0xA3, 0x81, + 0xA1, 0x30, 0x81, 0x9E, 0x30, 0x1B, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x14, 0x30, 0x12, 0x80, + 0x10, 0xF9, 0x7F, 0x55, 0xB4, 0x27, 0x94, 0x33, 0x62, 0xA6, 0x56, 0xCA, 0x6F, 0xCC, 0x5D, 0x1A, + 0xFF, 0x30, 0x19, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x12, 0x04, 0x10, 0xE6, 0x22, 0x10, 0xB0, + 0xB4, 0x41, 0x0A, 0xE2, 0xC9, 0xD8, 0x4A, 0xCC, 0xAD, 0x1A, 0x90, 0x88, 0x30, 0x16, 0x06, 0x03, + 0x55, 0x1D, 0x11, 0x04, 0x0F, 0x30, 0x0D, 0x82, 0x0B, 0x54, 0x65, 0x73, 0x74, 0x53, 0x4D, 0x32, + 0x43, 0x65, 0x72, 0x74, 0x30, 0x31, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, + 0x04, 0x25, 0x30, 0x23, 0x30, 0x21, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x01, + 0x86, 0x15, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x6F, 0x63, 0x73, 0x70, 0x2E, 0x67, + 0x6D, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6E, 0x30, 0x09, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x04, 0x02, + 0x30, 0x00, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, + 0x00, 0xC0, 0x30, 0x0C, 0x06, 0x08, 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, 0x83, 0x75, 0x05, 0x00, + 0x03, 0x48, 0x00, 0x30, 0x45, 0x02, 0x21, 0x00, 0xEC, 0x68, 0x6A, 0xF8, 0xEE, 0x7A, 0x85, 0xFE, + 0xA3, 0xA9, 0xCE, 0xBC, 0x3E, 0xDD, 0x9E, 0x1F, 0x7C, 0x67, 0x90, 0xD3, 0x1B, 0x44, 0x13, 0xC7, + 0xC8, 0x9A, 0x8B, 0xD0, 0x9B, 0x72, 0x87, 0xDA, 0x02, 0x20, 0x47, 0x34, 0x85, 0x87, 0x6E, 0x38, + 0xF9, 0x6D, 0xFC, 0x67, 0x40, 0x25, 0x78, 0x5D, 0x30, 0x53, 0xE9, 0x70, 0xD7, 0x40, 0x42, 0x23, + 0x2D, 0xE3, 0xB4, 0x8B, 0xEA, 0xD3, 0x75, 0x0A, 0x4B, 0x01, 0x31, 0x48, 0x30, 0x15, 0x06, 0x09, + 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x14, 0x31, 0x08, 0x1E, 0x06, 0x00, 0x45, 0x00, + 0x6E, 0x00, 0x64, 0x30, 0x2F, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x15, + 0x31, 0x22, 0x04, 0x20, 0x38, 0x37, 0x35, 0x35, 0x37, 0x66, 0x31, 0x31, 0x35, 0x37, 0x35, 0x63, + 0x30, 0x61, 0x64, 0x37, 0x38, 0x65, 0x34, 0x65, 0x32, 0x38, 0x61, 0x62, 0x65, 0x64, 0x63, 0x31, + 0x33, 0x62, 0x36, 0x65, 0x30, 0x81, 0xC3, 0x06, 0x0B, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, + 0x0C, 0x0A, 0x01, 0x02, 0xA0, 0x6A, 0x30, 0x68, 0x30, 0x1C, 0x06, 0x0A, 0x2A, 0x86, 0x48, 0x86, + 0xF7, 0x0D, 0x01, 0x0C, 0x01, 0x06, 0x30, 0x0E, 0x04, 0x08, 0x69, 0xF0, 0x3E, 0x1D, 0xAB, 0x11, + 0x1E, 0x9D, 0x02, 0x02, 0x04, 0x00, 0x04, 0x48, 0xA2, 0xD9, 0x4C, 0x2A, 0x6C, 0x2A, 0x3F, 0x97, + 0x7A, 0xCB, 0x0B, 0xDF, 0x37, 0x02, 0x61, 0x0C, 0xBD, 0xBF, 0x14, 0xFF, 0xEA, 0x42, 0x11, 0xF0, + 0xC2, 0xC8, 0x24, 0x67, 0x84, 0xB9, 0xA6, 0x39, 0xA3, 0xF2, 0x3B, 0x92, 0x8C, 0x66, 0x1F, 0x65, + 0x8E, 0x84, 0xF3, 0xC1, 0x70, 0xFC, 0x20, 0xBD, 0x5D, 0x1F, 0x12, 0x65, 0x57, 0x87, 0x16, 0x40, + 0x95, 0xF3, 0x5C, 0x22, 0xC4, 0x80, 0x3B, 0x85, 0xF7, 0x04, 0x69, 0xAA, 0x95, 0xCC, 0xF9, 0xB7, + 0x31, 0x48, 0x30, 0x15, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x14, 0x31, + 0x08, 0x1E, 0x06, 0x00, 0x45, 0x00, 0x6E, 0x00, 0x64, 0x30, 0x2F, 0x06, 0x09, 0x2A, 0x86, 0x48, + 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x15, 0x31, 0x22, 0x04, 0x20, 0x38, 0x37, 0x35, 0x35, 0x37, 0x66, + 0x31, 0x31, 0x35, 0x37, 0x35, 0x63, 0x30, 0x61, 0x64, 0x37, 0x38, 0x65, 0x34, 0x65, 0x32, 0x38, + 0x61, 0x62, 0x65, 0x64, 0x63, 0x31, 0x33, 0x62, 0x36, 0x65, 0x30, 0x31, 0x30, 0x21, 0x30, 0x09, + 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14, 0x05, 0x2D, 0xD5, 0xF0, 0x7C, + 0x44, 0xA5, 0x50, 0xFE, 0xB4, 0x09, 0x57, 0x90, 0x3F, 0x5C, 0x63, 0x59, 0x8E, 0x45, 0xA0, 0x04, + 0x08, 0x28, 0x3F, 0xCA, 0xD3, 0x99, 0xB2, 0xFE, 0x5C, 0x02, 0x02, 0x04, 0x00 +}; + +/* + * OID: 1.2.156.10197.1.301 + * OID: 1.2.156.10197.1.301 + */ +static const uint8_t g_sm2PfxCertInfo3[] = { + 0x30, 0x82, 0x03, 0xEC, 0x02, 0x01, 0x03, 0x30, 0x82, 0x03, 0xA2, 0x06, 0x09, 0x2A, 0x86, 0x48, + 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x03, 0x93, 0x04, 0x82, 0x03, 0x8F, 0x30, 0x82, + 0x03, 0x8B, 0x30, 0x82, 0x02, 0x42, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07, + 0x06, 0xA0, 0x82, 0x02, 0x33, 0x30, 0x82, 0x02, 0x2F, 0x02, 0x01, 0x00, 0x30, 0x82, 0x02, 0x28, + 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x01, 0x30, 0x57, 0x06, 0x09, 0x2A, + 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x05, 0x0D, 0x30, 0x4A, 0x30, 0x29, 0x06, 0x09, 0x2A, 0x86, + 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x05, 0x0C, 0x30, 0x1C, 0x04, 0x08, 0x18, 0x2D, 0x99, 0xB1, 0x9D, + 0xF7, 0xAB, 0x7C, 0x02, 0x02, 0x08, 0x00, 0x30, 0x0C, 0x06, 0x08, 0x2A, 0x86, 0x48, 0x86, 0xF7, + 0x0D, 0x02, 0x09, 0x05, 0x00, 0x30, 0x1D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, + 0x01, 0x2A, 0x04, 0x10, 0x5F, 0xF3, 0xE9, 0x0B, 0x12, 0x7D, 0x7A, 0xFE, 0x04, 0x28, 0x17, 0x97, + 0x76, 0x13, 0x66, 0xF4, 0x80, 0x82, 0x01, 0xC0, 0x60, 0x89, 0xF5, 0xE7, 0x61, 0xEF, 0x89, 0x64, + 0x0C, 0xD6, 0xCD, 0x13, 0x2D, 0x0B, 0xA2, 0xD0, 0xF4, 0x12, 0x5E, 0x49, 0xEE, 0x1B, 0xEA, 0x6D, + 0x6B, 0x7E, 0x9D, 0x51, 0x8E, 0x5F, 0xE1, 0x8B, 0x10, 0x31, 0x58, 0xFF, 0x1F, 0x63, 0x91, 0xEB, + 0x06, 0x24, 0xB0, 0x7D, 0x45, 0xE5, 0x39, 0x6C, 0x67, 0xEB, 0xF7, 0x25, 0x19, 0x4E, 0x9D, 0xFA, + 0xAE, 0x94, 0x94, 0xDD, 0xB2, 0x29, 0x23, 0xA2, 0x04, 0xD0, 0x85, 0xCD, 0x06, 0xBC, 0x09, 0xD9, + 0x4B, 0x7E, 0x30, 0xB8, 0x9D, 0x4C, 0x79, 0xDA, 0x2B, 0xF7, 0xE3, 0x10, 0xDC, 0x6D, 0xE8, 0xEC, + 0x47, 0x55, 0xAE, 0x5A, 0x2E, 0x79, 0x92, 0x1E, 0xB3, 0xBC, 0x8C, 0xC9, 0x6C, 0xE4, 0xD1, 0x08, + 0x1A, 0xB4, 0xFA, 0xDA, 0xF6, 0x99, 0xDF, 0xAF, 0xD4, 0x5B, 0x5E, 0x74, 0x4A, 0xE6, 0x6A, 0xCB, + 0xF2, 0xB3, 0x4C, 0xE1, 0xEC, 0xDE, 0x4B, 0x8F, 0xAB, 0x1F, 0x95, 0x9F, 0x4A, 0x08, 0xB1, 0x38, + 0x39, 0xDC, 0x1F, 0x3C, 0x84, 0x54, 0x04, 0x5C, 0x37, 0x6B, 0xCE, 0xAC, 0x45, 0x36, 0xD8, 0x1B, + 0x28, 0x15, 0x2B, 0xE3, 0xAC, 0x02, 0x78, 0xF8, 0xA7, 0xD8, 0x2C, 0x0D, 0xE8, 0x3F, 0xC5, 0xA4, + 0x78, 0x09, 0xBF, 0xA6, 0x26, 0xEB, 0xDC, 0x5C, 0x87, 0xA8, 0x12, 0xF7, 0x45, 0x51, 0xA4, 0xE6, + 0x71, 0xC0, 0x86, 0xB8, 0x0D, 0x24, 0x44, 0xE0, 0xC0, 0x7F, 0x1B, 0xDD, 0x10, 0x21, 0x79, 0x77, + 0xCD, 0x9E, 0x63, 0x1C, 0x50, 0xCD, 0x79, 0x63, 0xFE, 0x69, 0x65, 0x22, 0x5B, 0x78, 0x32, 0xCC, + 0xA3, 0xC2, 0x4A, 0x5F, 0x18, 0x1F, 0x78, 0x1B, 0xFE, 0x83, 0x62, 0xEA, 0xDF, 0xF4, 0xB8, 0xFF, + 0x8D, 0xC2, 0x1F, 0xC2, 0xAF, 0xB4, 0x1F, 0x0E, 0x4C, 0xB1, 0x89, 0x6F, 0x51, 0x2B, 0x89, 0xEE, + 0x10, 0xFC, 0x07, 0x31, 0x42, 0x7F, 0xB9, 0x92, 0x5E, 0x0B, 0x00, 0x70, 0x8A, 0x03, 0xB9, 0xC1, + 0x84, 0xCA, 0x4B, 0x0E, 0x80, 0xE0, 0x5F, 0x2D, 0xCC, 0xB7, 0xBE, 0x31, 0x71, 0x99, 0x3C, 0x0B, + 0xAA, 0x89, 0x11, 0x23, 0xB7, 0x78, 0xD7, 0x6B, 0x3A, 0xA8, 0x37, 0xCF, 0x7D, 0x25, 0x12, 0x5E, + 0xCB, 0xF7, 0x0B, 0x2E, 0x4C, 0x7F, 0xFC, 0x54, 0xFD, 0xA9, 0x58, 0x17, 0x23, 0xC8, 0x07, 0x71, + 0xC2, 0x92, 0x82, 0xF9, 0xF9, 0x21, 0x6D, 0x2F, 0xB1, 0x00, 0x09, 0x52, 0xBB, 0x77, 0x47, 0xC9, + 0xBD, 0xB5, 0x04, 0x92, 0xEB, 0x36, 0x5B, 0x8A, 0x7D, 0xF8, 0xBF, 0xA5, 0x2F, 0x80, 0x58, 0x02, + 0xC5, 0xC9, 0x7F, 0xBB, 0xCF, 0xF1, 0x90, 0xE6, 0x93, 0x88, 0x8D, 0xEA, 0xDA, 0x09, 0xF6, 0xBC, + 0x98, 0x50, 0xC4, 0xC9, 0xF7, 0x70, 0x09, 0x37, 0x6B, 0xFD, 0x25, 0xDD, 0xD3, 0xD3, 0x9E, 0xD8, + 0xFC, 0x4D, 0xF8, 0xB5, 0x5B, 0xD8, 0xC6, 0x25, 0xD4, 0xE0, 0xEB, 0x75, 0x06, 0xAC, 0xC3, 0xF4, + 0x88, 0x9B, 0xC7, 0x67, 0x5E, 0x4D, 0xF6, 0xAD, 0x28, 0x37, 0x54, 0x01, 0xC9, 0x29, 0x78, 0x58, + 0x7B, 0x3D, 0x77, 0x2A, 0x1E, 0xE2, 0xFE, 0x62, 0xE6, 0x20, 0x60, 0xD6, 0xCE, 0x1E, 0x8B, 0xB9, + 0x9E, 0x2C, 0x9D, 0x33, 0x03, 0x62, 0x8C, 0x12, 0x1E, 0x78, 0xCA, 0x52, 0xB0, 0xF1, 0xB8, 0x7D, + 0x51, 0x36, 0xDB, 0xBF, 0xD2, 0xC2, 0x7E, 0x81, 0x30, 0x82, 0x01, 0x41, 0x06, 0x09, 0x2A, 0x86, + 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x01, 0x32, 0x04, 0x82, 0x01, 0x2E, 0x30, + 0x82, 0x01, 0x2A, 0x30, 0x82, 0x01, 0x26, 0x06, 0x0B, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, + 0x0C, 0x0A, 0x01, 0x02, 0xA0, 0x81, 0xEF, 0x30, 0x81, 0xEC, 0x30, 0x57, 0x06, 0x09, 0x2A, 0x86, + 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x05, 0x0D, 0x30, 0x4A, 0x30, 0x29, 0x06, 0x09, 0x2A, 0x86, 0x48, + 0x86, 0xF7, 0x0D, 0x01, 0x05, 0x0C, 0x30, 0x1C, 0x04, 0x08, 0xC6, 0xB3, 0xAE, 0xAC, 0x7D, 0xBD, + 0x59, 0x80, 0x02, 0x02, 0x08, 0x00, 0x30, 0x0C, 0x06, 0x08, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, + 0x02, 0x09, 0x05, 0x00, 0x30, 0x1D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x01, + 0x2A, 0x04, 0x10, 0x98, 0xEE, 0x61, 0xBF, 0x94, 0x5D, 0x58, 0x9B, 0x81, 0x73, 0x3E, 0x12, 0x04, + 0x2D, 0xB5, 0xB7, 0x04, 0x81, 0x90, 0xC7, 0x09, 0x38, 0x1A, 0x72, 0x7F, 0x98, 0x0E, 0xFA, 0xDA, + 0x99, 0xEC, 0xD5, 0x5C, 0x65, 0xE6, 0xE7, 0x8C, 0xD5, 0x23, 0x14, 0x69, 0x3E, 0x81, 0xBE, 0x79, + 0x2B, 0xDA, 0x46, 0xEA, 0x00, 0x25, 0xB6, 0x3E, 0x95, 0x0C, 0x37, 0x69, 0x8B, 0xD4, 0xFD, 0xF3, + 0x91, 0xF1, 0xA3, 0x36, 0x00, 0xEE, 0x19, 0xAC, 0xDD, 0x40, 0x76, 0x75, 0x22, 0xAF, 0xFF, 0x82, + 0x27, 0xAA, 0xA0, 0x97, 0x74, 0xF2, 0x7C, 0xCC, 0x58, 0xB9, 0x36, 0xEF, 0xC9, 0x1E, 0x17, 0x82, + 0x0E, 0xA5, 0x83, 0xF6, 0xF2, 0x9E, 0x3A, 0x42, 0x87, 0x46, 0xB7, 0x18, 0xA7, 0xA3, 0xBA, 0xB8, + 0xA8, 0x1A, 0x9A, 0xE3, 0x80, 0x63, 0x65, 0x14, 0x64, 0x6B, 0x2E, 0x2B, 0xE6, 0x2B, 0x59, 0xA6, + 0x7D, 0x2B, 0x7F, 0xA5, 0x05, 0xB1, 0xE6, 0x7C, 0xC7, 0x63, 0x39, 0x5A, 0xBA, 0x6F, 0xF9, 0xAF, + 0x16, 0xF4, 0x55, 0x70, 0x21, 0xD4, 0xA3, 0xAD, 0xCD, 0x0F, 0xE2, 0x72, 0xB5, 0x82, 0x90, 0x96, + 0xC6, 0xD9, 0x47, 0x97, 0x92, 0x13, 0x31, 0x25, 0x30, 0x23, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, + 0xF7, 0x0D, 0x01, 0x09, 0x15, 0x31, 0x16, 0x04, 0x14, 0x72, 0x3F, 0xE3, 0x8A, 0xEE, 0x12, 0x1F, + 0x86, 0x46, 0xAD, 0xF3, 0x97, 0xC6, 0x74, 0xF4, 0x56, 0xE9, 0x97, 0xAE, 0xB3, 0x30, 0x41, 0x30, + 0x31, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, + 0x04, 0x20, 0x47, 0x43, 0x62, 0xB6, 0xA7, 0x3E, 0xAA, 0x7F, 0xA6, 0x85, 0x49, 0x45, 0x53, 0x6C, + 0x78, 0xEA, 0x23, 0x6F, 0xD1, 0xF5, 0x69, 0xA5, 0x4E, 0xAF, 0x7A, 0x16, 0x0C, 0x8B, 0xD5, 0xE8, + 0x70, 0xA0, 0x04, 0x08, 0x3C, 0x22, 0x73, 0xEC, 0x4A, 0xDF, 0x59, 0x47, 0x02, 0x02, 0x08, 0x00, +}; + +static const uint8_t g_sm2certPwd[] = "12345678"; +static const struct CmBlob g_sm2AppCert = { sizeof(g_sm2PfxCertInfo), const_cast(g_sm2PfxCertInfo) }; +static const struct CmBlob g_sm2AppCert2 = { sizeof(g_sm2PfxCertInfo2), const_cast(g_sm2PfxCertInfo2) }; +static const struct CmBlob g_sm2AppCert3 = { sizeof(g_sm2PfxCertInfo3), const_cast(g_sm2PfxCertInfo3) }; +static const struct CmBlob g_appSM2CertPwd = { sizeof(g_sm2certPwd), const_cast(g_sm2certPwd) }; + #endif /* CM_CERT_DATA_ECC_H */ diff --git a/test/unittest/include/cm_test_common.h b/test/unittest/include/cm_test_common.h index 548a746..3dddac7 100644 --- a/test/unittest/include/cm_test_common.h +++ b/test/unittest/include/cm_test_common.h @@ -36,6 +36,8 @@ constexpr uint32_t CERT_KEY_ALG_ECC_P224 = 7; constexpr uint32_t CERT_KEY_ALG_ECC_P384 = 8; constexpr uint32_t CERT_KEY_ALG_ECC_P521 = 9; constexpr uint32_t CERT_KEY_ALG_ED25519 = 10; +constexpr uint32_t CERT_KEY_ALG_SM2_1 = 11; +constexpr uint32_t CERT_KEY_ALG_SM2_2 = 12; constexpr uint32_t TEST_USERID = 100; namespace CertmanagerTest { diff --git a/test/unittest/src/cm_app_cert_test.cpp b/test/unittest/src/cm_app_cert_test.cpp index 45234d5..9fd237a 100644 --- a/test/unittest/src/cm_app_cert_test.cpp +++ b/test/unittest/src/cm_app_cert_test.cpp @@ -240,6 +240,75 @@ HWTEST_F(CmAppCertTest, AppCertInstallBaseEccTest005, TestSize.Level0) EXPECT_EQ(ret, CM_SUCCESS) << "AppCertUnInstallAllTest 005 test failed, retcode:" << ret; } +/** + * @tc.name: AppCertInstallBaseSM2Test001 + * @tc.desc: install public and private sm2, oid is valid + * @tc.type: FUNC + */ +HWTEST_F(CmAppCertTest, AppCertInstallBaseSM2Test001, TestSize.Level0) +{ + uint8_t keyUriBuf[MAX_LEN_URI] = {0}; + struct CmBlob keyUri = { sizeof(keyUriBuf), keyUriBuf }; + + uint8_t certAliasBuf[] = "testForSm2"; + struct CmBlob certAlias = { sizeof(certAliasBuf), certAliasBuf }; + + int32_t ret = CmInstallAppCert(&g_sm2AppCert, &g_appSM2CertPwd, &certAlias, CM_CREDENTIAL_STORE, &keyUri); + EXPECT_EQ(ret, CM_SUCCESS) << "BaseSM2Test001 public test failed, retcode:" << ret; + + keyUri.size = sizeof(keyUriBuf); + ret = CmInstallAppCert(&g_sm2AppCert, &g_appSM2CertPwd, &certAlias, CM_PRI_CREDENTIAL_STORE, &keyUri); + EXPECT_EQ(ret, CM_SUCCESS) << "BaseSM2Test001 privite test failed, retcode:" << ret; + + ret = CmUninstallAllAppCert(); + EXPECT_EQ(ret, CM_SUCCESS) << "BaseSM2Test001 test failed, retcode:" << ret; +} + +/** + * @tc.name: AppCertInstallBaseSM2Test002 + * @tc.desc: install public and private sm2, oid is valid data2 + * @tc.type: FUNC + */ +HWTEST_F(CmAppCertTest, AppCertInstallBaseSM2Test002, TestSize.Level0) +{ + uint8_t keyUriBuf[MAX_LEN_URI] = {0}; + struct CmBlob keyUri = { sizeof(keyUriBuf), keyUriBuf }; + + uint8_t certAliasBuf[] = "testForSm2_2"; + struct CmBlob certAlias = { sizeof(certAliasBuf), certAliasBuf }; + + int32_t ret = CmInstallAppCert(&g_sm2AppCert2, &g_appSM2CertPwd, &certAlias, CM_CREDENTIAL_STORE, &keyUri); + EXPECT_EQ(ret, CM_SUCCESS) << "BaseSM2Test002 public test failed, retcode:" << ret; + + keyUri.size = sizeof(keyUriBuf); + ret = CmInstallAppCert(&g_sm2AppCert2, &g_appSM2CertPwd, &certAlias, CM_PRI_CREDENTIAL_STORE, &keyUri); + EXPECT_EQ(ret, CM_SUCCESS) << "BaseSM2Test002 privite test failed, retcode:" << ret; + + ret = CmUninstallAllAppCert(); + EXPECT_EQ(ret, CM_SUCCESS) << "BaseSM2Test001 test failed, retcode:" << ret; +} + +/** + * @tc.name: AppCertInstallBaseSM2Test003 + * @tc.desc: install public and private sm2, oid is invalid + * @tc.type: FUNC + */ +HWTEST_F(CmAppCertTest, AppCertInstallBaseSM2Test003, TestSize.Level0) +{ + uint8_t keyUriBuf[MAX_LEN_URI] = {0}; + struct CmBlob keyUri = { sizeof(keyUriBuf), keyUriBuf }; + + uint8_t certAliasBuf[] = "testForSm2_2"; + struct CmBlob certAlias = { sizeof(certAliasBuf), certAliasBuf }; + + int32_t ret = CmInstallAppCert(&g_sm2AppCert3, &g_appSM2CertPwd, &certAlias, CM_CREDENTIAL_STORE, &keyUri); + EXPECT_EQ(ret, CMR_ERROR_INVALID_CERT_FORMAT) << "BaseSM2Test002 public test failed, retcode:" << ret; + + keyUri.size = sizeof(keyUriBuf); + ret = CmInstallAppCert(&g_sm2AppCert3, &g_appSM2CertPwd, &certAlias, CM_PRI_CREDENTIAL_STORE, &keyUri); + EXPECT_EQ(ret, CMR_ERROR_INVALID_CERT_FORMAT) << "BaseSM2Test002 privite test failed, retcode:" << ret; +} + /** * @tc.name: AppCertInstallAbnormalTest005 * @tc.desc: Test CertManager Install app cert alias not include \0 diff --git a/test/unittest/src/cm_finish_test.cpp b/test/unittest/src/cm_finish_test.cpp index ab48c04..cdb6dce 100755 --- a/test/unittest/src/cm_finish_test.cpp +++ b/test/unittest/src/cm_finish_test.cpp @@ -26,7 +26,7 @@ using namespace testing::ext; using namespace CertmanagerTest; namespace { static constexpr uint32_t DEFAULT_SIGNATURE_LEN = 1024; -static constexpr uint32_t MAX_SESSION_NUM_MORE_1 = 10; +static constexpr uint32_t MAX_SESSION_NUM_MORE_1 = 16; /* max session count is 15 */ class CmFinishTest : public testing::Test { public: @@ -59,20 +59,23 @@ void CmFinishTest::TearDown() static const uint8_t g_uriData[] = "oh:t=ak;o=TestFinishSignVerify;u=0;a=0"; static const CmBlob g_keyUri = { sizeof(g_uriData), (uint8_t *)g_uriData }; +static const uint8_t g_uriDataSysCred[] = "oh:t=sk;o=TestFinishSignVerify;u=100;a=0"; +static const CmBlob g_keyUriSysCred = { sizeof(g_uriDataSysCred), (uint8_t *)g_uriDataSysCred }; + static const uint8_t g_messageData[] = "This_is_test_message_for_test_sign_and_verify"; -static void TestInstallAppCert(uint32_t alg) +static void TestInstallAppCert(uint32_t alg, uint32_t store) { uint8_t aliasData[] = "TestFinishSignVerify"; struct CmBlob alias = { sizeof(aliasData), aliasData }; - int32_t ret = TestGenerateAppCert(&alias, alg, CM_CREDENTIAL_STORE); + int32_t ret = TestGenerateAppCert(&alias, alg, store); EXPECT_EQ(ret, CM_SUCCESS) << "TestGenerateAppCert failed, retcode:" << ret; } -static void TestUninstallAppCert(void) +static void TestUninstallAppCert(uint32_t store) { - int32_t ret = CmUninstallAppCert(&g_keyUri, CM_CREDENTIAL_STORE); + int32_t ret = CmUninstallAppCert(store == CM_SYS_CREDENTIAL_STORE ? &g_keyUriSysCred : &g_keyUri, store); EXPECT_EQ(ret, CM_SUCCESS) << "CmUninstallAppCert failed, retcode:" << ret; } @@ -125,11 +128,9 @@ static void TestVerify(const struct CmBlob *keyUri, const struct CmSignatureSpec EXPECT_EQ(ret, CM_SUCCESS) << "TestVerify CmAbort test failed"; } -static void TestSignVerify(uint32_t alg, bool isValidSignature, struct CmSignatureSpec *spec) -{ - /* install credential */ - TestInstallAppCert(alg); +static void SignVerify(const struct CmBlob *keyUri, bool isValidSignature, struct CmSignatureSpec *spec) +{ struct CmBlob message = { 0, nullptr }; uint8_t srcData[] = { 0xc2, 0xa7, 0xc5, 0x33, 0x79, 0xb0, 0xcd, 0x86, 0x74, 0x09, 0x98, 0x16, 0xd5, 0x85, 0x1b, 0xd6, @@ -148,14 +149,26 @@ static void TestSignVerify(uint32_t alg, bool isValidSignature, struct CmSignatu /* sign */ spec->purpose = CM_KEY_PURPOSE_SIGN; - TestSign(&g_keyUri, spec, &message, &signature); + TestSign(keyUri, spec, &message, &signature); /* verify */ spec->purpose = CM_KEY_PURPOSE_VERIFY; - TestVerify(&g_keyUri, spec, &message, &signature, isValidSignature); + TestVerify(keyUri, spec, &message, &signature, isValidSignature); +} + +static void TestSignVerify(uint32_t alg, bool isValidSignature, struct CmSignatureSpec *spec) +{ + TestInstallAppCert(alg, CM_CREDENTIAL_STORE); + SignVerify(&g_keyUri, isValidSignature, spec); + TestUninstallAppCert(CM_CREDENTIAL_STORE); +} - /* uninstall rsa credential */ - TestUninstallAppCert(); +static void TestSignVerifyWithCredType(uint32_t alg, uint32_t store, bool isValidSignature, + struct CmSignatureSpec *spec) +{ + TestInstallAppCert(alg, store); + SignVerify(store == CM_SYS_CREDENTIAL_STORE ? &g_keyUriSysCred : &g_keyUri, isValidSignature, spec); + TestUninstallAppCert(store); } static void ProducerSessionMaxTest(void) @@ -176,6 +189,9 @@ static void ProducerSessionMaxTest(void) struct CmBlob handleBlob = { sizeof(uint64_t), (uint8_t *)&handle[i] }; int32_t expectRet = CM_SUCCESS; + if (i == 0) { + expectRet = CMR_ERROR_NOT_EXIST; + } ret = CmUpdate(&handleBlob, &updateInput); EXPECT_EQ(ret, expectRet) << "update failed, i:" << i; @@ -351,9 +367,9 @@ HWTEST_F(CmFinishTest, CmFinishTest010, TestSize.Level0) */ HWTEST_F(CmFinishTest, CmFinishTest011, TestSize.Level0) { - TestInstallAppCert(CERT_KEY_ALG_ECC); + TestInstallAppCert(CERT_KEY_ALG_ECC, CM_CREDENTIAL_STORE); ProducerSessionMaxTest(); - TestUninstallAppCert(); + TestUninstallAppCert(CM_CREDENTIAL_STORE); } /** @@ -669,5 +685,84 @@ HWTEST_F(CmFinishTest, CmFinishTest036, TestSize.Level0) struct CmSignatureSpec spec = { CM_KEY_PURPOSE_SIGN, 0, 0 }; TestSignVerify(CERT_KEY_ALG_ED25519, true, &spec); } + +/** +* @tc.name: CmFinishTest037 +* @tc.desc: Test CmFinish normal case: caller is producer, sm2 sign verify, sm3, public cred +* @tc.type: FUNC +*/ +HWTEST_F(CmFinishTest, CmFinishTest037, TestSize.Level0) +{ + struct CmSignatureSpec spec = { CM_KEY_PURPOSE_SIGN, 0, CM_DIGEST_SM3 }; + TestSignVerify(CERT_KEY_ALG_SM2_1, true, &spec); +} + +/** +* @tc.name: CmFinishTest038 +* @tc.desc: Test CmFinish normal case: caller is producer, sm2 sign verify, sm3 with data2, public cred +* @tc.type: FUNC +*/ +HWTEST_F(CmFinishTest, CmFinishTest038, TestSize.Level0) +{ + struct CmSignatureSpec spec = { CM_KEY_PURPOSE_SIGN, 0, CM_DIGEST_SM3 }; + TestSignVerify(CERT_KEY_ALG_SM2_2, true, &spec); +} + +/** +* @tc.name: CmFinishTest039 +* @tc.desc: Test CmFinish normal case: caller is producer, sm2 sign verify, sm3 with data2, private cred +* @tc.type: FUNC +*/ +HWTEST_F(CmFinishTest, CmFinishTest039, TestSize.Level0) +{ + struct CmSignatureSpec spec = { CM_KEY_PURPOSE_SIGN, 0, CM_DIGEST_SM3 }; + TestSignVerifyWithCredType(CERT_KEY_ALG_SM2_2, CM_PRI_CREDENTIAL_STORE, true, &spec); +} + +/** +* @tc.name: CmFinishTest040 +* @tc.desc: Test CmFinish normal case: caller is producer, sm2 sign verify, sm3 with data2, system cred +* @tc.type: FUNC +*/ +HWTEST_F(CmFinishTest, CmFinishTest040, TestSize.Level0) +{ + struct CmSignatureSpec spec = { CM_KEY_PURPOSE_SIGN, 0, CM_DIGEST_SM3 }; + TestSignVerifyWithCredType(CERT_KEY_ALG_SM2_2, CM_SYS_CREDENTIAL_STORE, true, &spec); +} + +/** +* @tc.name: CmFinishTest041 +* @tc.desc: Test CmFinish abnormal case: caller is producer, sm2 sign verify(sign invalid) +* @tc.type: FUNC +*/ +HWTEST_F(CmFinishTest, CmFinishTest041, TestSize.Level0) +{ + struct CmSignatureSpec spec = { CM_KEY_PURPOSE_SIGN, 0, CM_DIGEST_SM3 }; + TestSignVerify(CERT_KEY_ALG_SM2_1, false, &spec); +} + +/** +* @tc.name: CmFinishTest042 +* @tc.desc: Test CmFinish normal case: caller is producer, sm2 sign verify, digest_none with data2, public cred +* @tc.type: FUNC +*/ +HWTEST_F(CmFinishTest, CmFinishTest042, TestSize.Level0) +{ + struct CmSignatureSpec spec = { CM_KEY_PURPOSE_SIGN, 0, CM_DIGEST_NONE }; + TestSignVerify(CERT_KEY_ALG_SM2_2, true, &spec); +} + +/** +* @tc.name: CmFinishTestPerformance043 +* @tc.desc: 1000 times normal case: caller is producer, sm2 sign verify +* @tc.type: FUNC +*/ +HWTEST_F(CmFinishTest, CmFinishTestPerformance043, TestSize.Level1) +{ + struct CmSignatureSpec spec = { CM_KEY_PURPOSE_SIGN, 0, CM_DIGEST_SM3 }; + for (uint32_t i = 0; i < PERFORMACE_COUNT; ++i) { + TestSignVerify(CERT_KEY_ALG_SM2_1, true, &spec); + } +} } // end of namespace diff --git a/test/unittest/src/cm_init_test.cpp b/test/unittest/src/cm_init_test.cpp index 3b8e4e4..513bf6d 100755 --- a/test/unittest/src/cm_init_test.cpp +++ b/test/unittest/src/cm_init_test.cpp @@ -49,20 +49,26 @@ void CmInitTest::TearDownTestCase(void) static const uint8_t g_rsaUriData[] = "oh:t=ak;o=TestInitRsa;u=0;a=0"; static const uint8_t g_eccUriData[] = "oh:t=ak;o=TestInitEcc;u=0;a=0"; +static const uint8_t g_sm2UriData[] = "oh:t=ak;o=TestInitSM2;u=0;a=0"; static const CmBlob g_rsaKeyUri = { sizeof(g_rsaUriData), (uint8_t *)g_rsaUriData }; static const CmBlob g_eccKeyUri = { sizeof(g_eccUriData), (uint8_t *)g_eccUriData }; +static const CmBlob g_sm2KeyUri = { sizeof(g_sm2UriData), (uint8_t *)g_sm2UriData }; void CmInitTest::SetUp() { uint8_t aliasRsaData[] = "TestInitRsa"; uint8_t aliasEccData[] = "TestInitEcc"; + uint8_t aliasSM2Data[] = "TestInitSM2"; struct CmBlob aliasRsa = { sizeof(aliasRsaData), aliasRsaData }; struct CmBlob aliasEcc = { sizeof(aliasEccData), aliasEccData }; + struct CmBlob aliasSM2 = { sizeof(aliasSM2Data), aliasSM2Data }; int32_t ret = TestGenerateAppCert(&aliasRsa, CERT_KEY_ALG_RSA, CM_CREDENTIAL_STORE); EXPECT_EQ(ret, CM_SUCCESS) << "TestGenerateAppCert rsa failed, retcode:" << ret; ret = TestGenerateAppCert(&aliasEcc, CERT_KEY_ALG_ECC, CM_CREDENTIAL_STORE); EXPECT_EQ(ret, CM_SUCCESS) << "TestGenerateAppCert ecc failed, retcode:" << ret; + ret = TestGenerateAppCert(&aliasSM2, CERT_KEY_ALG_SM2_1, CM_CREDENTIAL_STORE); + EXPECT_EQ(ret, CM_SUCCESS) << "TestGenerateAppCert sm2 failed, retcode:" << ret; } void CmInitTest::TearDown() @@ -71,6 +77,8 @@ void CmInitTest::TearDown() EXPECT_EQ(ret, CM_SUCCESS) << "CmUninstallAppCert rsa failed, retcode:" << ret; ret = CmUninstallAppCert(&g_eccKeyUri, CM_CREDENTIAL_STORE); EXPECT_EQ(ret, CM_SUCCESS) << "CmUninstallAppCert ecc failed, retcode:" << ret; + ret = CmUninstallAppCert(&g_sm2KeyUri, CM_CREDENTIAL_STORE); + EXPECT_EQ(ret, CM_SUCCESS) << "CmUninstallAppCert sm2 failed, retcode:" << ret; } /** @@ -399,4 +407,108 @@ HWTEST_F(CmInitTest, CmInitTestPerformance019, TestSize.Level1) EXPECT_EQ(ret, CM_SUCCESS); } } + +/** + * @tc.name: CmInitTest020 + * @tc.desc: normal case: caller is producer, init once sm2 with sm3 + * @tc.type: FUNC + */ +HWTEST_F(CmInitTest, CmInitTest020, TestSize.Level0) +{ + struct CmSignatureSpec spec = { CM_KEY_PURPOSE_SIGN, 0, CM_DIGEST_SM3 }; + uint64_t handleValue1 = 0; + struct CmBlob handle1 = { sizeof(handleValue1), (uint8_t *)&handleValue1 }; + + int32_t ret = CmInit(&g_sm2KeyUri, &spec, &handle1); + EXPECT_EQ(ret, CM_SUCCESS); + + spec.purpose = CM_KEY_PURPOSE_VERIFY; + uint64_t handleValue2 = 0; + struct CmBlob handle2 = { sizeof(handleValue2), (uint8_t *)&handleValue2 }; + ret = CmInit(&g_sm2KeyUri, &spec, &handle2); + EXPECT_EQ(ret, CM_SUCCESS); +} + +/** + * @tc.name: CmInitTest021 + * @tc.desc: Abnormal case: Test init sm2 with SHA256 + * @tc.type: FUNC + */ +HWTEST_F(CmInitTest, CmInitTest021, TestSize.Level0) +{ + struct CmSignatureSpec spec = { CM_KEY_PURPOSE_SIGN, 0, CM_DIGEST_SHA256 }; + uint64_t handleValue1 = 0; + struct CmBlob handle1 = { sizeof(handleValue1), (uint8_t *)&handleValue1 }; + + int32_t ret = CmInit(&g_sm2KeyUri, &spec, &handle1); + EXPECT_EQ(ret, CMR_ERROR_KEY_OPERATION_FAILED); + + spec.purpose = CM_KEY_PURPOSE_VERIFY; + uint64_t handleValue2 = 0; + struct CmBlob handle2 = { sizeof(handleValue2), (uint8_t *)&handleValue2 }; + ret = CmInit(&g_sm2KeyUri, &spec, &handle2); + EXPECT_EQ(ret, CMR_ERROR_KEY_OPERATION_FAILED); +} + +/** + * @tc.name: CmInitTest022 + * @tc.desc: Abnormal case: Test init ecc with sm3 + * @tc.type: FUNC + */ +HWTEST_F(CmInitTest, CmInitTest022, TestSize.Level0) +{ + struct CmSignatureSpec spec = { CM_KEY_PURPOSE_SIGN, 0, CM_DIGEST_SM3 }; + uint64_t handleValue1 = 0; + struct CmBlob handle1 = { sizeof(handleValue1), (uint8_t *)&handleValue1 }; + + int32_t ret = CmInit(&g_eccKeyUri, &spec, &handle1); + EXPECT_EQ(ret, CMR_ERROR_KEY_OPERATION_FAILED); + + spec.purpose = CM_KEY_PURPOSE_VERIFY; + uint64_t handleValue2 = 0; + struct CmBlob handle2 = { sizeof(handleValue2), (uint8_t *)&handleValue2 }; + ret = CmInit(&g_eccKeyUri, &spec, &handle2); + EXPECT_EQ(ret, CMR_ERROR_KEY_OPERATION_FAILED); +} + +/** + * @tc.name: CmInitTest023 + * @tc.desc: normal case: caller is producer, init once sm2 with non_digest + * @tc.type: FUNC + */ +HWTEST_F(CmInitTest, CmInitTest023, TestSize.Level0) +{ + struct CmSignatureSpec spec = { CM_KEY_PURPOSE_SIGN, 0, CM_DIGEST_NONE }; + uint64_t handleValue1 = 0; + struct CmBlob handle1 = { sizeof(handleValue1), (uint8_t *)&handleValue1 }; + + int32_t ret = CmInit(&g_sm2KeyUri, &spec, &handle1); + EXPECT_EQ(ret, CM_SUCCESS); + + spec.purpose = CM_KEY_PURPOSE_VERIFY; + uint64_t handleValue2 = 0; + struct CmBlob handle2 = { sizeof(handleValue2), (uint8_t *)&handleValue2 }; + ret = CmInit(&g_sm2KeyUri, &spec, &handle2); + EXPECT_EQ(ret, CM_SUCCESS); +} + +/** + * @tc.name: CmInitTestPerformance024 + * @tc.desc: 1000 times: caller is producer, init sm2 + * @tc.type: FUNC + */ +HWTEST_F(CmInitTest, CmInitTestPerformance024, TestSize.Level1) +{ + struct CmSignatureSpec spec = { CM_KEY_PURPOSE_SIGN, 0, CM_DIGEST_SM3 }; + uint64_t handleValue = 0; + struct CmBlob handle = { sizeof(handleValue), (uint8_t *)&handleValue }; + + int32_t ret; + for (uint32_t i = 0; i < PERFORMACE_COUNT; ++i) { + ret = CmInit(&g_sm2KeyUri, &spec, &handle); + EXPECT_EQ(ret, CM_SUCCESS); + ret = CmAbort(&handle); + EXPECT_EQ(ret, CM_SUCCESS); + } +} } // end of namespace diff --git a/test/unittest/src/cm_sys_app_cert_test.cpp b/test/unittest/src/cm_sys_app_cert_test.cpp index 714f4d2..41b7b04 100644 --- a/test/unittest/src/cm_sys_app_cert_test.cpp +++ b/test/unittest/src/cm_sys_app_cert_test.cpp @@ -953,4 +953,48 @@ HWTEST_F(CmSysAppCertTest, SysAppCertTest043, TestSize.Level0) ret = CmUninstallAppCert(&sysKeyUri, CM_SYS_CREDENTIAL_STORE); EXPECT_EQ(ret, CM_SUCCESS) << "SysAppCertTest043 uninstall failed, retcode:" << ret; } + +/** + * @tc.name: SysAppCertTest044 + * @tc.desc: install system sm2, oid is valid + * @tc.type: FUNC + */ +HWTEST_F(CmSysAppCertTest, SysAppCertTest044, TestSize.Level0) +{ + char retUriBuf[MAX_LEN_URI] = {0}; + struct CmBlob sysKeyUri = { sizeof(retUriBuf), reinterpret_cast(retUriBuf) }; + + uint8_t certAliasBuf[] = "SyskeySM2043"; + struct CmBlob certAlias = { sizeof(certAliasBuf), certAliasBuf }; + + struct CmAppCertParam appCertParam = { (struct CmBlob *)&g_sm2AppCert, (struct CmBlob *)&g_appSM2CertPwd, + &certAlias, CM_SYS_CREDENTIAL_STORE, TEST_USERID }; + int32_t ret = CmInstallSystemAppCert(&appCertParam, &sysKeyUri); + EXPECT_EQ(ret, CM_SUCCESS) << "SysAppCertTest001 credentail test failed, retcode:" << ret; + + char uriBuf[] = "oh:t=sk;o=SyskeySM2043;u=100;a=0"; + EXPECT_EQ(strcmp(uriBuf, (char *)sysKeyUri.data), 0) << "strcmp failed"; + + ret = CmUninstallAppCert(&sysKeyUri, CM_SYS_CREDENTIAL_STORE); + EXPECT_EQ(ret, CM_SUCCESS) << "SysAppCertTest001 uninstall failed, retcode:" << ret; +} + +/** + * @tc.name: SysAppCertTest045 + * @tc.desc: install system sm2, oid is invalid + * @tc.type: FUNC + */ +HWTEST_F(CmSysAppCertTest, SysAppCertTest045, TestSize.Level0) +{ + char retUriBuf[MAX_LEN_URI] = {0}; + struct CmBlob sysKeyUri = { sizeof(retUriBuf), reinterpret_cast(retUriBuf) }; + + uint8_t certAliasBuf[] = "SyskeySM2044"; + struct CmBlob certAlias = { sizeof(certAliasBuf), certAliasBuf }; + + struct CmAppCertParam appCertParam = { (struct CmBlob *)&g_sm2AppCert3, (struct CmBlob *)&g_appSM2CertPwd, + &certAlias, CM_SYS_CREDENTIAL_STORE, TEST_USERID }; + int32_t ret = CmInstallSystemAppCert(&appCertParam, &sysKeyUri); + EXPECT_EQ(ret, CMR_ERROR_INVALID_CERT_FORMAT) << "SysAppCertTest001 credentail test failed, retcode:" << ret; +} } diff --git a/test/unittest/src/cm_test_common.cpp b/test/unittest/src/cm_test_common.cpp index d9a3abb..d302252 100644 --- a/test/unittest/src/cm_test_common.cpp +++ b/test/unittest/src/cm_test_common.cpp @@ -28,6 +28,7 @@ #include "nativetoken_kit.h" #include "token_setproc.h" #include +#include namespace CertmanagerTest { constexpr uint32_t SLEEP_TIME = 3; @@ -37,6 +38,36 @@ constexpr int32_t PERMISSION_INDEX1 = 1; constexpr int32_t PERMISSION_INDEX2 = 2; constexpr int32_t PERMISSION_INDEX3 = 3; +static const std::unordered_map ALG_CODE_TO_CERT_DATA = { + { CERT_KEY_ALG_RSA, g_rsa2048P12CertInfo }, + { CERT_KEY_ALG_ECC, g_eccP256P12CertInfo }, + { CERT_KEY_ALG_RSA_512, g_rsa512P12CertInfo }, + { CERT_KEY_ALG_RSA_1024, g_rsa1024P12CertInfo }, + { CERT_KEY_ALG_RSA_3072, g_rsa3072P12CertInfo }, + { CERT_KEY_ALG_RSA_4096, g_rsa4096P12CertInfo }, + { CERT_KEY_ALG_ECC_P224, g_eccP224P12CertInfo }, + { CERT_KEY_ALG_ECC_P384, g_eccP384P12CertInfo }, + { CERT_KEY_ALG_ECC_P521, g_eccP521P12CertInfo }, + { CERT_KEY_ALG_ED25519, g_ed25519P12CertInfo }, + { CERT_KEY_ALG_SM2_1, g_sm2PfxCertInfo }, + { CERT_KEY_ALG_SM2_2, g_sm2PfxCertInfo2 }, +}; + +static const std::unordered_map ALG_CODE_TO_CERT_SIZE = { + { CERT_KEY_ALG_RSA, sizeof(g_rsa2048P12CertInfo) }, + { CERT_KEY_ALG_ECC, sizeof(g_eccP256P12CertInfo) }, + { CERT_KEY_ALG_RSA_512, sizeof(g_rsa512P12CertInfo) }, + { CERT_KEY_ALG_RSA_1024, sizeof(g_rsa1024P12CertInfo) }, + { CERT_KEY_ALG_RSA_3072, sizeof(g_rsa3072P12CertInfo) }, + { CERT_KEY_ALG_RSA_4096, sizeof(g_rsa4096P12CertInfo) }, + { CERT_KEY_ALG_ECC_P224, sizeof(g_eccP224P12CertInfo) }, + { CERT_KEY_ALG_ECC_P384, sizeof(g_eccP384P12CertInfo) }, + { CERT_KEY_ALG_ECC_P521, sizeof(g_eccP521P12CertInfo) }, + { CERT_KEY_ALG_ED25519, sizeof(g_ed25519P12CertInfo) }, + { CERT_KEY_ALG_SM2_1, sizeof(g_sm2PfxCertInfo) }, + { CERT_KEY_ALG_SM2_2, sizeof(g_sm2PfxCertInfo2) }, +}; + void SetATPermission(void) { static bool firstRun = true; @@ -188,7 +219,7 @@ std::string DumpCertAbstractInfo(const struct CertAbstract *certAbstract) str += DELIMITER; str += certAbstract->subjectName; str += DELIMITER; - str += (certAbstract->status)? "true":"false"; + str += (certAbstract->status) ? "true" : "false"; str += ENDOF; return str; } @@ -246,7 +277,7 @@ std::string DumpCertInfo(const struct CertInfo *certInfo) str += DELIMITER; str += certInfo->subjectName; str += DELIMITER; - str += (certInfo->status)? "true":"false"; + str += (certInfo->status) ? "true" : "false"; str += ENDOF; return str; } @@ -266,50 +297,17 @@ bool CompareCredential(const struct Credential *firstCredential, const struct Cr static int32_t ConstructAppCertData(uint32_t alg, struct CmBlob *appCert) { - switch (alg) { - case CERT_KEY_ALG_RSA: - appCert->size = sizeof(g_rsa2048P12CertInfo); - appCert->data = const_cast(g_rsa2048P12CertInfo); - break; - case CERT_KEY_ALG_ECC: - appCert->size = sizeof(g_eccP256P12CertInfo); - appCert->data = const_cast(g_eccP256P12CertInfo); - break; - case CERT_KEY_ALG_RSA_512: - appCert->size = sizeof(g_rsa512P12CertInfo); - appCert->data = const_cast(g_rsa512P12CertInfo); - break; - case CERT_KEY_ALG_RSA_1024: - appCert->size = sizeof(g_rsa1024P12CertInfo); - appCert->data = const_cast(g_rsa1024P12CertInfo); - break; - case CERT_KEY_ALG_RSA_3072: - appCert->size = sizeof(g_rsa3072P12CertInfo); - appCert->data = const_cast(g_rsa3072P12CertInfo); - break; - case CERT_KEY_ALG_RSA_4096: - appCert->size = sizeof(g_rsa4096P12CertInfo); - appCert->data = const_cast(g_rsa4096P12CertInfo); - break; - case CERT_KEY_ALG_ECC_P224: - appCert->size = sizeof(g_eccP224P12CertInfo); - appCert->data = const_cast(g_eccP224P12CertInfo); - break; - case CERT_KEY_ALG_ECC_P384: - appCert->size = sizeof(g_eccP384P12CertInfo); - appCert->data = const_cast(g_eccP384P12CertInfo); - break; - case CERT_KEY_ALG_ECC_P521: - appCert->size = sizeof(g_eccP521P12CertInfo); - appCert->data = const_cast(g_eccP521P12CertInfo); - break; - case CERT_KEY_ALG_ED25519: - appCert->size = sizeof(g_ed25519P12CertInfo); - appCert->data = const_cast(g_ed25519P12CertInfo); - break; - default: - return CMR_ERROR_INVALID_ARGUMENT; + auto iterSize = ALG_CODE_TO_CERT_SIZE.find(alg); + if (iterSize == ALG_CODE_TO_CERT_SIZE.end()) { + return CMR_ERROR_INVALID_ARGUMENT; + } + appCert->size = iterSize->second; + + auto iterData = ALG_CODE_TO_CERT_DATA.find(alg); + if (iterData == ALG_CODE_TO_CERT_DATA.end()) { + return CMR_ERROR_INVALID_ARGUMENT; } + appCert->data = const_cast(iterData->second); return CM_SUCCESS; } @@ -322,6 +320,10 @@ int32_t TestGenerateAppCert(const struct CmBlob *alias, uint32_t alg, uint32_t s } struct CmBlob appCertPwd = { sizeof(g_certPwd), const_cast(g_certPwd) }; + if (alg == CERT_KEY_ALG_SM2_1 || alg == CERT_KEY_ALG_SM2_2) { + appCertPwd.size = sizeof(g_sm2certPwd); + appCertPwd.data = const_cast(g_sm2certPwd); + } uint8_t uriData[MAX_LEN_URI] = {0}; struct CmBlob keyUri = { sizeof(uriData), uriData }; -- Gitee