已合并
refactor pki module #61
JerryDevis创建于 2024年11月22日
refactor pki module #61
已合并
共 81 个文件变更+2464-670
| @@ -20,6 +20,7 @@ | |||
| 20 | 20 | ||
| 21 | 21 | ||
| 22 | 22 | ||
| 23 | + | ||
| 23 | 24 | ||
| 24 | 25 | ||
| 25 | extern "C" { | 26 | extern "C" { |
| @@ -282,6 +283,31 @@ int32_t BSL_ASN1_EncodeListItem(uint8_t tag, uint32_t listSize, BSL_ASN1_Templat | |||
| 282 | */ | 283 | */ |
| 283 | int32_t BSL_ASN1_EncodeLimb(uint8_t tag, uint64_t limb, BSL_ASN1_Buffer *asn); | 284 | int32_t BSL_ASN1_EncodeLimb(uint8_t tag, uint64_t limb, BSL_ASN1_Buffer *asn); |
| 284 | 285 | ||
| 286 | +/** | ||
| 287 | + * @ingroup bsl_asn1 | ||
| 288 | + * @brief Print asn1 data according to the format. | ||
| 289 | + * | ||
| 290 | + * @param layer [IN] Print layer. | ||
| 291 | + * @param uio [IN/OUT] Print uio context. | ||
| 292 | + * @param fmt [IN] Print format. | ||
| 293 | + * @retval BSL_SUCCESS, success. | ||
| 294 | + * Other error codes see the bsl_errno.h. | ||
| 295 | + */ | ||
| 296 | +int32_t BSL_ASN1_Printf(uint32_t layer, BSL_UIO *uio, const char *fmt, ...); | ||
| 297 | + | ||
| 298 | +/** | ||
| 299 | + * @ingroup bsl_asn1 | ||
| 300 | + * @brief Print asn1 data. | ||
| 301 | + * | ||
| 302 | + * @param layer [IN] Print layer. | ||
| 303 | + * @param uio [IN/OUT] Print uio context. | ||
| 304 | + * @param buff [IN] Print buffer. | ||
| 305 | + * @param buffLen [IN] Print buffer length. | ||
| 306 | + * @retval BSL_SUCCESS, success. | ||
| 307 | + * Other error codes see the bsl_errno.h. | ||
| 308 | + */ | ||
| 309 | +int32_t BSL_ASN1_PrintfBuff(uint32_t layer, BSL_UIO *uio, const void *buff, uint32_t buffLen); | ||
| 310 | + | ||
| 285 | 311 | ||
| 286 | } | 312 | } |
| 287 | 313 | ||
| @@ -0,0 +1,78 @@ | |||
| 1 | +/* | ||
| 2 | + * This file is part of the openHiTLS project. | ||
| 3 | + * | ||
| 4 | + * openHiTLS is licensed under the Mulan PSL v2. | ||
| 5 | + * You can use this software according to the terms and conditions of the Mulan PSL v2. | ||
| 6 | + * You may obtain a copy of Mulan PSL v2 at: | ||
| 7 | + * | ||
| 8 | + * http://license.coscl.org.cn/MulanPSL2 | ||
| 9 | + * | ||
| 10 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, | ||
| 11 | + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, | ||
| 12 | + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. | ||
| 13 | + * See the Mulan PSL v2 for more details. | ||
| 14 | + */ | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + | ||
| 20 | + | ||
| 21 | + | ||
| 22 | + | ||
| 23 | + | ||
| 24 | + | ||
| 25 | + | ||
| 26 | +int32_t BSL_ASN1_PrintfBuff(uint32_t layer, BSL_UIO *uio, const void *buff, uint32_t buffLen) | ||
| 27 | +{ | ||
| 28 | + int32_t ret; | ||
| 29 | + uint32_t writeLen = 0; | ||
| 30 | + char *indent[X509_PRINT_MAX_INDENT + 1] = {}; | ||
| 31 | + (void)memset_s(indent, X509_PRINT_MAX_INDENT, ' ', X509_PRINT_MAX_INDENT); | ||
| 32 | + if (layer > 0) { | ||
| 33 | + ret = BSL_UIO_Write(uio, indent, layer * X509_PRINT_EACH_LAYER_INDENT, &writeLen); | ||
| 34 | + if (ret != BSL_SUCCESS) { | ||
| 35 | + BSL_ERR_PUSH_ERROR(ret); | ||
| 36 | + return ret; | ||
| 37 | + } | ||
| 38 | + if (writeLen != (layer * X509_PRINT_EACH_LAYER_INDENT)) { | ||
| 39 | + BSL_ERR_PUSH_ERROR(BSL_ASN1_ERR_PRINTF_IO_ERR); | ||
| 40 | + return BSL_ASN1_ERR_PRINTF_IO_ERR; | ||
| 41 | + } | ||
| 42 | + } | ||
| 43 | + if (buffLen == 0) { | ||
| 44 | + return BSL_SUCCESS; | ||
| 45 | + } | ||
| 46 | + writeLen = 0; | ||
| 47 | + ret = BSL_UIO_Write(uio, buff, buffLen, &writeLen); | ||
| 48 | + if (ret != BSL_SUCCESS) { | ||
| 49 | + BSL_ERR_PUSH_ERROR(ret); | ||
| 50 | + return ret; | ||
| 51 | + } | ||
| 52 | + if (writeLen != buffLen) { | ||
| 53 | + BSL_ERR_PUSH_ERROR(BSL_ASN1_ERR_PRINTF_IO_ERR); | ||
| 54 | + return BSL_ASN1_ERR_PRINTF_IO_ERR; | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + return BSL_SUCCESS; | ||
| 58 | +} | ||
| 59 | + | ||
| 60 | +int32_t BSL_ASN1_Printf(uint32_t layer, BSL_UIO *uio, const char *fmt, ...) | ||
| 61 | +{ | ||
| 62 | + if (layer > X509_PRINT_MAX_LAYER || uio == NULL || fmt == NULL) { | ||
| 63 | + BSL_ERR_PUSH_ERROR(BSL_INVALID_ARG); | ||
| 64 | + return BSL_INVALID_ARG; | ||
| 65 | + } | ||
| 66 | + va_list args; | ||
| 67 | + va_start(args, fmt); | ||
| 68 | + char buff[BSL_ASN1_PRINT_LEN + 1] = {0}; | ||
| 69 | + if (vsprintf_s(buff, BSL_ASN1_PRINT_LEN + 1, fmt, args) == -1) { | ||
| 70 | + va_end(args); | ||
| 71 | + BSL_ERR_PUSH_ERROR(BSL_ASN1_ERR_PRINTF); | ||
| 72 | + return BSL_ASN1_ERR_PRINTF; | ||
| 73 | + } | ||
| 74 | + int32_t ret = BSL_ASN1_PrintfBuff(layer, uio, buff, strlen(buff)); | ||
| 75 | + va_end(args); | ||
| 76 | + | ||
| 77 | + return ret; | ||
| 78 | +} | ||
| @@ -0,0 +1,43 @@ | |||
| 1 | +/* | ||
| 2 | + * This file is part of the openHiTLS project. | ||
| 3 | + * | ||
| 4 | + * openHiTLS is licensed under the Mulan PSL v2. | ||
| 5 | + * You can use this software according to the terms and conditions of the Mulan PSL v2. | ||
| 6 | + * You may obtain a copy of Mulan PSL v2 at: | ||
| 7 | + * | ||
| 8 | + * http://license.coscl.org.cn/MulanPSL2 | ||
| 9 | + * | ||
| 10 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, | ||
| 11 | + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, | ||
| 12 | + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. | ||
| 13 | + * See the Mulan PSL v2 for more details. | ||
| 14 | + */ | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + | ||
| 20 | + | ||
| 21 | + | ||
| 22 | + | ||
| 23 | + | ||
| 24 | + | ||
| 25 | +extern "C" { | ||
| 26 | + | ||
| 27 | + | ||
| 28 | +typedef struct { | ||
| 29 | + size_t length; | ||
| 30 | + char *data; | ||
| 31 | + size_t max; | ||
| 32 | +} BSL_BufMem; | ||
| 33 | + | ||
| 34 | +BSL_BufMem *BSL_BufMemNew(void); | ||
| 35 | +void BSL_BufMemFree(BSL_BufMem *a); | ||
| 36 | +size_t BSL_BufMemGrowClean(BSL_BufMem *str, size_t len); | ||
| 37 | + | ||
| 38 | + | ||
| 39 | +} | ||
| 40 | + | ||
| 41 | + | ||
| 42 | + | ||
| 43 | + | ||
| @@ -0,0 +1,91 @@ | |||
| 1 | +/* | ||
| 2 | + * This file is part of the openHiTLS project. | ||
| 3 | + * | ||
| 4 | + * openHiTLS is licensed under the Mulan PSL v2. | ||
| 5 | + * You can use this software according to the terms and conditions of the Mulan PSL v2. | ||
| 6 | + * You may obtain a copy of Mulan PSL v2 at: | ||
| 7 | + * | ||
| 8 | + * http://license.coscl.org.cn/MulanPSL2 | ||
| 9 | + * | ||
| 10 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, | ||
| 11 | + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, | ||
| 12 | + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. | ||
| 13 | + * See the Mulan PSL v2 for more details. | ||
| 14 | + */ | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + | ||
| 20 | + | ||
| 21 | +BSL_BufMem *BSL_BufMemNew(void) | ||
| 22 | +{ | ||
| 23 | + BSL_BufMem *ret = NULL; | ||
| 24 | + | ||
| 25 | + ret = (BSL_BufMem *)BSL_SAL_Malloc(sizeof(BSL_BufMem)); | ||
| 26 | + if (ret == NULL) { | ||
| 27 | + return NULL; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + ret->length = 0; | ||
| 31 | + ret->max = 0; | ||
| 32 | + ret->data = NULL; | ||
| 33 | + | ||
| 34 | + return ret; | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +void BSL_BufMemFree(BSL_BufMem *a) | ||
| 38 | +{ | ||
| 39 | + if (a == NULL) { | ||
| 40 | + return; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + if (a->data != NULL) { | ||
| 44 | + BSL_SAL_FREE(a->data); | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + BSL_SAL_FREE(a); | ||
| 48 | +} | ||
| 49 | + | ||
| 50 | +size_t BSL_BufMemGrowClean(BSL_BufMem *str, size_t len) | ||
| 51 | +{ | ||
| 52 | + char *ret = NULL; | ||
| 53 | + if (str->length >= len) { | ||
| 54 | + if (memset_s(&(str->data[len]), str->max - len, 0, str->length - len) != EOK) { | ||
| 55 | + return 0; | ||
| 56 | + } | ||
| 57 | + str->length = len; | ||
| 58 | + return len; | ||
| 59 | + } | ||
| 60 | + if (str->max >= len) { | ||
| 61 | + if (memset_s(&(str->data[str->length]), str->max - str->length, 0, len - str->length) != EOK) { | ||
| 62 | + return 0; | ||
| 63 | + } | ||
| 64 | + str->length = len; | ||
| 65 | + return len; | ||
| 66 | + } | ||
| 67 | + const size_t n = ((len + 3) / 3) * 4; // actual growth size | ||
| 68 | + if (n < len || n > UINT32_MAX) { // does not meet growth requirements or overflows | ||
| 69 | + return 0; | ||
| 70 | + } | ||
| 71 | + ret = BSL_SAL_Malloc((uint32_t)n); | ||
| 72 | + if (ret == NULL) { | ||
| 73 | + return 0; | ||
| 74 | + } | ||
| 75 | + if (str->data != NULL && memcpy_s(ret, n, str->data, str->max) != EOK) { | ||
| 76 | + BSL_SAL_FREE(ret); | ||
| 77 | + return 0; | ||
| 78 | + } | ||
| 79 | + if (memset_s(&ret[str->length], n - str->length, 0, len - str->length) != EOK) { | ||
| 80 | + BSL_SAL_FREE(ret); | ||
| 81 | + return 0; | ||
| 82 | + } | ||
| 83 | + BSL_SAL_CleanseData(str->data, (uint32_t)str->max); | ||
| 84 | + BSL_SAL_FREE(str->data); | ||
| 85 | + str->data = ret; | ||
| 86 | + str->max = n; | ||
| 87 | + str->length = len; | ||
| 88 | + return len; | ||
| 89 | +} | ||
| 90 | + | ||
| 91 | + | ||
| @@ -54,6 +54,11 @@ struct UIO_ControlBlock { | |||
| 54 | BSL_SAL_RefCount references; // reference count | 54 | BSL_SAL_RefCount references; // reference count |
| 55 | }; | 55 | }; |
| 56 | 56 | ||
| 57 | +typedef struct { | ||
| 58 | + uint8_t *data; | ||
| 59 | + uint64_t size; | ||
| 60 | +} BSL_UIO_CtrlGetInfoParam; | ||
| 61 | + | ||
| 57 | /** | 62 | /** |
| 58 | * @brief Check whether a given error code is a fatal error. | 63 | * @brief Check whether a given error code is a fatal error. |
| 59 | * | 64 | * |
| @@ -0,0 +1,399 @@ | |||
| 1 | +/* | ||
| 2 | + * This file is part of the openHiTLS project. | ||
| 3 | + * | ||
| 4 | + * openHiTLS is licensed under the Mulan PSL v2. | ||
| 5 | + * You can use this software according to the terms and conditions of the Mulan PSL v2. | ||
| 6 | + * You may obtain a copy of Mulan PSL v2 at: | ||
| 7 | + * | ||
| 8 | + * http://license.coscl.org.cn/MulanPSL2 | ||
| 9 | + * | ||
| 10 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, | ||
| 11 | + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, | ||
| 12 | + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. | ||
| 13 | + * See the Mulan PSL v2 for more details. | ||
| 14 | + */ | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + | ||
| 20 | + | ||
| 21 | + | ||
| 22 | + | ||
| 23 | + | ||
| 24 | + | ||
| 25 | + | ||
| 26 | +typedef struct { | ||
| 27 | + BSL_BufMem *buf; | ||
| 28 | + BSL_BufMem *tmpBuf; // only used in read-only mode | ||
| 29 | + size_t readIndex; | ||
| 30 | + int32_t eof; // Behavior when reading empty memory. If the value is not 0, retry will be set. | ||
| 31 | +} UIO_BufMem; | ||
| 32 | + | ||
| 33 | +static int32_t MemNewBuf(BSL_UIO *uio, int32_t len, void *buf) | ||
| 34 | +{ | ||
| 35 | + if (buf == NULL || len < 0) { | ||
| 36 | + BSL_ERR_PUSH_ERROR(BSL_NULL_INPUT); | ||
| 37 | + return BSL_NULL_INPUT; | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + UIO_BufMem *ubm = BSL_UIO_GetCtx(uio); | ||
| 41 | + if (ubm == NULL || ubm->buf == NULL) { | ||
| 42 | + BSL_ERR_PUSH_ERROR(BSL_UIO_FAIL); | ||
| 43 | + return BSL_UIO_FAIL; | ||
| 44 | + } | ||
| 45 | + BSL_BufMem *bm = ubm->buf; | ||
| 46 | + if (bm->data != NULL && (uio->flags & BSL_UIO_FLAGS_MEM_READ_ONLY) == 0) { | ||
| 47 | + /* If the uio mode is not read-only, need to release the memory first. | ||
| 48 | + * Otherwise, the internal memory applied for read/write mode will be overwritten, | ||
| 49 | + */ | ||
| 50 | + BSL_ERR_PUSH_ERROR(BSL_UIO_MEM_NOT_NULL); | ||
| 51 | + return BSL_UIO_MEM_NOT_NULL; | ||
| 52 | + } | ||
| 53 | + if (ubm->tmpBuf == NULL) { | ||
| 54 | + ubm->tmpBuf = BSL_BufMemNew(); | ||
| 55 | + if (ubm->tmpBuf == NULL) { | ||
| 56 | + BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | ||
| 57 | + return BSL_MALLOC_FAIL; | ||
| 58 | + } | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + ubm->readIndex = 0; | ||
| 62 | + ubm->eof = 0; | ||
| 63 | + bm->length = (size_t)len; | ||
| 64 | + bm->max = (size_t)len; | ||
| 65 | + bm->data = (void *)buf; | ||
| 66 | + uio->flags = BSL_UIO_FLAGS_MEM_READ_ONLY; | ||
| 67 | + return BSL_SUCCESS; | ||
| 68 | +} | ||
| 69 | + | ||
| 70 | +static int32_t UioBufMemSync(UIO_BufMem *ubm) | ||
| 71 | +{ | ||
| 72 | + if (ubm != NULL && ubm->readIndex != 0) { | ||
| 73 | + if (memmove_s(ubm->buf->data, ubm->buf->length, ubm->buf->data + ubm->readIndex, | ||
| 74 | + ubm->buf->length - ubm->readIndex) != EOK) { | ||
| 75 | + BSL_ERR_PUSH_ERROR(BSL_UIO_FAIL); | ||
| 76 | + return BSL_UIO_FAIL; | ||
| 77 | + } | ||
| 78 | + ubm->buf->length -= ubm->readIndex; | ||
| 79 | + ubm->readIndex = 0; | ||
| 80 | + } | ||
| 81 | + return BSL_SUCCESS; | ||
| 82 | +} | ||
| 83 | + | ||
| 84 | +static int32_t MemWrite(BSL_UIO *uio, const void *buf, uint32_t len, uint32_t *writeLen) | ||
| 85 | +{ | ||
| 86 | + if (BSL_UIO_GetCtx(uio) == NULL) { | ||
| 87 | + BSL_ERR_PUSH_ERROR(BSL_NULL_INPUT); | ||
| 88 | + return BSL_NULL_INPUT; | ||
| 89 | + } | ||
| 90 | + if ((uio->flags & BSL_UIO_FLAGS_MEM_READ_ONLY) != 0) { | ||
| 91 | + BSL_ERR_PUSH_ERROR(BSL_UIO_WRITE_NOT_ALLOWED); | ||
| 92 | + return BSL_UIO_WRITE_NOT_ALLOWED; | ||
| 93 | + } | ||
| 94 | + (void)BSL_UIO_ClearFlags(uio, BSL_UIO_FLAGS_RWS | BSL_UIO_FLAGS_SHOULD_RETRY); | ||
| 95 | + *writeLen = 0; | ||
| 96 | + if (len == 0) { | ||
| 97 | + return BSL_SUCCESS; | ||
| 98 | + } | ||
| 99 | + UIO_BufMem *ubm = BSL_UIO_GetCtx(uio); | ||
| 100 | + if (ubm == NULL || ubm->buf == NULL) { | ||
| 101 | + BSL_ERR_PUSH_ERROR(BSL_UIO_FAIL); | ||
| 102 | + return BSL_UIO_FAIL; | ||
| 103 | + } | ||
| 104 | + if (UioBufMemSync(ubm) != BSL_SUCCESS) { | ||
| 105 | + BSL_ERR_PUSH_ERROR(BSL_MEMMOVE_FAIL); | ||
| 106 | + return BSL_MEMMOVE_FAIL; | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + const size_t origLen = ubm->buf->length; | ||
| 110 | + if (BSL_BufMemGrowClean(ubm->buf, origLen + len) == 0) { | ||
| 111 | + BSL_ERR_PUSH_ERROR(BSL_UIO_MEM_GROW_FAIL); | ||
| 112 | + return BSL_UIO_MEM_GROW_FAIL; | ||
| 113 | + } | ||
| 114 | + | ||
| 115 | + // memory grow guarantee of success here | ||
| 116 | + (void)memcpy_s(ubm->buf->data + origLen, len, buf, len); | ||
| 117 | + | ||
| 118 | + *writeLen = len; | ||
| 119 | + return BSL_SUCCESS; | ||
| 120 | +} | ||
| 121 | + | ||
| 122 | +static int32_t MemRead(BSL_UIO *uio, void *buf, uint32_t len, uint32_t *readLen) | ||
| 123 | +{ | ||
| 124 | + if (BSL_UIO_GetCtx(uio) == NULL) { | ||
| 125 | + BSL_ERR_PUSH_ERROR(BSL_NULL_INPUT); | ||
| 126 | + return BSL_NULL_INPUT; | ||
| 127 | + } | ||
| 128 | + (void)BSL_UIO_ClearFlags(uio, BSL_UIO_FLAGS_RWS | BSL_UIO_FLAGS_SHOULD_RETRY); | ||
| 129 | + *readLen = 0; | ||
| 130 | + UIO_BufMem *ubm = BSL_UIO_GetCtx(uio); | ||
| 131 | + if (ubm == NULL || ubm->buf == NULL) { | ||
| 132 | + BSL_ERR_PUSH_ERROR(BSL_UIO_FAIL); | ||
| 133 | + return BSL_UIO_FAIL; | ||
| 134 | + } | ||
| 135 | + size_t real = (size_t)len; | ||
| 136 | + if (real > ubm->buf->length - ubm->readIndex) { | ||
| 137 | + real = ubm->buf->length - ubm->readIndex; | ||
| 138 | + } | ||
| 139 | + if (buf != NULL && real > 0) { | ||
| 140 | + (void)memcpy_s(buf, len, ubm->buf->data + ubm->readIndex, real); | ||
| 141 | + ubm->readIndex += real; | ||
| 142 | + *readLen = (uint32_t)real; | ||
| 143 | + } | ||
| 144 | + if (*readLen > 0) { | ||
| 145 | + return BSL_SUCCESS; | ||
| 146 | + } | ||
| 147 | + /* when real = 0, it is necessary to determine whether to retry based on eof */ | ||
| 148 | + if (ubm->eof != 0) { // retry if eof is not zero | ||
| 149 | + (void)BSL_UIO_SetFlags(uio, BSL_UIO_FLAGS_READ | BSL_UIO_FLAGS_SHOULD_RETRY); | ||
| 150 | + } | ||
| 151 | + return BSL_SUCCESS; | ||
| 152 | +} | ||
| 153 | + | ||
| 154 | +static int32_t MemPending(BSL_UIO *uio, int32_t larg, int64_t *ret) | ||
| 155 | +{ | ||
| 156 | + if (ret == NULL) { | ||
| 157 | + BSL_ERR_PUSH_ERROR(BSL_NULL_INPUT); | ||
| 158 | + return BSL_NULL_INPUT; | ||
| 159 | + } | ||
| 160 | + if (larg != sizeof(int64_t)) { | ||
| 161 | + BSL_ERR_PUSH_ERROR(BSL_INVALID_ARG); | ||
| 162 | + return BSL_INVALID_ARG; | ||
| 163 | + } | ||
| 164 | + | ||
| 165 | + UIO_BufMem *ubm = BSL_UIO_GetCtx(uio); | ||
| 166 | + if (ubm == NULL || ubm->buf == NULL) { | ||
| 167 | + BSL_ERR_PUSH_ERROR(BSL_UIO_FAIL); | ||
| 168 | + return BSL_UIO_FAIL; | ||
| 169 | + } | ||
| 170 | + | ||
| 171 | + *ret = (int64_t)(ubm->buf->length - ubm->readIndex); | ||
| 172 | + return BSL_SUCCESS; | ||
| 173 | +} | ||
| 174 | + | ||
| 175 | +static int32_t MemWpending(int32_t larg, int64_t *ret) | ||
| 176 | +{ | ||
| 177 | + if (ret == NULL) { | ||
| 178 | + BSL_ERR_PUSH_ERROR(BSL_NULL_INPUT); | ||
| 179 | + return BSL_NULL_INPUT; | ||
| 180 | + } | ||
| 181 | + if (larg != sizeof(int64_t)) { | ||
| 182 | + BSL_ERR_PUSH_ERROR(BSL_INVALID_ARG); | ||
| 183 | + return BSL_INVALID_ARG; | ||
| 184 | + } | ||
| 185 | + *ret = 0; // For the UIO of the mem type, return 0 | ||
| 186 | + return BSL_SUCCESS; | ||
| 187 | +} | ||
| 188 | + | ||
| 189 | +static int32_t MemGetInfo(BSL_UIO *uio, int32_t larg, BSL_UIO_CtrlGetInfoParam *param) | ||
| 190 | +{ | ||
| 191 | + if (param == NULL) { | ||
| 192 | + BSL_ERR_PUSH_ERROR(BSL_NULL_INPUT); | ||
| 193 | + return BSL_NULL_INPUT; | ||
| 194 | + } | ||
| 195 | + | ||
| 196 | + if (larg != sizeof(BSL_UIO_CtrlGetInfoParam)) { | ||
| 197 | + BSL_ERR_PUSH_ERROR(BSL_INVALID_ARG); | ||
| 198 | + return BSL_INVALID_ARG; | ||
| 199 | + } | ||
| 200 | + | ||
| 201 | + UIO_BufMem *ubm = BSL_UIO_GetCtx(uio); | ||
| 202 | + if (ubm == NULL || ubm->buf == NULL) { | ||
| 203 | + BSL_ERR_PUSH_ERROR(BSL_UIO_FAIL); | ||
| 204 | + return BSL_UIO_FAIL; | ||
| 205 | + } | ||
| 206 | + | ||
| 207 | + param->data = (uint8_t *)(&ubm->buf->data[ubm->readIndex]); | ||
| 208 | + param->size = ubm->buf->length - ubm->readIndex; | ||
| 209 | + | ||
| 210 | + return BSL_SUCCESS; | ||
| 211 | +} | ||
| 212 | + | ||
| 213 | +static int32_t MemGetPtr(BSL_UIO *uio, int32_t size, BSL_BufMem **ptr) | ||
| 214 | +{ | ||
| 215 | + if (ptr == NULL) { | ||
| 216 | + BSL_ERR_PUSH_ERROR(BSL_NULL_INPUT); | ||
| 217 | + return BSL_NULL_INPUT; | ||
| 218 | + } | ||
| 219 | + | ||
| 220 | + if (size != sizeof(BSL_BufMem *)) { | ||
| 221 | + BSL_ERR_PUSH_ERROR(BSL_INVALID_ARG); | ||
| 222 | + return BSL_INVALID_ARG; | ||
| 223 | + } | ||
| 224 | + | ||
| 225 | + UIO_BufMem *ubm = BSL_UIO_GetCtx(uio); | ||
| 226 | + if (ubm == NULL) { | ||
| 227 | + BSL_ERR_PUSH_ERROR(BSL_UIO_FAIL); | ||
| 228 | + return BSL_UIO_FAIL; | ||
| 229 | + } | ||
| 230 | + if ((uio->flags & BSL_UIO_FLAGS_MEM_READ_ONLY) == 0) { | ||
| 231 | + if (UioBufMemSync(ubm) != BSL_SUCCESS) { | ||
| 232 | + BSL_ERR_PUSH_ERROR(BSL_MEMMOVE_FAIL); | ||
| 233 | + return BSL_MEMMOVE_FAIL; | ||
| 234 | + } | ||
| 235 | + *ptr = ubm->buf; | ||
| 236 | + } else { | ||
| 237 | + ubm->tmpBuf->data = ubm->buf->data + ubm->readIndex; | ||
| 238 | + ubm->tmpBuf->length = ubm->buf->length - ubm->readIndex; | ||
| 239 | + ubm->tmpBuf->max = ubm->buf->max - ubm->readIndex; | ||
| 240 | + *ptr = ubm->tmpBuf; | ||
| 241 | + } | ||
| 242 | + return BSL_SUCCESS; | ||
| 243 | +} | ||
| 244 | + | ||
| 245 | +static int32_t MemSetEof(BSL_UIO *uio, int32_t larg, const int32_t *eof) | ||
| 246 | +{ | ||
| 247 | + if (eof == NULL) { | ||
| 248 | + BSL_ERR_PUSH_ERROR(BSL_NULL_INPUT); | ||
| 249 | + return BSL_NULL_INPUT; | ||
| 250 | + } | ||
| 251 | + if (larg != (int32_t)sizeof(int32_t)) { | ||
| 252 | + BSL_ERR_PUSH_ERROR(BSL_INVALID_ARG); | ||
| 253 | + return BSL_INVALID_ARG; | ||
| 254 | + } | ||
| 255 | + | ||
| 256 | + UIO_BufMem *ubm = BSL_UIO_GetCtx(uio); | ||
| 257 | + if (ubm == NULL) { | ||
| 258 | + BSL_ERR_PUSH_ERROR(BSL_UIO_FAIL); | ||
| 259 | + return BSL_UIO_FAIL; | ||
| 260 | + } | ||
| 261 | + | ||
| 262 | + ubm->eof = *eof; | ||
| 263 | + return BSL_SUCCESS; | ||
| 264 | +} | ||
| 265 | + | ||
| 266 | +static int32_t MemGetEof(BSL_UIO *uio, int32_t larg, int32_t *eof) | ||
| 267 | +{ | ||
| 268 | + if (eof == NULL) { | ||
| 269 | + BSL_ERR_PUSH_ERROR(BSL_NULL_INPUT); | ||
| 270 | + return BSL_NULL_INPUT; | ||
| 271 | + } | ||
| 272 | + if (larg != (int32_t)sizeof(int32_t)) { | ||
| 273 | + BSL_ERR_PUSH_ERROR(BSL_INVALID_ARG); | ||
| 274 | + return BSL_INVALID_ARG; | ||
| 275 | + } | ||
| 276 | + | ||
| 277 | + UIO_BufMem *ubm = BSL_UIO_GetCtx(uio); | ||
| 278 | + if (ubm == NULL) { | ||
| 279 | + BSL_ERR_PUSH_ERROR(BSL_UIO_FAIL); | ||
| 280 | + return BSL_UIO_FAIL; | ||
| 281 | + } | ||
| 282 | + | ||
| 283 | + *eof = ubm->eof; | ||
| 284 | + return BSL_SUCCESS; | ||
| 285 | +} | ||
| 286 | + | ||
| 287 | +static int32_t MemReset(BSL_UIO *uio) | ||
| 288 | +{ | ||
| 289 | + UIO_BufMem *ubm = BSL_UIO_GetCtx(uio); | ||
| 290 | + if (ubm == NULL || ubm->buf == NULL || ubm->buf->data == NULL) { | ||
| 291 | + BSL_ERR_PUSH_ERROR(BSL_NULL_INPUT); | ||
| 292 | + return BSL_NULL_INPUT; | ||
| 293 | + } | ||
| 294 | + if ((uio->flags & BSL_UIO_FLAGS_MEM_READ_ONLY) != 0) { | ||
| 295 | + // Read-only mode: The read index is reset and data can be read again | ||
| 296 | + ubm->readIndex = 0; | ||
| 297 | + } else { | ||
| 298 | + // Read/Write mode: Clear all data | ||
| 299 | + (void)memset_s(ubm->buf->data, ubm->buf->max, 0, ubm->buf->max); | ||
| 300 | + ubm->buf->length = 0; | ||
| 301 | + ubm->readIndex = 0; | ||
| 302 | + } | ||
| 303 | + return BSL_SUCCESS; | ||
| 304 | +} | ||
| 305 | + | ||
| 306 | +static int32_t MemFlush(int32_t larg, void *parg) | ||
| 307 | +{ | ||
| 308 | + if (parg != NULL || larg != 0) { | ||
| 309 | + BSL_ERR_PUSH_ERROR(BSL_INVALID_ARG); | ||
| 310 | + return BSL_INVALID_ARG; | ||
| 311 | + } | ||
| 312 | + return BSL_SUCCESS; | ||
| 313 | +} | ||
| 314 | + | ||
| 315 | +static int32_t MemCtrl(BSL_UIO *uio, int32_t cmd, int32_t larg, void *parg) | ||
| 316 | +{ | ||
| 317 | + switch (cmd) { | ||
| 318 | + case BSL_UIO_PENDING: | ||
| 319 | + return MemPending(uio, larg, parg); | ||
| 320 | + case BSL_UIO_MEM_GET_INFO: | ||
| 321 | + return MemGetInfo(uio, larg, parg); | ||
| 322 | + case BSL_UIO_WPENDING: | ||
| 323 | + return MemWpending(larg, parg); | ||
| 324 | + case BSL_UIO_FLUSH: | ||
| 325 | + return MemFlush(larg, parg); | ||
| 326 | + case BSL_UIO_MEM_NEW_BUF: | ||
| 327 | + return MemNewBuf(uio, larg, parg); | ||
| 328 | + case BSL_UIO_MEM_GET_PTR: | ||
| 329 | + return MemGetPtr(uio, larg, parg); | ||
| 330 | + case BSL_UIO_MEM_SET_EOF: | ||
| 331 | + return MemSetEof(uio, larg, parg); | ||
| 332 | + case BSL_UIO_MEM_GET_EOF: | ||
| 333 | + return MemGetEof(uio, larg, parg); | ||
| 334 | + case BSL_UIO_RESET: | ||
| 335 | + return MemReset(uio); | ||
| 336 | + default: | ||
| 337 | + BSL_ERR_PUSH_ERROR(BSL_UIO_FAIL); | ||
| 338 | + return BSL_UIO_FAIL; | ||
| 339 | + } | ||
| 340 | +} | ||
| 341 | + | ||
| 342 | +static int32_t MemDestroy(BSL_UIO *uio) | ||
| 343 | +{ | ||
| 344 | + UIO_BufMem *ubm = BSL_UIO_GetCtx(uio); | ||
| 345 | + if (BSL_UIO_GetIsUnderlyingClosedByUio(uio) && ubm != NULL) { | ||
| 346 | + if ((uio->flags & BSL_UIO_FLAGS_MEM_READ_ONLY) != 0) { | ||
| 347 | + ubm->buf->data = NULL; | ||
| 348 | + if (ubm->tmpBuf != NULL) { | ||
| 349 | + ubm->tmpBuf->data = NULL; | ||
| 350 | + BSL_BufMemFree(ubm->tmpBuf); | ||
| 351 | + } | ||
| 352 | + } | ||
| 353 | + BSL_BufMemFree(ubm->buf); | ||
| 354 | + BSL_SAL_FREE(ubm); | ||
| 355 | + } | ||
| 356 | + | ||
| 357 | + BSL_UIO_SetCtx(uio, NULL); | ||
| 358 | + uio->init = false; | ||
| 359 | + return BSL_SUCCESS; | ||
| 360 | +} | ||
| 361 | + | ||
| 362 | +static int32_t MemCreate(BSL_UIO *uio) | ||
| 363 | +{ | ||
| 364 | + UIO_BufMem *ubm = (UIO_BufMem *)BSL_SAL_Calloc(1, sizeof(UIO_BufMem)); | ||
| 365 | + if (ubm == NULL) { | ||
| 366 | + BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | ||
| 367 | + return BSL_MALLOC_FAIL; | ||
| 368 | + } | ||
| 369 | + | ||
| 370 | + ubm->buf = BSL_BufMemNew(); | ||
| 371 | + if (ubm->buf == NULL) { | ||
| 372 | + BSL_SAL_FREE(ubm); | ||
| 373 | + BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | ||
| 374 | + return BSL_MALLOC_FAIL; | ||
| 375 | + } | ||
| 376 | + | ||
| 377 | + ubm->eof = -1; | ||
| 378 | + BSL_UIO_SetCtx(uio, ubm); | ||
| 379 | + BSL_UIO_SetIsUnderlyingClosedByUio(uio, true); // memory buffer is created here and will be closed here by default. | ||
| 380 | + uio->init = true; | ||
| 381 | + return BSL_SUCCESS; | ||
| 382 | +} | ||
| 383 | + | ||
| 384 | +const BSL_UIO_Method *BSL_UIO_MemMethod(void) | ||
| 385 | +{ | ||
| 386 | + static const BSL_UIO_Method method = { | ||
| 387 | + BSL_UIO_MEM, | ||
| 388 | + MemWrite, | ||
| 389 | + MemRead, | ||
| 390 | + MemCtrl, | ||
| 391 | + NULL, | ||
| 392 | + NULL, | ||
| 393 | + MemCreate, | ||
| 394 | + MemDestroy | ||
| 395 | + }; | ||
| 396 | + return &method; | ||
| 397 | +} | ||
| 398 | + | ||
| 399 | + | ||
| @@ -7,6 +7,7 @@ | |||
| 7 | "hash": null, | 7 | "hash": null, |
| 8 | "init": {"deps": ["err"]}, | 8 | "init": {"deps": ["err"]}, |
| 9 | "base64": null, | 9 | "base64": null, |
| 10 | + "buffer": null, | ||
| 10 | "pem": null, | 11 | "pem": null, |
| 11 | "list": null, | 12 | "list": null, |
| 12 | "log": null, | 13 | "log": null, |
| @@ -26,7 +27,8 @@ | |||
| 26 | "uio_plt": null, | 27 | "uio_plt": null, |
| 27 | "uio_buffer": {"deps": ["uio_plt"]}, | 28 | "uio_buffer": {"deps": ["uio_plt"]}, |
| 28 | "uio_sctp": {"deps": ["uio_plt", "sal_net"]}, | 29 | "uio_sctp": {"deps": ["uio_plt", "sal_net"]}, |
| 29 | - "uio_tcp": {"deps": ["uio_plt", "sal_net"]} | 30 | + "uio_tcp": {"deps": ["uio_plt", "sal_net"]}, |
| 31 | + "uio_mem": {"deps": ["uio_plt", "sal_mem", "buffer"]} | ||
| 30 | }, | 32 | }, |
| 31 | "usrdata": null, | 33 | "usrdata": null, |
| 32 | "params": null, | 34 | "params": null, |
| @@ -942,6 +944,11 @@ | |||
| 942 | ".srcs": "bsl/base64/src/*.c", | 944 | ".srcs": "bsl/base64/src/*.c", |
| 943 | ".deps": ["platform::Secure_C", "bsl::sal"] | 945 | ".deps": ["platform::Secure_C", "bsl::sal"] |
| 944 | }, | 946 | }, |
| 947 | + "buffer": { | ||
| 948 | + ".features": ["buffer"], | ||
| 949 | + ".srcs": "bsl/buffer/src/*.c", | ||
| 950 | + ".deps": ["platform::Secure_C", "bsl::sal"] | ||
| 951 | + }, | ||
| 945 | "pem": { | 952 | "pem": { |
| 946 | ".features": ["pem"], | 953 | ".features": ["pem"], |
| 947 | ".srcs": "bsl/pem/src/*.c", | 954 | ".srcs": "bsl/pem/src/*.c", |
| @@ -954,10 +961,13 @@ | |||
| 954 | }, | 961 | }, |
| 955 | "uio": { | 962 | "uio": { |
| 956 | ".features": [ | 963 | ".features": [ |
| 957 | - "uio_plt", "uio", "uio_buffer", "uio_sctp", "uio_tcp" | 964 | + "uio_plt", "uio", "uio_buffer", "uio_sctp", "uio_tcp", "uio_mem" |
| 958 | ], | 965 | ], |
| 959 | ".srcs": "bsl/uio/src/*.c", | 966 | ".srcs": "bsl/uio/src/*.c", |
| 960 | - ".deps": ["platform::Secure_C", "bsl::sal"] | 967 | + ".deps": ["platform::Secure_C", "bsl::sal"], |
| 968 | + ".include": [ | ||
| 969 | + "bsl/buffer/include" | ||
| 970 | + ] | ||
| 961 | }, | 971 | }, |
| 962 | "usrdata": { | 972 | "usrdata": { |
| 963 | ".features": ["usrdata"], | 973 | ".features": ["usrdata"], |
| @@ -1110,7 +1120,7 @@ | |||
| 1110 | "x509_cert": { | 1120 | "x509_cert": { |
| 1111 | ".features" : ["all_pki"], | 1121 | ".features" : ["all_pki"], |
| 1112 | ".srcs" : "pki/x509_cert/src/*", | 1122 | ".srcs" : "pki/x509_cert/src/*", |
| 1113 | - ".deps" : ["platform::Secure_C", "pki::x509_common", "crypto::encode", "bsl::sal", "bsl::asn1", "bsl::obj", "bsl::list"], | 1123 | + ".deps" : ["platform::Secure_C", "pki::x509_common", "pki::x509_print", "crypto::encode", "bsl::sal", "bsl::asn1", "bsl::obj", "bsl::list"], |
| 1114 | ".include": ["pki/x509_csr/include"] | 1124 | ".include": ["pki/x509_csr/include"] |
| 1115 | }, | 1125 | }, |
| 1116 | "x509_crl" : { | 1126 | "x509_crl" : { |
| @@ -1123,6 +1133,12 @@ | |||
| 1123 | ".srcs" : "pki/x509_common/src/*", | 1133 | ".srcs" : "pki/x509_common/src/*", |
| 1124 | ".deps" : ["platform::Secure_C", "bsl::sal", "bsl::asn1", "bsl::obj", "bsl::list", "bsl::pem", "crypto::encode"] | 1134 | ".deps" : ["platform::Secure_C", "bsl::sal", "bsl::asn1", "bsl::obj", "bsl::list", "bsl::pem", "crypto::encode"] |
| 1125 | }, | 1135 | }, |
| 1136 | + "x509_print" : { | ||
| 1137 | + ".features" : ["all_pki"], | ||
| 1138 | + ".srcs" : "pki/x509_print/src/*", | ||
| 1139 | + ".deps" : ["platform::Secure_C", "bsl::sal", "bsl::asn1", "bsl::obj", "bsl::list", "bsl::uio"], | ||
| 1140 | + ".include": ["pki/x509_common/include"] | ||
| 1141 | + }, | ||
| 1126 | "x509_verify" : { | 1142 | "x509_verify" : { |
| 1127 | ".features" : ["all_pki"], | 1143 | ".features" : ["all_pki"], |
| 1128 | ".srcs" : "pki/x509_verify/src/*", | 1144 | ".srcs" : "pki/x509_verify/src/*", |
| @@ -49,6 +49,18 @@ | |||
| 49 | 49 | ||
| 50 | 50 | ||
| 51 | 51 | ||
| 52 | + | ||
| 53 | + | ||
| 54 | + | ||
| 55 | + | ||
| 56 | + | ||
| 57 | + | ||
| 58 | + | ||
| 59 | + | ||
| 60 | + | ||
| 61 | + | ||
| 62 | + | ||
| 63 | + | ||
| 52 | 64 | ||
| 53 | 65 | ||
| 54 | /* Derive the dependency features of uio_tcp and uio_sctp. */ | 66 | /* Derive the dependency features of uio_tcp and uio_sctp. */ |
| @@ -59,7 +71,8 @@ | |||
| 59 | 71 | ||
| 60 | 72 | ||
| 61 | /* Derive parent feature from child features. */ | 73 | /* Derive parent feature from child features. */ |
| 62 | -#if defined(HITLS_BSL_UIO_BUFFER) || defined(HITLS_BSL_UIO_SCTP) || defined(HITLS_BSL_UIO_TCP) | 74 | +#if defined(HITLS_BSL_UIO_BUFFER) || defined(HITLS_BSL_UIO_SCTP) || defined(HITLS_BSL_UIO_TCP) || \ |
| 75 | + defined(HITLS_BSL_UIO_MEM) | ||
| 63 | 76 | ||
| 64 | 77 | ||
| 65 | 78 | ||
| @@ -66,6 +66,16 @@ static int32_t CryptRsaEmsaPairSet(CRYPT_EAL_PkeyCtx *pubKey, CRYPT_EAL_PkeyCtx | |||
| 66 | return CRYPT_EAL_PkeyCtrl(prvKey, CRYPT_CTRL_SET_RSA_EMSA_PKCSV15, &pkcsv15, sizeof(CRYPT_RSA_PkcsV15Para)); | 66 | return CRYPT_EAL_PkeyCtrl(prvKey, CRYPT_CTRL_SET_RSA_EMSA_PKCSV15, &pkcsv15, sizeof(CRYPT_RSA_PkcsV15Para)); |
| 67 | } | 67 | } |
| 68 | 68 | ||
| 69 | +static int32_t CryptSm2PairSet(CRYPT_EAL_PkeyCtx *pubKey, CRYPT_EAL_PkeyCtx *prvKey) | ||
| 70 | +{ | ||
| 71 | + char *userId = "1234567812345678"; | ||
| 72 | + int32_t ret = CRYPT_EAL_PkeyCtrl(pubKey, CRYPT_CTRL_SET_SM2_USER_ID, (void *)userId, strlen(userId)); | ||
| 73 | + if (ret != CRYPT_SUCCESS) { | ||
| 74 | + return ret; | ||
| 75 | + } | ||
| 76 | + return CRYPT_EAL_PkeyCtrl(prvKey, CRYPT_CTRL_SET_SM2_USER_ID, (void *)userId, strlen(userId)); | ||
| 77 | +} | ||
| 78 | + | ||
| 69 | int32_t CRYPT_EAL_PkeyPairCheck(CRYPT_EAL_PkeyCtx *pubKey, CRYPT_EAL_PkeyCtx *prvKey) | 79 | int32_t CRYPT_EAL_PkeyPairCheck(CRYPT_EAL_PkeyCtx *pubKey, CRYPT_EAL_PkeyCtx *prvKey) |
| 70 | { | 80 | { |
| 71 | if ((pubKey == NULL) || (prvKey == NULL)) { | 81 | if ((pubKey == NULL) || (prvKey == NULL)) { |
| @@ -97,6 +107,7 @@ int32_t CRYPT_EAL_PkeyPairCheck(CRYPT_EAL_PkeyCtx *pubKey, CRYPT_EAL_PkeyCtx *pr | |||
| 97 | break; | 107 | break; |
| 98 | case CRYPT_PKEY_SM2: | 108 | case CRYPT_PKEY_SM2: |
| 99 | hashId = CRYPT_MD_SM3; | 109 | hashId = CRYPT_MD_SM3; |
| 110 | + ret = CryptSm2PairSet(tempPubKey, tempPrivKey); | ||
| 100 | break; | 111 | break; |
| 101 | default: | 112 | default: |
| 102 | ret = CRYPT_NOT_SUPPORT; | 113 | ret = CRYPT_NOT_SUPPORT; |
| @@ -45,6 +45,7 @@ enum BSL_ERROR { | |||
| 45 | BSL_MEMCPY_FAIL, /**< Error occurs when calling memcpy_s. */ | 45 | BSL_MEMCPY_FAIL, /**< Error occurs when calling memcpy_s. */ |
| 46 | BSL_INVALID_ARG, /**< Invalid arguments. */ | 46 | BSL_INVALID_ARG, /**< Invalid arguments. */ |
| 47 | BSL_DUMP_FAIL, /**< Error occurs when duplicating memory */ | 47 | BSL_DUMP_FAIL, /**< Error occurs when duplicating memory */ |
| 48 | + BSL_MEMMOVE_FAIL, | ||
| 48 | 49 | ||
| 49 | /* The return value of the SAL submodule starts from 0x03010001. */ | 50 | /* The return value of the SAL submodule starts from 0x03010001. */ |
| 50 | BSL_SAL_ERR_UNKNOWN = 0x03010001, /**< Unknown error. */ | 51 | BSL_SAL_ERR_UNKNOWN = 0x03010001, /**< Unknown error. */ |
| @@ -101,6 +102,9 @@ enum BSL_ERROR { | |||
| 101 | BSL_UIO_MEM_ALLOC_FAIL, | 102 | BSL_UIO_MEM_ALLOC_FAIL, |
| 102 | BSL_UIO_IO_EOF, /**< I/O object has reached EOF */ | 103 | BSL_UIO_IO_EOF, /**< I/O object has reached EOF */ |
| 103 | BSL_UIO_UNINITIALIZED, /**< UIO object is uninitialized */ | 104 | BSL_UIO_UNINITIALIZED, /**< UIO object is uninitialized */ |
| 105 | + BSL_UIO_WRITE_NOT_ALLOWED, | ||
| 106 | + BSL_UIO_MEM_GROW_FAIL, | ||
| 107 | + BSL_UIO_MEM_NOT_NULL, | ||
| 104 | 108 | ||
| 105 | /* The return value of the LIST submodule starts from 0x03070001. */ | 109 | /* The return value of the LIST submodule starts from 0x03070001. */ |
| 106 | BSL_LIST_INVALID_LIST_CURRENT = 0x03060001, /**< Current node pointer is NULL */ | 110 | BSL_LIST_INVALID_LIST_CURRENT = 0x03060001, /**< Current node pointer is NULL */ |
| @@ -133,6 +137,8 @@ enum BSL_ERROR { | |||
| 133 | BSL_ASN1_ERR_ENCODE_BIT_STRING, | 137 | BSL_ASN1_ERR_ENCODE_BIT_STRING, |
| 134 | BSL_ASN1_ERR_ENCODE_UTC_TIME, | 138 | BSL_ASN1_ERR_ENCODE_UTC_TIME, |
| 135 | BSL_ASN1_ERR_ENCODE_GENERALIZED_TIME, | 139 | BSL_ASN1_ERR_ENCODE_GENERALIZED_TIME, |
| 140 | + BSL_ASN1_ERR_PRINTF, | ||
| 141 | + BSL_ASN1_ERR_PRINTF_IO_ERR, | ||
| 136 | 142 | ||
| 137 | /* The return value of the BASE64 submodule starts from 0x030a0001. */ | 143 | /* The return value of the BASE64 submodule starts from 0x030a0001. */ |
| 138 | BSL_BASE64_INVALID = 0x03080001, | 144 | BSL_BASE64_INVALID = 0x03080001, |
| @@ -60,6 +60,7 @@ typedef enum { | |||
| 60 | BSL_UIO_TCP, | 60 | BSL_UIO_TCP, |
| 61 | BSL_UIO_SCTP, | 61 | BSL_UIO_SCTP, |
| 62 | BSL_UIO_BUFFER, | 62 | BSL_UIO_BUFFER, |
| 63 | + BSL_UIO_MEM, | ||
| 63 | BSL_UIO_UNKNOWN, /* Unknown protocol should not appear */ | 64 | BSL_UIO_UNKNOWN, /* Unknown protocol should not appear */ |
| 64 | 65 | ||
| 65 | BSL_UIO_EXTEND = 10000, /* extension value */ | 66 | BSL_UIO_EXTEND = 10000, /* extension value */ |
| @@ -95,6 +96,8 @@ typedef enum { | |||
| 95 | BSL_UIO_GET_FD, | 96 | BSL_UIO_GET_FD, |
| 96 | BSL_UIO_FLUSH, | 97 | BSL_UIO_FLUSH, |
| 97 | BSL_UIO_RESET, | 98 | BSL_UIO_RESET, |
| 99 | + BSL_UIO_PENDING, | ||
| 100 | + BSL_UIO_WPENDING, | ||
| 98 | 101 | ||
| 99 | /* SCTP uses 0x3XX */ | 102 | /* SCTP uses 0x3XX */ |
| 100 | BSL_UIO_SCTP_CHECK_PEER_AUTH = 0x300, | 103 | BSL_UIO_SCTP_CHECK_PEER_AUTH = 0x300, |
| @@ -105,6 +108,13 @@ typedef enum { | |||
| 105 | BSL_UIO_SCTP_GET_SEND_STREAM_ID, | 108 | BSL_UIO_SCTP_GET_SEND_STREAM_ID, |
| 106 | BSL_UIO_SCTP_SET_APP_STREAM_ID, | 109 | BSL_UIO_SCTP_SET_APP_STREAM_ID, |
| 107 | BSL_UIO_SCTP_MASK_APP_MESSAGE, | 110 | BSL_UIO_SCTP_MASK_APP_MESSAGE, |
| 111 | + | ||
| 112 | + /* MEM uses 0x4XX */ | ||
| 113 | + BSL_UIO_MEM_NEW_BUF = 0x400, | ||
| 114 | + BSL_UIO_MEM_GET_PTR, | ||
| 115 | + BSL_UIO_MEM_SET_EOF, | ||
| 116 | + BSL_UIO_MEM_GET_EOF, | ||
| 117 | + BSL_UIO_MEM_GET_INFO, | ||
| 108 | } BSL_UIO_CtrlParameter; | 118 | } BSL_UIO_CtrlParameter; |
| 109 | 119 | ||
| 110 | 120 | ||
| @@ -213,6 +223,13 @@ const BSL_UIO_Method *BSL_UIO_SctpMethod(void); | |||
| 213 | */ | 223 | */ |
| 214 | const BSL_UIO_Method *BSL_UIO_BufferMethod(void); | 224 | const BSL_UIO_Method *BSL_UIO_BufferMethod(void); |
| 215 | 225 | ||
| 226 | +/** | ||
| 227 | + * @ingroup bsl_uio | ||
| 228 | + * @brief obtain the default MEM UIO | ||
| 229 | + * | ||
| 230 | + * @retval pointer to the MEM UIO method | ||
| 231 | + */ | ||
| 232 | +const BSL_UIO_Method *BSL_UIO_MemMethod(void); | ||
| 216 | /** | 233 | /** |
| 217 | * @ingroup bsl_uio | 234 | * @ingroup bsl_uio |
| 218 | * @brief Create a UIO object | 235 | * @brief Create a UIO object |
| @@ -44,6 +44,8 @@ typedef struct _HITLS_X509_StoreCtx HITLS_X509_StoreCtx; | |||
| 44 | 44 | ||
| 45 | typedef struct _HITLS_X509_Csr HITLS_X509_Csr; | 45 | typedef struct _HITLS_X509_Csr HITLS_X509_Csr; |
| 46 | 46 | ||
| 47 | +typedef struct _HITLS_X509_Attrs HITLS_X509_Attrs; | ||
| 48 | + | ||
| 47 | typedef struct _HITLS_PKCS12 HITLS_PKCS12; | 49 | typedef struct _HITLS_PKCS12 HITLS_PKCS12; |
| 48 | 50 | ||
| 49 | typedef struct _HITLS_PKCS12_Bag HITLS_PKCS12_Bag; | 51 | typedef struct _HITLS_PKCS12_Bag HITLS_PKCS12_Bag; |
| @@ -72,14 +74,14 @@ typedef enum { | |||
| 72 | HITLS_X509_GET_ENCODE, /** Get the ASN.1 DER encoded cert/csr data */ | 74 | HITLS_X509_GET_ENCODE, /** Get the ASN.1 DER encoded cert/csr data */ |
| 73 | HITLS_X509_GET_PUBKEY, /** Get the public key contained in the cert/csr */ | 75 | HITLS_X509_GET_PUBKEY, /** Get the public key contained in the cert/csr */ |
| 74 | HITLS_X509_GET_SIGNALG, /** Get the signature algorithm used to sign the cert/csr */ | 76 | HITLS_X509_GET_SIGNALG, /** Get the signature algorithm used to sign the cert/csr */ |
| 75 | - HITLS_X509_GET_SUBJECT_DNNAME_STR, /** Get the subject distinguished name as a formatted string */ | 77 | + HITLS_X509_GET_SUBJECT_DN_STR, /** Get the subject distinguished name as a formatted string */ |
| 76 | - HITLS_X509_GET_ISSUER_DNNAME_STR, /** Get the issuer distinguished name as a formatted string */ | 78 | + HITLS_X509_GET_ISSUER_DN_STR, /** Get the issuer distinguished name as a formatted string */ |
| 77 | HITLS_X509_GET_SERIALNUM_STR, /** Get the serial number as a string */ | 79 | HITLS_X509_GET_SERIALNUM_STR, /** Get the serial number as a string */ |
| 78 | HITLS_X509_GET_BEFORE_TIME, /** Get the validity start time as a string */ | 80 | HITLS_X509_GET_BEFORE_TIME, /** Get the validity start time as a string */ |
| 79 | HITLS_X509_GET_AFTER_TIME, /** Get the validity end time as a string */ | 81 | HITLS_X509_GET_AFTER_TIME, /** Get the validity end time as a string */ |
| 80 | - HITLS_X509_GET_SUBJECT_DNNAME, /** Get the list of subject distinguished name components. | 82 | + HITLS_X509_GET_SUBJECT_DN, /** Get the list of subject distinguished name components. |
| 81 | Note: The list is read-only and should not be modified. */ | 83 | Note: The list is read-only and should not be modified. */ |
| 82 | - HITLS_X509_GET_ISSUER_DNNAME, /** Get the list of issuer distinguished name components. | 84 | + HITLS_X509_GET_ISSUER_DN, /** Get the list of issuer distinguished name components. |
| 83 | Note: The list is read-only and should not be modified. */ | 85 | Note: The list is read-only and should not be modified. */ |
| 84 | HITLS_X509_GET_VERSION, /** Get the version from cert or crl. */ | 86 | HITLS_X509_GET_VERSION, /** Get the version from cert or crl. */ |
| 85 | HITLS_X509_GET_REVOKELIST, /** Get the certficate revoke list from the crl. */ | 87 | HITLS_X509_GET_REVOKELIST, /** Get the certficate revoke list from the crl. */ |
| @@ -90,8 +92,8 @@ typedef enum { | |||
| 90 | HITLS_X509_SET_BEFORE_TIME, /** Set the before time for the cert. */ | 92 | HITLS_X509_SET_BEFORE_TIME, /** Set the before time for the cert. */ |
| 91 | HITLS_X509_SET_AFTER_TIME, /** Set the after time for the cert. */ | 93 | HITLS_X509_SET_AFTER_TIME, /** Set the after time for the cert. */ |
| 92 | HITLS_X509_SET_PUBKEY, /** Set the public key for the cert/csr. */ | 94 | HITLS_X509_SET_PUBKEY, /** Set the public key for the cert/csr. */ |
| 93 | - HITLS_X509_SET_SUBJECT_DNNAME, /** Set the subject name list. */ | 95 | + HITLS_X509_SET_SUBJECT_DN, /** Set the subject name list. */ |
| 94 | - HITLS_X509_SET_ISSUER_DNNAME, /** Set the issuer name list. */ | 96 | + HITLS_X509_SET_ISSUER_DN, /** Set the issuer name list. */ |
| 95 | HITLS_X509_SET_CSR_EXT, /** Replace the cert's ext with csr's */ | 97 | HITLS_X509_SET_CSR_EXT, /** Replace the cert's ext with csr's */ |
| 96 | HITLS_X509_ADD_SUBJECT_NAME, /** Add the subject name for the cert/csr. */ | 98 | HITLS_X509_ADD_SUBJECT_NAME, /** Add the subject name for the cert/csr. */ |
| 97 | HITLS_X509_CRL_ADD_REVOKED_CERT, /** Add the revoke cert to crl. */ | 99 | HITLS_X509_CRL_ADD_REVOKED_CERT, /** Add the revoke cert to crl. */ |
| @@ -117,8 +119,15 @@ typedef enum { | |||
| 117 | HITLS_X509_EXT_CHECK_SKI = 0x0600, /** Check if ski is exists. */ | 119 | HITLS_X509_EXT_CHECK_SKI = 0x0600, /** Check if ski is exists. */ |
| 118 | 120 | ||
| 119 | HITLS_X509_CSR_GET_ATTRIBUTES = 0x0700, /** Get the attributes from the csr. */ | 121 | HITLS_X509_CSR_GET_ATTRIBUTES = 0x0700, /** Get the attributes from the csr. */ |
| 122 | + | ||
| 123 | + HITLS_X509_SET_VEY_SM2_USER_ID = 0x800, /** Set sm2 user Id when verify cert/csr/crl. */ | ||
| 120 | } HITLS_X509_Cmd; | 124 | } HITLS_X509_Cmd; |
| 121 | 125 | ||
| 126 | +typedef enum { | ||
| 127 | + HITLS_X509_ATTR_SET_REQUESTED_EXTENSIONS = 0x0100, | ||
| 128 | + HITLS_X509_ATTR_GET_REQUESTED_EXTENSIONS = 0x0200, | ||
| 129 | +} HITLS_X509_AttrCmd; | ||
| 130 | + | ||
| 122 | /** | 131 | /** |
| 123 | * GeneralName types defined in RFC 5280 Section 4.2.1.6 | 132 | * GeneralName types defined in RFC 5280 Section 4.2.1.6 |
| 124 | * Reference: https://tools.ietf.org/html/rfc5280#section-4.2.1.6 | 133 | * Reference: https://tools.ietf.org/html/rfc5280#section-4.2.1.6 |
| @@ -133,6 +142,7 @@ typedef enum { | |||
| 133 | * iPAddress [7] OCTET STRING, | 142 | * iPAddress [7] OCTET STRING, |
| 134 | * registeredID [8] OBJECT IDENTIFIER } | 143 | * registeredID [8] OBJECT IDENTIFIER } |
| 135 | */ | 144 | */ |
| 145 | + | ||
| 136 | typedef enum { | 146 | typedef enum { |
| 137 | HITLS_X509_GN_EMAIL, // rfc822Name [1] IA5String | 147 | HITLS_X509_GN_EMAIL, // rfc822Name [1] IA5String |
| 138 | HITLS_X509_GN_DNS, // dNSName [2] IA5String | 148 | HITLS_X509_GN_DNS, // dNSName [2] IA5String |
| @@ -217,6 +227,7 @@ typedef struct { | |||
| 217 | uint32_t algId; /**< Algorithm identifier */ | 227 | uint32_t algId; /**< Algorithm identifier */ |
| 218 | union { | 228 | union { |
| 219 | CRYPT_RSA_PssPara rsaPss; /**< RSA PSS padding parameters */ | 229 | CRYPT_RSA_PssPara rsaPss; /**< RSA PSS padding parameters */ |
| 230 | + BSL_Buffer sm2UserId; | ||
| 220 | }; | 231 | }; |
| 221 | } HITLS_X509_SignAlgParam; | 232 | } HITLS_X509_SignAlgParam; |
| 222 | 233 | ||
| @@ -468,6 +479,25 @@ int32_t HITLS_X509_CertGenFile(int32_t format, HITLS_X509_Cert *cert, const char | |||
| 468 | 479 | ||
| 469 | /** | 480 | /** |
| 470 | * @ingroup pki | 481 | * @ingroup pki |
| 482 | + * @brief New a list of distinguish name, the item is HITLS_X509_NameNode. | ||
| 483 | + * @attention You need to HITLS_X509_DnListFree to free list, after the end of use | ||
| 484 | + * | ||
| 485 | + * @retval #BslList *, success. | ||
| 486 | + * error return NULL. | ||
| 487 | + */ | ||
| 488 | +BslList *HITLS_X509_DnListNew(void); | ||
| 489 | + | ||
| 490 | +/** | ||
| 491 | + * @ingroup pki | ||
| 492 | + * @brief New a list of distinguish name, the list . | ||
| 493 | + * | ||
| 494 | + * @param list [IN] The name list | ||
| 495 | + * @retval void | ||
| 496 | + */ | ||
| 497 | +void HITLS_X509_DnListFree(BslList *dnList); | ||
| 498 | + | ||
| 499 | +/** | ||
| 500 | + * @ingroup x509 | ||
| 471 | * @brief Add a distinguish name array to list. | 501 | * @brief Add a distinguish name array to list. |
| 472 | * | 502 | * |
| 473 | * @param list [IN] The name list | 503 | * @param list [IN] The name list |
| @@ -673,6 +703,7 @@ typedef enum { | |||
| 673 | HITLS_X509_STORECTX_SHALLOW_COPY_SET_CA, | 703 | HITLS_X509_STORECTX_SHALLOW_COPY_SET_CA, |
| 674 | HITLS_X509_STORECTX_SET_CRL, | 704 | HITLS_X509_STORECTX_SET_CRL, |
| 675 | HITLS_X509_STORECTX_REF_UP, | 705 | HITLS_X509_STORECTX_REF_UP, |
| 706 | + HITLS_X509_STORECTX_SET_VEY_SM2_USERID, | ||
| 676 | HITLS_X509_STORECTX_MAX | 707 | HITLS_X509_STORECTX_MAX |
| 677 | } HITLS_X509_StoreCtxCmd; | 708 | } HITLS_X509_StoreCtxCmd; |
| 678 | 709 | ||
| @@ -740,11 +771,6 @@ int32_t HITLS_X509_CertVerify(HITLS_X509_StoreCtx *storeCtx, HITLS_X509_List *ch | |||
| 740 | int32_t HITLS_X509_CertChainBuild(HITLS_X509_StoreCtx *storeCtx, bool isWithRoot, HITLS_X509_Cert *cert, | 771 | int32_t HITLS_X509_CertChainBuild(HITLS_X509_StoreCtx *storeCtx, bool isWithRoot, HITLS_X509_Cert *cert, |
| 741 | HITLS_X509_List **chain); | 772 | HITLS_X509_List **chain); |
| 742 | 773 | ||
| 743 | -typedef struct _HITLS_X509_Attr { | ||
| 744 | - BslCid cid; | ||
| 745 | - void *value; | ||
| 746 | -} HITLS_X509_Attr; | ||
| 747 | - | ||
| 748 | /** | 774 | /** |
| 749 | * @ingroup pki | 775 | * @ingroup pki |
| 750 | * @brief Allocate a pkcs10 csr. | 776 | * @brief Allocate a pkcs10 csr. |
| @@ -855,11 +881,6 @@ int32_t HITLS_X509_CsrParseFile(int32_t format, const char *path, HITLS_X509_Csr | |||
| 855 | */ | 881 | */ |
| 856 | int32_t HITLS_X509_CsrVerify(HITLS_X509_Csr *csr); | 882 | int32_t HITLS_X509_CsrVerify(HITLS_X509_Csr *csr); |
| 857 | 883 | ||
| 858 | -typedef enum { | ||
| 859 | - HITLS_X509_ATTR_SET_REQUESTED_EXTENSIONS = 0x01, | ||
| 860 | - HITLS_X509_ATTR_GET_REQUESTED_EXTENSIONS, | ||
| 861 | -} HITLS_X509_Attr_Cmd; | ||
| 862 | - | ||
| 863 | /** | 884 | /** |
| 864 | * @ingroup pki | 885 | * @ingroup pki |
| 865 | * @brief Generic function to process attribute function | 886 | * @brief Generic function to process attribute function |
| @@ -872,7 +893,7 @@ typedef enum { | |||
| 872 | * @retval #HITLS_X509_SUCCESS, success. | 893 | * @retval #HITLS_X509_SUCCESS, success. |
| 873 | * Error codes can be found in hitls_pki_errno.h | 894 | * Error codes can be found in hitls_pki_errno.h |
| 874 | */ | 895 | */ |
| 875 | -int32_t HITLS_X509_AttrCtrl(BslList *attributes, int32_t cmd, void *val, int32_t valLen); | 896 | +int32_t HITLS_X509_AttrCtrl(HITLS_X509_Attrs *attributes, HITLS_X509_AttrCmd cmd, void *val, int32_t valLen); |
| 876 | 897 | ||
| 877 | typedef struct { | 898 | typedef struct { |
| 878 | BSL_Buffer *macPwd; | 899 | BSL_Buffer *macPwd; |
| @@ -38,6 +38,7 @@ typedef enum { | |||
| 38 | HITLS_X509_ERR_ROOT_CERT_NOT_FOUND, | 38 | HITLS_X509_ERR_ROOT_CERT_NOT_FOUND, |
| 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 | 42 | ||
| 42 | HITLS_X509_ERR_CERT_NOT_CA = 0x04010001, | 43 | HITLS_X509_ERR_CERT_NOT_CA = 0x04010001, |
| 43 | HITLS_X509_ERR_CERT_EXIST, | 44 | HITLS_X509_ERR_CERT_EXIST, |
| @@ -145,6 +146,10 @@ typedef enum { | |||
| 145 | HITLS_PKCS12_ERR_KDF_TOO_LONG_INPUT, | 146 | HITLS_PKCS12_ERR_KDF_TOO_LONG_INPUT, |
| 146 | HITLS_PKCS12_ERR_REPEATED_SET_ENTITYCERT, | 147 | HITLS_PKCS12_ERR_REPEATED_SET_ENTITYCERT, |
| 147 | HITLS_PKCS12_ERR_REPEATED_SET_KEY, | 148 | HITLS_PKCS12_ERR_REPEATED_SET_KEY, |
| 149 | + | ||
| 150 | + HITLS_X509_ERR_PRINT_DN = 0x04080001, | ||
| 151 | + HITLS_X509_ERR_PRINT_DN_VALUE, | ||
| 152 | + HITLS_X509_ERR_PRINT_UIO, | ||
| 148 | } HITLS_X509_ERRNO; | 153 | } HITLS_X509_ERRNO; |
| 149 | 154 | ||
| 150 | 155 | ||
| @@ -46,7 +46,7 @@ typedef struct _HITLS_PKCS12_Bag { | |||
| 46 | CRYPT_EAL_PkeyCtx *key; | 46 | CRYPT_EAL_PkeyCtx *key; |
| 47 | HITLS_X509_Cert *cert; | 47 | HITLS_X509_Cert *cert; |
| 48 | } value; | 48 | } value; |
| 49 | - BSL_ASN1_List *attributes; // localKeyId, friendlyName, ... | 49 | + HITLS_X509_Attrs *attributes; // localKeyId, friendlyName, ect. Item is HITLS_PKCS12_SafeBagAttr. |
| 50 | } HITLS_PKCS12_Bag; | 50 | } HITLS_PKCS12_Bag; |
| 51 | 51 | ||
| 52 | /* | 52 | /* |
| @@ -70,18 +70,16 @@ typedef struct { | |||
| 70 | /* SafeBag Attributes. */ | 70 | /* SafeBag Attributes. */ |
| 71 | typedef struct { | 71 | typedef struct { |
| 72 | BslCid attrId; | 72 | BslCid attrId; |
| 73 | - BSL_Buffer *attrValue; | 73 | + BSL_Buffer attrValue; |
| 74 | } HITLS_PKCS12_SafeBagAttr; | 74 | } HITLS_PKCS12_SafeBagAttr; |
| 75 | 75 | ||
| 76 | /* A safeBag defined in RFC 7292, which storing intermediate data in our decoding process. */ | 76 | /* A safeBag defined in RFC 7292, which storing intermediate data in our decoding process. */ |
| 77 | typedef struct { | 77 | typedef struct { |
| 78 | BslCid bagId; | 78 | BslCid bagId; |
| 79 | BSL_Buffer *bag; // encode data | 79 | BSL_Buffer *bag; // encode data |
| 80 | - BSL_ASN1_List *attributes; // Currently, only support localKeyId, friendlyName. | 80 | + HITLS_X509_Attrs *attributes; // Currently, only support localKeyId, friendlyName. Item is HITLS_PKCS12_SafeBagAttr. |
| 81 | } HITLS_PKCS12_SafeBag; | 81 | } HITLS_PKCS12_SafeBag; |
| 82 | 82 | ||
| 83 | -HITLS_PKCS12_SafeBag *HITLS_PKCS12_SafeBagNew(); | ||
| 84 | - | ||
| 85 | void HITLS_PKCS12_SafeBagFree(HITLS_PKCS12_SafeBag *safeBag); | 83 | void HITLS_PKCS12_SafeBagFree(HITLS_PKCS12_SafeBag *safeBag); |
| 86 | 84 | ||
| 87 | HITLS_PKCS12_MacData *HITLS_PKCS12_MacDataNew(void); | 85 | HITLS_PKCS12_MacData *HITLS_PKCS12_MacDataNew(void); |
| @@ -132,7 +130,7 @@ int32_t HITLS_PKCS12_ParseSafeBagList(BSL_ASN1_List *bagList, const uint8_t *pas | |||
| 132 | /* | 130 | /* |
| 133 | * Parse attributes of a safeBag, and convert decode data to the real data. | 131 | * Parse attributes of a safeBag, and convert decode data to the real data. |
| 134 | */ | 132 | */ |
| 135 | -int32_t HITLS_PKCS12_ParseSafeBagAttr(BSL_ASN1_Buffer *attribute, BSL_ASN1_List *attriList); | 133 | +int32_t HITLS_PKCS12_ParseSafeBagAttr(BSL_ASN1_Buffer *attrBuff, HITLS_X509_Attrs *attriList); |
| 136 | 134 | ||
| 137 | /* | 135 | /* |
| 138 | * Parse AuthSafeData of a p12, and convert decode data to the real data. | 136 | * Parse AuthSafeData of a p12, and convert decode data to the real data. |
| @@ -147,62 +147,27 @@ static int32_t ConvertAttributes(BslCid cid, BSL_ASN1_Buffer *buffer, BSL_Buffer | |||
| 147 | } | 147 | } |
| 148 | } | 148 | } |
| 149 | 149 | ||
| 150 | -static int32_t ParseAttr(HITLS_X509_AttrEntry *entry, BSL_ASN1_List *list) | 150 | +static int32_t X509_ParseP12AttrItem(BslList *attrList, HITLS_X509_AttrEntry *attrEntry) |
| 151 | { | 151 | { |
| 152 | HITLS_PKCS12_SafeBagAttr attr = {0}; | 152 | HITLS_PKCS12_SafeBagAttr attr = {0}; |
| 153 | - attr.attrId = entry->cid; | 153 | + attr.attrId = attrEntry->cid; |
| 154 | - attr.attrValue = BSL_SAL_Malloc(sizeof(BSL_Buffer)); | 154 | + int32_t ret = ConvertAttributes(attrEntry->cid, &attrEntry->attrValue, &attr.attrValue); |
| 155 | - if (attr.attrValue == NULL) { | ||
| 156 | - BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | ||
| 157 | - return BSL_MALLOC_FAIL; | ||
| 158 | - } | ||
| 159 | - int32_t ret = ConvertAttributes(entry->cid, &entry->attrValue, attr.attrValue); | ||
| 160 | if (ret != HITLS_X509_SUCCESS) { | 155 | if (ret != HITLS_X509_SUCCESS) { |
| 161 | - BSL_SAL_Free(attr.attrValue); | ||
| 162 | BSL_ERR_PUSH_ERROR(ret); | 156 | BSL_ERR_PUSH_ERROR(ret); |
| 163 | return ret; | 157 | return ret; |
| 164 | } | 158 | } |
| 165 | - ret = HITLS_X509_AddListItemDefault(&attr, sizeof(HITLS_PKCS12_SafeBagAttr), list); | 159 | + ret = HITLS_X509_AddListItemDefault(&attr, sizeof(HITLS_PKCS12_SafeBagAttr), attrList); |
| 166 | if (ret != BSL_SUCCESS) { | 160 | if (ret != BSL_SUCCESS) { |
| 167 | BSL_ERR_PUSH_ERROR(ret); | 161 | BSL_ERR_PUSH_ERROR(ret); |
| 168 | - BSL_SAL_Free(attr.attrValue->data); | 162 | + BSL_SAL_Free(attr.attrValue.data); |
| 169 | - BSL_SAL_Free(attr.attrValue); | ||
| 170 | } | 163 | } |
| 171 | return ret; | 164 | return ret; |
| 172 | } | 165 | } |
| 173 | 166 | ||
| 174 | -int32_t HITLS_PKCS12_ParseSafeBagAttr(BSL_ASN1_Buffer *attribute, BSL_ASN1_List *attriList) | 167 | +int32_t HITLS_PKCS12_ParseSafeBagAttr(BSL_ASN1_Buffer *attrBuff, HITLS_X509_Attrs *attributes) |
| 175 | { | 168 | { |
| 176 | - if (attribute->len == 0) { | 169 | + return HITLS_X509_ParseAttrList(attrBuff, attributes, X509_ParseP12AttrItem, HITLS_PKCS12_AttributesFree); |
| 177 | - return HITLS_X509_SUCCESS; // bagAttributes are OPTIONAL | ||
| 178 | - } | ||
| 179 | - | ||
| 180 | - BSL_ASN1_List *list = BSL_LIST_New(sizeof(HITLS_X509_AttrEntry)); | ||
| 181 | - if (list == NULL) { | ||
| 182 | - BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | ||
| 183 | - return BSL_MALLOC_FAIL; | ||
| 184 | - } | ||
| 185 | - int32_t ret = HITLS_X509_ParseAttrList(attribute, list); | ||
| 186 | - if (ret != BSL_SUCCESS) { | ||
| 187 | - BSL_LIST_FREE(list, NULL); | ||
| 188 | - BSL_ERR_PUSH_ERROR(ret); | ||
| 189 | - return ret; | ||
| 190 | - } | ||
| 191 | - BSL_ASN1_List *tmpList = list; | ||
| 192 | - HITLS_X509_AttrEntry *node = BSL_LIST_GET_FIRST(tmpList); | ||
| 193 | - while (node != NULL) { | ||
| 194 | - ret = ParseAttr(node, attriList); | ||
| 195 | - if (ret != BSL_SUCCESS) { | ||
| 196 | - BSL_ERR_PUSH_ERROR(ret); | ||
| 197 | - goto err; | ||
| 198 | - } | ||
| 199 | - node = BSL_LIST_GET_NEXT(tmpList); | ||
| 200 | - } | ||
| 201 | -err: | ||
| 202 | - BSL_LIST_FREE(list, NULL); | ||
| 203 | - return ret; | ||
| 204 | } | 170 | } |
| 205 | - | ||
| 206 | /* | 171 | /* |
| 207 | SafeBag ::= SEQUENCE { | 172 | SafeBag ::= SEQUENCE { |
| 208 | bagId BAG-TYPE.&id ({PKCS12BagSet}) | 173 | bagId BAG-TYPE.&id ({PKCS12BagSet}) |
| @@ -249,7 +214,7 @@ static int32_t ParseSafeBag(BSL_Buffer *buffer, HITLS_PKCS12_SafeBag *safeBag) | |||
| 249 | BSL_ERR_PUSH_ERROR(HITLS_PKCS12_ERR_INVALID_SAFEBAG_TYPE); | 214 | BSL_ERR_PUSH_ERROR(HITLS_PKCS12_ERR_INVALID_SAFEBAG_TYPE); |
| 250 | return HITLS_PKCS12_ERR_INVALID_SAFEBAG_TYPE; | 215 | return HITLS_PKCS12_ERR_INVALID_SAFEBAG_TYPE; |
| 251 | } | 216 | } |
| 252 | - BSL_ASN1_List *attributes = NULL; | 217 | + HITLS_X509_Attrs *attributes = NULL; |
| 253 | BSL_Buffer *bag = BSL_SAL_Calloc(1u, sizeof(BSL_Buffer)); | 218 | BSL_Buffer *bag = BSL_SAL_Calloc(1u, sizeof(BSL_Buffer)); |
| 254 | if (bag == NULL) { | 219 | if (bag == NULL) { |
| 255 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | 220 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); |
| @@ -264,7 +229,7 @@ static int32_t ParseSafeBag(BSL_Buffer *buffer, HITLS_PKCS12_SafeBag *safeBag) | |||
| 264 | goto err; | 229 | goto err; |
| 265 | } | 230 | } |
| 266 | bag->dataLen = asnArr[HITLS_PKCS12_SAFEBAG_BAGVALUES_IDX].len; | 231 | bag->dataLen = asnArr[HITLS_PKCS12_SAFEBAG_BAGVALUES_IDX].len; |
| 267 | - attributes = BSL_LIST_New(sizeof(HITLS_PKCS12_SafeBagAttr)); | 232 | + attributes = HITLS_X509_AttrsNew(); |
| 268 | if (attributes == NULL) { | 233 | if (attributes == NULL) { |
| 269 | ret = BSL_MALLOC_FAIL; | 234 | ret = BSL_MALLOC_FAIL; |
| 270 | BSL_ERR_PUSH_ERROR(ret); | 235 | BSL_ERR_PUSH_ERROR(ret); |
| @@ -282,7 +247,7 @@ static int32_t ParseSafeBag(BSL_Buffer *buffer, HITLS_PKCS12_SafeBag *safeBag) | |||
| 282 | err: | 247 | err: |
| 283 | BSL_SAL_FREE(bag->data); | 248 | BSL_SAL_FREE(bag->data); |
| 284 | BSL_SAL_FREE(bag); | 249 | BSL_SAL_FREE(bag); |
| 285 | - BSL_LIST_FREE(attributes, HITLS_PKCS12_AttributesFree); | 250 | + HITLS_X509_AttrsFree(attributes, HITLS_PKCS12_AttributesFree); |
| 286 | return ret; | 251 | return ret; |
| 287 | } | 252 | } |
| 288 | 253 | ||
| @@ -436,17 +401,17 @@ int32_t HITLS_PKCS12_ParseSafeBagList(BSL_ASN1_List *bagList, const uint8_t *pas | |||
| 436 | return HITLS_X509_SUCCESS; | 401 | return HITLS_X509_SUCCESS; |
| 437 | } | 402 | } |
| 438 | 403 | ||
| 439 | -static BSL_Buffer *FindLocatedId(BSL_ASN1_List *attributes) | 404 | +static BSL_Buffer *FindLocatedId(HITLS_X509_Attrs *attributes) |
| 440 | { | 405 | { |
| 441 | if (attributes == NULL) { | 406 | if (attributes == NULL) { |
| 442 | return NULL; | 407 | return NULL; |
| 443 | } | 408 | } |
| 444 | - HITLS_PKCS12_SafeBagAttr *node = BSL_LIST_GET_FIRST(attributes); | 409 | + HITLS_PKCS12_SafeBagAttr *node = BSL_LIST_GET_FIRST(attributes->list); |
| 445 | while (node != NULL) { | 410 | while (node != NULL) { |
| 446 | if (node->attrId == BSL_CID_LOCALKEYID) { | 411 | if (node->attrId == BSL_CID_LOCALKEYID) { |
| 447 | - return node->attrValue; | 412 | + return &node->attrValue; |
| 448 | } | 413 | } |
| 449 | - node = BSL_LIST_GET_NEXT(attributes); | 414 | + node = BSL_LIST_GET_NEXT(attributes->list); |
| 450 | } | 415 | } |
| 451 | return NULL; | 416 | return NULL; |
| 452 | } | 417 | } |
| @@ -867,8 +832,8 @@ static int32_t EncodeAttrValue(HITLS_PKCS12_SafeBagAttr *attribute, BSL_Buffer * | |||
| 867 | BSL_ASN1_Buffer asnArr = {0}; | 832 | BSL_ASN1_Buffer asnArr = {0}; |
| 868 | int32_t ret; | 833 | int32_t ret; |
| 869 | 834 | ||
| 870 | - asnArr.buff = attribute->attrValue->data; | 835 | + asnArr.buff = attribute->attrValue.data; |
| 871 | - asnArr.len = attribute->attrValue->dataLen; | 836 | + asnArr.len = attribute->attrValue.dataLen; |
| 872 | switch (attribute->attrId) { | 837 | switch (attribute->attrId) { |
| 873 | case BSL_CID_FRIENDLYNAME: | 838 | case BSL_CID_FRIENDLYNAME: |
| 874 | asnArr.tag = BSL_ASN1_TAG_BMPSTRING; | 839 | asnArr.tag = BSL_ASN1_TAG_BMPSTRING; |
| @@ -892,58 +857,37 @@ static int32_t EncodeAttrValue(HITLS_PKCS12_SafeBagAttr *attribute, BSL_Buffer * | |||
| 892 | return ret; | 857 | return ret; |
| 893 | } | 858 | } |
| 894 | 859 | ||
| 895 | -int32_t HITLS_PKCS12_EncodeAttrList(BSL_ASN1_List *list, BSL_ASN1_Buffer *attr) | 860 | +static int32_t X509_EncodeP12AttrItem(void *attrNode, HITLS_X509_AttrEntry *attrEntry) |
| 896 | { | 861 | { |
| 897 | - int32_t count = BSL_LIST_COUNT(list); | 862 | + if (attrNode == NULL || attrEntry == NULL) { |
| 898 | - /* no attributes */ | 863 | + return HITLS_X509_ERR_INVALID_PARAM; |
| 899 | - if (count <= 0) { | ||
| 900 | - attr->buff = NULL; | ||
| 901 | - attr->len = 0; | ||
| 902 | - return HITLS_X509_SUCCESS; | ||
| 903 | } | 864 | } |
| 904 | - int32_t ret; | 865 | + HITLS_PKCS12_SafeBagAttr *p12Attr = attrNode; |
| 905 | - BSL_ASN1_List *attrList = BSL_LIST_New(sizeof(HITLS_X509_AttrEntry)); | 866 | + BslOidString *oidStr = BSL_OBJ_GetOidFromCID(p12Attr->attrId); |
| 906 | - if (attrList == NULL) { | 867 | + if (oidStr == NULL) { |
| 907 | - BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | 868 | + BSL_ERR_PUSH_ERROR(HITLS_PKCS12_ERR_INVALID_SAFEBAG_ATTRIBUTES); |
| 908 | - return BSL_MALLOC_FAIL; | 869 | + return HITLS_PKCS12_ERR_INVALID_SAFEBAG_ATTRIBUTES; |
| 909 | } | 870 | } |
| 910 | - | 871 | + attrEntry->attrId.tag = BSL_ASN1_TAG_OBJECT_ID; |
| 911 | - HITLS_PKCS12_SafeBagAttr *node = NULL; | 872 | + attrEntry->attrId.buff = (uint8_t *)oidStr->octs; |
| 912 | - for (node = BSL_LIST_GET_FIRST(list); node != NULL; node = BSL_LIST_GET_NEXT(list)) { | 873 | + attrEntry->attrId.len = oidStr->octetLen; |
| 913 | - HITLS_X509_AttrEntry entry = {0}; | 874 | + BSL_Buffer buffer = {0}; |
| 914 | - BslOidString *oidStr = BSL_OBJ_GetOidFromCID(node->attrId); | 875 | + int32_t ret = EncodeAttrValue(p12Attr, &buffer); |
| 915 | - if (oidStr == NULL) { | ||
| 916 | - BSL_ERR_PUSH_ERROR(HITLS_PKCS12_ERR_INVALID_SAFEBAG_ATTRIBUTES); | ||
| 917 | - ret = HITLS_PKCS12_ERR_INVALID_SAFEBAG_ATTRIBUTES; | ||
| 918 | - goto err; | ||
| 919 | - } | ||
| 920 | - entry.attrId.tag = BSL_ASN1_TAG_OBJECT_ID; | ||
| 921 | - entry.attrId.buff = (uint8_t *)oidStr->octs; | ||
| 922 | - entry.attrId.len = oidStr->octetLen; | ||
| 923 | - BSL_Buffer buffer = {0}; | ||
| 924 | - ret = EncodeAttrValue(node, &buffer); | ||
| 925 | - if (ret != HITLS_X509_SUCCESS) { | ||
| 926 | - BSL_ERR_PUSH_ERROR(ret); | ||
| 927 | - goto err; | ||
| 928 | - } | ||
| 929 | - entry.attrValue.tag = BSL_ASN1_TAG_CONSTRUCTED | BSL_ASN1_TAG_SET; | ||
| 930 | - entry.attrValue.buff = buffer.data; | ||
| 931 | - entry.attrValue.len = buffer.dataLen; | ||
| 932 | - entry.cid = node->attrId; | ||
| 933 | - ret = HITLS_X509_AddListItemDefault(&entry, sizeof(HITLS_X509_AttrEntry), attrList); | ||
| 934 | - if (ret != HITLS_X509_SUCCESS) { | ||
| 935 | - BSL_SAL_FREE(buffer.data); | ||
| 936 | - BSL_ERR_PUSH_ERROR(ret); | ||
| 937 | - goto err; | ||
| 938 | - } | ||
| 939 | - } | ||
| 940 | - ret = HITLS_X509_EncodeAttrList(BSL_ASN1_TAG_CONSTRUCTED | BSL_ASN1_TAG_SET, attrList, attr); | ||
| 941 | if (ret != HITLS_X509_SUCCESS) { | 876 | if (ret != HITLS_X509_SUCCESS) { |
| 942 | BSL_ERR_PUSH_ERROR(ret); | 877 | BSL_ERR_PUSH_ERROR(ret); |
| 878 | + return ret; | ||
| 943 | } | 879 | } |
| 944 | -err: | 880 | + attrEntry->attrValue.tag = BSL_ASN1_TAG_CONSTRUCTED | BSL_ASN1_TAG_SET; |
| 945 | - BSL_LIST_FREE(attrList, (BSL_LIST_PFUNC_FREE)HITLS_X509_AttrEntryFree); | 881 | + attrEntry->attrValue.buff = buffer.data; |
| 946 | - return ret; | 882 | + attrEntry->attrValue.len = buffer.dataLen; |
| 883 | + attrEntry->cid = p12Attr->attrId; | ||
| 884 | + return HITLS_X509_SUCCESS; | ||
| 885 | +} | ||
| 886 | + | ||
| 887 | +int32_t HITLS_PKCS12_EncodeAttrList(HITLS_X509_Attrs *attrs, BSL_ASN1_Buffer *attrBuff) | ||
| 888 | +{ | ||
| 889 | + return HITLS_X509_EncodeAttrList(BSL_ASN1_TAG_CONSTRUCTED | BSL_ASN1_TAG_SET, attrs, | ||
| 890 | + X509_EncodeP12AttrItem, attrBuff); | ||
| 947 | } | 891 | } |
| 948 | 892 | ||
| 949 | static int32_t EncodeCertBag(HITLS_X509_Cert *cert, uint32_t certType, uint8_t **encode, uint32_t *encodeLen) | 893 | static int32_t EncodeCertBag(HITLS_X509_Cert *cert, uint32_t certType, uint8_t **encode, uint32_t *encodeLen) |
| @@ -1520,7 +1464,10 @@ int32_t HITLS_PKCS12_GenFile(int32_t format, HITLS_PKCS12 *p12, const HITLS_PKCS | |||
| 1520 | 1464 | ||
| 1521 | static void DeleteAttribute(HITLS_PKCS12_Bag *bag, uint32_t type) | 1465 | static void DeleteAttribute(HITLS_PKCS12_Bag *bag, uint32_t type) |
| 1522 | { | 1466 | { |
| 1523 | - BSL_ASN1_List *list = bag->attributes; | 1467 | + if (bag->attributes == NULL) { |
| 1468 | + return; | ||
| 1469 | + } | ||
| 1470 | + BSL_ASN1_List *list = bag->attributes->list; | ||
| 1524 | HITLS_PKCS12_SafeBagAttr *node = BSL_LIST_GET_FIRST(list); | 1471 | HITLS_PKCS12_SafeBagAttr *node = BSL_LIST_GET_FIRST(list); |
| 1525 | while (node != NULL) { | 1472 | while (node != NULL) { |
| 1526 | if (node->attrId == type) { | 1473 | if (node->attrId == type) { |
| @@ -1533,7 +1480,10 @@ static void DeleteAttribute(HITLS_PKCS12_Bag *bag, uint32_t type) | |||
| 1533 | 1480 | ||
| 1534 | static bool IsAttrExist(HITLS_PKCS12_Bag *bag, uint32_t type) | 1481 | static bool IsAttrExist(HITLS_PKCS12_Bag *bag, uint32_t type) |
| 1535 | { | 1482 | { |
| 1536 | - BSL_ASN1_List *list = bag->attributes; | 1483 | + if (bag->attributes == NULL || bag->attributes->list == NULL) { |
| 1484 | + return false; | ||
| 1485 | + } | ||
| 1486 | + BSL_ASN1_List *list = bag->attributes->list; | ||
| 1537 | HITLS_PKCS12_SafeBagAttr *node = BSL_LIST_GET_FIRST(list); | 1487 | HITLS_PKCS12_SafeBagAttr *node = BSL_LIST_GET_FIRST(list); |
| 1538 | while (node != NULL) { | 1488 | while (node != NULL) { |
| 1539 | if (node->attrId == type) { | 1489 | if (node->attrId == type) { |
| @@ -1565,31 +1515,23 @@ int32_t HITLS_PKCS12_BagAddAttr(HITLS_PKCS12_Bag *bag, uint32_t type, const BSL_ | |||
| 1565 | 1515 | ||
| 1566 | HITLS_PKCS12_SafeBagAttr attr = {0}; | 1516 | HITLS_PKCS12_SafeBagAttr attr = {0}; |
| 1567 | attr.attrId = type; | 1517 | attr.attrId = type; |
| 1568 | - attr.attrValue = BSL_SAL_Malloc(sizeof(BSL_Buffer)); | 1518 | + attr.attrValue.data = BSL_SAL_Dump(attrValue->data, attrValue->dataLen); |
| 1569 | - if (attr.attrValue == NULL) { | 1519 | + if (attr.attrValue.data == NULL) { |
| 1570 | - BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | ||
| 1571 | - return BSL_MALLOC_FAIL; | ||
| 1572 | - } | ||
| 1573 | - attr.attrValue->data = BSL_SAL_Dump(attrValue->data, attrValue->dataLen); | ||
| 1574 | - if (attr.attrValue->data == NULL) { | ||
| 1575 | - BSL_SAL_FREE(attr.attrValue); | ||
| 1576 | BSL_ERR_PUSH_ERROR(BSL_DUMP_FAIL); | 1520 | BSL_ERR_PUSH_ERROR(BSL_DUMP_FAIL); |
| 1577 | return BSL_DUMP_FAIL; | 1521 | return BSL_DUMP_FAIL; |
| 1578 | } | 1522 | } |
| 1579 | - attr.attrValue->dataLen = attrValue->dataLen; | 1523 | + attr.attrValue.dataLen = attrValue->dataLen; |
| 1580 | if (bag->attributes == NULL) { | 1524 | if (bag->attributes == NULL) { |
| 1581 | - bag->attributes = BSL_LIST_New(sizeof(HITLS_PKCS12_SafeBagAttr)); | 1525 | + bag->attributes = HITLS_X509_AttrsNew(); |
| 1582 | if (bag->attributes == NULL) { | 1526 | if (bag->attributes == NULL) { |
| 1583 | - BSL_SAL_FREE(attr.attrValue->data); | 1527 | + BSL_SAL_FREE(attr.attrValue.data); |
| 1584 | - BSL_SAL_FREE(attr.attrValue); | ||
| 1585 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | 1528 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); |
| 1586 | return BSL_MALLOC_FAIL; | 1529 | return BSL_MALLOC_FAIL; |
| 1587 | } | 1530 | } |
| 1588 | } | 1531 | } |
| 1589 | - int32_t ret = HITLS_X509_AddListItemDefault(&attr, sizeof(HITLS_PKCS12_SafeBagAttr), bag->attributes); | 1532 | + int32_t ret = HITLS_X509_AddListItemDefault(&attr, sizeof(HITLS_PKCS12_SafeBagAttr), bag->attributes->list); |
| 1590 | if (ret != HITLS_X509_SUCCESS) { | 1533 | if (ret != HITLS_X509_SUCCESS) { |
| 1591 | - BSL_SAL_FREE(attr.attrValue->data); | 1534 | + BSL_SAL_FREE(attr.attrValue.data); |
| 1592 | - BSL_SAL_FREE(attr.attrValue); | ||
| 1593 | BSL_ERR_PUSH_ERROR(ret); | 1535 | BSL_ERR_PUSH_ERROR(ret); |
| 1594 | } | 1536 | } |
| 1595 | return ret; | 1537 | return ret; |
| @@ -1602,18 +1544,12 @@ static void *AttrCopy(const void *val) | |||
| 1602 | if (output == NULL) { | 1544 | if (output == NULL) { |
| 1603 | return NULL; | 1545 | return NULL; |
| 1604 | } | 1546 | } |
| 1605 | - output->attrValue = BSL_SAL_Malloc(sizeof(BSL_Buffer)); | 1547 | + output->attrValue.data = BSL_SAL_Dump(input->attrValue.data, input->attrValue.dataLen); |
| 1606 | - if (output->attrValue == NULL) { | 1548 | + if (output->attrValue.data == NULL) { |
| 1607 | BSL_SAL_Free(output); | 1549 | BSL_SAL_Free(output); |
| 1608 | return NULL; | 1550 | return NULL; |
| 1609 | } | 1551 | } |
| 1610 | - output->attrValue->data = BSL_SAL_Dump(input->attrValue->data, input->attrValue->dataLen); | 1552 | + output->attrValue.dataLen = input->attrValue.dataLen; |
| 1611 | - if (output->attrValue->data == NULL) { | ||
| 1612 | - BSL_SAL_Free(output->attrValue); | ||
| 1613 | - BSL_SAL_Free(output); | ||
| 1614 | - return NULL; | ||
| 1615 | - } | ||
| 1616 | - output->attrValue->dataLen = input->attrValue->dataLen; | ||
| 1617 | output->attrId = input->attrId; | 1553 | output->attrId = input->attrId; |
| 1618 | return output; | 1554 | return output; |
| 1619 | } | 1555 | } |
| @@ -1650,14 +1586,13 @@ static HITLS_PKCS12_Bag *BagDump(HITLS_PKCS12_Bag *input) | |||
| 1650 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | 1586 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); |
| 1651 | return NULL; | 1587 | return NULL; |
| 1652 | } | 1588 | } |
| 1653 | - if (BSL_LIST_COUNT(input->attributes) > 0) { | 1589 | + if (input->attributes != NULL) { |
| 1654 | - BSL_ASN1_List *dumpList = BSL_LIST_Copy(input->attributes, AttrCopy, HITLS_PKCS12_AttributesFree); | 1590 | + target->attributes = HITLS_X509_AttrsDup(input->attributes, AttrCopy, HITLS_PKCS12_AttributesFree); |
| 1655 | - if (dumpList == NULL) { | 1591 | + if (target->attributes == NULL) { |
| 1656 | HITLS_PKCS12_BagFree(target); | 1592 | HITLS_PKCS12_BagFree(target); |
| 1657 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | 1593 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); |
| 1658 | return NULL; | 1594 | return NULL; |
| 1659 | } | 1595 | } |
| 1660 | - target->attributes = dumpList; | ||
| 1661 | } | 1596 | } |
| 1662 | return target; | 1597 | return target; |
| 1663 | } | 1598 | } |
| @@ -31,10 +31,10 @@ void HITLS_PKCS12_AttributesFree(void *attribute) | |||
| 31 | if (attribute == NULL) { | 31 | if (attribute == NULL) { |
| 32 | return; | 32 | return; |
| 33 | } | 33 | } |
| 34 | - HITLS_PKCS12_SafeBagAttr *attr = (HITLS_PKCS12_SafeBagAttr *)attribute; | 34 | + HITLS_PKCS12_SafeBagAttr *attr = attribute; |
| 35 | - BSL_SAL_FREE(attr->attrValue->data); | 35 | + BSL_SAL_FREE(attr->attrValue.data); |
| 36 | - BSL_SAL_FREE(attr->attrValue); | ||
| 37 | BSL_SAL_FREE(attr); | 36 | BSL_SAL_FREE(attr); |
| 37 | + return; | ||
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | void HITLS_PKCS12_SafeBagFree(HITLS_PKCS12_SafeBag *safeBag) | 40 | void HITLS_PKCS12_SafeBagFree(HITLS_PKCS12_SafeBag *safeBag) |
| @@ -42,8 +42,8 @@ void HITLS_PKCS12_SafeBagFree(HITLS_PKCS12_SafeBag *safeBag) | |||
| 42 | if (safeBag == NULL) { | 42 | if (safeBag == NULL) { |
| 43 | return; | 43 | return; |
| 44 | } | 44 | } |
| 45 | - BSL_LIST_DeleteAll(safeBag->attributes, HITLS_PKCS12_AttributesFree); | 45 | + HITLS_X509_AttrsFree(safeBag->attributes, HITLS_PKCS12_AttributesFree); |
| 46 | - BSL_SAL_FREE(safeBag->attributes); | 46 | + safeBag->attributes = NULL; |
| 47 | BSL_SAL_CleanseData(safeBag->bag->data, safeBag->bag->dataLen); | 47 | BSL_SAL_CleanseData(safeBag->bag->data, safeBag->bag->dataLen); |
| 48 | BSL_SAL_FREE(safeBag->bag->data); | 48 | BSL_SAL_FREE(safeBag->bag->data); |
| 49 | BSL_SAL_FREE(safeBag->bag); | 49 | BSL_SAL_FREE(safeBag->bag); |
| @@ -127,8 +127,8 @@ static void CertBagFree(void *value) | |||
| 127 | } | 127 | } |
| 128 | HITLS_PKCS12_Bag *bag = (HITLS_PKCS12_Bag *)value; | 128 | HITLS_PKCS12_Bag *bag = (HITLS_PKCS12_Bag *)value; |
| 129 | HITLS_X509_CertFree(bag->value.cert); | 129 | HITLS_X509_CertFree(bag->value.cert); |
| 130 | - BSL_LIST_DeleteAll(bag->attributes, HITLS_PKCS12_AttributesFree); | 130 | + HITLS_X509_AttrsFree(bag->attributes, HITLS_PKCS12_AttributesFree); |
| 131 | - BSL_SAL_FREE(bag->attributes); | 131 | + bag->attributes = NULL; |
| 132 | BSL_SAL_FREE(bag); | 132 | BSL_SAL_FREE(bag); |
| 133 | } | 133 | } |
| 134 | 134 | ||
| @@ -139,14 +139,15 @@ void HITLS_PKCS12_Free(HITLS_PKCS12 *p12) | |||
| 139 | } | 139 | } |
| 140 | if (p12->entityCert != NULL) { | 140 | if (p12->entityCert != NULL) { |
| 141 | HITLS_X509_CertFree(p12->entityCert->value.cert); | 141 | HITLS_X509_CertFree(p12->entityCert->value.cert); |
| 142 | - BSL_LIST_DeleteAll(p12->entityCert->attributes, HITLS_PKCS12_AttributesFree); | 142 | + HITLS_X509_AttrsFree(p12->entityCert->attributes, HITLS_PKCS12_AttributesFree); |
| 143 | - BSL_SAL_FREE(p12->entityCert->attributes); | 143 | + p12->entityCert->attributes = NULL; |
| 144 | BSL_SAL_FREE(p12->entityCert); | 144 | BSL_SAL_FREE(p12->entityCert); |
| 145 | } | 145 | } |
| 146 | if (p12->key != NULL) { | 146 | if (p12->key != NULL) { |
| 147 | CRYPT_EAL_PkeyFreeCtx(p12->key->value.key); | 147 | CRYPT_EAL_PkeyFreeCtx(p12->key->value.key); |
| 148 | - BSL_LIST_DeleteAll(p12->key->attributes, HITLS_PKCS12_AttributesFree); | 148 | + p12->key->value.key = NULL; |
| 149 | - BSL_SAL_FREE(p12->key->attributes); | 149 | + HITLS_X509_AttrsFree(p12->key->attributes, HITLS_PKCS12_AttributesFree); |
| 150 | + p12->key->attributes = NULL; | ||
| 150 | BSL_SAL_FREE(p12->key); | 151 | BSL_SAL_FREE(p12->key); |
| 151 | } | 152 | } |
| 152 | BSL_LIST_DeleteAll(p12->certList, CertBagFree); | 153 | BSL_LIST_DeleteAll(p12->certList, CertBagFree); |
| @@ -216,9 +217,9 @@ void HITLS_PKCS12_BagFree(HITLS_PKCS12_Bag *bag) | |||
| 216 | default: | 217 | default: |
| 217 | break; | 218 | break; |
| 218 | } | 219 | } |
| 219 | - BSL_LIST_DeleteAll(bag->attributes, HITLS_PKCS12_AttributesFree); | 220 | + HITLS_X509_AttrsFree(bag->attributes, HITLS_PKCS12_AttributesFree); |
| 220 | - BSL_SAL_FREE(bag->attributes); | 221 | + bag->attributes = NULL; |
| 221 | - BSL_SAL_Free(bag); | 222 | + BSL_SAL_FREE(bag); |
| 222 | return; | 223 | return; |
| 223 | } | 224 | } |
| 224 | 225 | ||
| @@ -35,6 +35,7 @@ | |||
| 35 | 35 | ||
| 36 | 36 | ||
| 37 | 37 | ||
| 38 | + | ||
| 38 | 39 | ||
| 39 | 40 | ||
| 40 | 41 | ||
| @@ -176,6 +177,9 @@ void HITLS_X509_CertFree(HITLS_X509_Cert *cert) | |||
| 176 | BSL_LIST_FREE(cert->tbs.issuerName, NULL); | 177 | BSL_LIST_FREE(cert->tbs.issuerName, NULL); |
| 177 | BSL_LIST_FREE(cert->tbs.subjectName, NULL); | 178 | BSL_LIST_FREE(cert->tbs.subjectName, NULL); |
| 178 | } | 179 | } |
| 180 | + if (cert->signAlgId.algId == (BslCid)CRYPT_PKEY_SM2) { | ||
| 181 | + BSL_SAL_FREE(cert->signAlgId.sm2UserId.data); | ||
| 182 | + } | ||
| 179 | X509_ExtFree(&cert->tbs.ext, false); | 183 | X509_ExtFree(&cert->tbs.ext, false); |
| 180 | BSL_SAL_FREE(cert->rawData); | 184 | BSL_SAL_FREE(cert->rawData); |
| 181 | CRYPT_EAL_PkeyFreeCtx(cert->tbs.ealPubKey); | 185 | CRYPT_EAL_PkeyFreeCtx(cert->tbs.ealPubKey); |
| @@ -444,107 +448,43 @@ static int32_t X509_KeyUsageCheck(HITLS_X509_Cert *cert, bool *val, int32_t valL | |||
| 444 | } | 448 | } |
| 445 | 449 | ||
| 446 | /* RFC2253 https://www.rfc-editor.org/rfc/rfc2253 */ | 450 | /* RFC2253 https://www.rfc-editor.org/rfc/rfc2253 */ |
| 447 | -static int32_t X509GetPrintSNStr(const BSL_ASN1_Buffer *nameType, char *buff, int32_t buffLen, int32_t *usedLen) | ||
| 448 | -{ | ||
| 449 | - if (nameType == NULL || nameType->buff == NULL || nameType->len == 0) { | ||
| 450 | - BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | ||
| 451 | - return HITLS_X509_ERR_INVALID_PARAM; | ||
| 452 | - } | ||
| 453 | - | ||
| 454 | - BslOidString oid = { | ||
| 455 | - .octs = (char *)nameType->buff, | ||
| 456 | - .octetLen = nameType->len, | ||
| 457 | - }; | ||
| 458 | - const char *oidName = BSL_OBJ_GetOidNameFromOid(&oid); | ||
| 459 | - if (oidName == NULL) { | ||
| 460 | - BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_CERT_INVALID_DN); | ||
| 461 | - return HITLS_X509_ERR_CERT_INVALID_DN; | ||
| 462 | - } | ||
| 463 | - if (strcpy_s(buff, buffLen, oidName) != EOK) { | ||
| 464 | - BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_CERT_INVALID_DN); | ||
| 465 | - return HITLS_X509_ERR_CERT_INVALID_DN; | ||
| 466 | - } | ||
| 467 | - | ||
| 468 | - *usedLen = strlen(oidName); | ||
| 469 | - return HITLS_X509_SUCCESS; | ||
| 470 | -} | ||
| 471 | - | ||
| 472 | -static int32_t X509PrintNameNode(const HITLS_X509_NameNode *nameNode, char *buff, int32_t buffLen, int32_t *usedLen) | ||
| 473 | -{ | ||
| 474 | - if (nameNode->layer == 1) { | ||
| 475 | - return HITLS_X509_SUCCESS; | ||
| 476 | - } | ||
| 477 | - int offset = 0; | ||
| 478 | - *usedLen = 0; | ||
| 479 | - /* Get the printable type */ | ||
| 480 | - int32_t ret = X509GetPrintSNStr(&nameNode->nameType, buff, buffLen, &offset); | ||
| 481 | - if (ret != HITLS_X509_SUCCESS) { | ||
| 482 | - return ret; | ||
| 483 | - } | ||
| 484 | - /* print '=' between type and value */ | ||
| 485 | - if (buffLen - offset < 2) { // 2 denote buffer is enough to place two character, i.e '=' and '\0' | ||
| 486 | - BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | ||
| 487 | - return HITLS_X509_ERR_INVALID_PARAM; | ||
| 488 | - } | ||
| 489 | - buff[offset] = '='; | ||
| 490 | - offset++; | ||
| 491 | - /* print 'value' */ | ||
| 492 | - if (nameNode->nameValue.buff == NULL || nameNode->nameValue.len == 0) { | ||
| 493 | - BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | ||
| 494 | - return HITLS_X509_ERR_INVALID_PARAM; | ||
| 495 | - } | ||
| 496 | - if (memcpy_s(buff + offset, buffLen - offset, nameNode->nameValue.buff, nameNode->nameValue.len) != EOK) { | ||
| 497 | - BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_CERT_INVALID_DN); | ||
| 498 | - return HITLS_X509_ERR_CERT_INVALID_DN; | ||
| 499 | - } | ||
| 500 | - offset += nameNode->nameValue.len; | ||
| 501 | - *usedLen = offset; | ||
| 502 | - return HITLS_X509_SUCCESS; | ||
| 503 | -} | ||
| 504 | - | ||
| 505 | static int32_t GetDistinguishNameStrFromList(BSL_ASN1_List *nameList, BSL_Buffer *buff) | 451 | static int32_t GetDistinguishNameStrFromList(BSL_ASN1_List *nameList, BSL_Buffer *buff) |
| 506 | { | 452 | { |
| 507 | - if (nameList == NULL || BSL_LIST_COUNT(nameList) == 0) { | 453 | + int64_t writeNum = 0; |
| 508 | - BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | 454 | + uint8_t *dnBuf = NULL; |
| 509 | - return HITLS_X509_ERR_INVALID_PARAM; | 455 | + uint32_t dnBufLen = 0; |
| 456 | + BSL_UIO *bufUio = BSL_UIO_New(BSL_UIO_MemMethod()); | ||
| 457 | + if (bufUio == NULL) { | ||
| 458 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_PRINT_UIO); | ||
| 459 | + return HITLS_X509_ERR_PRINT_UIO; | ||
| 510 | } | 460 | } |
| 511 | - uint32_t offset = 0; | 461 | + int32_t ret = HITLS_X509_PrintCtrl(HITLS_X509_PRINT_DN, nameList, sizeof(BslList), bufUio); |
| 512 | - int32_t ret; | 462 | + if (ret != HITLS_X509_SUCCESS) { |
| 513 | - char tmpBuffStr[MAX_DN_STR_LEN] = {0}; | 463 | + goto ERR; |
| 514 | - char *tmpBuff = tmpBuffStr; | ||
| 515 | - uint32_t tmpBuffLen = MAX_DN_STR_LEN; | ||
| 516 | - (void)BSL_LIST_GET_FIRST(nameList); | ||
| 517 | - HITLS_X509_NameNode *firstNameNode = BSL_LIST_GET_NEXT(nameList); | ||
| 518 | - HITLS_X509_NameNode *nameNode = firstNameNode; | ||
| 519 | - while (nameNode != NULL) { | ||
| 520 | - if (tmpBuffLen - offset < 2) { // 2 denote buffer is enough to place two character, i.e ',' and '\0' | ||
| 521 | - ret = HITLS_X509_ERR_INVALID_PARAM; | ||
| 522 | - BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | ||
| 523 | - return HITLS_X509_ERR_INVALID_PARAM; | ||
| 524 | - } | ||
| 525 | - if (nameNode != firstNameNode && nameNode->layer == 2) { | ||
| 526 | - *tmpBuff = ','; | ||
| 527 | - tmpBuff++; | ||
| 528 | - offset++; | ||
| 529 | - } | ||
| 530 | - int32_t eachUsedLen = 0; | ||
| 531 | - ret = X509PrintNameNode(nameNode, tmpBuff, tmpBuffLen - offset, &eachUsedLen); | ||
| 532 | - if (ret != HITLS_X509_SUCCESS) { | ||
| 533 | - BSL_ERR_PUSH_ERROR(ret); | ||
| 534 | - return ret; | ||
| 535 | - } | ||
| 536 | - tmpBuff += eachUsedLen; | ||
| 537 | - offset += eachUsedLen; | ||
| 538 | - nameNode = BSL_LIST_GET_NEXT(nameList); | ||
| 539 | } | 464 | } |
| 540 | - buff->data = BSL_SAL_Calloc(offset + 1, sizeof(char)); | 465 | + ret = BSL_UIO_Ctrl(bufUio, BSL_UIO_GET_WRITE_NUM, (int32_t)sizeof(writeNum), (void *)&writeNum); |
| 541 | - if (buff->data == NULL) { | 466 | + if (ret != BSL_SUCCESS) { |
| 542 | - BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | 467 | + goto ERR; |
| 543 | - return BSL_MALLOC_FAIL; | ||
| 544 | } | 468 | } |
| 545 | - (void)memcpy_s(buff->data, offset + 1, tmpBuffStr, offset); | 469 | + dnBuf = BSL_SAL_Calloc(writeNum + 1, sizeof(uint8_t)); |
| 546 | - buff->dataLen = offset; | 470 | + if (dnBuf == NULL) { |
| 471 | + ret = BSL_MALLOC_FAIL; | ||
| 472 | + goto ERR; | ||
| 473 | + } | ||
| 474 | + ret = BSL_UIO_Read(bufUio, dnBuf, writeNum + 1, &dnBufLen); | ||
| 475 | + BSL_UIO_Free(bufUio); | ||
| 476 | + if (ret != BSL_SUCCESS || dnBufLen != writeNum) { | ||
| 477 | + ret = HITLS_X509_ERR_PRINT_UIO; | ||
| 478 | + goto ERR; | ||
| 479 | + } | ||
| 480 | + buff->data = dnBuf; | ||
| 481 | + buff->dataLen = dnBufLen; | ||
| 547 | return HITLS_X509_SUCCESS; | 482 | return HITLS_X509_SUCCESS; |
| 483 | +ERR: | ||
| 484 | + BSL_SAL_Free(dnBuf); | ||
| 485 | + BSL_UIO_Free(bufUio); | ||
| 486 | + BSL_ERR_PUSH_ERROR(ret); | ||
| 487 | + return ret; | ||
| 548 | } | 488 | } |
| 549 | 489 | ||
| 550 | static int32_t X509_GetDistinguishNameStr(HITLS_X509_Cert *cert, BSL_Buffer *val, int32_t opt) | 490 | static int32_t X509_GetDistinguishNameStr(HITLS_X509_Cert *cert, BSL_Buffer *val, int32_t opt) |
| @@ -664,13 +604,13 @@ static int32_t X509_CertGetCtrl(HITLS_X509_Cert *cert, int32_t cmd, void *val, i | |||
| 664 | return HITLS_X509_GetPubKey(cert->tbs.ealPubKey, val); | 604 | return HITLS_X509_GetPubKey(cert->tbs.ealPubKey, val); |
| 665 | case HITLS_X509_GET_SIGNALG: | 605 | case HITLS_X509_GET_SIGNALG: |
| 666 | return HITLS_X509_GetSignAlg(cert->signAlgId.algId, val, valLen); | 606 | return HITLS_X509_GetSignAlg(cert->signAlgId.algId, val, valLen); |
| 667 | - case HITLS_X509_GET_SUBJECT_DNNAME: | 607 | + case HITLS_X509_GET_SUBJECT_DN: |
| 668 | return HITLS_X509_GetList(cert->tbs.subjectName, val, valLen); | 608 | return HITLS_X509_GetList(cert->tbs.subjectName, val, valLen); |
| 669 | - case HITLS_X509_GET_ISSUER_DNNAME: | 609 | + case HITLS_X509_GET_ISSUER_DN: |
| 670 | return HITLS_X509_GetList(cert->tbs.issuerName, val, valLen); | 610 | return HITLS_X509_GetList(cert->tbs.issuerName, val, valLen); |
| 671 | - case HITLS_X509_GET_SUBJECT_DNNAME_STR: | 611 | + case HITLS_X509_GET_SUBJECT_DN_STR: |
| 672 | return X509_GetDistinguishNameStr(cert, val, HITLS_X509_SUBJECT_DN_NAME); | 612 | return X509_GetDistinguishNameStr(cert, val, HITLS_X509_SUBJECT_DN_NAME); |
| 673 | - case HITLS_X509_GET_ISSUER_DNNAME_STR: | 613 | + case HITLS_X509_GET_ISSUER_DN_STR: |
| 674 | return X509_GetDistinguishNameStr(cert, val, HITLS_X509_ISSUER_DN_NAME); | 614 | return X509_GetDistinguishNameStr(cert, val, HITLS_X509_ISSUER_DN_NAME); |
| 675 | case HITLS_X509_GET_SERIALNUM_STR: | 615 | case HITLS_X509_GET_SERIALNUM_STR: |
| 676 | return X509_GetSerialNumStr(cert, val); | 616 | return X509_GetSerialNumStr(cert, val); |
| @@ -729,9 +669,9 @@ static int32_t CertSet(void *dest, int32_t size, void *val, int32_t valLen, SetP | |||
| 729 | 669 | ||
| 730 | static int32_t HITLS_X509_SetCsrExt(HITLS_X509_Ext *ext, HITLS_X509_Csr *csr) | 670 | static int32_t HITLS_X509_SetCsrExt(HITLS_X509_Ext *ext, HITLS_X509_Csr *csr) |
| 731 | { | 671 | { |
| 732 | - HITLS_X509_Attr attr = {0}; | 672 | + HITLS_X509_Ext *csrExt = NULL; |
| 733 | int32_t ret = HITLS_X509_AttrCtrl( | 673 | int32_t ret = HITLS_X509_AttrCtrl( |
| 734 | - csr->reqInfo.attributes, HITLS_X509_ATTR_GET_REQUESTED_EXTENSIONS, &attr, sizeof(HITLS_X509_Attr)); | 674 | + csr->reqInfo.attributes, HITLS_X509_ATTR_GET_REQUESTED_EXTENSIONS, &csrExt, sizeof(HITLS_X509_Ext *)); |
| 735 | if (ret == HITLS_X509_ERR_ATTR_NOT_FOUND) { | 675 | if (ret == HITLS_X509_ERR_ATTR_NOT_FOUND) { |
| 736 | return ret; | 676 | return ret; |
| 737 | } | 677 | } |
| @@ -739,7 +679,6 @@ static int32_t HITLS_X509_SetCsrExt(HITLS_X509_Ext *ext, HITLS_X509_Csr *csr) | |||
| 739 | BSL_ERR_PUSH_ERROR(ret); | 679 | BSL_ERR_PUSH_ERROR(ret); |
| 740 | return ret; | 680 | return ret; |
| 741 | } | 681 | } |
| 742 | - HITLS_X509_Ext *csrExt = (HITLS_X509_Ext *)attr.value; | ||
| 743 | ret = HITLS_X509_ExtReplace(ext, csrExt); | 682 | ret = HITLS_X509_ExtReplace(ext, csrExt); |
| 744 | X509_ExtFree(csrExt, true); | 683 | X509_ExtFree(csrExt, true); |
| 745 | return ret; | 684 | return ret; |
| @@ -781,9 +720,9 @@ static int32_t X509_CertSetCtrl(HITLS_X509_Cert *cert, int32_t cmd, void *val, i | |||
| 781 | return ret; | 720 | return ret; |
| 782 | case HITLS_X509_SET_PUBKEY: | 721 | case HITLS_X509_SET_PUBKEY: |
| 783 | return HITLS_X509_SetPkey(&cert->tbs.ealPubKey, val); | 722 | return HITLS_X509_SetPkey(&cert->tbs.ealPubKey, val); |
| 784 | - case HITLS_X509_SET_ISSUER_DNNAME: | 723 | + case HITLS_X509_SET_ISSUER_DN: |
| 785 | return HITLS_X509_SetNameList(&cert->tbs.issuerName, val, valLen); | 724 | return HITLS_X509_SetNameList(&cert->tbs.issuerName, val, valLen); |
| 786 | - case HITLS_X509_SET_SUBJECT_DNNAME: | 725 | + case HITLS_X509_SET_SUBJECT_DN: |
| 787 | return HITLS_X509_SetNameList(&cert->tbs.subjectName, val, valLen); | 726 | return HITLS_X509_SetNameList(&cert->tbs.subjectName, val, valLen); |
| 788 | case HITLS_X509_SET_CSR_EXT: | 727 | case HITLS_X509_SET_CSR_EXT: |
| 789 | return HITLS_X509_SetCsrExt(&cert->tbs.ext, val); | 728 | return HITLS_X509_SetCsrExt(&cert->tbs.ext, val); |
| @@ -1084,13 +1023,13 @@ static int32_t CheckCertTbs(HITLS_X509_Cert *cert) | |||
| 1084 | if (cert == NULL) { | 1023 | if (cert == NULL) { |
| 1085 | return HITLS_X509_ERR_INVALID_PARAM; | 1024 | return HITLS_X509_ERR_INVALID_PARAM; |
| 1086 | } | 1025 | } |
| 1087 | - if (BSL_LIST_COUNT(cert->tbs.ext.extList) != 0 && cert->tbs.version != HITLS_CERT_VERSION_3) { | 1026 | + if (BSL_LIST_COUNT(cert->tbs.ext.extList) > 0 && cert->tbs.version != HITLS_CERT_VERSION_3) { |
| 1088 | return HITLS_X509_ERR_CERT_INACCURACY_VERSION; | 1027 | return HITLS_X509_ERR_CERT_INACCURACY_VERSION; |
| 1089 | } | 1028 | } |
| 1090 | if (cert->tbs.serialNum.buff == NULL || cert->tbs.serialNum.len == 0) { | 1029 | if (cert->tbs.serialNum.buff == NULL || cert->tbs.serialNum.len == 0) { |
| 1091 | return HITLS_X509_ERR_CERT_INVALID_SERIAL_NUM; | 1030 | return HITLS_X509_ERR_CERT_INVALID_SERIAL_NUM; |
| 1092 | } | 1031 | } |
| 1093 | - if (BSL_LIST_COUNT(cert->tbs.issuerName) == 0 || BSL_LIST_COUNT(cert->tbs.subjectName) == 0) { | 1032 | + if (BSL_LIST_COUNT(cert->tbs.issuerName) <= 0 || BSL_LIST_COUNT(cert->tbs.subjectName) <= 0) { |
| 1094 | return HITLS_X509_ERR_CERT_INVALID_DN; | 1033 | return HITLS_X509_ERR_CERT_INVALID_DN; |
| 1095 | } | 1034 | } |
| 1096 | if ((cert->tbs.validTime.flag & BSL_TIME_BEFORE_SET) == 0 || (cert->tbs.validTime.flag & BSL_TIME_AFTER_SET) == 0) { | 1035 | if ((cert->tbs.validTime.flag & BSL_TIME_BEFORE_SET) == 0 || (cert->tbs.validTime.flag & BSL_TIME_AFTER_SET) == 0) { |
| @@ -1267,5 +1206,9 @@ int32_t HITLS_X509_CertSign(uint32_t mdId, const CRYPT_EAL_PkeyCtx *prvKey, cons | |||
| 1267 | cert->tbs.tbsRawDataLen = 0; | 1206 | cert->tbs.tbsRawDataLen = 0; |
| 1268 | BSL_SAL_FREE(cert->rawData); | 1207 | BSL_SAL_FREE(cert->rawData); |
| 1269 | cert->rawDataLen = 0; | 1208 | cert->rawDataLen = 0; |
| 1209 | + if (cert->signAlgId.algId == (BslCid)CRYPT_PKEY_SM2) { | ||
| 1210 | + BSL_SAL_FREE(cert->signAlgId.sm2UserId.data); | ||
| 1211 | + cert->signAlgId.sm2UserId.dataLen = 0; | ||
| 1212 | + } | ||
| 1270 | return HITLS_X509_Sign(mdId, prvKey, algParam, cert, (HITLS_X509_SignCb)CertSignCb); | 1213 | return HITLS_X509_Sign(mdId, prvKey, algParam, cert, (HITLS_X509_SignCb)CertSignCb); |
| 1271 | } | 1214 | } |
| @@ -19,6 +19,7 @@ | |||
| 19 | 19 | ||
| 20 | 20 | ||
| 21 | 21 | ||
| 22 | + | ||
| 22 | 23 | ||
| 23 | 24 | ||
| 24 | 25 | ||
| @@ -113,6 +114,18 @@ typedef struct _HITLS_X509_AttrEntry { | |||
| 113 | BSL_ASN1_Buffer attrValue; | 114 | BSL_ASN1_Buffer attrValue; |
| 114 | } HITLS_X509_AttrEntry; | 115 | } HITLS_X509_AttrEntry; |
| 115 | 116 | ||
| 117 | +typedef int32_t (*HITLS_X509_ParseAttrItemCb)(BslList *attrList, HITLS_X509_AttrEntry *attrEntry); | ||
| 118 | + | ||
| 119 | +typedef int32_t (*HITLS_X509_EncodeAttrItemCb)(void *attrNode, HITLS_X509_AttrEntry *attrEntry); | ||
| 120 | + | ||
| 121 | +typedef void *(*HITLS_X509_DupAttrItemCb)(const void *item); | ||
| 122 | + | ||
| 123 | +typedef void (*HITLS_X509_FreeAttrItemCb)(void *item); | ||
| 124 | +typedef struct _HITLS_X509_Attrs { | ||
| 125 | + uint8_t flag; | ||
| 126 | + BslList *list; // The list of HITLS_X509_AttrEntry | ||
| 127 | +} HITLS_X509_Attrs; | ||
| 128 | + | ||
| 116 | typedef struct _HITLS_X509_ValidTime { | 129 | typedef struct _HITLS_X509_ValidTime { |
| 117 | uint8_t flag; | 130 | uint8_t flag; |
| 118 | BSL_TIME start; | 131 | BSL_TIME start; |
| @@ -123,6 +136,7 @@ typedef struct _HITLS_X509_Asn1AlgId { | |||
| 123 | BslCid algId; | 136 | BslCid algId; |
| 124 | union { | 137 | union { |
| 125 | CRYPT_RSA_PssPara rsaPssParam; | 138 | CRYPT_RSA_PssPara rsaPssParam; |
| 139 | + BSL_Buffer sm2UserId; | ||
| 126 | }; | 140 | }; |
| 127 | } HITLS_X509_Asn1AlgId; | 141 | } HITLS_X509_Asn1AlgId; |
| 128 | 142 | ||
| @@ -193,18 +207,29 @@ int32_t HITLS_X509_CmpNameNode(BSL_ASN1_List *nameOri, BSL_ASN1_List *name); | |||
| 193 | 207 | ||
| 194 | int32_t HITLS_X509_CheckAlg(CRYPT_EAL_PkeyCtx *pubkey, HITLS_X509_Asn1AlgId *subAlg); | 208 | int32_t HITLS_X509_CheckAlg(CRYPT_EAL_PkeyCtx *pubkey, HITLS_X509_Asn1AlgId *subAlg); |
| 195 | 209 | ||
| 196 | -int32_t HITLS_X509_ParseAttrList(BSL_ASN1_Buffer *attrs, BSL_ASN1_List *list); | 210 | +int32_t HITLS_X509_ParseAttrList(BSL_ASN1_Buffer *attrBuff, HITLS_X509_Attrs *attrs, HITLS_X509_ParseAttrItemCb parseCb, |
| 211 | + HITLS_X509_FreeAttrItemCb freeItem); | ||
| 212 | + | ||
| 213 | +HITLS_X509_Attrs *HITLS_X509_AttrsDup(const HITLS_X509_Attrs *src, HITLS_X509_DupAttrItemCb dupCb, | ||
| 214 | + HITLS_X509_FreeAttrItemCb freeCb); | ||
| 197 | 215 | ||
| 198 | void HITLS_X509_AttrEntryFree(HITLS_X509_AttrEntry *attr); | 216 | void HITLS_X509_AttrEntryFree(HITLS_X509_AttrEntry *attr); |
| 199 | 217 | ||
| 200 | int32_t HITLS_X509_SignAsn1Data(CRYPT_EAL_PkeyCtx *priv, CRYPT_MD_AlgId mdId, | 218 | int32_t HITLS_X509_SignAsn1Data(CRYPT_EAL_PkeyCtx *priv, CRYPT_MD_AlgId mdId, |
| 201 | BSL_ASN1_Buffer *asn1Buff, BSL_Buffer *rawSignBuff, BSL_ASN1_BitString *sign); | 219 | BSL_ASN1_Buffer *asn1Buff, BSL_Buffer *rawSignBuff, BSL_ASN1_BitString *sign); |
| 202 | 220 | ||
| 203 | -int32_t HITLS_X509_EncodeAttrList(uint8_t tag, BSL_ASN1_List *list, BSL_ASN1_Buffer *attr); | 221 | +HITLS_X509_Attrs *HITLS_X509_AttrsNew(void); |
| 222 | + | ||
| 223 | +void HITLS_X509_AttrsFree(HITLS_X509_Attrs *attrs, HITLS_X509_FreeAttrItemCb freeItem); | ||
| 224 | + | ||
| 225 | +int32_t HITLS_X509_EncodeAttrList(uint8_t tag, HITLS_X509_Attrs *attrs, HITLS_X509_EncodeAttrItemCb encodeCb, | ||
| 226 | + BSL_ASN1_Buffer *attrAsn1); | ||
| 204 | 227 | ||
| 205 | int32_t HITLS_X509_CheckSignature(const CRYPT_EAL_PkeyCtx *pubKey, uint8_t *rawData, uint32_t rawDataLen, | 228 | int32_t HITLS_X509_CheckSignature(const CRYPT_EAL_PkeyCtx *pubKey, uint8_t *rawData, uint32_t rawDataLen, |
| 206 | HITLS_X509_Asn1AlgId *alg, BSL_ASN1_BitString *signature); | 229 | HITLS_X509_Asn1AlgId *alg, BSL_ASN1_BitString *signature); |
| 207 | 230 | ||
| 231 | +int32_t HITLS_X509_SetSm2UserId(BSL_Buffer *sm2UserId, void *val, int32_t valLen); | ||
| 232 | + | ||
| 208 | int32_t HITLS_X509_RefUp(BSL_SAL_RefCount *references, int32_t *val, int32_t valLen); | 233 | int32_t HITLS_X509_RefUp(BSL_SAL_RefCount *references, int32_t *val, int32_t valLen); |
| 209 | 234 | ||
| 210 | int32_t HITLS_X509_GetList(BslList *list, void *val, int32_t valLen); | 235 | int32_t HITLS_X509_GetList(BslList *list, void *val, int32_t valLen); |
| @@ -46,6 +46,47 @@ typedef enum { | |||
| 46 | } HITLS_X509_ATTR_IDX; | 46 | } HITLS_X509_ATTR_IDX; |
| 47 | 47 | ||
| 48 | 48 | ||
| 49 | + | ||
| 50 | + | ||
| 51 | + | ||
| 52 | +HITLS_X509_Attrs *HITLS_X509_AttrsNew(void) | ||
| 53 | +{ | ||
| 54 | + HITLS_X509_Attrs *attrs = (HITLS_X509_Attrs *)BSL_SAL_Calloc(1, sizeof(HITLS_X509_Attrs)); | ||
| 55 | + if (attrs == NULL) { | ||
| 56 | + return NULL; | ||
| 57 | + } | ||
| 58 | + attrs->list = BSL_LIST_New(sizeof(HITLS_X509_AttrEntry *)); | ||
| 59 | + if (attrs->list == NULL) { | ||
| 60 | + BSL_SAL_Free(attrs); | ||
| 61 | + return NULL; | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + attrs->flag = HITLS_X509_ATTRS_GEN_FLAG; | ||
| 65 | + return attrs; | ||
| 66 | +} | ||
| 67 | + | ||
| 68 | +/* | ||
| 69 | +* For pkcs12, parsing and encoding operation uses deep copy, and it use callback function to free | ||
| 70 | +* For csr, parsing operation uses shallow copy, and encoding operation uses deep copy | ||
| 71 | +*/ | ||
| 72 | +void HITLS_X509_AttrsFree(HITLS_X509_Attrs *attrs, HITLS_X509_FreeAttrItemCb freeItem) | ||
| 73 | +{ | ||
| 74 | + if (attrs == NULL) { | ||
| 75 | + return; | ||
| 76 | + } | ||
| 77 | + if (freeItem != NULL) { | ||
O | |||
| 78 | + BSL_LIST_FREE(attrs->list, (BSL_LIST_PFUNC_FREE)freeItem); | ||
| 79 | + BSL_SAL_Free(attrs); | ||
| 80 | + return; | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + if (attrs->flag & HITLS_X509_ATTRS_PARSE_FLAG) { | ||
| 84 | + BSL_LIST_FREE(attrs->list, NULL); | ||
| 85 | + } else { | ||
| 86 | + BSL_LIST_FREE(attrs->list, (BSL_LIST_PFUNC_FREE)HITLS_X509_AttrEntryFree); | ||
| 87 | + } | ||
| 88 | + BSL_SAL_Free(attrs); | ||
| 89 | +} | ||
| 49 | 90 | ||
| 50 | int32_t HITLS_X509_EncodeObjIdentity(BslCid cid, BSL_ASN1_Buffer *asnBuff) | 91 | int32_t HITLS_X509_EncodeObjIdentity(BslCid cid, BSL_ASN1_Buffer *asnBuff) |
| 51 | { | 92 | { |
| @@ -61,6 +102,35 @@ int32_t HITLS_X509_EncodeObjIdentity(BslCid cid, BSL_ASN1_Buffer *asnBuff) | |||
| 61 | return HITLS_X509_SUCCESS; | 102 | return HITLS_X509_SUCCESS; |
| 62 | } | 103 | } |
| 63 | 104 | ||
| 105 | +HITLS_X509_Attrs *HITLS_X509_AttrsDup(const HITLS_X509_Attrs *src, HITLS_X509_DupAttrItemCb dupCb, | ||
| 106 | + HITLS_X509_FreeAttrItemCb freeCb) | ||
| 107 | +{ | ||
| 108 | + if (src == NULL || BSL_LIST_COUNT(src->list) <= 0 || | ||
| 109 | + dupCb == NULL || freeCb == NULL) { | ||
| 110 | + return NULL; | ||
| 111 | + } | ||
| 112 | + HITLS_X509_Attrs *dst = HITLS_X509_AttrsNew(); | ||
| 113 | + if (dst == NULL) { | ||
| 114 | + return NULL; | ||
| 115 | + } | ||
| 116 | + void *node = NULL; | ||
| 117 | + for (node = BSL_LIST_GET_FIRST(src->list); node != NULL; node = BSL_LIST_GET_NEXT(src->list)) { | ||
| 118 | + void *dstEntry = dupCb(node); | ||
| 119 | + if (dstEntry == NULL) { | ||
| 120 | + HITLS_X509_AttrsFree(dst, freeCb); | ||
| 121 | + return NULL; | ||
| 122 | + } | ||
| 123 | + int32_t ret = BSL_LIST_AddElement(dst->list, dstEntry, BSL_LIST_POS_END); | ||
| 124 | + if (ret != BSL_SUCCESS) { | ||
| 125 | + freeCb(dstEntry); | ||
| 126 | + HITLS_X509_AttrsFree(dst, freeCb); | ||
| 127 | + return NULL; | ||
| 128 | + } | ||
| 129 | + } | ||
| 130 | + dst->flag = src->flag; | ||
| 131 | + return dst; | ||
| 132 | +} | ||
| 133 | + | ||
| 64 | void HITLS_X509_AttrEntryFree(HITLS_X509_AttrEntry *attr) | 134 | void HITLS_X509_AttrEntryFree(HITLS_X509_AttrEntry *attr) |
| 65 | { | 135 | { |
| 66 | if (attr == NULL) { | 136 | if (attr == NULL) { |
| @@ -100,7 +170,7 @@ int32_t HITLS_X509_ParseAttr(BSL_ASN1_Buffer *attrItem, HITLS_X509_AttrEntry *at | |||
| 100 | int32_t HITLS_X509_ParseAttrsListAsnItem(uint32_t layer, BSL_ASN1_Buffer *asn, void *cbParam, BSL_ASN1_List *list) | 170 | int32_t HITLS_X509_ParseAttrsListAsnItem(uint32_t layer, BSL_ASN1_Buffer *asn, void *cbParam, BSL_ASN1_List *list) |
| 101 | { | 171 | { |
| 102 | (void)layer; | 172 | (void)layer; |
| 103 | - (void)cbParam; | 173 | + HITLS_X509_ParseAttrItemCb parseCb = cbParam; |
| 104 | HITLS_X509_AttrEntry *node = BSL_SAL_Calloc(1, sizeof(HITLS_X509_AttrEntry)); | 174 | HITLS_X509_AttrEntry *node = BSL_SAL_Calloc(1, sizeof(HITLS_X509_AttrEntry)); |
| 105 | if (node == NULL) { | 175 | if (node == NULL) { |
| 106 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | 176 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); |
| @@ -111,34 +181,44 @@ int32_t HITLS_X509_ParseAttrsListAsnItem(uint32_t layer, BSL_ASN1_Buffer *asn, v | |||
| 111 | int32_t ret = HITLS_X509_ParseAttr(asn, node); | 181 | int32_t ret = HITLS_X509_ParseAttr(asn, node); |
| 112 | if (ret != BSL_SUCCESS) { | 182 | if (ret != BSL_SUCCESS) { |
| 113 | BSL_ERR_PUSH_ERROR(ret); | 183 | BSL_ERR_PUSH_ERROR(ret); |
| 114 | - goto ERR; | 184 | + goto EXIT; |
| 185 | + } | ||
| 186 | + if (parseCb != NULL) { | ||
| 187 | + ret = parseCb(list, node); | ||
| 188 | + if (ret != BSL_SUCCESS) { | ||
| 189 | + BSL_ERR_PUSH_ERROR(ret); | ||
| 190 | + } | ||
| 191 | + goto EXIT; | ||
| 115 | } | 192 | } |
| 116 | 193 | ||
| 117 | ret = BSL_LIST_AddElement(list, node, BSL_LIST_POS_AFTER); | 194 | ret = BSL_LIST_AddElement(list, node, BSL_LIST_POS_AFTER); |
| 118 | if (ret != BSL_SUCCESS) { | 195 | if (ret != BSL_SUCCESS) { |
| 119 | BSL_ERR_PUSH_ERROR(ret); | 196 | BSL_ERR_PUSH_ERROR(ret); |
| 120 | - goto ERR; | 197 | + goto EXIT; |
| 121 | } | 198 | } |
| 122 | 199 | ||
| 123 | return ret; | 200 | return ret; |
| 124 | -ERR: | 201 | +EXIT: |
| 125 | - HITLS_X509_AttrEntryFree(node); | 202 | + BSL_SAL_FREE(node); |
| 126 | return ret; | 203 | return ret; |
| 127 | } | 204 | } |
| 128 | 205 | ||
| 129 | -int32_t HITLS_X509_ParseAttrList(BSL_ASN1_Buffer *attrs, BSL_ASN1_List *list) | 206 | +int32_t HITLS_X509_ParseAttrList(BSL_ASN1_Buffer *attrBuff, HITLS_X509_Attrs *attrs, HITLS_X509_ParseAttrItemCb parseCb, |
| 207 | + HITLS_X509_FreeAttrItemCb freeItem) | ||
| 130 | { | 208 | { |
| 131 | - if (attrs->tag == 0 || attrs->buff == NULL || attrs->len == 0) { | 209 | + if (attrBuff->tag == 0 || attrBuff->buff == NULL || attrBuff->len == 0) { |
| 132 | return HITLS_X509_SUCCESS; | 210 | return HITLS_X509_SUCCESS; |
| 133 | } | 211 | } |
| 134 | 212 | ||
| 135 | uint8_t expTag[] = {BSL_ASN1_TAG_CONSTRUCTED | BSL_ASN1_TAG_SEQUENCE}; | 213 | uint8_t expTag[] = {BSL_ASN1_TAG_CONSTRUCTED | BSL_ASN1_TAG_SEQUENCE}; |
| 136 | BSL_ASN1_DecodeListParam listParam = {1, expTag}; | 214 | BSL_ASN1_DecodeListParam listParam = {1, expTag}; |
| 137 | - int32_t ret = BSL_ASN1_DecodeListItem(&listParam, attrs, HITLS_X509_ParseAttrsListAsnItem, NULL, list); | 215 | + int32_t ret = BSL_ASN1_DecodeListItem(&listParam, attrBuff, &HITLS_X509_ParseAttrsListAsnItem, parseCb, |
| 216 | + attrs->list); | ||
| 138 | if (ret != BSL_SUCCESS) { | 217 | if (ret != BSL_SUCCESS) { |
| 139 | - BSL_LIST_DeleteAll(list, NULL); | 218 | + BSL_LIST_DeleteAll(attrs->list, freeItem); |
| 140 | - BSL_ERR_PUSH_ERROR(ret); | 219 | + return ret; |
| 141 | } | 220 | } |
| 221 | + attrs->flag = HITLS_X509_ATTRS_PARSE_FLAG; | ||
| 142 | return ret; | 222 | return ret; |
| 143 | } | 223 | } |
| 144 | 224 | ||
| @@ -150,30 +230,28 @@ static int32_t CmpAttrEntryByCid(const void *attrEntry, const void *cid) | |||
| 150 | return node->cid == *(BslCid *)oid ? 0 : 1; | 230 | return node->cid == *(BslCid *)oid ? 0 : 1; |
| 151 | } | 231 | } |
| 152 | 232 | ||
| 153 | -typedef int32_t (*EncodeAttrCb)(void *attrItem, BSL_ASN1_Buffer *attrValue); | 233 | +typedef int32_t (*EncodeAttrCb)(HITLS_X509_Attrs *attributes, void *val, int32_t valLen, BSL_ASN1_Buffer *attrValue); |
| 154 | 234 | ||
| 155 | -typedef int32_t (*DecodeAttrCb)(HITLS_X509_AttrEntry *attrEntry, void *attrItem); | 235 | +typedef int32_t (*DecodeAttrCb)(HITLS_X509_Attrs *attributes, HITLS_X509_AttrEntry *attrEntry, void *val, |
| 236 | + int32_t valLen); | ||
| 156 | 237 | ||
| 157 | -static int32_t EncodeReqExtAttr(void *attrItem, BSL_ASN1_Buffer *attrValue) | 238 | +static int32_t EncodeReqExtAttr(HITLS_X509_Attrs *attributes, void *val, int32_t valLen, BSL_ASN1_Buffer *attrValue) |
| 158 | { | 239 | { |
| 159 | - if (attrItem == NULL) { | 240 | + (void)valLen; |
| 160 | - BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | 241 | + (void)attributes; |
| 161 | - return HITLS_X509_ERR_INVALID_PARAM; | 242 | + HITLS_X509_Ext *ext = (HITLS_X509_Ext *)val; |
| 162 | - } | ||
| 163 | - HITLS_X509_Ext *ext = (HITLS_X509_Ext *)attrItem; | ||
| 164 | return HITLS_X509_EncodeExt(BSL_ASN1_TAG_CONSTRUCTED | BSL_ASN1_TAG_SET, ext->extList, attrValue); | 243 | return HITLS_X509_EncodeExt(BSL_ASN1_TAG_CONSTRUCTED | BSL_ASN1_TAG_SET, ext->extList, attrValue); |
| 165 | } | 244 | } |
| 166 | 245 | ||
| 167 | -static int32_t SetAttr(BSL_ASN1_List *attributes, void *val, uint32_t valLen, EncodeAttrCb encodeAttrCb) | 246 | +static int32_t SetAttr(HITLS_X509_Attrs *attributes, BslCid cid, void *val, uint32_t valLen, EncodeAttrCb encodeAttrCb) |
| 168 | { | 247 | { |
| 169 | - HITLS_X509_Attr *attr = (HITLS_X509_Attr *)val; | 248 | + if (val == NULL) { |
| 170 | - if (valLen != sizeof(HITLS_X509_Attr)) { | ||
| 171 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | 249 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); |
| 172 | return HITLS_X509_ERR_INVALID_PARAM; | 250 | return HITLS_X509_ERR_INVALID_PARAM; |
| 173 | } | 251 | } |
| 174 | 252 | ||
| 175 | /* Check if the attribute already exists. */ | 253 | /* Check if the attribute already exists. */ |
| 176 | - if (BSL_LIST_Search(attributes, &attr->cid, CmpAttrEntryByCid, NULL) != NULL) { | 254 | + if (BSL_LIST_Search(attributes->list, &cid, CmpAttrEntryByCid, NULL) != NULL) { |
| 177 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_SET_ATTR_REPEAT); | 255 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_SET_ATTR_REPEAT); |
| 178 | return HITLS_X509_ERR_SET_ATTR_REPEAT; | 256 | return HITLS_X509_ERR_SET_ATTR_REPEAT; |
| 179 | } | 257 | } |
| @@ -183,31 +261,39 @@ static int32_t SetAttr(BSL_ASN1_List *attributes, void *val, uint32_t valLen, En | |||
| 183 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | 261 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); |
| 184 | return BSL_MALLOC_FAIL; | 262 | return BSL_MALLOC_FAIL; |
| 185 | } | 263 | } |
| 186 | - int32_t ret = HITLS_X509_EncodeObjIdentity(attr->cid, &attrEntry->attrId); | 264 | + int32_t ret = HITLS_X509_EncodeObjIdentity(cid, &attrEntry->attrId); |
| 187 | if (ret != HITLS_X509_SUCCESS) { | 265 | if (ret != HITLS_X509_SUCCESS) { |
| 266 | + BSL_ERR_PUSH_ERROR(ret); | ||
| 188 | goto ERR; | 267 | goto ERR; |
| 189 | } | 268 | } |
| 190 | 269 | ||
| 191 | - ret = encodeAttrCb(attr->value, &attrEntry->attrValue); | 270 | + ret = encodeAttrCb(attributes, val, valLen, &attrEntry->attrValue); |
| 192 | if (ret != HITLS_X509_SUCCESS) { | 271 | if (ret != HITLS_X509_SUCCESS) { |
| 272 | + BSL_ERR_PUSH_ERROR(ret); | ||
| 193 | goto ERR; | 273 | goto ERR; |
| 194 | } | 274 | } |
| 195 | - attrEntry->cid = attr->cid; | 275 | + attrEntry->cid = cid; |
| 196 | - ret = BSL_LIST_AddElement(attributes, attrEntry, BSL_LIST_POS_END); | 276 | + ret = BSL_LIST_AddElement(attributes->list, attrEntry, BSL_LIST_POS_END); |
| 197 | if (ret != BSL_SUCCESS) { | 277 | if (ret != BSL_SUCCESS) { |
| 278 | + BSL_ERR_PUSH_ERROR(ret); | ||
| 198 | goto ERR; | 279 | goto ERR; |
| 199 | } | 280 | } |
| 200 | 281 | ||
| 201 | return ret; | 282 | return ret; |
| 202 | 283 | ||
| 203 | ERR: | 284 | ERR: |
| 204 | - BSL_ERR_PUSH_ERROR(ret); | ||
| 205 | HITLS_X509_AttrEntryFree(attrEntry); | 285 | HITLS_X509_AttrEntryFree(attrEntry); |
| 206 | return ret; | 286 | return ret; |
| 207 | } | 287 | } |
| 208 | 288 | ||
| 209 | -static int32_t DecodeReqExtAttr(HITLS_X509_AttrEntry *attrEntry, void *attrItem) | 289 | +static int32_t DecodeReqExtAttr(HITLS_X509_Attrs *attributes, HITLS_X509_AttrEntry *attrEntry, void *val, |
| 290 | + int32_t valLen) | ||
| 210 | { | 291 | { |
| 292 | + (void)attributes; | ||
| 293 | + if (valLen != sizeof(HITLS_X509_Ext *)) { | ||
| 294 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | ||
| 295 | + return HITLS_X509_ERR_INVALID_PARAM; | ||
| 296 | + } | ||
| 211 | HITLS_X509_Ext *ext = HITLS_X509_ExtNew(HITLS_X509_EXT_TYPE_CSR); | 297 | HITLS_X509_Ext *ext = HITLS_X509_ExtNew(HITLS_X509_EXT_TYPE_CSR); |
| 212 | if (ext == NULL) { | 298 | if (ext == NULL) { |
| 213 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | 299 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); |
| @@ -219,27 +305,27 @@ static int32_t DecodeReqExtAttr(HITLS_X509_AttrEntry *attrEntry, void *attrItem) | |||
| 219 | BSL_ERR_PUSH_ERROR(ret); | 305 | BSL_ERR_PUSH_ERROR(ret); |
| 220 | return ret; | 306 | return ret; |
| 221 | } | 307 | } |
| 222 | - *(HITLS_X509_Ext **)attrItem = ext; | 308 | + *(HITLS_X509_Ext **)val = ext; |
| 223 | return HITLS_X509_SUCCESS; | 309 | return HITLS_X509_SUCCESS; |
| 224 | } | 310 | } |
| 225 | 311 | ||
| 226 | -static int32_t GetAttr(BSL_ASN1_List *attributes, void *val, int32_t valLen, DecodeAttrCb decodeAttrCb) | 312 | +static int32_t GetAttr(HITLS_X509_Attrs *attributes, BslCid cid, void *val, int32_t valLen, DecodeAttrCb decodeAttrCb) |
| 227 | { | 313 | { |
| 228 | - HITLS_X509_Attr *attr = val; | 314 | + if (val == NULL) { |
| 229 | - if (attr->value != NULL || valLen != sizeof(HITLS_X509_Attr)) { | ||
| 230 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | 315 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); |
| 231 | return HITLS_X509_ERR_INVALID_PARAM; | 316 | return HITLS_X509_ERR_INVALID_PARAM; |
| 232 | } | 317 | } |
| 233 | 318 | ||
| 234 | - HITLS_X509_AttrEntry *attrEntry = BSL_LIST_Search(attributes, &attr->cid, CmpAttrEntryByCid, NULL); | 319 | + HITLS_X509_AttrEntry *attrEntry = BSL_LIST_Search(attributes->list, &cid, CmpAttrEntryByCid, NULL); |
| 235 | if (attrEntry == NULL) { | 320 | if (attrEntry == NULL) { |
| 236 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_ATTR_NOT_FOUND); | 321 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_ATTR_NOT_FOUND); |
| 237 | return HITLS_X509_ERR_ATTR_NOT_FOUND; | 322 | return HITLS_X509_ERR_ATTR_NOT_FOUND; |
| 238 | } | 323 | } |
| 239 | - return decodeAttrCb(attrEntry, &attr->value); | 324 | + |
| 325 | + return decodeAttrCb(attributes, attrEntry, val, valLen); | ||
| 240 | } | 326 | } |
| 241 | 327 | ||
| 242 | -int32_t HITLS_X509_AttrCtrl(BslList *attributes, int32_t cmd, void *val, int32_t valLen) | 328 | +int32_t HITLS_X509_AttrCtrl(HITLS_X509_Attrs *attributes, HITLS_X509_AttrCmd cmd, void *val, int32_t valLen) |
| 243 | { | 329 | { |
| 244 | if (attributes == NULL || val == NULL) { | 330 | if (attributes == NULL || val == NULL) { |
| 245 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | 331 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); |
| @@ -247,10 +333,9 @@ int32_t HITLS_X509_AttrCtrl(BslList *attributes, int32_t cmd, void *val, int32_t | |||
| 247 | } | 333 | } |
| 248 | switch (cmd) { | 334 | switch (cmd) { |
| 249 | case HITLS_X509_ATTR_SET_REQUESTED_EXTENSIONS: | 335 | case HITLS_X509_ATTR_SET_REQUESTED_EXTENSIONS: |
| 250 | - return SetAttr(attributes, val, valLen, EncodeReqExtAttr); | 336 | + return SetAttr(attributes, BSL_CID_REQ_EXTENSION, val, valLen, EncodeReqExtAttr); |
| 251 | case HITLS_X509_ATTR_GET_REQUESTED_EXTENSIONS: | 337 | case HITLS_X509_ATTR_GET_REQUESTED_EXTENSIONS: |
| 252 | - ((HITLS_X509_Attr *)val)->cid = BSL_CID_REQ_EXTENSION; | 338 | + return GetAttr(attributes, BSL_CID_REQ_EXTENSION, val, valLen, DecodeReqExtAttr); |
| 253 | - return GetAttr(attributes, val, valLen, DecodeReqExtAttr); | ||
| 254 | default: | 339 | default: |
| 255 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | 340 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); |
| 256 | return HITLS_X509_ERR_INVALID_PARAM; | 341 | return HITLS_X509_ERR_INVALID_PARAM; |
| @@ -286,16 +371,17 @@ void FreeAsnAttrsBuff(BSL_ASN1_Buffer *asnBuf, int32_t count) | |||
| 286 | BSL_SAL_FREE(asnBuf); | 371 | BSL_SAL_FREE(asnBuf); |
| 287 | } | 372 | } |
| 288 | 373 | ||
| 289 | -int32_t HITLS_X509_EncodeAttrList(uint8_t tag, BSL_ASN1_List *list, BSL_ASN1_Buffer *attr) | 374 | +int32_t HITLS_X509_EncodeAttrList(uint8_t tag, HITLS_X509_Attrs *attrs, HITLS_X509_EncodeAttrItemCb encodeCb, |
| 375 | + BSL_ASN1_Buffer *attrAsn1) | ||
| 290 | { | 376 | { |
| 291 | - int32_t count = BSL_LIST_COUNT(list); | 377 | + if (attrs == NULL || attrs->list == NULL || BSL_LIST_COUNT(attrs->list) <= 0) { |
| 292 | - /* no attribute */ | 378 | + attrAsn1->tag = tag; |
| 293 | - if (count <= 0) { | 379 | + attrAsn1->buff = NULL; |
| 294 | - attr->tag = tag; | 380 | + attrAsn1->len = 0; |
| 295 | - attr->buff = NULL; | ||
| 296 | - attr->len = 0; | ||
| 297 | return HITLS_X509_SUCCESS; | 381 | return HITLS_X509_SUCCESS; |
| 298 | } | 382 | } |
| 383 | + int32_t count = BSL_LIST_COUNT(attrs->list); | ||
| 384 | + /* no attribute */ | ||
| 299 | BSL_ASN1_Buffer *asnBuf = BSL_SAL_Calloc(count, sizeof(BSL_ASN1_Buffer)); | 385 | BSL_ASN1_Buffer *asnBuf = BSL_SAL_Calloc(count, sizeof(BSL_ASN1_Buffer)); |
| 300 | if (asnBuf == NULL) { | 386 | if (asnBuf == NULL) { |
| 301 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | 387 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); |
| @@ -303,23 +389,36 @@ int32_t HITLS_X509_EncodeAttrList(uint8_t tag, BSL_ASN1_List *list, BSL_ASN1_Buf | |||
| 303 | } | 389 | } |
| 304 | int32_t iter = 0; | 390 | int32_t iter = 0; |
| 305 | int32_t ret; | 391 | int32_t ret; |
| 306 | - HITLS_X509_AttrEntry *node = NULL; | 392 | + void *node = NULL; |
| 307 | - for (node = BSL_LIST_GET_FIRST(list); node != NULL; node = BSL_LIST_GET_NEXT(list), iter++) { | 393 | + for (node = BSL_LIST_GET_FIRST(attrs->list); node != NULL; node = BSL_LIST_GET_NEXT(attrs->list), iter++) { |
| 308 | - ret = HITLS_X509_EncodeAttrEntry(node, &asnBuf[iter]); | 394 | + HITLS_X509_AttrEntry attrEntry = {}; |
| 395 | + if (encodeCb != NULL) { | ||
| 396 | + ret = encodeCb(node, &attrEntry); | ||
| 397 | + if (ret != HITLS_X509_SUCCESS) { | ||
| 398 | + FreeAsnAttrsBuff(asnBuf, count); | ||
| 399 | + return ret; | ||
| 400 | + } | ||
| 401 | + } else { | ||
| 402 | + attrEntry = *(HITLS_X509_AttrEntry *)node; | ||
| 403 | + } | ||
| 404 | + ret = HITLS_X509_EncodeAttrEntry(&attrEntry, &asnBuf[iter]); | ||
| 405 | + if (encodeCb != NULL) { | ||
| 406 | + BSL_SAL_FREE(attrEntry.attrValue.buff); | ||
| 407 | + } | ||
| 309 | if (ret != HITLS_X509_SUCCESS) { | 408 | if (ret != HITLS_X509_SUCCESS) { |
| 310 | FreeAsnAttrsBuff(asnBuf, count); | 409 | FreeAsnAttrsBuff(asnBuf, count); |
| 311 | - return ret; | 410 | + return ret; |
| 312 | } | 411 | } |
| 313 | } | 412 | } |
| 314 | static BSL_ASN1_TemplateItem attrSeqTempl = {BSL_ASN1_TAG_CONSTRUCTED | BSL_ASN1_TAG_SEQUENCE, 0, 0 }; | 413 | static BSL_ASN1_TemplateItem attrSeqTempl = {BSL_ASN1_TAG_CONSTRUCTED | BSL_ASN1_TAG_SEQUENCE, 0, 0 }; |
| 315 | BSL_ASN1_Template templ = {&attrSeqTempl, 1}; | 414 | BSL_ASN1_Template templ = {&attrSeqTempl, 1}; |
| 316 | - ret = BSL_ASN1_EncodeListItem(BSL_ASN1_TAG_SEQUENCE, count, &templ, asnBuf, iter, attr); | 415 | + ret = BSL_ASN1_EncodeListItem(BSL_ASN1_TAG_SEQUENCE, count, &templ, asnBuf, iter, attrAsn1); |
| 317 | FreeAsnAttrsBuff(asnBuf, count); | 416 | FreeAsnAttrsBuff(asnBuf, count); |
| 318 | if (ret != HITLS_X509_SUCCESS) { | 417 | if (ret != HITLS_X509_SUCCESS) { |
| 319 | BSL_ERR_PUSH_ERROR(ret); | 418 | BSL_ERR_PUSH_ERROR(ret); |
| 320 | return ret; | 419 | return ret; |
| 321 | } | 420 | } |
| 322 | 421 | ||
| 323 | - attr->tag = tag; | 422 | + attrAsn1->tag = tag; |
| 324 | - return HITLS_X509_SUCCESS; | 423 | + return ret; |
| 325 | } | 424 | } |
| @@ -651,6 +651,12 @@ static int32_t X509_CtrlAlgInfo(const CRYPT_EAL_PkeyCtx *pubKey, uint32_t hashId | |||
| 651 | case BSL_CID_RSASSAPSS: | 651 | case BSL_CID_RSASSAPSS: |
| 652 | return CRYPT_EAL_PkeyCtrl((CRYPT_EAL_PkeyCtx *)(uintptr_t)pubKey, CRYPT_CTRL_SET_RSA_EMSA_PSS, | 652 | return CRYPT_EAL_PkeyCtrl((CRYPT_EAL_PkeyCtx *)(uintptr_t)pubKey, CRYPT_CTRL_SET_RSA_EMSA_PSS, |
| 653 | &alg->rsaPssParam, sizeof(CRYPT_RSA_PssPara)); | 653 | &alg->rsaPssParam, sizeof(CRYPT_RSA_PssPara)); |
| 654 | + case BSL_CID_SM2DSAWITHSM3: | ||
| 655 | + if (alg->sm2UserId.data != NULL) { | ||
| 656 | + return CRYPT_EAL_PkeyCtrl((CRYPT_EAL_PkeyCtx *)(uintptr_t)pubKey, CRYPT_CTRL_SET_SM2_USER_ID, | ||
| 657 | + alg->sm2UserId.data, alg->sm2UserId.dataLen); | ||
| 658 | + } | ||
| 659 | + return HITLS_X509_SUCCESS; | ||
| 654 | default: | 660 | default: |
| 655 | return HITLS_X509_SUCCESS; | 661 | return HITLS_X509_SUCCESS; |
| 656 | } | 662 | } |
| @@ -844,6 +850,37 @@ int32_t X509_SetRsaSignParam(CRYPT_EAL_PkeyCtx *prvKey, int32_t mdId, const HITL | |||
| 844 | return HITLS_X509_SUCCESS; | 850 | return HITLS_X509_SUCCESS; |
| 845 | } | 851 | } |
| 846 | 852 | ||
| 853 | +static int32_t X509_SetSm2SignParam(CRYPT_EAL_PkeyCtx *prvKey, int32_t mdId, const HITLS_X509_SignAlgParam *algParam, | ||
| 854 | + HITLS_X509_Asn1AlgId *signAlgId) | ||
| 855 | +{ | ||
| 856 | + int32_t ret; | ||
| 857 | + signAlgId->algId = BSL_OBJ_GetSignIdFromHashAndAsymId((BslCid)CRYPT_PKEY_SM2, (BslCid)mdId); | ||
| 858 | + if (signAlgId->algId == BSL_CID_UNKNOWN) { | ||
| 859 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_ENCODE_SIGNID); | ||
| 860 | + return HITLS_X509_ERR_ENCODE_SIGNID; | ||
| 861 | + } | ||
| 862 | + if (algParam != NULL && algParam->sm2UserId.data != NULL && algParam->sm2UserId.dataLen != 0) { | ||
| 863 | + if (algParam->algId != BSL_CID_SM2DSAWITHSM3) { | ||
| 864 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_MD_NOT_MATCH); | ||
| 865 | + return HITLS_X509_ERR_MD_NOT_MATCH; | ||
| 866 | + } | ||
| 867 | + ret = CRYPT_EAL_PkeyCtrl(prvKey, CRYPT_CTRL_SET_SM2_USER_ID, algParam->sm2UserId.data, | ||
| 868 | + algParam->sm2UserId.dataLen); | ||
| 869 | + if (ret != CRYPT_SUCCESS) { | ||
| 870 | + BSL_ERR_PUSH_ERROR(ret); | ||
| 871 | + return ret; | ||
| 872 | + } | ||
| 873 | + signAlgId->sm2UserId.data = BSL_SAL_Dump(algParam->sm2UserId.data, algParam->sm2UserId.dataLen); | ||
| 874 | + if (signAlgId->sm2UserId.data == NULL) { | ||
| 875 | + BSL_ERR_PUSH_ERROR(BSL_DUMP_FAIL); | ||
| 876 | + return BSL_DUMP_FAIL; | ||
| 877 | + } | ||
| 878 | + signAlgId->sm2UserId.dataLen = algParam->sm2UserId.dataLen; | ||
| 879 | + } | ||
| 880 | + | ||
| 881 | + return HITLS_X509_SUCCESS; | ||
| 882 | +} | ||
| 883 | + | ||
| 847 | int32_t HITLS_X509_Sign(uint32_t mdId, const CRYPT_EAL_PkeyCtx *prvKey, const HITLS_X509_SignAlgParam *algParam, | 884 | int32_t HITLS_X509_Sign(uint32_t mdId, const CRYPT_EAL_PkeyCtx *prvKey, const HITLS_X509_SignAlgParam *algParam, |
| 848 | void *obj, HITLS_X509_SignCb signCb) | 885 | void *obj, HITLS_X509_SignCb signCb) |
| 849 | { | 886 | { |
| @@ -875,20 +912,32 @@ int32_t HITLS_X509_Sign(uint32_t mdId, const CRYPT_EAL_PkeyCtx *prvKey, const HI | |||
| 875 | } | 912 | } |
| 876 | break; | 913 | break; |
| 877 | case CRYPT_PKEY_ECDSA: | 914 | case CRYPT_PKEY_ECDSA: |
| 878 | - case CRYPT_PKEY_SM2: | ||
| 879 | signAlgId.algId = BSL_OBJ_GetSignIdFromHashAndAsymId((BslCid)keyAlgId, (BslCid)mdId); | 915 | signAlgId.algId = BSL_OBJ_GetSignIdFromHashAndAsymId((BslCid)keyAlgId, (BslCid)mdId); |
| 880 | if (signAlgId.algId == BSL_CID_UNKNOWN) { | 916 | if (signAlgId.algId == BSL_CID_UNKNOWN) { |
| 881 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_ENCODE_SIGNID); | 917 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_ENCODE_SIGNID); |
| 882 | return HITLS_X509_ERR_ENCODE_SIGNID; | 918 | return HITLS_X509_ERR_ENCODE_SIGNID; |
| 883 | } | 919 | } |
| 884 | break; | 920 | break; |
| 921 | + case CRYPT_PKEY_SM2: | ||
| 922 | + signKey = CRYPT_EAL_PkeyDupCtx(prvKey); | ||
| 923 | + if (signKey == NULL) { | ||
| 924 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_VFY_DUP_PUBKEY); | ||
| 925 | + return HITLS_X509_ERR_VFY_DUP_PUBKEY; | ||
| 926 | + } | ||
| 927 | + ret = X509_SetSm2SignParam(signKey, mdId, algParam, &signAlgId); | ||
| 928 | + if (ret != HITLS_X509_SUCCESS) { | ||
| 929 | + CRYPT_EAL_PkeyFreeCtx(signKey); | ||
| 930 | + BSL_ERR_PUSH_ERROR(ret); | ||
| 931 | + return ret; | ||
| 932 | + } | ||
| 933 | + break; | ||
| 885 | default: | 934 | default: |
| 886 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_CERT_SIGN_ALG); | 935 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_CERT_SIGN_ALG); |
| 887 | return HITLS_X509_ERR_CERT_SIGN_ALG; | 936 | return HITLS_X509_ERR_CERT_SIGN_ALG; |
| 888 | } | 937 | } |
| 889 | 938 | ||
| 890 | ret = signCb(mdId, signKey, &signAlgId, obj); | 939 | ret = signCb(mdId, signKey, &signAlgId, obj); |
| 891 | - if (keyAlgId == CRYPT_PKEY_RSA) { | 940 | + if (keyAlgId == CRYPT_PKEY_RSA || keyAlgId == CRYPT_PKEY_SM2) { |
| 892 | CRYPT_EAL_PkeyFreeCtx(signKey); | 941 | CRYPT_EAL_PkeyFreeCtx(signKey); |
| 893 | } | 942 | } |
| 894 | return ret; | 943 | return ret; |
| @@ -28,6 +28,9 @@ | |||
| 28 | 28 | ||
| 29 | 29 | ||
| 30 | 30 | ||
| 31 | + | ||
| 32 | + | ||
| 33 | + | ||
| 31 | int32_t HITLS_X509_RefUp(BSL_SAL_RefCount *references, int32_t *val, int32_t valLen) | 34 | int32_t HITLS_X509_RefUp(BSL_SAL_RefCount *references, int32_t *val, int32_t valLen) |
| 32 | { | 35 | { |
| 33 | if (val == NULL || valLen != sizeof(int)) { | 36 | if (val == NULL || valLen != sizeof(int)) { |
| @@ -387,6 +390,16 @@ static int32_t X509AddDnNamesToList(BslList *list, BslList *dnNameList) | |||
| 387 | return ret; | 390 | return ret; |
| 388 | } | 391 | } |
| 389 | 392 | ||
| 393 | +BslList *HITLS_X509_DnListNew() | ||
| 394 | +{ | ||
| 395 | + return BSL_LIST_New(sizeof(HITLS_X509_NameNode)); | ||
| 396 | +} | ||
| 397 | + | ||
| 398 | +void HITLS_X509_DnListFree(BslList *dnList) | ||
| 399 | +{ | ||
| 400 | + BSL_LIST_FREE(dnList, (BSL_LIST_PFUNC_FREE)HITLS_X509_FreeNameNode); | ||
| 401 | +} | ||
| 402 | + | ||
| 390 | int32_t HITLS_X509_AddDnName(BslList *list, HITLS_X509_DN *dnNames, int32_t size) | 403 | int32_t HITLS_X509_AddDnName(BslList *list, HITLS_X509_DN *dnNames, int32_t size) |
| 391 | { | 404 | { |
| 392 | if (list == NULL || dnNames == NULL || size <= 0) { | 405 | if (list == NULL || dnNames == NULL || size <= 0) { |
| @@ -457,3 +470,21 @@ int32_t HITLS_X509_GetSerial(BSL_ASN1_Buffer *serial, const void *val, int32_t v | |||
| 457 | buff->dataLen = serial->len; | 470 | buff->dataLen = serial->len; |
| 458 | return HITLS_X509_SUCCESS; | 471 | return HITLS_X509_SUCCESS; |
| 459 | } | 472 | } |
| 473 | + | ||
| 474 | +int32_t HITLS_X509_SetSm2UserId(BSL_Buffer *sm2UserId, void *val, int32_t valLen) | ||
| 475 | +{ | ||
| 476 | + if (valLen < 0 || valLen > SM2_MAX_ID_LENGTH) { | ||
| 477 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | ||
| 478 | + return HITLS_X509_ERR_INVALID_PARAM; | ||
| 479 | + } | ||
| 480 | + | ||
| 481 | + BSL_SAL_FREE(sm2UserId->data); | ||
| 482 | + sm2UserId->data = BSL_SAL_Calloc(valLen, 1u); | ||
| 483 | + if (sm2UserId->data == NULL) { | ||
| 484 | + BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | ||
| 485 | + return BSL_MALLOC_FAIL; | ||
| 486 | + } | ||
| 487 | + (void) memcpy_s(sm2UserId->data, valLen, (uint8_t *)val, valLen); | ||
| 488 | + sm2UserId->dataLen = (uint32_t)valLen; | ||
| 489 | + return HITLS_X509_SUCCESS; | ||
| 490 | +} | ||
| @@ -995,7 +995,7 @@ static int32_t SetExtSan(HITLS_X509_Ext *ext, HITLS_X509_ExtEntry *entry, const | |||
| 995 | { | 995 | { |
| 996 | (void)ext; | 996 | (void)ext; |
| 997 | const HITLS_X509_ExtSan *san = (const HITLS_X509_ExtSan *)val; | 997 | const HITLS_X509_ExtSan *san = (const HITLS_X509_ExtSan *)val; |
| 998 | - if (san->names == NULL || BSL_LIST_COUNT(san->names) == 0) { | 998 | + if (san->names == NULL || BSL_LIST_COUNT(san->names) <= 0) { |
| 999 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_EXT_SAN); | 999 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_EXT_SAN); |
| 1000 | return HITLS_X509_ERR_EXT_SAN; | 1000 | return HITLS_X509_ERR_EXT_SAN; |
| 1001 | } | 1001 | } |
| @@ -1034,7 +1034,7 @@ static int32_t SetExtExKeyUsage(HITLS_X509_Ext *ext, HITLS_X509_ExtEntry *entry, | |||
| 1034 | { | 1034 | { |
| 1035 | (void)ext; | 1035 | (void)ext; |
| 1036 | const HITLS_X509_ExtExKeyUsage *exku = (const HITLS_X509_ExtExKeyUsage *)val; | 1036 | const HITLS_X509_ExtExKeyUsage *exku = (const HITLS_X509_ExtExKeyUsage *)val; |
| 1037 | - if (exku->oidList == NULL || BSL_LIST_COUNT(exku->oidList) == 0) { | 1037 | + if (exku->oidList == NULL || BSL_LIST_COUNT(exku->oidList) <= 0) { |
| 1038 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_EXT_EXTENDED_KU); | 1038 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_EXT_EXTENDED_KU); |
| 1039 | return HITLS_X509_ERR_EXT_EXTENDED_KU; | 1039 | return HITLS_X509_ERR_EXT_EXTENDED_KU; |
| 1040 | } | 1040 | } |
| @@ -1313,7 +1313,7 @@ int32_t HITLS_X509_EncodeExtEntry(BSL_ASN1_List *list, BSL_ASN1_Buffer *ext) | |||
| 1313 | 1313 | ||
| 1314 | int32_t HITLS_X509_EncodeExt(uint8_t tag, BSL_ASN1_List *list, BSL_ASN1_Buffer *ext) | 1314 | int32_t HITLS_X509_EncodeExt(uint8_t tag, BSL_ASN1_List *list, BSL_ASN1_Buffer *ext) |
| 1315 | { | 1315 | { |
| 1316 | - if (BSL_LIST_COUNT(list) == 0) { | 1316 | + if (BSL_LIST_COUNT(list) <= 0) { |
| 1317 | ext->tag = tag; | 1317 | ext->tag = tag; |
| 1318 | ext->len = 0; | 1318 | ext->len = 0; |
| 1319 | ext->buff = NULL; | 1319 | ext->buff = NULL; |
| @@ -1392,7 +1392,7 @@ int32_t HITLS_X509_ExtReplace(HITLS_X509_Ext *dest, HITLS_X509_Ext *src) | |||
| 1392 | certExt->keyUsage = srcExt->keyUsage; | 1392 | certExt->keyUsage = srcExt->keyUsage; |
| 1393 | certExt->extFlags = srcExt->extFlags; | 1393 | certExt->extFlags = srcExt->extFlags; |
| 1394 | 1394 | ||
| 1395 | - if (BSL_LIST_COUNT(src->extList) == 0) { | 1395 | + if (BSL_LIST_COUNT(src->extList) <= 0) { |
| 1396 | BSL_LIST_DeleteAll(dest->extList, (BSL_LIST_PFUNC_FREE)HITLS_X509_ExtEntryFree); | 1396 | BSL_LIST_DeleteAll(dest->extList, (BSL_LIST_PFUNC_FREE)HITLS_X509_ExtEntryFree); |
| 1397 | return HITLS_X509_SUCCESS; | 1397 | return HITLS_X509_SUCCESS; |
| 1398 | } | 1398 | } |
| @@ -123,6 +123,9 @@ void HITLS_X509_CrlFree(HITLS_X509_Crl *crl) | |||
| 123 | } else { | 123 | } else { |
| 124 | BSL_LIST_FREE(crl->tbs.issuerName, NULL); | 124 | BSL_LIST_FREE(crl->tbs.issuerName, NULL); |
| 125 | } | 125 | } |
| 126 | + if (crl->signAlgId.algId == (BslCid)BSL_CID_SM2DSAWITHSM3) { | ||
| 127 | + BSL_SAL_FREE(crl->signAlgId.sm2UserId.data); | ||
| 128 | + } | ||
| 126 | BSL_LIST_FREE(crl->tbs.revokedCerts, (BSL_LIST_PFUNC_FREE)HITLS_X509_CrlRevokedFree); | 129 | BSL_LIST_FREE(crl->tbs.revokedCerts, (BSL_LIST_PFUNC_FREE)HITLS_X509_CrlRevokedFree); |
| 127 | X509_ExtFree(&crl->tbs.crlExt, false); | 130 | X509_ExtFree(&crl->tbs.crlExt, false); |
| 128 | BSL_SAL_ReferencesFree(&(crl->references)); | 131 | BSL_SAL_ReferencesFree(&(crl->references)); |
| @@ -407,7 +410,7 @@ static int32_t X509_EncodeCrlEntry(HITLS_X509_CrlEntry *crlEntry, BSL_ASN1_Buffe | |||
| 407 | BSL_ASN1_TAG_GENERALIZEDTIME : BSL_ASN1_TAG_UTCTIME; | 410 | BSL_ASN1_TAG_GENERALIZEDTIME : BSL_ASN1_TAG_UTCTIME; |
| 408 | asnBuf[1].buff = (uint8_t *)&(crlEntry->time); | 411 | asnBuf[1].buff = (uint8_t *)&(crlEntry->time); |
| 409 | asnBuf[1].len = sizeof(BSL_TIME); | 412 | asnBuf[1].len = sizeof(BSL_TIME); |
| 410 | - if (crlEntry->extList != NULL && BSL_LIST_COUNT(crlEntry->extList) != 0) { | 413 | + if (crlEntry->extList != NULL && BSL_LIST_COUNT(crlEntry->extList) > 0) { |
| 411 | return HITLS_X509_EncodeExtEntry(crlEntry->extList, &asnBuf[2]); // 2 :extensions | 414 | return HITLS_X509_EncodeExtEntry(crlEntry->extList, &asnBuf[2]); // 2 :extensions |
| 412 | } else { | 415 | } else { |
| 413 | asnBuf[2].tag = 0; // 2 :extensions | 416 | asnBuf[2].tag = 0; // 2 :extensions |
| @@ -421,7 +424,7 @@ static int32_t X509_EncodeCrlEntry(HITLS_X509_CrlEntry *crlEntry, BSL_ASN1_Buffe | |||
| 421 | int32_t HITLS_X509_EncodeRevokeCrlList(BSL_ASN1_List *crlList, BSL_ASN1_Buffer *revokeBuf) | 424 | int32_t HITLS_X509_EncodeRevokeCrlList(BSL_ASN1_List *crlList, BSL_ASN1_Buffer *revokeBuf) |
| 422 | { | 425 | { |
| 423 | int32_t count = BSL_LIST_COUNT(crlList); | 426 | int32_t count = BSL_LIST_COUNT(crlList); |
| 424 | - if (count == 0) { | 427 | + if (count <= 0) { |
| 425 | revokeBuf->buff = NULL; | 428 | revokeBuf->buff = NULL; |
| 426 | revokeBuf->len = 0; | 429 | revokeBuf->len = 0; |
| 427 | revokeBuf->tag = BSL_ASN1_TAG_SEQUENCE; | 430 | revokeBuf->tag = BSL_ASN1_TAG_SEQUENCE; |
| @@ -680,7 +683,7 @@ static int32_t X509_CheckCrlTbs(HITLS_X509_Crl *crl) | |||
| 680 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_CRL_INACCURACY_VERSION); | 683 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_CRL_INACCURACY_VERSION); |
| 681 | return HITLS_X509_ERR_CRL_INACCURACY_VERSION; | 684 | return HITLS_X509_ERR_CRL_INACCURACY_VERSION; |
| 682 | } | 685 | } |
| 683 | - if (crl->tbs.crlExt.extList != NULL && BSL_LIST_COUNT(crl->tbs.crlExt.extList) != 0) { | 686 | + if (crl->tbs.crlExt.extList != NULL && BSL_LIST_COUNT(crl->tbs.crlExt.extList) > 0) { |
| 684 | if (crl->tbs.version != 1) { | 687 | if (crl->tbs.version != 1) { |
| 685 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_CRL_INACCURACY_VERSION); | 688 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_CRL_INACCURACY_VERSION); |
| 686 | return HITLS_X509_ERR_CRL_INACCURACY_VERSION; | 689 | return HITLS_X509_ERR_CRL_INACCURACY_VERSION; |
| @@ -688,7 +691,7 @@ static int32_t X509_CheckCrlTbs(HITLS_X509_Crl *crl) | |||
| 688 | } | 691 | } |
| 689 | 692 | ||
| 690 | // Check issuer name | 693 | // Check issuer name |
| 691 | - if (crl->tbs.issuerName == NULL || BSL_LIST_COUNT(crl->tbs.issuerName) == 0) { | 694 | + if (crl->tbs.issuerName == NULL || BSL_LIST_COUNT(crl->tbs.issuerName) <= 0) { |
| 692 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_CRL_ISSUER_EMPTY); | 695 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_CRL_ISSUER_EMPTY); |
| 693 | return HITLS_X509_ERR_CRL_ISSUER_EMPTY; | 696 | return HITLS_X509_ERR_CRL_ISSUER_EMPTY; |
| 694 | } | 697 | } |
| @@ -968,7 +971,7 @@ static int32_t X509_CrlGetCtrl(HITLS_X509_Crl *crl, int32_t cmd, void *val, int3 | |||
| 968 | return X509_CrlGetThisUpdate(crl, val, valLen); | 971 | return X509_CrlGetThisUpdate(crl, val, valLen); |
| 969 | case HITLS_X509_GET_AFTER_TIME: | 972 | case HITLS_X509_GET_AFTER_TIME: |
| 970 | return X509_CrlGetNextUpdate(crl, val, valLen); | 973 | return X509_CrlGetNextUpdate(crl, val, valLen); |
| 971 | - case HITLS_X509_GET_ISSUER_DNNAME: | 974 | + case HITLS_X509_GET_ISSUER_DN: |
| 972 | return HITLS_X509_GetList(crl->tbs.issuerName, val, valLen); | 975 | return HITLS_X509_GetList(crl->tbs.issuerName, val, valLen); |
| 973 | case HITLS_X509_GET_REVOKELIST: | 976 | case HITLS_X509_GET_REVOKELIST: |
| 974 | return X509_CrlGetRevokeList(crl, val, valLen); | 977 | return X509_CrlGetRevokeList(crl, val, valLen); |
| @@ -1133,7 +1136,7 @@ int32_t X509_CrlSetCtrl(HITLS_X509_Crl *crl, int32_t cmd, void *val, int32_t val | |||
| 1133 | switch (cmd) { | 1136 | switch (cmd) { |
| 1134 | case HITLS_X509_SET_VERSION: | 1137 | case HITLS_X509_SET_VERSION: |
| 1135 | return X509_CrlSetVersion(crl, val, valLen); | 1138 | return X509_CrlSetVersion(crl, val, valLen); |
| 1136 | - case HITLS_X509_SET_ISSUER_DNNAME: | 1139 | + case HITLS_X509_SET_ISSUER_DN: |
| 1137 | return HITLS_X509_SetNameList(&crl->tbs.issuerName, val, valLen); | 1140 | return HITLS_X509_SetNameList(&crl->tbs.issuerName, val, valLen); |
| 1138 | case HITLS_X509_SET_BEFORE_TIME: | 1141 | case HITLS_X509_SET_BEFORE_TIME: |
| 1139 | return CrlSetThisUpdaeTime(&crl->tbs.validTime, val, valLen); | 1142 | return CrlSetThisUpdaeTime(&crl->tbs.validTime, val, valLen); |
| @@ -1155,6 +1158,12 @@ int32_t HITLS_X509_CrlCtrl(HITLS_X509_Crl *crl, int32_t cmd, void *val, int32_t | |||
| 1155 | } | 1158 | } |
| 1156 | if (cmd == HITLS_X509_REF_UP) { | 1159 | if (cmd == HITLS_X509_REF_UP) { |
| 1157 | return X509_CrlRefUp(crl, val, valLen); | 1160 | return X509_CrlRefUp(crl, val, valLen); |
| 1161 | + } else if (cmd == HITLS_X509_SET_VEY_SM2_USER_ID) { | ||
| 1162 | + if (crl->signAlgId.algId != (BslCid)BSL_CID_SM2DSAWITHSM3) { | ||
| 1163 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_VFY_SIGNALG_NOT_MATCH); | ||
| 1164 | + return HITLS_X509_ERR_VFY_SIGNALG_NOT_MATCH; | ||
| 1165 | + } | ||
| 1166 | + return HITLS_X509_SetSm2UserId(&crl->signAlgId.sm2UserId, val, valLen); | ||
| 1158 | } else if (cmd >= HITLS_X509_GET_ENCODELEN && cmd < HITLS_X509_SET_VERSION) { | 1167 | } else if (cmd >= HITLS_X509_GET_ENCODELEN && cmd < HITLS_X509_SET_VERSION) { |
| 1159 | return X509_CrlGetCtrl(crl, cmd, val, valLen); | 1168 | return X509_CrlGetCtrl(crl, cmd, val, valLen); |
| 1160 | } else if (cmd < HITLS_X509_EXT_KU_KEYENC) { | 1169 | } else if (cmd < HITLS_X509_EXT_KU_KEYENC) { |
| @@ -1517,5 +1526,9 @@ int32_t HITLS_X509_CrlSign(uint32_t mdId, const CRYPT_EAL_PkeyCtx *prvKey, const | |||
| 1517 | crl->tbs.tbsRawDataLen = 0; | 1526 | crl->tbs.tbsRawDataLen = 0; |
| 1518 | BSL_SAL_FREE(crl->rawData); | 1527 | BSL_SAL_FREE(crl->rawData); |
| 1519 | crl->rawDataLen = 0; | 1528 | crl->rawDataLen = 0; |
| 1529 | + if (crl->signAlgId.algId == (BslCid)BSL_CID_SM2DSAWITHSM3) { | ||
| 1530 | + BSL_SAL_FREE(crl->signAlgId.sm2UserId.data); | ||
| 1531 | + crl->signAlgId.sm2UserId.dataLen = 0; | ||
| 1532 | + } | ||
| 1520 | return HITLS_X509_Sign(mdId, prvKey, algParam, crl, (HITLS_X509_SignCb)CrlSignCb); | 1533 | return HITLS_X509_Sign(mdId, prvKey, algParam, crl, (HITLS_X509_SignCb)CrlSignCb); |
| 1521 | } | 1534 | } |
| @@ -32,7 +32,7 @@ typedef struct _HITLS_X509_ReqInfo { | |||
| 32 | int32_t version; | 32 | int32_t version; |
| 33 | BSL_ASN1_List *subjectName; /* Entry is HITLS_X509_NameNode */ | 33 | BSL_ASN1_List *subjectName; /* Entry is HITLS_X509_NameNode */ |
| 34 | void *ealPubKey; | 34 | void *ealPubKey; |
| 35 | - BSL_ASN1_List *attributes; | 35 | + HITLS_X509_Attrs *attributes; |
| 36 | } HITLS_X509_ReqInfo; | 36 | } HITLS_X509_ReqInfo; |
| 37 | 37 | ||
| 38 | typedef enum { | 38 | typedef enum { |
| @@ -74,7 +74,7 @@ HITLS_X509_Csr *HITLS_X509_CsrNew(void) | |||
| 74 | { | 74 | { |
| 75 | HITLS_X509_Csr *csr = NULL; | 75 | HITLS_X509_Csr *csr = NULL; |
| 76 | BSL_ASN1_List *subjectName = NULL; | 76 | BSL_ASN1_List *subjectName = NULL; |
| 77 | - BSL_ASN1_List *attributes = NULL; | 77 | + HITLS_X509_Attrs *attributes = NULL; |
| 78 | csr = (HITLS_X509_Csr *)BSL_SAL_Calloc(1, sizeof(HITLS_X509_Csr)); | 78 | csr = (HITLS_X509_Csr *)BSL_SAL_Calloc(1, sizeof(HITLS_X509_Csr)); |
| 79 | if (csr == NULL) { | 79 | if (csr == NULL) { |
| 80 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | 80 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); |
| @@ -86,7 +86,7 @@ HITLS_X509_Csr *HITLS_X509_CsrNew(void) | |||
| 86 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | 86 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); |
| 87 | goto ERR; | 87 | goto ERR; |
| 88 | } | 88 | } |
| 89 | - attributes = BSL_LIST_New(sizeof(HITLS_X509_AttrEntry)); | 89 | + attributes = HITLS_X509_AttrsNew(); |
| 90 | if (attributes == NULL) { | 90 | if (attributes == NULL) { |
| 91 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); | 91 | BSL_ERR_PUSH_ERROR(BSL_MALLOC_FAIL); |
| 92 | goto ERR; | 92 | goto ERR; |
| @@ -98,7 +98,7 @@ HITLS_X509_Csr *HITLS_X509_CsrNew(void) | |||
| 98 | return csr; | 98 | return csr; |
| 99 | ERR: | 99 | ERR: |
| 100 | BSL_SAL_FREE(subjectName); | 100 | BSL_SAL_FREE(subjectName); |
| 101 | - BSL_SAL_FREE(attributes); | 101 | + HITLS_X509_AttrsFree(attributes, NULL); |
| 102 | BSL_SAL_FREE(csr); | 102 | BSL_SAL_FREE(csr); |
| 103 | return NULL; | 103 | return NULL; |
| 104 | } | 104 | } |
| @@ -115,13 +115,17 @@ void HITLS_X509_CsrFree(HITLS_X509_Csr *csr) | |||
| 115 | } | 115 | } |
| 116 | if (csr->flag == HITLS_X509_CSR_GEN_FLAG) { | 116 | if (csr->flag == HITLS_X509_CSR_GEN_FLAG) { |
| 117 | BSL_LIST_FREE(csr->reqInfo.subjectName, (BSL_LIST_PFUNC_FREE)HITLS_X509_FreeNameNode); | 117 | BSL_LIST_FREE(csr->reqInfo.subjectName, (BSL_LIST_PFUNC_FREE)HITLS_X509_FreeNameNode); |
| 118 | - BSL_LIST_FREE(csr->reqInfo.attributes, (BSL_LIST_PFUNC_FREE)HITLS_X509_AttrEntryFree); | ||
| 119 | BSL_SAL_FREE(csr->reqInfo.reqInfoRawData); | 118 | BSL_SAL_FREE(csr->reqInfo.reqInfoRawData); |
| 120 | BSL_SAL_FREE(csr->signature.buff); | 119 | BSL_SAL_FREE(csr->signature.buff); |
| 121 | } else { | 120 | } else { |
| 122 | BSL_LIST_FREE(csr->reqInfo.subjectName, NULL); | 121 | BSL_LIST_FREE(csr->reqInfo.subjectName, NULL); |
| 123 | - BSL_LIST_FREE(csr->reqInfo.attributes, NULL); | ||
| 124 | } | 122 | } |
| 123 | + if (csr->signAlgId.algId == (BslCid)BSL_CID_SM2DSAWITHSM3) { | ||
| 124 | + BSL_SAL_FREE(csr->signAlgId.sm2UserId.data); | ||
| 125 | + csr->signAlgId.sm2UserId.dataLen = 0; | ||
| 126 | + } | ||
| 127 | + HITLS_X509_AttrsFree(csr->reqInfo.attributes, NULL); | ||
| 128 | + csr->reqInfo.attributes = NULL; | ||
| 125 | BSL_SAL_FREE(csr->rawData); | 129 | BSL_SAL_FREE(csr->rawData); |
| 126 | CRYPT_EAL_PkeyFreeCtx(csr->reqInfo.ealPubKey); | 130 | CRYPT_EAL_PkeyFreeCtx(csr->reqInfo.ealPubKey); |
| 127 | csr->reqInfo.ealPubKey = NULL; | 131 | csr->reqInfo.ealPubKey = NULL; |
| @@ -173,7 +177,7 @@ static int32_t ParseCertRequestInfo(BSL_ASN1_Buffer *asnArr, HITLS_X509_Csr *csr | |||
| 173 | goto ERR; | 177 | goto ERR; |
| 174 | } | 178 | } |
| 175 | /* attributes */ | 179 | /* attributes */ |
| 176 | - ret = HITLS_X509_ParseAttrList(&asnArr[HITLS_X509_CSR_REQINFO_ATTRS_IDX], csr->reqInfo.attributes); | 180 | + ret = HITLS_X509_ParseAttrList(&asnArr[HITLS_X509_CSR_REQINFO_ATTRS_IDX], csr->reqInfo.attributes, NULL, NULL); |
| 177 | if (ret != BSL_SUCCESS) { | 181 | if (ret != BSL_SUCCESS) { |
| 178 | BSL_ERR_PUSH_ERROR(ret); | 182 | BSL_ERR_PUSH_ERROR(ret); |
| 179 | goto ERR; | 183 | goto ERR; |
| @@ -231,7 +235,8 @@ static int32_t X509CsrBuffAsn1Parse(uint8_t *encode, uint32_t encodeLen, HITLS_X | |||
| 231 | csr->rawDataLen = encodeLen - tempLen; | 235 | csr->rawDataLen = encodeLen - tempLen; |
| 232 | return HITLS_X509_SUCCESS; | 236 | return HITLS_X509_SUCCESS; |
| 233 | ERR: | 237 | ERR: |
| 234 | - BSL_LIST_FREE(csr->reqInfo.attributes, NULL); | 238 | + HITLS_X509_AttrsFree(csr->reqInfo.attributes, NULL); |
| 239 | + csr->reqInfo.attributes = NULL; | ||
| 235 | BSL_LIST_FREE(csr->reqInfo.subjectName, NULL); | 240 | BSL_LIST_FREE(csr->reqInfo.subjectName, NULL); |
| 236 | if (csr->reqInfo.ealPubKey != NULL) { | 241 | if (csr->reqInfo.ealPubKey != NULL) { |
| 237 | CRYPT_EAL_PkeyFreeCtx(csr->reqInfo.ealPubKey); | 242 | CRYPT_EAL_PkeyFreeCtx(csr->reqInfo.ealPubKey); |
| @@ -346,7 +351,7 @@ static int32_t CheckCsrValid(HITLS_X509_Csr *csr) | |||
| 346 | if (csr->reqInfo.ealPubKey == NULL) { | 351 | if (csr->reqInfo.ealPubKey == NULL) { |
| 347 | return HITLS_X509_ERR_CSR_INVALID_PUBKEY; | 352 | return HITLS_X509_ERR_CSR_INVALID_PUBKEY; |
| 348 | } | 353 | } |
| 349 | - if (csr->reqInfo.subjectName == NULL || BSL_LIST_COUNT(csr->reqInfo.subjectName) == 0) { | 354 | + if (csr->reqInfo.subjectName == NULL || BSL_LIST_COUNT(csr->reqInfo.subjectName) <= 0) { |
| 350 | return HITLS_X509_ERR_CSR_INVALID_SUBJECT_DN; | 355 | return HITLS_X509_ERR_CSR_INVALID_SUBJECT_DN; |
| 351 | } | 356 | } |
| 352 | 357 | ||
| @@ -374,7 +379,7 @@ static int32_t EncodeCsrReqInfoItem(HITLS_X509_ReqInfo *reqInfo, BSL_ASN1_Buffer | |||
| 374 | /* encode attribute */ | 379 | /* encode attribute */ |
| 375 | ret = HITLS_X509_EncodeAttrList( | 380 | ret = HITLS_X509_EncodeAttrList( |
| 376 | BSL_ASN1_CLASS_CTX_SPECIFIC | BSL_ASN1_TAG_CONSTRUCTED | HITLS_CSR_CTX_SPECIFIC_TAG_ATTRIBUTE, | 381 | BSL_ASN1_CLASS_CTX_SPECIFIC | BSL_ASN1_TAG_CONSTRUCTED | HITLS_CSR_CTX_SPECIFIC_TAG_ATTRIBUTE, |
| 377 | - reqInfo->attributes, attributes); | 382 | + reqInfo->attributes, NULL, attributes); |
| 378 | if (ret != HITLS_X509_SUCCESS) { | 383 | if (ret != HITLS_X509_SUCCESS) { |
| 379 | BSL_ERR_PUSH_ERROR(ret); | 384 | BSL_ERR_PUSH_ERROR(ret); |
| 380 | goto EXIT; | 385 | goto EXIT; |
| @@ -583,6 +588,16 @@ int32_t HITLS_X509_CsrGenFile(int32_t format, HITLS_X509_Csr *csr, const char *p | |||
| 583 | return ret; | 588 | return ret; |
| 584 | } | 589 | } |
| 585 | 590 | ||
| 591 | +static int32_t X509GetAttr(HITLS_X509_Attrs *attrs, HITLS_X509_Attrs **val, int32_t valLen) | ||
| 592 | +{ | ||
| 593 | + if (val == NULL || valLen != sizeof(HITLS_X509_Attrs *)) { | ||
| 594 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | ||
| 595 | + return HITLS_X509_ERR_INVALID_PARAM; | ||
| 596 | + } | ||
| 597 | + *val = attrs; | ||
| 598 | + return HITLS_X509_SUCCESS; | ||
| 599 | +} | ||
| 600 | + | ||
| 586 | int32_t HITLS_X509_CsrCtrl(HITLS_X509_Csr *csr, int32_t cmd, void *val, int32_t valLen) | 601 | int32_t HITLS_X509_CsrCtrl(HITLS_X509_Csr *csr, int32_t cmd, void *val, int32_t valLen) |
| 587 | { | 602 | { |
| 588 | if (csr == NULL) { | 603 | if (csr == NULL) { |
| @@ -596,7 +611,6 @@ int32_t HITLS_X509_CsrCtrl(HITLS_X509_Csr *csr, int32_t cmd, void *val, int32_t | |||
| 596 | return HITLS_X509_ERR_SET_AFTER_PARSE; | 611 | return HITLS_X509_ERR_SET_AFTER_PARSE; |
| 597 | } | 612 | } |
| 598 | 613 | ||
| 599 | - int32_t ret; | ||
| 600 | switch (cmd) { | 614 | switch (cmd) { |
| 601 | case HITLS_X509_REF_UP: | 615 | case HITLS_X509_REF_UP: |
| 602 | return HITLS_X509_RefUp(&csr->references, val, valLen); | 616 | return HITLS_X509_RefUp(&csr->references, val, valLen); |
| @@ -608,6 +622,12 @@ int32_t HITLS_X509_CsrCtrl(HITLS_X509_Csr *csr, int32_t cmd, void *val, int32_t | |||
| 608 | csr->flag |= HITLS_X509_CSR_GEN_FLAG; | 622 | csr->flag |= HITLS_X509_CSR_GEN_FLAG; |
| 609 | csr->state = HITLS_X509_CSR_STATE_SET; | 623 | csr->state = HITLS_X509_CSR_STATE_SET; |
| 610 | return HITLS_X509_AddDnName(csr->reqInfo.subjectName, (HITLS_X509_DN *)val, valLen); | 624 | return HITLS_X509_AddDnName(csr->reqInfo.subjectName, (HITLS_X509_DN *)val, valLen); |
| 625 | + case HITLS_X509_SET_VEY_SM2_USER_ID: | ||
| 626 | + if (csr->signAlgId.algId != (BslCid)BSL_CID_SM2DSAWITHSM3) { | ||
| 627 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_VFY_SIGNALG_NOT_MATCH); | ||
| 628 | + return HITLS_X509_ERR_VFY_SIGNALG_NOT_MATCH; | ||
| 629 | + } | ||
| 630 | + return HITLS_X509_SetSm2UserId(&csr->signAlgId.sm2UserId, val, valLen); | ||
| 611 | case HITLS_X509_GET_ENCODELEN: | 631 | case HITLS_X509_GET_ENCODELEN: |
| 612 | return HITLS_X509_GetEncodeLen(csr->rawDataLen, val, valLen); | 632 | return HITLS_X509_GetEncodeLen(csr->rawDataLen, val, valLen); |
| 613 | case HITLS_X509_GET_ENCODE: | 633 | case HITLS_X509_GET_ENCODE: |
| @@ -616,14 +636,10 @@ int32_t HITLS_X509_CsrCtrl(HITLS_X509_Csr *csr, int32_t cmd, void *val, int32_t | |||
| 616 | return HITLS_X509_GetPubKey(csr->reqInfo.ealPubKey, val); | 636 | return HITLS_X509_GetPubKey(csr->reqInfo.ealPubKey, val); |
| 617 | case HITLS_X509_GET_SIGNALG: | 637 | case HITLS_X509_GET_SIGNALG: |
| 618 | return HITLS_X509_GetSignAlg(csr->signAlgId.algId, (int32_t *)val, valLen); | 638 | return HITLS_X509_GetSignAlg(csr->signAlgId.algId, (int32_t *)val, valLen); |
| 619 | - case HITLS_X509_GET_SUBJECT_DNNAME: | 639 | + case HITLS_X509_GET_SUBJECT_DN: |
| 620 | return HITLS_X509_GetList(csr->reqInfo.subjectName, val, valLen); | 640 | return HITLS_X509_GetList(csr->reqInfo.subjectName, val, valLen); |
| 621 | case HITLS_X509_CSR_GET_ATTRIBUTES: | 641 | case HITLS_X509_CSR_GET_ATTRIBUTES: |
| 622 | - ret = HITLS_X509_GetList(csr->reqInfo.attributes, val, valLen); | 642 | + return X509GetAttr(csr->reqInfo.attributes, val, valLen); |
| 623 | - if (ret == HITLS_X509_SUCCESS && (csr->flag & HITLS_X509_CSR_PARSE_FLAG) == 0) { | ||
| 624 | - csr->flag |= HITLS_X509_CSR_GEN_FLAG; | ||
| 625 | - } | ||
| 626 | - return ret; | ||
| 627 | default: | 643 | default: |
| 628 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | 644 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); |
| 629 | return HITLS_X509_ERR_INVALID_PARAM; | 645 | return HITLS_X509_ERR_INVALID_PARAM; |
| @@ -704,5 +720,9 @@ int32_t HITLS_X509_CsrSign(uint32_t mdId, const CRYPT_EAL_PkeyCtx *prvKey, const | |||
| 704 | csr->reqInfo.reqInfoRawDataLen = 0; | 720 | csr->reqInfo.reqInfoRawDataLen = 0; |
| 705 | BSL_SAL_FREE(csr->rawData); | 721 | BSL_SAL_FREE(csr->rawData); |
| 706 | csr->rawDataLen = 0; | 722 | csr->rawDataLen = 0; |
| 723 | + if (csr->signAlgId.algId == (BslCid)BSL_CID_SM2DSAWITHSM3) { | ||
| 724 | + BSL_SAL_FREE(csr->signAlgId.sm2UserId.data); | ||
| 725 | + csr->signAlgId.sm2UserId.dataLen = 0; | ||
| 726 | + } | ||
| 707 | return HITLS_X509_Sign(mdId, prvKey, algParam, csr, (HITLS_X509_SignCb)CsrSignCb); | 727 | return HITLS_X509_Sign(mdId, prvKey, algParam, csr, (HITLS_X509_SignCb)CsrSignCb); |
| 708 | } | 728 | } |
| @@ -0,0 +1,43 @@ | |||
| 1 | +/* | ||
| 2 | + * This file is part of the openHiTLS project. | ||
| 3 | + * | ||
| 4 | + * openHiTLS is licensed under the Mulan PSL v2. | ||
| 5 | + * You can use this software according to the terms and conditions of the Mulan PSL v2. | ||
| 6 | + * You may obtain a copy of Mulan PSL v2 at: | ||
| 7 | + * | ||
| 8 | + * http://license.coscl.org.cn/MulanPSL2 | ||
| 9 | + * | ||
| 10 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, | ||
| 11 | + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, | ||
| 12 | + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. | ||
| 13 | + * See the Mulan PSL v2 for more details. | ||
| 14 | + */ | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + | ||
| 20 | + | ||
| 21 | + | ||
| 22 | + | ||
| 23 | +extern "C" { | ||
| 24 | + | ||
| 25 | + | ||
| 26 | +/** | ||
| 27 | + * Print format | ||
| 28 | + */ | ||
| 29 | + | ||
| 30 | + | ||
| 31 | + | ||
| 32 | + | ||
| 33 | +typedef enum { | ||
| 34 | + HITLS_X509_SET_PRINT_FLAG, | ||
| 35 | + HITLS_X509_PRINT_DN, | ||
| 36 | +} HITLS_X509_PrintCmd; | ||
| 37 | + | ||
| 38 | +int32_t HITLS_X509_PrintCtrl(int32_t cmd, void *val, uint32_t valLen, BSL_UIO *uio); | ||
| 39 | + | ||
| 40 | + | ||
| 41 | +} | ||
| 42 | + | ||
| 43 | + | ||
| @@ -0,0 +1,218 @@ | |||
| 1 | +/* | ||
| 2 | + * This file is part of the openHiTLS project. | ||
| 3 | + * | ||
| 4 | + * openHiTLS is licensed under the Mulan PSL v2. | ||
| 5 | + * You can use this software according to the terms and conditions of the Mulan PSL v2. | ||
| 6 | + * You may obtain a copy of Mulan PSL v2 at: | ||
| 7 | + * | ||
| 8 | + * http://license.coscl.org.cn/MulanPSL2 | ||
| 9 | + * | ||
| 10 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, | ||
| 11 | + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, | ||
| 12 | + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. | ||
| 13 | + * See the Mulan PSL v2 for more details. | ||
| 14 | + */ | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + | ||
| 20 | + | ||
| 21 | + | ||
| 22 | + | ||
| 23 | + | ||
| 24 | + | ||
| 25 | + | ||
| 26 | + | ||
| 27 | + | ||
| 28 | +static uint32_t g_nameFlag = HITLS_X509_PRINT_DN_RFC2253; | ||
| 29 | + | ||
| 30 | +static char g_rfc2253Ecsape[] = {',', '+', '"', '\\', '<', '>', ';'}; | ||
| 31 | + | ||
| 32 | + | ||
| 33 | + | ||
| 34 | +static char *GetPrefixFmt(bool preLayerIs2, bool isFirst) | ||
| 35 | +{ | ||
| 36 | + if (preLayerIs2) { | ||
| 37 | + if (g_nameFlag == HITLS_X509_PRINT_DN_RFC2253) { | ||
| 38 | + return "+%s="; | ||
| 39 | + } | ||
| 40 | + return " + %s = "; | ||
| 41 | + } | ||
| 42 | + if (g_nameFlag == HITLS_X509_PRINT_DN_RFC2253) { | ||
| 43 | + return isFirst ? "%s=" : ",%s="; | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + if (g_nameFlag == HITLS_X509_PRINT_DN_ONELINE) { | ||
| 47 | + return isFirst ? "%s = " : ", %s = "; | ||
| 48 | + } | ||
| 49 | + return "%s = "; // multiline | ||
| 50 | +} | ||
| 51 | + | ||
| 52 | +static bool NeedQuote(BSL_ASN1_Buffer *value) | ||
| 53 | +{ | ||
| 54 | + if (g_nameFlag != HITLS_X509_PRINT_DN_ONELINE) { | ||
| 55 | + return false; | ||
| 56 | + } | ||
| 57 | + for (uint32_t i = 0; i < value->len; i++) { | ||
| 58 | + if (i == 0 && (value->buff[i] == '#' || value->buff[i] == ' ')) { | ||
| 59 | + return true; | ||
| 60 | + } | ||
| 61 | + if (value->buff[i] == ',' || value->buff[i] == '<' || value->buff[i] == '>') { | ||
| 62 | + return true; | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + return false; | ||
| 66 | +} | ||
| 67 | + | ||
| 68 | +static bool CharInList(char c, char *list, uint32_t listSize) | ||
| 69 | +{ | ||
| 70 | + for (uint32_t i = 0; i < listSize; i++) { | ||
| 71 | + if (c == list[i]) { | ||
| 72 | + return true; | ||
| 73 | + } | ||
| 74 | + } | ||
| 75 | + return false; | ||
| 76 | +} | ||
| 77 | + | ||
| 78 | +static int32_t PrintDnNameValue(BSL_ASN1_Buffer *value, BSL_UIO *uio) | ||
| 79 | +{ | ||
| 80 | + uint8_t *cur = value->buff; | ||
| 81 | + uint8_t *end = value->buff + value->len; | ||
| 82 | + char quote = '"'; | ||
| 83 | + bool needQuote = NeedQuote(value); | ||
| 84 | + if (needQuote && BSL_ASN1_PrintfBuff(0, uio, "e, 1) != BSL_SUCCESS) { | ||
| 85 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_PRINT_DN); | ||
| 86 | + return HITLS_X509_ERR_PRINT_DN_VALUE; | ||
| 87 | + } | ||
| 88 | + char c; | ||
| 89 | + char *fmt; | ||
| 90 | + int32_t ret; | ||
| 91 | + while (cur != end) { | ||
| 92 | + c = *cur; | ||
| 93 | + /* | ||
| 94 | + * RFC2253: section 2.4 | ||
| 95 | + * Characters that need escaping: | ||
| 96 | + * (1) A space or "#" character occurring at the beginning of the string | ||
| 97 | + * (2) A space character occurring at the end of the string | ||
| 98 | + * (3) One of the characters: ",", "+", """, "\", "<", ">", ";" | ||
| 99 | + */ | ||
| 100 | + fmt = NULL; | ||
| 101 | + if (c < ' ' || c > '~') { // control character | ||
| 102 | + fmt = "\\%02X"; | ||
| 103 | + } else if (g_nameFlag == HITLS_X509_PRINT_DN_RFC2253) { | ||
| 104 | + if ((cur == value->buff && (c == ' ' || c == '#')) || // (1) | ||
| 105 | + (cur + 1 == end && c == ' ') || // (2) | ||
| 106 | + CharInList(c, g_rfc2253Ecsape, RFC2253_ESCAPE_CHAR_CNT)) { // (3) | ||
| 107 | + fmt = "\\%c"; | ||
| 108 | + } | ||
| 109 | + } else if (needQuote && c == '"') { | ||
| 110 | + fmt = "\\%c"; | ||
| 111 | + } | ||
| 112 | + ret = fmt == NULL ? BSL_ASN1_PrintfBuff(0, uio, &c, 1) : BSL_ASN1_Printf(0, uio, fmt, c); | ||
| 113 | + if (ret != BSL_SUCCESS) { | ||
| 114 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_PRINT_DN); | ||
| 115 | + return HITLS_X509_ERR_PRINT_DN_VALUE; | ||
| 116 | + } | ||
| 117 | + cur++; | ||
| 118 | + } | ||
| 119 | + if (needQuote && BSL_ASN1_PrintfBuff(0, uio, "e, 1) != BSL_SUCCESS) { | ||
| 120 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_PRINT_DN); | ||
| 121 | + return HITLS_X509_ERR_PRINT_DN_VALUE; | ||
| 122 | + } | ||
| 123 | + return HITLS_X509_SUCCESS; | ||
| 124 | +} | ||
| 125 | + | ||
| 126 | +int32_t HITLS_X509_PrintDn(uint32_t layer, BSL_ASN1_List *nameList, bool newLine, BSL_UIO *uio) | ||
| 127 | +{ | ||
| 128 | + BslOidString oid = {0}; | ||
| 129 | + const char *oidName = NULL; | ||
| 130 | + bool preLayerIs2 = false; | ||
| 131 | + int8_t namePosFlag = -1; // -1: not start; 0: first; 1: other | ||
| 132 | + int32_t ret; | ||
| 133 | + HITLS_X509_NameNode *name = g_nameFlag == HITLS_X509_PRINT_DN_RFC2253 ? | ||
| 134 | + BSL_LIST_GET_LAST(nameList) : BSL_LIST_GET_FIRST(nameList); | ||
| 135 | + while (name != NULL) { | ||
| 136 | + if (name->layer == 1) { | ||
| 137 | + preLayerIs2 = false; | ||
| 138 | + name = g_nameFlag == HITLS_X509_PRINT_DN_RFC2253 ? BSL_LIST_GET_PREV(nameList) : | ||
| 139 | + BSL_LIST_GET_NEXT(nameList); | ||
| 140 | + continue; | ||
| 141 | + } | ||
| 142 | + namePosFlag = namePosFlag == -1 ? 0 : 1; | ||
| 143 | + oid.octs = (char *)name->nameType.buff; | ||
| 144 | + oid.octetLen = name->nameType.len; | ||
| 145 | + oidName = BSL_OBJ_GetOidNameFromOid(&oid); // multiline format use long name, but now only support short name | ||
| 146 | + if (oidName == NULL) { | ||
| 147 | + oidName = "Unknown"; | ||
| 148 | + } | ||
| 149 | + if (g_nameFlag == HITLS_X509_PRINT_DN_MULTILINE) { | ||
| 150 | + if (namePosFlag == 0) { | ||
| 151 | + ret = BSL_ASN1_PrintfBuff(layer, uio, NULL, 0); | ||
| 152 | + } else if (!preLayerIs2) { | ||
| 153 | + ret = BSL_ASN1_PrintfBuff(0, uio, "\n", strlen("\n")) || BSL_ASN1_PrintfBuff(layer, uio, NULL, 0); | ||
| 154 | + } | ||
| 155 | + if (ret != BSL_SUCCESS) { | ||
| 156 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_PRINT_DN); | ||
| 157 | + return HITLS_X509_ERR_PRINT_DN; | ||
| 158 | + } | ||
| 159 | + } | ||
| 160 | + /* print type */ | ||
| 161 | + if (BSL_ASN1_Printf(0, uio, GetPrefixFmt(preLayerIs2, namePosFlag == 0), oidName) != BSL_SUCCESS) { | ||
| 162 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_PRINT_DN); | ||
| 163 | + return HITLS_X509_ERR_PRINT_DN; | ||
| 164 | + } | ||
| 165 | + /* print value */ | ||
| 166 | + if (name->nameValue.buff != NULL && name->nameValue.len != 0) { | ||
| 167 | + ret = PrintDnNameValue(&name->nameValue, uio); | ||
| 168 | + if (ret != HITLS_X509_SUCCESS) { | ||
| 169 | + return ret; | ||
| 170 | + } | ||
| 171 | + } | ||
| 172 | + preLayerIs2 = name->layer != 1; | ||
| 173 | + name = g_nameFlag == HITLS_X509_PRINT_DN_RFC2253 ? BSL_LIST_GET_PREV(nameList) : | ||
| 174 | + BSL_LIST_GET_NEXT(nameList); | ||
| 175 | + } | ||
| 176 | + if (newLine) { | ||
| 177 | + return BSL_ASN1_PrintfBuff(0, uio, "\n", strlen("\n")) != 0 ? HITLS_X509_ERR_PRINT_DN : HITLS_X509_SUCCESS; | ||
| 178 | + } | ||
| 179 | + return HITLS_X509_SUCCESS; | ||
| 180 | +} | ||
| 181 | + | ||
| 182 | +static int32_t X509_SetPrintFlag(void *val, uint32_t valLen) | ||
| 183 | +{ | ||
| 184 | + if (val == NULL || valLen != sizeof(uint32_t)) { | ||
| 185 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | ||
| 186 | + return HITLS_X509_ERR_INVALID_PARAM; | ||
| 187 | + } | ||
| 188 | + g_nameFlag = *(uint32_t *)val; | ||
| 189 | + return HITLS_X509_SUCCESS; | ||
| 190 | +} | ||
| 191 | + | ||
| 192 | +static int32_t X509_PrintDn(void *val, uint32_t valLen, BSL_UIO *uio) | ||
| 193 | +{ | ||
| 194 | + if (valLen != sizeof(BslList)) { | ||
| 195 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | ||
| 196 | + return HITLS_X509_ERR_INVALID_PARAM; | ||
| 197 | + } | ||
| 198 | + return HITLS_X509_PrintDn(g_nameFlag == HITLS_X509_PRINT_DN_MULTILINE ? 1 : 0, | ||
| 199 | + val, false, uio); | ||
| 200 | +} | ||
| 201 | + | ||
| 202 | +int32_t HITLS_X509_PrintCtrl(int32_t cmd, void *val, uint32_t valLen, BSL_UIO *uio) | ||
| 203 | +{ | ||
| 204 | + if (cmd == HITLS_X509_SET_PRINT_FLAG) { | ||
| 205 | + return X509_SetPrintFlag(val, valLen); | ||
| 206 | + } | ||
| 207 | + if (val == NULL || uio == NULL) { | ||
| 208 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | ||
| 209 | + return HITLS_X509_ERR_INVALID_PARAM; | ||
| 210 | + } | ||
| 211 | + switch (cmd) { | ||
| 212 | + case HITLS_X509_PRINT_DN: | ||
| 213 | + return X509_PrintDn(val, valLen, uio); | ||
| 214 | + default: | ||
| 215 | + BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | ||
| 216 | + return HITLS_X509_ERR_INVALID_PARAM; | ||
| 217 | + } | ||
| 218 | +} | ||
| @@ -35,6 +35,7 @@ typedef struct _HITLS_X509_VerifyParam { | |||
| 35 | int64_t time; | 35 | int64_t time; |
| 36 | uint32_t securityBits; | 36 | uint32_t securityBits; |
| 37 | uint64_t flags; | 37 | uint64_t flags; |
| 38 | + BSL_Buffer sm2UserId; | ||
| 38 | } HITLS_X509_VerifyParam; | 39 | } HITLS_X509_VerifyParam; |
| 39 | 40 | ||
| 40 | struct _HITLS_X509_StoreCtx { | 41 | struct _HITLS_X509_StoreCtx { |
| @@ -76,6 +76,8 @@ void HITLS_X509_StoreCtxFree(HITLS_X509_StoreCtx *ctx) | |||
| 76 | if (ret > 0) { | 76 | if (ret > 0) { |
| 77 | return; | 77 | return; |
| 78 | } | 78 | } |
| 79 | + | ||
| 80 | + BSL_SAL_FREE(ctx->verifyParam.sm2UserId.data); | ||
| 79 | BSL_LIST_FREE(ctx->store, (BSL_LIST_PFUNC_FREE)HITLS_X509_CertFree); | 81 | BSL_LIST_FREE(ctx->store, (BSL_LIST_PFUNC_FREE)HITLS_X509_CertFree); |
| 80 | BSL_LIST_FREE(ctx->crl, (BSL_LIST_PFUNC_FREE)HITLS_X509_CrlFree); | 82 | BSL_LIST_FREE(ctx->crl, (BSL_LIST_PFUNC_FREE)HITLS_X509_CrlFree); |
| 81 | BSL_SAL_ReferencesFree(&ctx->references); | 83 | BSL_SAL_ReferencesFree(&ctx->references); |
| @@ -315,6 +317,8 @@ int32_t HITLS_X509_StoreCtxCtrl(HITLS_X509_StoreCtx *storeCtx, int32_t cmd, void | |||
| 315 | return X509_SetCRL(storeCtx, val, valLen); | 317 | return X509_SetCRL(storeCtx, val, valLen); |
| 316 | case HITLS_X509_STORECTX_REF_UP: | 318 | case HITLS_X509_STORECTX_REF_UP: |
| 317 | return X509_RefUp(storeCtx, val, valLen); | 319 | return X509_RefUp(storeCtx, val, valLen); |
| 320 | + case HITLS_X509_STORECTX_SET_VEY_SM2_USERID: | ||
| 321 | + return HITLS_X509_SetSm2UserId(&storeCtx->verifyParam.sm2UserId, val, valLen); | ||
| 318 | default: | 322 | default: |
| 319 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | 323 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); |
| 320 | return HITLS_X509_ERR_INVALID_PARAM; | 324 | return HITLS_X509_ERR_INVALID_PARAM; |
| @@ -580,6 +584,26 @@ int32_t HITLS_X509_CheckCertRevoked(HITLS_X509_Cert *cert, HITLS_X509_CrlEntry * | |||
| 580 | return HITLS_X509_SUCCESS; | 584 | return HITLS_X509_SUCCESS; |
| 581 | } | 585 | } |
| 582 | 586 | ||
| 587 | +static int32_t X509_StoreCheckSignature(const BSL_Buffer *sm2UserId, const CRYPT_EAL_PkeyCtx *pubKey, | ||
| 588 | + uint8_t *rawData, uint32_t rawDataLen, HITLS_X509_Asn1AlgId *alg, BSL_ASN1_BitString *signature) | ||
| 589 | +{ | ||
| 590 | + bool isHasUserId = true; | ||
| 591 | + if (alg->sm2UserId.data == NULL) { | ||
| 592 | + alg->sm2UserId = *sm2UserId; | ||
| 593 | + isHasUserId = false; | ||
| 594 | + } | ||
| 595 | + int32_t ret = HITLS_X509_CheckSignature(pubKey, rawData, rawDataLen, alg, signature); | ||
| 596 | + if (ret != HITLS_X509_SUCCESS) { | ||
| 597 | + BSL_ERR_PUSH_ERROR(ret); | ||
| 598 | + return ret; | ||
| 599 | + } | ||
| 600 | + if (!isHasUserId) { | ||
| 601 | + alg->sm2UserId.data = NULL; | ||
| 602 | + alg->sm2UserId.dataLen = 0; | ||
| 603 | + } | ||
| 604 | + return ret; | ||
| 605 | +} | ||
| 606 | + | ||
| 583 | int32_t HITLS_X509_CheckCertCrl(HITLS_X509_StoreCtx *storeCtx, HITLS_X509_Cert *cert, HITLS_X509_Cert *parent) | 607 | int32_t HITLS_X509_CheckCertCrl(HITLS_X509_StoreCtx *storeCtx, HITLS_X509_Cert *cert, HITLS_X509_Cert *parent) |
| 584 | { | 608 | { |
| 585 | int32_t ret = HITLS_X509_ERR_CRL_NOT_FOUND; | 609 | int32_t ret = HITLS_X509_ERR_CRL_NOT_FOUND; |
| @@ -613,8 +637,9 @@ int32_t HITLS_X509_CheckCertCrl(HITLS_X509_StoreCtx *storeCtx, HITLS_X509_Cert * | |||
| 613 | BSL_ERR_PUSH_ERROR(ret); | 637 | BSL_ERR_PUSH_ERROR(ret); |
| 614 | return ret; | 638 | return ret; |
| 615 | } | 639 | } |
| 616 | - ret = HITLS_X509_CheckSignature(parent->tbs.ealPubKey, crl->tbs.tbsRawData, crl->tbs.tbsRawDataLen, | 640 | + |
| 617 | - &(crl->signAlgId), &(crl->signature)); | 641 | + ret = X509_StoreCheckSignature(&storeCtx->verifyParam.sm2UserId, parent->tbs.ealPubKey, crl->tbs.tbsRawData, |
| 642 | + crl->tbs.tbsRawDataLen, &(crl->signAlgId), &(crl->signature)); | ||
| 618 | if (ret != HITLS_X509_SUCCESS) { | 643 | if (ret != HITLS_X509_SUCCESS) { |
| 619 | BSL_ERR_PUSH_ERROR(ret); | 644 | BSL_ERR_PUSH_ERROR(ret); |
| 620 | return ret; | 645 | return ret; |
| @@ -664,8 +689,8 @@ int32_t X509_VerifyChainCert(HITLS_X509_StoreCtx *storeCtx, HITLS_X509_List *cha | |||
| 664 | return ret; | 689 | return ret; |
| 665 | } | 690 | } |
| 666 | } | 691 | } |
| 667 | - ret = HITLS_X509_CheckSignature(issue->tbs.ealPubKey, cur->tbs.tbsRawData, cur->tbs.tbsRawDataLen, | 692 | + ret = X509_StoreCheckSignature(&storeCtx->verifyParam.sm2UserId, issue->tbs.ealPubKey, cur->tbs.tbsRawData, |
| 668 | - &cur->signAlgId, &cur->signature); | 693 | + cur->tbs.tbsRawDataLen, &cur->signAlgId, &cur->signature); |
| 669 | if (ret != HITLS_X509_SUCCESS) { | 694 | if (ret != HITLS_X509_SUCCESS) { |
| 670 | return ret; | 695 | return ret; |
| 671 | } | 696 | } |
| @@ -717,7 +742,7 @@ int32_t HITLS_X509_CertVerify(HITLS_X509_StoreCtx *storeCtx, HITLS_X509_List *ch | |||
| 717 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); | 742 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_INVALID_PARAM); |
| 718 | return HITLS_X509_ERR_INVALID_PARAM; | 743 | return HITLS_X509_ERR_INVALID_PARAM; |
| 719 | } | 744 | } |
| 720 | - if (BSL_LIST_COUNT(chain) == 0) { | 745 | + if (BSL_LIST_COUNT(chain) <= 0) { |
| 721 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_CERT_CHAIN_COUNT_IS0); | 746 | BSL_ERR_PUSH_ERROR(HITLS_X509_ERR_CERT_CHAIN_COUNT_IS0); |
| 722 | return HITLS_X509_ERR_CERT_CHAIN_COUNT_IS0; | 747 | return HITLS_X509_ERR_CERT_CHAIN_COUNT_IS0; |
| 723 | } | 748 | } |
| @@ -85,16 +85,16 @@ extern "C" { | |||
| 85 | 85 | ||
| 86 | 86 | ||
| 87 | 87 | ||
| 88 | -#define SM2_VERIFY_PATH "sm2/ca.der:sm2/inter.der" | 88 | +#define SM2_VERIFY_PATH "sm2_with_userid/ca.der:sm2_with_userid/inter.der" |
| 89 | -#define SM2_CHAIN_PATH "sm2/inter.der" | 89 | +#define SM2_CHAIN_PATH "sm2_with_userid/inter.der" |
| 90 | -#define SM2_SERVER_ENC_CERT_PATH "sm2/enc.der" | 90 | +#define SM2_SERVER_ENC_CERT_PATH "sm2_with_userid/enc.der" |
| 91 | -#define SM2_SERVER_ENC_KEY_PATH "sm2/enc.key.der" | 91 | +#define SM2_SERVER_ENC_KEY_PATH "sm2_with_userid/enc.key.der" |
| 92 | -#define SM2_SERVER_SIGN_CERT_PATH "sm2/sign.der" | 92 | +#define SM2_SERVER_SIGN_CERT_PATH "sm2_with_userid/sign.der" |
| 93 | -#define SM2_SERVER_SIGN_KEY_PATH "sm2/sign.key.der" | 93 | +#define SM2_SERVER_SIGN_KEY_PATH "sm2_with_userid/sign.key.der" |
| 94 | -#define SM2_CLIENT_ENC_CERT_PATH "sm2/enc22.der" | 94 | +#define SM2_CLIENT_ENC_CERT_PATH "sm2_with_userid/enc22.der" |
| 95 | -#define SM2_CLIENT_ENC_KEY_PATH "sm2/enc22.key.der" | 95 | +#define SM2_CLIENT_ENC_KEY_PATH "sm2_with_userid/enc22.key.der" |
| 96 | -#define SM2_CLIENT_SIGN_CERT_PATH "sm2/sign22.der" | 96 | +#define SM2_CLIENT_SIGN_CERT_PATH "sm2_with_userid/sign22.der" |
| 97 | -#define SM2_CLIENT_SIGN_KEY_PATH "sm2/sign22.key.der" | 97 | +#define SM2_CLIENT_SIGN_KEY_PATH "sm2_with_userid/sign22.key.der" |
| 98 | 98 | ||
| 99 | typedef struct ProcessSt HLT_Process; | 99 | typedef struct ProcessSt HLT_Process; |
| 100 | 100 | ||
| @@ -58,8 +58,8 @@ build_depend_code() | |||
| 58 | 58 | ||
| 59 | build_hitls_code() | 59 | build_hitls_code() |
| 60 | { | 60 | { |
| 61 | - bsl_features="err hash init list log sal sal_mem sal_thread sal_lock sal_time sal_file sal_net sal_str sal_dl tlv \ | 61 | + bsl_features="err hash init list buffer log sal sal_mem sal_thread sal_lock sal_time sal_file sal_net sal_str \ |
| 62 | - uio_plt uio_buffer uio_sctp uio_tcp usrdata asn1 obj base64 pem params" | 62 | + sal_dl tlv uio_plt uio_buffer uio_sctp uio_tcp uio_mem usrdata asn1 obj base64 pem params" |
| 63 | 63 | ||
| 64 | # Compile openHiTLS | 64 | # Compile openHiTLS |
| 65 | cd ${HITLS_ROOT_DIR}/build | 65 | cd ${HITLS_ROOT_DIR}/build |
| @@ -65,131 +65,131 @@ if(ENABLE_UIO_SCTP OR ENABLE_TLS) | |||
| 65 | target_link_libraries(TEST_INTF INTERFACE sctp) | 65 | target_link_libraries(TEST_INTF INTERFACE sctp) |
| 66 | endif() | 66 | endif() |
| 67 | target_include_directories(TEST_INTF | 67 | target_include_directories(TEST_INTF |
| 68 | - INTERFACE | 68 | + INTERFACE |
| 69 | - ${openHiTLS_SRC}/platform/Secure_C/include | 69 | + ${openHiTLS_SRC}/platform/Secure_C/include |
| 70 | - ${openHiTLS_SRC}/include | 70 | + ${openHiTLS_SRC}/include |
| 71 | - ${openHiTLS_SRC}/testcode/framework/include | 71 | + ${openHiTLS_SRC}/testcode/framework/include |
| 72 | - ${openHiTLS_SRC}/testcode/framework/crypto | 72 | + ${openHiTLS_SRC}/testcode/framework/crypto |
| 73 | - ${openHiTLS_SRC}/testcode/framework/stub | 73 | + ${openHiTLS_SRC}/testcode/framework/stub |
| 74 | - ${openHiTLS_SRC}/testcode/framework/tls/func_wrapper/include | 74 | + ${openHiTLS_SRC}/testcode/framework/tls/func_wrapper/include |
| 75 | - ${openHiTLS_SRC}/testcode/framework/tls/include | 75 | + ${openHiTLS_SRC}/testcode/framework/tls/include |
| 76 | - ${openHiTLS_SRC}/testcode/framework/tls/callback/include | 76 | + ${openHiTLS_SRC}/testcode/framework/tls/callback/include |
| 77 | - ${openHiTLS_SRC}/testcode/framework/tls/base/include | 77 | + ${openHiTLS_SRC}/testcode/framework/tls/base/include |
| 78 | - ${openHiTLS_SRC}/testcode/framework/tls/resource/include | 78 | + ${openHiTLS_SRC}/testcode/framework/tls/resource/include |
| 79 | - ${openHiTLS_SRC}/testcode/framework/tls/rpc/include | 79 | + ${openHiTLS_SRC}/testcode/framework/tls/rpc/include |
| 80 | - ${openHiTLS_SRC}/testcode/framework/tls/process/include | 80 | + ${openHiTLS_SRC}/testcode/framework/tls/process/include |
| 81 | - ${openHiTLS_SRC}/testcode/framework/tls/crypt/include | 81 | + ${openHiTLS_SRC}/testcode/framework/tls/crypt/include |
| 82 | - ${openHiTLS_SRC}/testcode/framework/tls/transfer/include | 82 | + ${openHiTLS_SRC}/testcode/framework/tls/transfer/include |
| 83 | - ${openHiTLS_SRC}/testcode/framework/tls/frame/src | 83 | + ${openHiTLS_SRC}/testcode/framework/tls/frame/src |
| 84 | - ${openHiTLS_SRC}/testcode/framework/tls/msg/include | 84 | + ${openHiTLS_SRC}/testcode/framework/tls/msg/include |
| 85 | - ${openHiTLS_SRC}/testcode/framework/tls/io/include | 85 | + ${openHiTLS_SRC}/testcode/framework/tls/io/include |
| 86 | - ${openHiTLS_SRC}/testcode/framework/tls/io/src | 86 | + ${openHiTLS_SRC}/testcode/framework/tls/io/src |
| 87 | - ${openHiTLS_SRC}/bsl/sal/include | 87 | + ${openHiTLS_SRC}/bsl/sal/include |
| 88 | - ${openHiTLS_SRC}/bsl/tlv/include | 88 | + ${openHiTLS_SRC}/bsl/tlv/include |
| 89 | - ${openHiTLS_SRC}/include/bsl | 89 | + ${openHiTLS_SRC}/include/bsl |
| 90 | - ${openHiTLS_SRC}/include/tls | 90 | + ${openHiTLS_SRC}/include/tls |
| 91 | - ${openHiTLS_SRC}/bsl/log/include | 91 | + ${openHiTLS_SRC}/bsl/log/include |
| 92 | - ${openHiTLS_SRC}/bsl/hash/include | 92 | + ${openHiTLS_SRC}/bsl/hash/include |
| 93 | - ${openHiTLS_SRC}/bsl/base64/include | 93 | + ${openHiTLS_SRC}/bsl/base64/include |
| 94 | - ${openHiTLS_SRC}/bsl/pem/include | 94 | + ${openHiTLS_SRC}/bsl/pem/include |
| 95 | - ${openHiTLS_SRC}/bsl/list/include | 95 | + ${openHiTLS_SRC}/bsl/list/include |
| 96 | - ${openHiTLS_SRC}/bsl/usrdata/include | 96 | + ${openHiTLS_SRC}/bsl/usrdata/include |
| 97 | - ${openHiTLS_SRC}/bsl/obj/include | 97 | + ${openHiTLS_SRC}/bsl/obj/include |
| 98 | - ${openHiTLS_SRC}/bsl/include | 98 | + ${openHiTLS_SRC}/bsl/include |
| 99 | - ${openHiTLS_SRC}/bsl/sal/src | 99 | + ${openHiTLS_SRC}/bsl/sal/src |
| 100 | - ${openHiTLS_SRC}/include/crypto/ | 100 | + ${openHiTLS_SRC}/include/crypto/ |
| 101 | - ${openHiTLS_SRC}/crypto/bn/include/ | 101 | + ${openHiTLS_SRC}/crypto/bn/include/ |
| 102 | - ${openHiTLS_SRC}/crypto/bn/src/ | 102 | + ${openHiTLS_SRC}/crypto/bn/src/ |
| 103 | - ${openHiTLS_SRC}/crypto/entropy/include/ | 103 | + ${openHiTLS_SRC}/crypto/entropy/include/ |
| 104 | - ${openHiTLS_SRC}/crypto/sm3/include | 104 | + ${openHiTLS_SRC}/crypto/sm3/include |
| 105 | - ${openHiTLS_SRC}/crypto/sha3/include | 105 | + ${openHiTLS_SRC}/crypto/sha3/include |
| 106 | - ${openHiTLS_SRC}/crypto/sha2/include | 106 | + ${openHiTLS_SRC}/crypto/sha2/include |
| 107 | - ${openHiTLS_SRC}/crypto/sha2/src | 107 | + ${openHiTLS_SRC}/crypto/sha2/src |
| 108 | - ${openHiTLS_SRC}/crypto/sha1/include | 108 | + ${openHiTLS_SRC}/crypto/sha1/include |
| 109 | - ${openHiTLS_SRC}/crypto/md5/include | 109 | + ${openHiTLS_SRC}/crypto/md5/include |
| 110 | - ${openHiTLS_SRC}/crypto/pbkdf2/include | 110 | + ${openHiTLS_SRC}/crypto/pbkdf2/include |
| 111 | - ${openHiTLS_SRC}/crypto/provider/include | 111 | + ${openHiTLS_SRC}/crypto/provider/include |
| 112 | - ${openHiTLS_SRC}/crypto/provider/src/mgr | 112 | + ${openHiTLS_SRC}/crypto/provider/src/mgr |
| 113 | - ${openHiTLS_SRC}/crypto/hkdf/include | 113 | + ${openHiTLS_SRC}/crypto/hkdf/include |
| 114 | - ${openHiTLS_SRC}/crypto/kdf/include | 114 | + ${openHiTLS_SRC}/crypto/kdf/include |
| 115 | - ${openHiTLS_SRC}/crypto/scrypt/include | 115 | + ${openHiTLS_SRC}/crypto/scrypt/include |
| 116 | - ${openHiTLS_SRC}/crypto/hmac/include | 116 | + ${openHiTLS_SRC}/crypto/hmac/include |
| 117 | - ${openHiTLS_SRC}/crypto/aes/include | 117 | + ${openHiTLS_SRC}/crypto/aes/include |
| 118 | - ${openHiTLS_SRC}/crypto/sm4/include | 118 | + ${openHiTLS_SRC}/crypto/sm4/include |
| 119 | - ${openHiTLS_SRC}/crypto/drbg/include | 119 | + ${openHiTLS_SRC}/crypto/drbg/include |
| 120 | - ${openHiTLS_SRC}/crypto/drbg/src | 120 | + ${openHiTLS_SRC}/crypto/drbg/src |
| 121 | - ${openHiTLS_SRC}/crypto/include | 121 | + ${openHiTLS_SRC}/crypto/include |
| 122 | - ${openHiTLS_SRC}/crypto/rsa/include | 122 | + ${openHiTLS_SRC}/crypto/rsa/include |
| 123 | - ${openHiTLS_SRC}/crypto/rsa/src | 123 | + ${openHiTLS_SRC}/crypto/rsa/src |
| 124 | - ${openHiTLS_SRC}/crypto/eal/src | 124 | + ${openHiTLS_SRC}/crypto/eal/src |
| 125 | - ${openHiTLS_SRC}/crypto/eal/include | 125 | + ${openHiTLS_SRC}/crypto/eal/include |
| 126 | - ${openHiTLS_SRC}/crypto/ealinit/include | 126 | + ${openHiTLS_SRC}/crypto/ealinit/include |
| 127 | - ${openHiTLS_SRC}/crypto/ealinit/src | 127 | + ${openHiTLS_SRC}/crypto/ealinit/src |
| 128 | - ${openHiTLS_SRC}/crypto/dsa/src | 128 | + ${openHiTLS_SRC}/crypto/dsa/src |
| 129 | - ${openHiTLS_SRC}/crypto/curve25519/src | 129 | + ${openHiTLS_SRC}/crypto/curve25519/src |
| 130 | - ${openHiTLS_SRC}/crypto/curve25519/include | 130 | + ${openHiTLS_SRC}/crypto/curve25519/include |
| 131 | - ${openHiTLS_SRC}/crypto/chacha20/include | 131 | + ${openHiTLS_SRC}/crypto/chacha20/include |
| 132 | - ${openHiTLS_SRC}/crypto/dsa/include | 132 | + ${openHiTLS_SRC}/crypto/dsa/include |
| 133 | - ${openHiTLS_SRC}/crypto/dsa/src | 133 | + ${openHiTLS_SRC}/crypto/dsa/src |
| 134 | - ${openHiTLS_SRC}/crypto/dh/include | 134 | + ${openHiTLS_SRC}/crypto/dh/include |
| 135 | - ${openHiTLS_SRC}/crypto/dh/src | 135 | + ${openHiTLS_SRC}/crypto/dh/src |
| 136 | - ${openHiTLS_SRC}/crypto/ecc/include | 136 | + ${openHiTLS_SRC}/crypto/ecc/include |
| 137 | - ${openHiTLS_SRC}/crypto/ecc/src | 137 | + ${openHiTLS_SRC}/crypto/ecc/src |
| 138 | - ${openHiTLS_SRC}/crypto/ecdh/include | 138 | + ${openHiTLS_SRC}/crypto/ecdh/include |
| 139 | - ${openHiTLS_SRC}/crypto/ecdsa/include | 139 | + ${openHiTLS_SRC}/crypto/ecdsa/include |
| 140 | - ${openHiTLS_SRC}/crypto/modes/include | 140 | + ${openHiTLS_SRC}/crypto/modes/include |
| 141 | - ${openHiTLS_SRC}/crypto/modes/src | 141 | + ${openHiTLS_SRC}/crypto/modes/src |
| 142 | - ${openHiTLS_SRC}/crypto/ecdh/include | 142 | + ${openHiTLS_SRC}/crypto/ecdh/include |
| 143 | - ${openHiTLS_SRC}/crypto/ecdsa/include | 143 | + ${openHiTLS_SRC}/crypto/ecdsa/include |
| 144 | - ${openHiTLS_SRC}/crypto/sm2/include | 144 | + ${openHiTLS_SRC}/crypto/sm2/include |
| 145 | - ${openHiTLS_SRC}/crypto/sm2/src | 145 | + ${openHiTLS_SRC}/crypto/sm2/src |
| 146 | - ${openHiTLS_SRC}/crypto/paillier/include | 146 | + ${openHiTLS_SRC}/crypto/paillier/include |
| 147 | - ${openHiTLS_SRC}/crypto/paillier/src | 147 | + ${openHiTLS_SRC}/crypto/paillier/src |
| 148 | - ${openHiTLS_SRC}/crypto/encode/include | 148 | + ${openHiTLS_SRC}/crypto/encode/include |
| 149 | - ${openHiTLS_SRC}/bsl/err/include | 149 | + ${openHiTLS_SRC}/bsl/err/include |
| 150 | - ${openHiTLS_SRC}/bsl/err/src | 150 | + ${openHiTLS_SRC}/bsl/err/src |
| 151 | - ${openHiTLS_SRC}/include/tls | 151 | + ${openHiTLS_SRC}/include/tls |
| 152 | - ${openHiTLS_SRC}/tls/include | 152 | + ${openHiTLS_SRC}/tls/include |
| 153 | - ${openHiTLS_SRC}/tls/cert/include | 153 | + ${openHiTLS_SRC}/tls/cert/include |
| 154 | - ${openHiTLS_SRC}/tls/cm/include | 154 | + ${openHiTLS_SRC}/tls/cm/include |
| 155 | - ${openHiTLS_SRC}/tls/config/include | 155 | + ${openHiTLS_SRC}/tls/config/include |
| 156 | - ${openHiTLS_SRC}/tls/crypt/include | 156 | + ${openHiTLS_SRC}/tls/crypt/include |
| 157 | - ${openHiTLS_SRC}/tls/app/include | 157 | + ${openHiTLS_SRC}/tls/app/include |
| 158 | - ${openHiTLS_SRC}/tls/app/src | 158 | + ${openHiTLS_SRC}/tls/app/src |
| 159 | - ${openHiTLS_SRC}/tls/ccs/include | 159 | + ${openHiTLS_SRC}/tls/ccs/include |
| 160 | - ${openHiTLS_SRC}/tls/alert/include | 160 | + ${openHiTLS_SRC}/tls/alert/include |
| 161 | - ${openHiTLS_SRC}/bsl/uio/include | 161 | + ${openHiTLS_SRC}/bsl/uio/include |
| 162 | - ${openHiTLS_SRC}/tls/record/include | 162 | + ${openHiTLS_SRC}/tls/record/include |
| 163 | - ${openHiTLS_SRC}/tls/record/src | 163 | + ${openHiTLS_SRC}/tls/record/src |
| 164 | - ${openHiTLS_SRC}/bsl/uio/src | 164 | + ${openHiTLS_SRC}/bsl/uio/src |
| 165 | - ${openHiTLS_SRC}/bsl/asn1/include | 165 | + ${openHiTLS_SRC}/bsl/asn1/include |
| 166 | - ${openHiTLS_SRC}/include/pki | 166 | + ${openHiTLS_SRC}/include/pki |
| 167 | - ${openHiTLS_SRC}/pki/x509_cert/include | 167 | + ${openHiTLS_SRC}/pki/x509_cert/include |
| 168 | - ${openHiTLS_SRC}/pki/x509_csr/include | 168 | + ${openHiTLS_SRC}/pki/x509_csr/include |
| 169 | - ${openHiTLS_SRC}/pki/x509_common/include | 169 | + ${openHiTLS_SRC}/pki/x509_common/include |
| 170 | - ${openHiTLS_SRC}/pki/x509_crl/include | 170 | + ${openHiTLS_SRC}/pki/x509_crl/include |
| 171 | - ${openHiTLS_SRC}/pki/pkcs12/include | 171 | + ${openHiTLS_SRC}/pki/pkcs12/include |
| 172 | - ${openHiTLS_SRC}/pki/cms/include | 172 | + ${openHiTLS_SRC}/pki/cms/include |
| 173 | - ${openHiTLS_SRC}/pki/x509_verify/include | 173 | + ${openHiTLS_SRC}/pki/x509_verify/include |
| 174 | - ${openHiTLS_SRC}/config/macro_config | 174 | + ${openHiTLS_SRC}/pki/x509_print/include |
| 175 | - ${openHiTLS_SRC}/tls/handshake/include | 175 | + ${openHiTLS_SRC}/config/macro_config |
| 176 | - ${openHiTLS_SRC}/tls/handshake/common/include | 176 | + ${openHiTLS_SRC}/tls/handshake/include |
| 177 | - ${openHiTLS_SRC}/tls/handshake/cookie/include | 177 | + ${openHiTLS_SRC}/tls/handshake/common/include |
| 178 | - ${openHiTLS_SRC}/tls/handshake/parse/include | 178 | + ${openHiTLS_SRC}/tls/handshake/cookie/include |
| 179 | - ${openHiTLS_SRC}/tls/handshake/pack/include | 179 | + ${openHiTLS_SRC}/tls/handshake/parse/include |
| 180 | - ${openHiTLS_SRC}/tls/handshake/pack/src | 180 | + ${openHiTLS_SRC}/tls/handshake/pack/include |
| 181 | - ${openHiTLS_SRC}/tls/handshake/send/src | 181 | + ${openHiTLS_SRC}/tls/handshake/pack/src |
| 182 | - ${openHiTLS_SRC}/tls/handshake/recv/src | 182 | + ${openHiTLS_SRC}/tls/handshake/send/src |
| 183 | - ${openHiTLS_SRC}/tls/handshake/recv/include | 183 | + ${openHiTLS_SRC}/tls/handshake/recv/src |
| 184 | - ${openHiTLS_SRC}/tls/feature/session/src | 184 | + ${openHiTLS_SRC}/tls/handshake/recv/include |
| 185 | - ${openHiTLS_SRC}/tls/cert/include | 185 | + ${openHiTLS_SRC}/tls/feature/session/src |
| 186 | - ${openHiTLS_SRC}/tls/cert/cert_adapt | 186 | + ${openHiTLS_SRC}/tls/cert/include |
| 187 | - ${openHiTLS_SRC}/tls/cert/hitls_x509_adapt | 187 | + ${openHiTLS_SRC}/tls/cert/cert_adapt |
| 188 | - ${openHiTLS_SRC}/tls/crypt/crypt_self | 188 | + ${openHiTLS_SRC}/tls/cert/hitls_x509_adapt |
| 189 | - ${openHiTLS_SRC}/config/macro_config | 189 | + ${openHiTLS_SRC}/tls/crypt/crypt_self |
| 190 | - ${openHiTLS_SRC}/tls/handshake/parse/src | 190 | + ${openHiTLS_SRC}/config/macro_config |
| 191 | - ${openHiTLS_SRC}/config/macro_config | 191 | + ${openHiTLS_SRC}/tls/handshake/parse/src |
| 192 | -) | 192 | + ${openHiTLS_SRC}/config/macro_config) |
| 193 | 193 | ||
| 194 | add_library(TESTCASE_PRE ${TEST_SOURCE}) | 194 | add_library(TESTCASE_PRE ${TEST_SOURCE}) |
| 195 | target_link_libraries(TESTCASE_PRE PRIVATE TEST_INTF) | 195 | target_link_libraries(TESTCASE_PRE PRIVATE TEST_INTF) |
| @@ -1105,4 +1105,109 @@ exit: | |||
| 1105 | BSL_UIO_Free(buffer); | 1105 | BSL_UIO_Free(buffer); |
| 1106 | BSL_UIO_Free(tcp); | 1106 | BSL_UIO_Free(tcp); |
| 1107 | } | 1107 | } |
| 1108 | -/* END_CASE */ | 1108 | +/* END_CASE */ |
| 1109 | + | ||
| 1110 | +/* BEGIN_CASE */ | ||
| 1111 | +void SDV_BSL_UIO_MEM_BASIC_TC001(void) | ||
| 1112 | +{ | ||
| 1113 | + TestMemInit(); | ||
| 1114 | + | ||
| 1115 | + // Create memory UIO | ||
| 1116 | + BSL_UIO *uio = BSL_UIO_New(BSL_UIO_MemMethod()); | ||
| 1117 | + ASSERT_TRUE(uio != NULL); | ||
| 1118 | + | ||
| 1119 | + // Test write operation | ||
| 1120 | + const char testData[] = "Hello World"; | ||
| 1121 | + uint32_t writeLen = 0; | ||
| 1122 | + int32_t ret = BSL_UIO_Write(uio, testData, strlen(testData), &writeLen); | ||
| 1123 | + ASSERT_TRUE(ret == BSL_SUCCESS); | ||
| 1124 | + ASSERT_TRUE(writeLen == strlen(testData)); | ||
| 1125 | + | ||
| 1126 | + // Test read operation | ||
| 1127 | + char readBuf[20] = {0}; | ||
| 1128 | + uint32_t readLen = 0; | ||
| 1129 | + ret = BSL_UIO_Read(uio, readBuf, sizeof(readBuf), &readLen); | ||
| 1130 | + ASSERT_TRUE(ret == BSL_SUCCESS); | ||
| 1131 | + ASSERT_TRUE(readLen == strlen(testData)); | ||
| 1132 | + ASSERT_TRUE(memcmp(readBuf, testData, readLen) == 0); | ||
| 1133 | + | ||
| 1134 | + // Test pending data length | ||
| 1135 | + int64_t pendingLen = 0; | ||
| 1136 | + ret = BSL_UIO_Ctrl(uio, BSL_UIO_PENDING, sizeof(size_t), &pendingLen); | ||
| 1137 | + ASSERT_TRUE(ret == BSL_SUCCESS); | ||
| 1138 | + ASSERT_TRUE(pendingLen == 0); // All data has been read | ||
| 1139 | + | ||
| 1140 | +exit: | ||
| 1141 | + BSL_UIO_Free(uio); | ||
| 1142 | +} | ||
| 1143 | +/* END_CASE */ | ||
| 1144 | + | ||
| 1145 | +/* BEGIN_CASE */ | ||
| 1146 | +void SDV_BSL_UIO_MEM_NEW_BUF_TC001(void) | ||
| 1147 | +{ | ||
| 1148 | + TestMemInit(); | ||
| 1149 | + | ||
| 1150 | + BSL_UIO *uio = BSL_UIO_New(BSL_UIO_MemMethod()); | ||
| 1151 | + ASSERT_TRUE(uio != NULL); | ||
| 1152 | + | ||
| 1153 | + // Test MemNewBuf with invalid parameters | ||
| 1154 | + int32_t ret = BSL_UIO_Ctrl(uio, BSL_UIO_MEM_NEW_BUF, -1, NULL); | ||
| 1155 | + ASSERT_TRUE(ret == BSL_NULL_INPUT); | ||
| 1156 | + | ||
| 1157 | + // Test MemNewBuf with valid parameters | ||
| 1158 | + char testBuf[] = "Test Buffer"; | ||
| 1159 | + ret = BSL_UIO_Ctrl(uio, BSL_UIO_MEM_NEW_BUF, strlen(testBuf), testBuf); | ||
| 1160 | + ASSERT_TRUE(ret == BSL_SUCCESS); | ||
| 1161 | + | ||
| 1162 | + // Verify buffer is in read-only mode | ||
| 1163 | + uint32_t writeLen = 0; | ||
| 1164 | + ret = BSL_UIO_Write(uio, "data", 4, &writeLen); | ||
| 1165 | + ASSERT_TRUE(ret == BSL_UIO_WRITE_NOT_ALLOWED); | ||
| 1166 | + | ||
| 1167 | + // Test reading from new buffer | ||
| 1168 | + char readBuf[20] = {0}; | ||
| 1169 | + uint32_t readLen = 0; | ||
| 1170 | + ret = BSL_UIO_Read(uio, readBuf, sizeof(readBuf), &readLen); | ||
| 1171 | + ASSERT_TRUE(ret == BSL_SUCCESS); | ||
| 1172 | + ASSERT_TRUE(readLen == strlen(testBuf)); | ||
| 1173 | + ASSERT_TRUE(memcmp(readBuf, testBuf, readLen) == 0); | ||
| 1174 | +exit: | ||
| 1175 | + BSL_UIO_Free(uio); | ||
| 1176 | +} | ||
| 1177 | +/* END_CASE */ | ||
| 1178 | + | ||
| 1179 | +/* BEGIN_CASE */ | ||
| 1180 | +void SDV_BSL_UIO_MEM_EOF_TC001(void) | ||
| 1181 | +{ | ||
| 1182 | + TestMemInit(); | ||
| 1183 | + | ||
| 1184 | + BSL_UIO *uio = BSL_UIO_New(BSL_UIO_MemMethod()); | ||
| 1185 | + ASSERT_TRUE(uio != NULL); | ||
| 1186 | + | ||
| 1187 | + // Test setting EOF behavior | ||
| 1188 | + int32_t eofValue = 1; | ||
| 1189 | + int32_t ret = BSL_UIO_Ctrl(uio, BSL_UIO_MEM_SET_EOF, sizeof(int32_t), &eofValue); | ||
| 1190 | + ASSERT_TRUE(ret == BSL_SUCCESS); | ||
| 1191 | + | ||
| 1192 | + // Verify EOF value | ||
| 1193 | + int32_t readEof = 0; | ||
| 1194 | + ret = BSL_UIO_Ctrl(uio, BSL_UIO_MEM_GET_EOF, sizeof(int32_t), &readEof); | ||
| 1195 | + ASSERT_TRUE(ret == BSL_SUCCESS); | ||
| 1196 | + ASSERT_TRUE(readEof == eofValue); | ||
| 1197 | + | ||
| 1198 | + // Test read behavior with EOF set | ||
| 1199 | + char readBuf[10]; | ||
| 1200 | + uint32_t readLen = 0; | ||
| 1201 | + ret = BSL_UIO_Read(uio, readBuf, sizeof(readBuf), &readLen); | ||
| 1202 | + ASSERT_TRUE(ret == BSL_SUCCESS); | ||
| 1203 | + ASSERT_TRUE(readLen == 0); | ||
| 1204 | + | ||
| 1205 | + // Verify retry flag is set due to EOF | ||
| 1206 | + uint32_t flags = 0; | ||
| 1207 | + BSL_UIO_TestFlags(uio, BSL_UIO_FLAGS_SHOULD_RETRY, &flags); | ||
| 1208 | + ASSERT_TRUE((flags & BSL_UIO_FLAGS_SHOULD_RETRY) != 0); | ||
| 1209 | + | ||
| 1210 | +exit: | ||
| 1211 | + BSL_UIO_Free(uio); | ||
| 1212 | +} | ||
| 1213 | +/* END_CASE */ | ||
| @@ -65,4 +65,13 @@ SDV_BSL_UIO_SCTP_API_TC001 | |||
| 65 | SDV_BSL_UIO_SCTP_API_TC001: | 65 | SDV_BSL_UIO_SCTP_API_TC001: |
| 66 | 66 | ||
| 67 | SDV_BSL_UIO_BUFFER_RESET_TC001 | 67 | SDV_BSL_UIO_BUFFER_RESET_TC001 |
| 68 | -SDV_BSL_UIO_BUFFER_RESET_TC001: | 68 | +SDV_BSL_UIO_BUFFER_RESET_TC001: |
| 69 | + | ||
| 70 | +SDV_BSL_UIO_MEM_BASIC_TC001 | ||
| 71 | +SDV_BSL_UIO_MEM_BASIC_TC001: | ||
| 72 | + | ||
| 73 | +SDV_BSL_UIO_MEM_NEW_BUF_TC001 | ||
| 74 | +SDV_BSL_UIO_MEM_NEW_BUF_TC001: | ||
| 75 | + | ||
| 76 | +SDV_BSL_UIO_MEM_EOF_TC001 | ||
| 77 | +SDV_BSL_UIO_MEM_EOF_TC001: | ||
| @@ -468,12 +468,12 @@ void SDV_X509_CERT_CTRL_FUNC_TC002(char *path, char *expectedSerialNum, char *ex | |||
| 468 | 468 | ||
| 469 | ASSERT_EQ(HITLS_X509_CertParseFile(BSL_FORMAT_ASN1, path, &cert), HITLS_X509_SUCCESS); | 469 | ASSERT_EQ(HITLS_X509_CertParseFile(BSL_FORMAT_ASN1, path, &cert), HITLS_X509_SUCCESS); |
| 470 | 470 | ||
| 471 | - ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_GET_SUBJECT_DNNAME_STR, &subjectName, sizeof(BSL_Buffer)), 0); | 471 | + ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_GET_SUBJECT_DN_STR, &subjectName, sizeof(BSL_Buffer)), 0); |
| 472 | ASSERT_NE(subjectName.data, NULL); | 472 | ASSERT_NE(subjectName.data, NULL); |
| 473 | ASSERT_EQ(subjectName.dataLen, strlen(expectedSubjectName)); | 473 | ASSERT_EQ(subjectName.dataLen, strlen(expectedSubjectName)); |
| 474 | ASSERT_EQ(strcmp((char *)subjectName.data, expectedSubjectName), 0); | 474 | ASSERT_EQ(strcmp((char *)subjectName.data, expectedSubjectName), 0); |
| 475 | 475 | ||
| 476 | - ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_GET_ISSUER_DNNAME_STR, &issuerName, sizeof(BSL_Buffer)), 0); | 476 | + ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_GET_ISSUER_DN_STR, &issuerName, sizeof(BSL_Buffer)), 0); |
| 477 | ASSERT_NE(issuerName.data, NULL); | 477 | ASSERT_NE(issuerName.data, NULL); |
| 478 | ASSERT_EQ(issuerName.dataLen, strlen(expectedIssueName)); | 478 | ASSERT_EQ(issuerName.dataLen, strlen(expectedIssueName)); |
| 479 | ASSERT_EQ(strcmp((char *)issuerName.data, expectedIssueName), 0); | 479 | ASSERT_EQ(strcmp((char *)issuerName.data, expectedIssueName), 0); |
| @@ -838,12 +838,12 @@ static int32_t SetCert(HITLS_X509_Cert *raw, HITLS_X509_Cert *new) | |||
| 838 | ASSERT_EQ(HITLS_X509_CertCtrl(new, HITLS_X509_SET_PUBKEY, raw->tbs.ealPubKey, sizeof(void *)), 0); | 838 | ASSERT_EQ(HITLS_X509_CertCtrl(new, HITLS_X509_SET_PUBKEY, raw->tbs.ealPubKey, sizeof(void *)), 0); |
| 839 | 839 | ||
| 840 | BslList *rawSubject = NULL; | 840 | BslList *rawSubject = NULL; |
| 841 | - ASSERT_EQ(HITLS_X509_CertCtrl(raw, HITLS_X509_GET_SUBJECT_DNNAME, &rawSubject, sizeof(BslList *)), 0); | 841 | + ASSERT_EQ(HITLS_X509_CertCtrl(raw, HITLS_X509_GET_SUBJECT_DN, &rawSubject, sizeof(BslList *)), 0); |
| 842 | - ASSERT_EQ(HITLS_X509_CertCtrl(new, HITLS_X509_SET_SUBJECT_DNNAME, rawSubject, sizeof(BslList)), 0); | 842 | + ASSERT_EQ(HITLS_X509_CertCtrl(new, HITLS_X509_SET_SUBJECT_DN, rawSubject, sizeof(BslList)), 0); |
| 843 | 843 | ||
| 844 | BslList *rawIssuer = NULL; | 844 | BslList *rawIssuer = NULL; |
| 845 | - ASSERT_EQ(HITLS_X509_CertCtrl(raw, HITLS_X509_GET_ISSUER_DNNAME, &rawIssuer, sizeof(BslList *)), 0); | 845 | + ASSERT_EQ(HITLS_X509_CertCtrl(raw, HITLS_X509_GET_ISSUER_DN, &rawIssuer, sizeof(BslList *)), 0); |
| 846 | - ASSERT_EQ(HITLS_X509_CertCtrl(new, HITLS_X509_SET_ISSUER_DNNAME, rawIssuer, sizeof(BslList)), 0); | 846 | + ASSERT_EQ(HITLS_X509_CertCtrl(new, HITLS_X509_SET_ISSUER_DN, rawIssuer, sizeof(BslList)), 0); |
| 847 | 847 | ||
| 848 | ret = 0; | 848 | ret = 0; |
| 849 | exit: | 849 | exit: |
| @@ -863,6 +863,7 @@ void SDV_X509_CERT_SETANDGEN_TC001(char *derCertPath, char *privPath, int keyTyp | |||
| 863 | BslList *tmp = NULL; | 863 | BslList *tmp = NULL; |
| 864 | HITLS_X509_SignAlgParam algParam = {0}; | 864 | HITLS_X509_SignAlgParam algParam = {0}; |
| 865 | HITLS_X509_SignAlgParam *algParamPtr = NULL; | 865 | HITLS_X509_SignAlgParam *algParamPtr = NULL; |
| 866 | + memset_s(&algParam, sizeof(HITLS_X509_SignAlgParam), 0, sizeof(HITLS_X509_SignAlgParam)); | ||
| 866 | if (pad == 0) { | 867 | if (pad == 0) { |
| 867 | algParamPtr = NULL; | 868 | algParamPtr = NULL; |
| 868 | } else if (pad == CRYPT_PKEY_EMSA_PSS) { | 869 | } else if (pad == CRYPT_PKEY_EMSA_PSS) { |
| @@ -988,10 +989,10 @@ void SDV_X509_CERT_GEN_PROCESS_TC002(char *csrPath, char *privPath, int keyType, | |||
| 988 | /* Cannot sign before setting issuer and subject */ | 989 | /* Cannot sign before setting issuer and subject */ |
| 989 | ASSERT_EQ(HITLS_X509_CertSign(mdId, privKey, NULL, cert), HITLS_X509_ERR_CERT_INVALID_DN); | 990 | ASSERT_EQ(HITLS_X509_CertSign(mdId, privKey, NULL, cert), HITLS_X509_ERR_CERT_INVALID_DN); |
| 990 | 991 | ||
| 991 | - ASSERT_EQ(HITLS_X509_CsrCtrl(csr, HITLS_X509_GET_SUBJECT_DNNAME, &tmp, sizeof(BslList *)), 0); | 992 | + ASSERT_EQ(HITLS_X509_CsrCtrl(csr, HITLS_X509_GET_SUBJECT_DN, &tmp, sizeof(BslList *)), 0); |
| 992 | - ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_SET_SUBJECT_DNNAME, tmp, sizeof(BslList)), 0); | 993 | + ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_SET_SUBJECT_DN, tmp, sizeof(BslList)), 0); |
| 993 | ASSERT_EQ(HITLS_X509_CertSign(mdId, privKey, NULL, cert), HITLS_X509_ERR_CERT_INVALID_DN); | 994 | ASSERT_EQ(HITLS_X509_CertSign(mdId, privKey, NULL, cert), HITLS_X509_ERR_CERT_INVALID_DN); |
| 994 | - ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_SET_ISSUER_DNNAME, tmp, sizeof(BslList)), 0); | 995 | + ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_SET_ISSUER_DN, tmp, sizeof(BslList)), 0); |
| 995 | 996 | ||
| 996 | /* Cannot sign before setting after time and before time */ | 997 | /* Cannot sign before setting after time and before time */ |
| 997 | ASSERT_EQ(HITLS_X509_CertSign(mdId, privKey, NULL, cert), HITLS_X509_ERR_CERT_INVALID_TIME); | 998 | ASSERT_EQ(HITLS_X509_CertSign(mdId, privKey, NULL, cert), HITLS_X509_ERR_CERT_INVALID_TIME); |
| @@ -3105,13 +3105,13 @@ SDV_X509_CERT_CTRL_FUNC_TC001 with key usage sha256 rsa v3 ca | |||
| 3105 | SDV_X509_CERT_CTRL_FUNC_TC001:"../testdata/cert/asn1/cawithkeyusage.der":852:BSL_CID_SHA256WITHRSAENCRYPTION:0:1:0 | 3105 | SDV_X509_CERT_CTRL_FUNC_TC001:"../testdata/cert/asn1/cawithkeyusage.der":852:BSL_CID_SHA256WITHRSAENCRYPTION:0:1:0 |
| 3106 | 3106 | ||
| 3107 | SDV_X509_CERT_CTRL_FUNC_TC002 parse ecc p384 v3 ca cert | 3107 | SDV_X509_CERT_CTRL_FUNC_TC002 parse ecc p384 v3 ca cert |
| 3108 | -SDV_X509_CERT_CTRL_FUNC_TC002:"../testdata/cert/asn1/nist384ca.crt":"54:eb:17:4c:ce:5c:70:18:73:bc:dc:a3:3d:b9:81:1f:63:67:6d:06":"C=CN,ST=open,L=xian,O=openhitls,OU=asn1,CN=ca.asn1.com":"C=CN,ST=open,L=xian,O=openhitls,OU=asn1,CN=ca.asn1.com":"Feb 4 07:03:41 2024 GMT":"Feb 1 07:03:41 2034 GMT" | 3108 | +SDV_X509_CERT_CTRL_FUNC_TC002:"../testdata/cert/asn1/nist384ca.crt":"54:eb:17:4c:ce:5c:70:18:73:bc:dc:a3:3d:b9:81:1f:63:67:6d:06":"CN=ca.asn1.com,OU=asn1,O=openhitls,L=xian,ST=open,C=CN":"CN=ca.asn1.com,OU=asn1,O=openhitls,L=xian,ST=open,C=CN":"Feb 4 07:03:41 2024 GMT":"Feb 1 07:03:41 2034 GMT" |
| 3109 | 3109 | ||
| 3110 | SDV_X509_CERT_CTRL_FUNC_TC002 parse rsa pss v3 ca cert, any is null | 3110 | SDV_X509_CERT_CTRL_FUNC_TC002 parse rsa pss v3 ca cert, any is null |
| 3111 | SDV_X509_CERT_CTRL_FUNC_TC002:"../testdata/cert/asn1/rsa2048ssa-pss.crt":"54:f3:3f:24:20:59:84:91:1f:dc:3c:5c:50:a3:d8:90:d8:93:ff:5c":"CN=example.com":"CN=example.com":"Mar 25 12:13:22 2024 GMT":"Mar 23 12:13:22 2034 GMT" | 3111 | SDV_X509_CERT_CTRL_FUNC_TC002:"../testdata/cert/asn1/rsa2048ssa-pss.crt":"54:f3:3f:24:20:59:84:91:1f:dc:3c:5c:50:a3:d8:90:d8:93:ff:5c":"CN=example.com":"CN=example.com":"Mar 25 12:13:22 2024 GMT":"Mar 23 12:13:22 2034 GMT" |
| 3112 | 3112 | ||
| 3113 | SDV_X509_CERT_CTRL_FUNC_TC002 with key usage sha256 rsa v3 ca | 3113 | SDV_X509_CERT_CTRL_FUNC_TC002 with key usage sha256 rsa v3 ca |
| 3114 | -SDV_X509_CERT_CTRL_FUNC_TC002:"../testdata/cert/asn1/cawithkeyusage.der":"5a:ba:49:ca:e8:4a:3d:d8:be:35:53:d5:a4:ff:5a:85:32:4c:87:ef":"C=CN,O=Test-hitls,CN=CA":"C=CN,O=Test-hitls,CN=RootCA":"Apr 20 09:34:13 2024 GMT":"Apr 18 09:34:13 2034 GMT" | 3114 | +SDV_X509_CERT_CTRL_FUNC_TC002:"../testdata/cert/asn1/cawithkeyusage.der":"5a:ba:49:ca:e8:4a:3d:d8:be:35:53:d5:a4:ff:5a:85:32:4c:87:ef":"CN=CA,O=Test-hitls,C=CN":"CN=RootCA,O=Test-hitls,C=CN":"Apr 20 09:34:13 2024 GMT":"Apr 18 09:34:13 2034 GMT" |
| 3115 | 3115 | ||
| 3116 | SDV_X509_CERT_DUP_FUNC_TC001 parse ecc p384 v3 ca cert | 3116 | SDV_X509_CERT_DUP_FUNC_TC001 parse ecc p384 v3 ca cert |
| 3117 | SDV_X509_CERT_DUP_FUNC_TC001:"../testdata/cert/asn1/nist384ca.crt":BSL_CID_ECDSAWITHSHA256:0:0:0 | 3117 | SDV_X509_CERT_DUP_FUNC_TC001:"../testdata/cert/asn1/nist384ca.crt":BSL_CID_ECDSAWITHSHA256:0:0:0 |
| @@ -3140,6 +3140,9 @@ SDV_X509_MUL_CERT_PARSE_FUNC_TC001:BSL_FORMAT_UNKNOWN:"../testdata/cert/sm2/chai | |||
| 3140 | SDV_X509_MUL_CERT_PARSE_FUNC_TC001 with 3 unknown(pem) certs (with redundant symbols) | 3140 | SDV_X509_MUL_CERT_PARSE_FUNC_TC001 with 3 unknown(pem) certs (with redundant symbols) |
| 3141 | SDV_X509_MUL_CERT_PARSE_FUNC_TC001:BSL_FORMAT_UNKNOWN:"../testdata/cert/sm2/chain-red.pem":3 | 3141 | SDV_X509_MUL_CERT_PARSE_FUNC_TC001:BSL_FORMAT_UNKNOWN:"../testdata/cert/sm2/chain-red.pem":3 |
| 3142 | 3142 | ||
| 3143 | +SDV_X509_MUL_CERT_PARSE_FUNC_TC001 with 1 der cert | ||
| 3144 | +SDV_X509_MUL_CERT_PARSE_FUNC_TC001:BSL_FORMAT_ASN1:"../testdata/cert/asn1/sha256Rsaca.crt":1 | ||
| 3145 | + | ||
| 3143 | SDV_X509_CERT_SET_VERIOSN_FUNC_TC001 | 3146 | SDV_X509_CERT_SET_VERIOSN_FUNC_TC001 |
| 3144 | SDV_X509_CERT_SET_VERIOSN_FUNC_TC001: | 3147 | SDV_X509_CERT_SET_VERIOSN_FUNC_TC001: |
| 3145 | 3148 | ||
| @@ -26,11 +26,14 @@ | |||
| 26 | 26 | ||
| 27 | 27 | ||
| 28 | 28 | ||
| 29 | + | ||
| 29 | 30 | ||
| 30 | 31 | ||
| 31 | 32 | ||
| 32 | 33 | ||
| 34 | + | ||
| 33 | 35 | ||
| 36 | + | ||
| 34 | /* END_HEADER */ | 37 | /* END_HEADER */ |
| 35 | 38 | ||
| 36 | static void FreeListData(void *data) | 39 | static void FreeListData(void *data) |
| @@ -45,8 +48,7 @@ static void FreeSanListData(void *data) | |||
| 45 | BSL_GLOBAL_Init(); | 48 | BSL_GLOBAL_Init(); |
| 46 | HITLS_X509_GeneralName *name = (HITLS_X509_GeneralName *)data; | 49 | HITLS_X509_GeneralName *name = (HITLS_X509_GeneralName *)data; |
| 47 | if (name->type == HITLS_X509_GN_DNNAME) { | 50 | if (name->type == HITLS_X509_GN_DNNAME) { |
| 48 | - BSL_LIST_DeleteAll((BslList *)name->value.data, (BSL_LIST_PFUNC_FREE)HITLS_X509_FreeNameNode); | 51 | + HITLS_X509_DnListFree((BslList *)name->value.data); |
| 49 | - BSL_SAL_Free(name->value.data); | ||
| 50 | } | 52 | } |
| 51 | } | 53 | } |
| 52 | 54 | ||
| @@ -187,8 +189,8 @@ void SDV_HITLS_X509_CtrlCert_TC001(void) | |||
| 187 | ASSERT_EQ(HITLS_X509_CertCtrl(&cert, HITLS_X509_EXT_KU_CERTSIGN, &cert, 0), HITLS_X509_ERR_INVALID_PARAM); | 189 | ASSERT_EQ(HITLS_X509_CertCtrl(&cert, HITLS_X509_EXT_KU_CERTSIGN, &cert, 0), HITLS_X509_ERR_INVALID_PARAM); |
| 188 | ASSERT_EQ(HITLS_X509_CertCtrl(&cert, HITLS_X509_EXT_KU_KEYAGREEMENT, NULL, 0), HITLS_X509_ERR_INVALID_PARAM); | 190 | ASSERT_EQ(HITLS_X509_CertCtrl(&cert, HITLS_X509_EXT_KU_KEYAGREEMENT, NULL, 0), HITLS_X509_ERR_INVALID_PARAM); |
| 189 | ASSERT_EQ(HITLS_X509_CertCtrl(&cert, HITLS_X509_EXT_KU_KEYAGREEMENT, &cert, 0), HITLS_X509_ERR_INVALID_PARAM); | 191 | ASSERT_EQ(HITLS_X509_CertCtrl(&cert, HITLS_X509_EXT_KU_KEYAGREEMENT, &cert, 0), HITLS_X509_ERR_INVALID_PARAM); |
| 190 | - ASSERT_EQ(HITLS_X509_CertCtrl(&cert, HITLS_X509_GET_SUBJECT_DNNAME_STR, NULL, 0), HITLS_X509_ERR_INVALID_PARAM); | 192 | + ASSERT_EQ(HITLS_X509_CertCtrl(&cert, HITLS_X509_GET_SUBJECT_DN_STR, NULL, 0), HITLS_X509_ERR_INVALID_PARAM); |
| 191 | - ASSERT_EQ(HITLS_X509_CertCtrl(&cert, HITLS_X509_GET_ISSUER_DNNAME_STR, NULL, 0), HITLS_X509_ERR_INVALID_PARAM); | 193 | + ASSERT_EQ(HITLS_X509_CertCtrl(&cert, HITLS_X509_GET_ISSUER_DN_STR, NULL, 0), HITLS_X509_ERR_INVALID_PARAM); |
| 192 | ASSERT_EQ(HITLS_X509_CertCtrl(&cert, HITLS_X509_GET_SERIALNUM, NULL, 0), HITLS_X509_ERR_INVALID_PARAM); | 194 | ASSERT_EQ(HITLS_X509_CertCtrl(&cert, HITLS_X509_GET_SERIALNUM, NULL, 0), HITLS_X509_ERR_INVALID_PARAM); |
| 193 | ASSERT_EQ(HITLS_X509_CertCtrl(&cert, HITLS_X509_GET_BEFORE_TIME, NULL, 0), HITLS_X509_ERR_INVALID_PARAM); | 195 | ASSERT_EQ(HITLS_X509_CertCtrl(&cert, HITLS_X509_GET_BEFORE_TIME, NULL, 0), HITLS_X509_ERR_INVALID_PARAM); |
| 194 | ASSERT_EQ(HITLS_X509_CertCtrl(&cert, HITLS_X509_GET_AFTER_TIME, NULL, 0), HITLS_X509_ERR_INVALID_PARAM); | 196 | ASSERT_EQ(HITLS_X509_CertCtrl(&cert, HITLS_X509_GET_AFTER_TIME, NULL, 0), HITLS_X509_ERR_INVALID_PARAM); |
| @@ -728,7 +730,7 @@ void SDV_X509_EXT_EncodeSan_TC001(int critical, int type1, int type2, int type3, | |||
| 728 | ASSERT_NE(san.names, NULL); | 730 | ASSERT_NE(san.names, NULL); |
| 729 | 731 | ||
| 730 | // Generate san | 732 | // Generate san |
| 731 | - BslList *dirNames = BSL_LIST_New(sizeof(HITLS_X509_NameNode)); | 733 | + BslList *dirNames = HITLS_X509_DnListNew(); |
| 732 | ASSERT_NE(dirNames, NULL); | 734 | ASSERT_NE(dirNames, NULL); |
| 733 | HITLS_X509_DN dnName1[1] = {{(BslCid)dirCid1, value->x, value->len}}; | 735 | HITLS_X509_DN dnName1[1] = {{(BslCid)dirCid1, value->x, value->len}}; |
| 734 | HITLS_X509_DN dnName2[1] = {{(BslCid)dirCid2, value->x, value->len}}; | 736 | HITLS_X509_DN dnName2[1] = {{(BslCid)dirCid2, value->x, value->len}}; |
| @@ -1092,4 +1094,108 @@ exit: | |||
| 1092 | CRYPT_EAL_PkeyFreeCtx(prvKey); | 1094 | CRYPT_EAL_PkeyFreeCtx(prvKey); |
| 1093 | CRYPT_EAL_RandDeinit(); | 1095 | CRYPT_EAL_RandDeinit(); |
| 1094 | } | 1096 | } |
| 1095 | -/* END_CASE */ | 1097 | +/* END_CASE */ |
| 1098 | + | ||
| 1099 | +/* BEGIN_CASE */ | ||
| 1100 | +void SDV_HITLS_X509_PrintCtrl_TC001(void) | ||
| 1101 | +{ | ||
| 1102 | + TestMemInit(); | ||
| 1103 | + | ||
| 1104 | + BSL_UIO *uio = BSL_UIO_New(BSL_UIO_BufferMethod()); | ||
| 1105 | + ASSERT_NE(uio, NULL); | ||
| 1106 | + uint32_t flag = 0; | ||
| 1107 | + BslList list = {0}; | ||
| 1108 | + | ||
| 1109 | + ASSERT_EQ(HITLS_X509_PrintCtrl(0xff, NULL, 0, NULL), HITLS_X509_ERR_INVALID_PARAM); | ||
| 1110 | + | ||
| 1111 | + ASSERT_EQ(HITLS_X509_PrintCtrl(HITLS_X509_SET_PRINT_FLAG, NULL, 0, NULL), HITLS_X509_ERR_INVALID_PARAM); | ||
| 1112 | + ASSERT_EQ(HITLS_X509_PrintCtrl(HITLS_X509_SET_PRINT_FLAG, &flag, 0, NULL), HITLS_X509_ERR_INVALID_PARAM); | ||
| 1113 | + | ||
| 1114 | + ASSERT_EQ(HITLS_X509_PrintCtrl(HITLS_X509_PRINT_DN, NULL, sizeof(BslList), uio), HITLS_X509_ERR_INVALID_PARAM); | ||
| 1115 | + ASSERT_EQ(HITLS_X509_PrintCtrl(HITLS_X509_PRINT_DN, &list, sizeof(BslList), NULL), HITLS_X509_ERR_INVALID_PARAM); | ||
| 1116 | + ASSERT_EQ(HITLS_X509_PrintCtrl(HITLS_X509_PRINT_DN, &list, 0, uio), HITLS_X509_ERR_INVALID_PARAM); | ||
| 1117 | + | ||
| 1118 | +exit: | ||
| 1119 | + BSL_UIO_Free(uio); | ||
| 1120 | + return; | ||
| 1121 | +} | ||
| 1122 | +/* END_CASE */ | ||
| 1123 | + | ||
| 1124 | +static int32_t ReadFile(const char *filePath, uint8_t *buff, uint32_t buffLen, uint32_t *outLen) | ||
| 1125 | +{ | ||
| 1126 | + FILE *fp = NULL; | ||
| 1127 | + int32_t ret = -1; | ||
| 1128 | + | ||
| 1129 | + fp = fopen(filePath, "rb"); | ||
| 1130 | + if (fp == NULL) { | ||
| 1131 | + return ret; | ||
| 1132 | + } | ||
| 1133 | + if (fseek(fp, 0, SEEK_END) != 0) { | ||
| 1134 | + goto exit; | ||
| 1135 | + } | ||
| 1136 | + long fileSize = ftell(fp); | ||
| 1137 | + if (fileSize < 0 || (uint32_t)fileSize > buffLen) { | ||
| 1138 | + goto exit; | ||
| 1139 | + } | ||
| 1140 | + rewind(fp); | ||
| 1141 | + size_t readSize = fread(buff, 1, fileSize, fp); | ||
| 1142 | + if (readSize != (size_t)fileSize) { | ||
| 1143 | + goto exit; | ||
| 1144 | + } | ||
| 1145 | + *outLen = (uint32_t)fileSize; | ||
| 1146 | + ret = 0; | ||
| 1147 | + | ||
| 1148 | +exit: | ||
| 1149 | + (void)fclose(fp); | ||
| 1150 | + return ret; | ||
| 1151 | +} | ||
| 1152 | + | ||
| 1153 | +static int32_t PrintBuffTest(int cmd, BSL_Buffer *data, char *log, Hex *expect, bool isExpectFile) | ||
| 1154 | +{ | ||
| 1155 | + int32_t ret = -1; | ||
| 1156 | + uint8_t dnBuf[MAX_BUFF_SIZE] = {}; | ||
| 1157 | + uint32_t dnBufLen = sizeof(dnBuf); | ||
| 1158 | + uint8_t expectBuf[MAX_BUFF_SIZE] = {}; | ||
| 1159 | + uint32_t expectBufLen = sizeof(expectBuf); | ||
| 1160 | + BSL_UIO *uio = BSL_UIO_New(BSL_UIO_MemMethod()); | ||
| 1161 | + ASSERT_NE(uio, NULL); | ||
| 1162 | + ASSERT_EQ(HITLS_X509_PrintCtrl(cmd, data->data, data->dataLen, uio), | ||
| 1163 | + HITLS_X509_SUCCESS); | ||
| 1164 | + ASSERT_EQ(BSL_UIO_Read(uio, dnBuf, MAX_BUFF_SIZE, &dnBufLen), 0); | ||
| 1165 | + if (isExpectFile) { | ||
| 1166 | + ASSERT_EQ(ReadFile((char *)expect->x, expectBuf, MAX_BUFF_SIZE, &expectBufLen), 0); | ||
| 1167 | + ASSERT_COMPARE(log, expectBuf, expectBufLen, dnBuf, dnBufLen); | ||
| 1168 | + } else { | ||
| 1169 | + ASSERT_COMPARE(log, expect->x, expect->len, dnBuf, dnBufLen); | ||
| 1170 | + } | ||
| 1171 | + ret = 0; | ||
| 1172 | +exit: | ||
| 1173 | + BSL_UIO_Free(uio); | ||
| 1174 | + return ret; | ||
| 1175 | +} | ||
| 1176 | + | ||
| 1177 | +/* BEGIN_CASE */ | ||
| 1178 | +void SDV_HITLS_X509_PrintDn_TC002(char *certPath, int format, int printFlag, char *expect, Hex *multiExpect) | ||
| 1179 | +{ | ||
| 1180 | + TestMemInit(); | ||
| 1181 | + HITLS_X509_Cert *cert = NULL; | ||
| 1182 | + BslList *rawIssuer = NULL; | ||
| 1183 | + Hex expectName = {}; | ||
| 1184 | + if (printFlag == HITLS_X509_PRINT_DN_MULTILINE) { | ||
| 1185 | + expectName.x = multiExpect->x; | ||
| 1186 | + expectName.len = multiExpect->len; | ||
| 1187 | + } else { | ||
| 1188 | + expectName.x = (uint8_t *)expect; | ||
| 1189 | + expectName.len = strlen(expect); | ||
| 1190 | + } | ||
| 1191 | + ASSERT_EQ(HITLS_X509_CertParseFile(format, certPath, &cert), HITLS_X509_SUCCESS); | ||
| 1192 | + ASSERT_NE(cert, NULL); | ||
| 1193 | + ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_GET_ISSUER_DN, &rawIssuer, sizeof(BslList *)), HITLS_X509_SUCCESS); | ||
| 1194 | + BSL_Buffer data = {(uint8_t *)rawIssuer, sizeof(BslList)}; | ||
| 1195 | + ASSERT_EQ(HITLS_X509_PrintCtrl(HITLS_X509_SET_PRINT_FLAG, &printFlag, sizeof(int), NULL), HITLS_X509_SUCCESS); | ||
| 1196 | + ASSERT_EQ(PrintBuffTest(HITLS_X509_PRINT_DN, &data, "Print Distinguish name", &expectName, false), 0); | ||
| 1197 | + | ||
| 1198 | +exit: | ||
| 1199 | + HITLS_X509_CertFree(cert); | ||
| 1200 | +} | ||
| 1201 | +/* END_CASE */ | ||
| @@ -275,4 +275,43 @@ SDV_X509_SIGN_Func_TC001: [fail: mdId must be sm3] sm2, mdId=sha256 | |||
| 275 | SDV_X509_SIGN_Func_TC001:"../testdata/cert/asn1/sm2_pkcs8/sm2_pkcs1.der":BSL_FORMAT_ASN1:CRYPT_PRIKEY_ECC:BSL_CID_SHA256:0:0:0:0:HITLS_X509_ERR_ENCODE_SIGNID | 275 | SDV_X509_SIGN_Func_TC001:"../testdata/cert/asn1/sm2_pkcs8/sm2_pkcs1.der":BSL_FORMAT_ASN1:CRYPT_PRIKEY_ECC:BSL_CID_SHA256:0:0:0:0:HITLS_X509_ERR_ENCODE_SIGNID |
| 276 | 276 | ||
| 277 | SDV_X509_SIGN_Func_TC002 | 277 | SDV_X509_SIGN_Func_TC002 |
| 278 | -SDV_X509_SIGN_Func_TC002: | 278 | +SDV_X509_SIGN_Func_TC002: |
| 279 | + | ||
| 280 | +SDV_HITLS_X509_PrintCtrl_TC001 | ||
| 281 | +SDV_HITLS_X509_PrintCtrl_TC001: | ||
| 282 | + | ||
| 283 | +SDV_HITLS_X509_PrintDn_TC002 rfc2253 format test1 | ||
| 284 | +SDV_HITLS_X509_PrintDn_TC002:"../testdata/cert/asn1/rsa_cert/ca.der":BSL_FORMAT_ASN1:HITLS_X509_PRINT_DN_RFC2253:"CN=certificate.testca.com,OU=testca,O=certificate,L=XX,ST=XX,C=XX":"00" | ||
| 285 | + | ||
| 286 | +SDV_HITLS_X509_PrintDn_TC002 rfc2253 format test2 | ||
| 287 | +SDV_HITLS_X509_PrintDn_TC002:"../testdata/cert/pem/print/rfc2253_dntest.crt":BSL_FORMAT_PEM:HITLS_X509_PRINT_DN_RFC2253:"ST=\<B\;eijing\ ,L=Beijing\>,O=\,Example Corp,OU=\#IT Department,CN=\ Test User":"00" | ||
| 288 | + | ||
| 289 | +SDV_HITLS_X509_PrintDn_TC002 rfc2253 format test3 | ||
| 290 | +SDV_HITLS_X509_PrintDn_TC002:"../testdata/cert/pem/print/rfc2253_dntest1.crt":BSL_FORMAT_PEM:HITLS_X509_PRINT_DN_RFC2253:"emailAddress=test@example.com,C=CN,ST=Beijing,L=Beijing,O=Example Corp,OU=IT Department,CN=Test User":"00" | ||
| 291 | + | ||
| 292 | +SDV_HITLS_X509_PrintDn_TC002 rfc2253 format test4 | ||
| 293 | +SDV_HITLS_X509_PrintDn_TC002:"../testdata/cert/pem/print/rfc2253_dntest3.crt":BSL_FORMAT_PEM:HITLS_X509_PRINT_DN_RFC2253:"ST=\<B\;eijing\ ,L=Beijing\>,O=\,Example Corp,OU=\#IT Department,Unknown=\ Test User":"00" | ||
| 294 | + | ||
| 295 | +SDV_HITLS_X509_PrintDn_TC002 oneline format test1 | ||
| 296 | +SDV_HITLS_X509_PrintDn_TC002:"../testdata/cert/asn1/rsa_cert/ca.der":BSL_FORMAT_ASN1:HITLS_X509_PRINT_DN_ONELINE:"C = XX, ST = XX, L = XX, O = certificate, OU = testca, CN = certificate.testca.com":"00" | ||
| 297 | + | ||
| 298 | +SDV_HITLS_X509_PrintDn_TC002 oneline format test2 | ||
| 299 | +SDV_HITLS_X509_PrintDn_TC002:"../testdata/cert/pem/print/rfc2253_dntest.crt":BSL_FORMAT_PEM:HITLS_X509_PRINT_DN_ONELINE:"CN = " Test User", OU = "#IT Department", O = ",Example Corp", L = "Beijing>", ST = "<B;eijing "":"00" | ||
| 300 | + | ||
| 301 | +SDV_HITLS_X509_PrintDn_TC002 oneline format test3 | ||
| 302 | +SDV_HITLS_X509_PrintDn_TC002:"../testdata/cert/pem/print/rfc2253_dntest1.crt":BSL_FORMAT_PEM:HITLS_X509_PRINT_DN_ONELINE:"CN = Test User, OU = IT Department, O = Example Corp, L = Beijing, ST = Beijing, C = CN, emailAddress = test@example.com":"00" | ||
| 303 | + | ||
| 304 | +SDV_HITLS_X509_PrintDn_TC002 oneline format test4 | ||
| 305 | +SDV_HITLS_X509_PrintDn_TC002:"../testdata/cert/pem/print/rfc2253_dntest3.crt":BSL_FORMAT_PEM:HITLS_X509_PRINT_DN_ONELINE:"Unknown = " Test User", OU = "#IT Department", O = ",Example Corp", L = "Beijing>", ST = "<B;eijing "":"00" | ||
| 306 | + | ||
| 307 | +SDV_HITLS_X509_PrintDn_TC002 multiline format test1 | ||
| 308 | +SDV_HITLS_X509_PrintDn_TC002:"../testdata/cert/asn1/rsa_cert/ca.der":BSL_FORMAT_ASN1:HITLS_X509_PRINT_DN_MULTILINE:"NONE":"2020202043203D2058580A202020205354203D2058580A202020204C203D2058580A202020204F203D2063657274696669636174650A202020204F55203D207465737463610A20202020434E203D2063657274696669636174652E7465737463612E636F6D" | ||
| 309 | + | ||
| 310 | +SDV_HITLS_X509_PrintDn_TC002 multiline format test2 | ||
| 311 | +SDV_HITLS_X509_PrintDn_TC002:"../testdata/cert/pem/print/rfc2253_dntest.crt":BSL_FORMAT_PEM:HITLS_X509_PRINT_DN_MULTILINE:"NONE":"20202020434E203D20205465737420557365720A202020204F55203D20234954204465706172746D656E740A202020204F203D202C4578616D706C6520436F72700A202020204C203D204265696A696E673E0A202020205354203D203C423B65696A696E6720" | ||
| 312 | + | ||
| 313 | +SDV_HITLS_X509_PrintDn_TC002 multiline format test3 | ||
| 314 | +SDV_HITLS_X509_PrintDn_TC002:"../testdata/cert/pem/print/rfc2253_dntest1.crt":BSL_FORMAT_PEM:HITLS_X509_PRINT_DN_MULTILINE:"NONE":"20202020434E203D205465737420557365720A202020204F55203D204954204465706172746D656E740A202020204F203D204578616D706C6520436F72700A202020204C203D204265696A696E670A202020205354203D204265696A696E670A2020202043203D20434E0A20202020656D61696C41646472657373203D2074657374406578616D706C652E636F6D" | ||
| 315 | + | ||
| 316 | +SDV_HITLS_X509_PrintDn_TC002 multiline format test4 | ||
| 317 | +SDV_HITLS_X509_PrintDn_TC002:"../testdata/cert/pem/print/rfc2253_dntest3.crt":BSL_FORMAT_PEM:HITLS_X509_PRINT_DN_MULTILINE:"NONE":"20202020556E6B6E6F776E203D20205465737420557365720A202020204F55203D20234954204465706172746D656E740A202020204F203D202C4578616D706C6520436F72700A202020204C203D204265696A696E673E0A202020205354203D203C423B65696A696E6720" | ||
| @@ -29,7 +29,7 @@ | |||
| 29 | 29 | ||
| 30 | 30 | ||
| 31 | 31 | ||
| 32 | - | 32 | +static char g_sm2DefaultUserid[] = "1234567812345678"; |
| 33 | /* END_HEADER */ | 33 | /* END_HEADER */ |
| 34 | 34 | ||
| 35 | /* BEGIN_CASE */ | 35 | /* BEGIN_CASE */ |
| @@ -417,7 +417,7 @@ void SDV_X509_CRL_CTRL_ParamCheck_TC001(void) | |||
| 417 | HITLS_X509_ERR_INVALID_PARAM); | 417 | HITLS_X509_ERR_INVALID_PARAM); |
| 418 | 418 | ||
| 419 | // Test incorrect length for issuer parameter | 419 | // Test incorrect length for issuer parameter |
| 420 | - ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_ISSUER_DNNAME, issuer, sizeof(BSL_ASN1_List) - 1), | 420 | + ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_ISSUER_DN, issuer, sizeof(BSL_ASN1_List) - 1), |
| 421 | HITLS_X509_ERR_INVALID_PARAM); | 421 | HITLS_X509_ERR_INVALID_PARAM); |
| 422 | 422 | ||
| 423 | // Test empty buffer for get command | 423 | // Test empty buffer for get command |
| @@ -583,7 +583,7 @@ void SDV_X509_CRL_CTRL_GetFunc_TC001(void) | |||
| 583 | ASSERT_TRUE(afterTime.month > beforeTime.month); | 583 | ASSERT_TRUE(afterTime.month > beforeTime.month); |
| 584 | 584 | ||
| 585 | // Test getting the issuer DN name | 585 | // Test getting the issuer DN name |
| 586 | - ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_GET_ISSUER_DNNAME, &issuerDN, sizeof(BslList *)), HITLS_X509_SUCCESS); | 586 | + ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_GET_ISSUER_DN, &issuerDN, sizeof(BslList *)), HITLS_X509_SUCCESS); |
| 587 | ASSERT_NE(issuerDN, NULL); | 587 | ASSERT_NE(issuerDN, NULL); |
| 588 | ASSERT_NE(BSL_LIST_COUNT(issuerDN), 0); | 588 | ASSERT_NE(BSL_LIST_COUNT(issuerDN), 0); |
| 589 | 589 | ||
| @@ -650,10 +650,10 @@ void SDV_X509_CRL_CTRL_SetFunc_TC001(char *capath) | |||
| 650 | uint32_t version = 1; | 650 | uint32_t version = 1; |
| 651 | ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_VERSION, &version, sizeof(uint32_t)), HITLS_X509_SUCCESS); | 651 | ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_VERSION, &version, sizeof(uint32_t)), HITLS_X509_SUCCESS); |
| 652 | BslList *issuerDN = NULL; | 652 | BslList *issuerDN = NULL; |
| 653 | - ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_GET_ISSUER_DNNAME, &issuerDN, sizeof(BslList *)), | 653 | + ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_GET_ISSUER_DN, &issuerDN, sizeof(BslList *)), |
| 654 | HITLS_X509_SUCCESS); | 654 | HITLS_X509_SUCCESS); |
| 655 | ASSERT_NE(issuerDN, NULL); | 655 | ASSERT_NE(issuerDN, NULL); |
| 656 | - ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_ISSUER_DNNAME, issuerDN, sizeof(BslList)), HITLS_X509_SUCCESS); | 656 | + ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_ISSUER_DN, issuerDN, sizeof(BslList)), HITLS_X509_SUCCESS); |
| 657 | ASSERT_EQ(BSL_SAL_SysTimeGet(&beforeTime), BSL_SUCCESS); | 657 | ASSERT_EQ(BSL_SAL_SysTimeGet(&beforeTime), BSL_SUCCESS); |
| 658 | ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_BEFORE_TIME, &beforeTime, sizeof(BSL_TIME)), HITLS_X509_SUCCESS); | 658 | ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_BEFORE_TIME, &beforeTime, sizeof(BSL_TIME)), HITLS_X509_SUCCESS); |
| 659 | 659 | ||
| @@ -723,8 +723,8 @@ void SDV_X509_CRL_Gen_Process_TC001(void) | |||
| 723 | 723 | ||
| 724 | /* Cannot set after parsing */ | 724 | /* Cannot set after parsing */ |
| 725 | ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_VERSION, &ver, sizeof(uint32_t)), HITLS_X509_ERR_SET_AFTER_PARSE); | 725 | ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_VERSION, &ver, sizeof(uint32_t)), HITLS_X509_ERR_SET_AFTER_PARSE); |
| 726 | - ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_GET_ISSUER_DNNAME, &tmp, sizeof(BslList *)), HITLS_X509_SUCCESS); | 726 | + ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_GET_ISSUER_DN, &tmp, sizeof(BslList *)), HITLS_X509_SUCCESS); |
| 727 | - ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_ISSUER_DNNAME, tmp, 0), HITLS_X509_ERR_SET_AFTER_PARSE); | 727 | + ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_ISSUER_DN, tmp, 0), HITLS_X509_ERR_SET_AFTER_PARSE); |
| 728 | 728 | ||
| 729 | /* Generate crl after parsing is allowed. */ | 729 | /* Generate crl after parsing is allowed. */ |
| 730 | ASSERT_EQ(HITLS_X509_CrlGenBuff(BSL_FORMAT_ASN1, crl, &encodeCrl), 0); | 730 | ASSERT_EQ(HITLS_X509_CrlGenBuff(BSL_FORMAT_ASN1, crl, &encodeCrl), 0); |
| @@ -780,8 +780,8 @@ void SDV_X509_CRL_Gen_Process_TC002(void) | |||
| 780 | 780 | ||
| 781 | /* issuer name is empty */ | 781 | /* issuer name is empty */ |
| 782 | ASSERT_EQ(HITLS_X509_CrlSign(mdId, prvKey, NULL, crl), HITLS_X509_ERR_CRL_ISSUER_EMPTY); | 782 | ASSERT_EQ(HITLS_X509_CrlSign(mdId, prvKey, NULL, crl), HITLS_X509_ERR_CRL_ISSUER_EMPTY); |
| 783 | - ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_GET_ISSUER_DNNAME, &issuerDN, sizeof(BslList *)), 0); | 783 | + ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_GET_ISSUER_DN, &issuerDN, sizeof(BslList *)), 0); |
| 784 | - ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_ISSUER_DNNAME, issuerDN, sizeof(BslList)), 0); | 784 | + ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_ISSUER_DN, issuerDN, sizeof(BslList)), 0); |
| 785 | 785 | ||
| 786 | /* thisUpdate is not set */ | 786 | /* thisUpdate is not set */ |
| 787 | ASSERT_EQ(HITLS_X509_CrlSign(mdId, prvKey, NULL, crl), HITLS_X509_ERR_CRL_THISUPDATE_UNEXIST); | 787 | ASSERT_EQ(HITLS_X509_CrlSign(mdId, prvKey, NULL, crl), HITLS_X509_ERR_CRL_THISUPDATE_UNEXIST); |
| @@ -855,8 +855,8 @@ void SDV_X509_CRL_Sign_AlgParamCheck_TC001(void) | |||
| 855 | crl = HITLS_X509_CrlNew(); | 855 | crl = HITLS_X509_CrlNew(); |
| 856 | ASSERT_NE(crl, NULL); | 856 | ASSERT_NE(crl, NULL); |
| 857 | 857 | ||
| 858 | - ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_GET_ISSUER_DNNAME, &issuerDN, sizeof(BslList *)), 0); | 858 | + ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_GET_ISSUER_DN, &issuerDN, sizeof(BslList *)), 0); |
| 859 | - ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_ISSUER_DNNAME, issuerDN, sizeof(BslList)), 0); | 859 | + ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_ISSUER_DN, issuerDN, sizeof(BslList)), 0); |
| 860 | ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_BEFORE_TIME, &thisUpdate, sizeof(BSL_TIME)), 0); | 860 | ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_BEFORE_TIME, &thisUpdate, sizeof(BSL_TIME)), 0); |
| 861 | 861 | ||
| 862 | /* Test invalid mdId */ | 862 | /* Test invalid mdId */ |
| @@ -989,9 +989,9 @@ static int32_t SetCrl(HITLS_X509_Crl *crl, HITLS_X509_Cert *cert, bool isV2) | |||
| 989 | ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_VERSION, &version, sizeof(version)), HITLS_X509_SUCCESS); | 989 | ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_VERSION, &version, sizeof(version)), HITLS_X509_SUCCESS); |
| 990 | 990 | ||
| 991 | // Set issuer DN from certificate | 991 | // Set issuer DN from certificate |
| 992 | - ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_GET_SUBJECT_DNNAME, &issuerDN, sizeof(BslList *)), | 992 | + ASSERT_EQ(HITLS_X509_CertCtrl(cert, HITLS_X509_GET_SUBJECT_DN, &issuerDN, sizeof(BslList *)), |
| 993 | HITLS_X509_SUCCESS); | 993 | HITLS_X509_SUCCESS); |
| 994 | - ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_ISSUER_DNNAME, issuerDN, sizeof(BslList)), | 994 | + ASSERT_EQ(HITLS_X509_CrlCtrl(crl, HITLS_X509_SET_ISSUER_DN, issuerDN, sizeof(BslList)), |
| 995 | HITLS_X509_SUCCESS); | 995 | HITLS_X509_SUCCESS); |
| 996 | 996 | ||
| 997 | // Set validity period | 997 | // Set validity period |
| @@ -1030,15 +1030,14 @@ exit: | |||
| 1030 | } | 1030 | } |
| 1031 | 1031 | ||
| 1032 | /* BEGIN_CASE */ | 1032 | /* BEGIN_CASE */ |
| 1033 | -void SDV_X509_CRL_Sign_Func_TC001(char *cert, char *key, int keytype, int pkeyId, int pad, int mdId, int isV2, | 1033 | +void SDV_X509_CRL_Sign_Func_TC001(char *cert, char *key, int keytype, int pad, int mdId, int isV2, |
| 1034 | - char *tmp) | 1034 | + char *tmp, int isUseSm2UserId) |
| 1035 | { | 1035 | { |
| 1036 | HITLS_X509_Crl *crl = NULL; | 1036 | HITLS_X509_Crl *crl = NULL; |
| 1037 | HITLS_X509_Crl *parseCrl = NULL; | 1037 | HITLS_X509_Crl *parseCrl = NULL; |
| 1038 | HITLS_X509_Cert *issuerCert = NULL; | 1038 | HITLS_X509_Cert *issuerCert = NULL; |
| 1039 | CRYPT_EAL_PkeyCtx *prvKey = NULL; | 1039 | CRYPT_EAL_PkeyCtx *prvKey = NULL; |
| 1040 | HITLS_X509_SignAlgParam algParam = {0}; | 1040 | HITLS_X509_SignAlgParam algParam = {0}; |
| 1041 | - (void)pkeyId; | ||
| 1042 | TestRandInit(); | 1041 | TestRandInit(); |
| 1043 | // Parse issuer certificate and private key | 1042 | // Parse issuer certificate and private key |
| 1044 | ASSERT_EQ(HITLS_X509_CertParseFile(BSL_FORMAT_UNKNOWN, cert, &issuerCert), HITLS_X509_SUCCESS); | 1043 | ASSERT_EQ(HITLS_X509_CertParseFile(BSL_FORMAT_UNKNOWN, cert, &issuerCert), HITLS_X509_SUCCESS); |
| @@ -1056,9 +1055,13 @@ void SDV_X509_CRL_Sign_Func_TC001(char *cert, char *key, int keytype, int pkeyId | |||
| 1056 | pssParam.mgfId = mdId; | 1055 | pssParam.mgfId = mdId; |
| 1057 | pssParam.saltLen = 32; | 1056 | pssParam.saltLen = 32; |
| 1058 | algParam.rsaPss = pssParam; | 1057 | algParam.rsaPss = pssParam; |
| 1058 | + } else if (isUseSm2UserId != 0) { | ||
| 1059 | + algParam.algId = BSL_CID_SM2DSAWITHSM3; | ||
| 1060 | + algParam.sm2UserId.data = (uint8_t *)g_sm2DefaultUserid; | ||
| 1061 | + algParam.sm2UserId.dataLen = (uint32_t)strlen(g_sm2DefaultUserid); | ||
| 1059 | } | 1062 | } |
| 1060 | 1063 | ||
| 1061 | - if (pad == CRYPT_PKEY_EMSA_PSS) { | 1064 | + if (pad == CRYPT_PKEY_EMSA_PSS || isUseSm2UserId != 0) { |
| 1062 | ASSERT_EQ(HITLS_X509_CrlSign(mdId, prvKey, &algParam, crl), HITLS_X509_SUCCESS); | 1065 | ASSERT_EQ(HITLS_X509_CrlSign(mdId, prvKey, &algParam, crl), HITLS_X509_SUCCESS); |
| 1063 | } else { | 1066 | } else { |
| 1064 | ASSERT_EQ(HITLS_X509_CrlSign(mdId, prvKey, NULL, crl), HITLS_X509_SUCCESS); | 1067 | ASSERT_EQ(HITLS_X509_CrlSign(mdId, prvKey, NULL, crl), HITLS_X509_SUCCESS); |
| @@ -1068,8 +1071,14 @@ void SDV_X509_CRL_Sign_Func_TC001(char *cert, char *key, int keytype, int pkeyId | |||
| 1068 | ASSERT_NE(crl->signature.buff, NULL); | 1071 | ASSERT_NE(crl->signature.buff, NULL); |
| 1069 | ASSERT_NE(crl->signature.len, 0); | 1072 | ASSERT_NE(crl->signature.len, 0); |
| 1070 | ASSERT_EQ(HITLS_X509_CrlGenFile(BSL_FORMAT_ASN1, crl, tmp), HITLS_X509_SUCCESS); | 1073 | ASSERT_EQ(HITLS_X509_CrlGenFile(BSL_FORMAT_ASN1, crl, tmp), HITLS_X509_SUCCESS); |
| 1074 | + ASSERT_EQ(HITLS_X509_CrlVerify(issuerCert->tbs.ealPubKey, crl), HITLS_X509_SUCCESS); | ||
| 1071 | ASSERT_EQ(HITLS_X509_CrlParseFile(BSL_FORMAT_UNKNOWN, tmp, &parseCrl), HITLS_X509_SUCCESS); | 1075 | ASSERT_EQ(HITLS_X509_CrlParseFile(BSL_FORMAT_UNKNOWN, tmp, &parseCrl), HITLS_X509_SUCCESS); |
| 1072 | ASSERT_NE(parseCrl, NULL); | 1076 | ASSERT_NE(parseCrl, NULL); |
| 1077 | + if (isUseSm2UserId != 0) { | ||
| 1078 | + ASSERT_EQ(HITLS_X509_CrlCtrl(parseCrl, HITLS_X509_SET_VEY_SM2_USER_ID, g_sm2DefaultUserid, | ||
| 1079 | + strlen(g_sm2DefaultUserid)), HITLS_X509_SUCCESS); | ||
| 1080 | + } | ||
| 1081 | + | ||
| 1073 | ASSERT_EQ(HITLS_X509_CrlVerify(issuerCert->tbs.ealPubKey, parseCrl), HITLS_X509_SUCCESS); | 1082 | ASSERT_EQ(HITLS_X509_CrlVerify(issuerCert->tbs.ealPubKey, parseCrl), HITLS_X509_SUCCESS); |
| 1074 | exit: | 1083 | exit: |
| 1075 | HITLS_X509_CrlFree(crl); | 1084 | HITLS_X509_CrlFree(crl); |
| @@ -272,22 +272,26 @@ SDV_X509_CRL_Sign_RevokedCheck_TC001 | |||
| 272 | SDV_X509_CRL_Sign_RevokedCheck_TC001: | 272 | SDV_X509_CRL_Sign_RevokedCheck_TC001: |
| 273 | 273 | ||
| 274 | SDV_X509_CRL_Sign_Func_TC001 v1 cert rsa_p1_v1.crt.der | 274 | SDV_X509_CRL_Sign_Func_TC001 v1 cert rsa_p1_v1.crt.der |
| 275 | -SDV_X509_CRL_Sign_Func_TC001:"../testdata/cert/asn1/rsa_cert/rsa_p1_v1.crt.der":"../testdata/cert/asn1/rsa_cert/rsa_p1.key.der":CRYPT_PRIKEY_RSA:CRYPT_PRIKEY_RSA:0:CRYPT_MD_SHA256:0:"tmp-rsav1.crl" | 275 | +SDV_X509_CRL_Sign_Func_TC001:"../testdata/cert/asn1/rsa_cert/rsa_p1_v1.crt.der":"../testdata/cert/asn1/rsa_cert/rsa_p1.key.der":CRYPT_PRIKEY_RSA:0:CRYPT_MD_SHA256:0:"tmp-rsav1.crl":0 |
| 276 | 276 | ||
| 277 | SDV_X509_CRL_Sign_Func_TC001 v3 cert rsa_p8.crt.der | 277 | SDV_X509_CRL_Sign_Func_TC001 v3 cert rsa_p8.crt.der |
| 278 | -SDV_X509_CRL_Sign_Func_TC001:"../testdata/cert/asn1/rsa_cert/rsa_p8.crt.der":"../testdata/cert/asn1/rsa_cert/rsa_p8.key.der":CRYPT_PRIKEY_PKCS8_UNENCRYPT:CRYPT_PKEY_RSA:0:CRYPT_MD_SHA256:1:"tmp-rsav2.crl" | 278 | +SDV_X509_CRL_Sign_Func_TC001:"../testdata/cert/asn1/rsa_cert/rsa_p8.crt.der":"../testdata/cert/asn1/rsa_cert/rsa_p8.key.der":CRYPT_PRIKEY_PKCS8_UNENCRYPT:0:CRYPT_MD_SHA256:1:"tmp-rsav2.crl":0 |
| 279 | 279 | ||
| 280 | SDV_X509_CRL_Sign_Func_TC001 v3 cert sm2.crt.der | 280 | SDV_X509_CRL_Sign_Func_TC001 v3 cert sm2.crt.der |
| 281 | -SDV_X509_CRL_Sign_Func_TC001:"../testdata/cert/asn1/sm2_cert/sm2.crt.der":"../testdata/cert/asn1/sm2_cert/sm2.key.der":CRYPT_PRIKEY_ECC:CRYPT_PKEY_SM2:0:CRYPT_MD_SM3:1:"tmp-sm2.crl" | 281 | +SDV_X509_CRL_Sign_Func_TC001:"../testdata/cert/asn1/sm2_cert/sm2.crt.der":"../testdata/cert/asn1/sm2_cert/sm2.key.der":CRYPT_PRIKEY_ECC:0:CRYPT_MD_SM3:1:"tmp-sm2.crl":0 |
| 282 | 282 | ||
| 283 | SDV_X509_CRL_Sign_Func_TC001 v3 cert ecdsa_sha384.crt.der | 283 | SDV_X509_CRL_Sign_Func_TC001 v3 cert ecdsa_sha384.crt.der |
| 284 | -SDV_X509_CRL_Sign_Func_TC001:"../testdata/cert/asn1/ecdsa_cert/ecdsa_sha384.crt.der":"../testdata/cert/asn1/ecdsa_cert/ecdsa_sha384.key.der":CRYPT_PRIKEY_PKCS8_UNENCRYPT:CRYPT_PKEY_ECDSA:0:CRYPT_MD_SHA384:1:"tmp-ec.crl" | 284 | +SDV_X509_CRL_Sign_Func_TC001:"../testdata/cert/asn1/ecdsa_cert/ecdsa_sha384.crt.der":"../testdata/cert/asn1/ecdsa_cert/ecdsa_sha384.key.der":CRYPT_PRIKEY_PKCS8_UNENCRYPT:0:CRYPT_MD_SHA384:1:"tmp-ec.crl":0 |
| 285 | 285 | ||
| 286 | SDV_X509_CRL_Sign_Func_TC001 v3 cert rsa_pss.crt.der | 286 | SDV_X509_CRL_Sign_Func_TC001 v3 cert rsa_pss.crt.der |
| 287 | -SDV_X509_CRL_Sign_Func_TC001:"../testdata/cert/asn1/rsa_pss_cert/rsa_pss.crt.der":"../testdata/cert/asn1/rsa_pss_cert/rsa_pss.key.der":CRYPT_PRIKEY_PKCS8_UNENCRYPT:CRYPT_PKEY_RSA:CRYPT_PKEY_EMSA_PSS:CRYPT_MD_SHA256:0:"tmp-pss.crl" | 287 | +SDV_X509_CRL_Sign_Func_TC001:"../testdata/cert/asn1/rsa_pss_cert/rsa_pss.crt.der":"../testdata/cert/asn1/rsa_pss_cert/rsa_pss.key.der":CRYPT_PRIKEY_PKCS8_UNENCRYPT:CRYPT_PKEY_EMSA_PSS:CRYPT_MD_SHA256:0:"tmp-pss.crl":0 |
| 288 | 288 | ||
| 289 | SDV_X509_CRL_Sign_Func_TC001 v3 cert rsa -- rsa_pss.crt.der | 289 | SDV_X509_CRL_Sign_Func_TC001 v3 cert rsa -- rsa_pss.crt.der |
| 290 | -SDV_X509_CRL_Sign_Func_TC001:"../testdata/cert/asn1/rsa_cert/rsa_p8.crt.der":"../testdata/cert/asn1/rsa_cert/rsa_p8.key.der":CRYPT_PRIKEY_PKCS8_UNENCRYPT:CRYPT_PKEY_RSA:CRYPT_PKEY_EMSA_PSS:CRYPT_MD_SHA256:1:"tmp-rsa-pss.crl" | 290 | +SDV_X509_CRL_Sign_Func_TC001:"../testdata/cert/asn1/rsa_cert/rsa_p8.crt.der":"../testdata/cert/asn1/rsa_cert/rsa_p8.key.der":CRYPT_PRIKEY_PKCS8_UNENCRYPT:CRYPT_PKEY_EMSA_PSS:CRYPT_MD_SHA256:1:"tmp-rsa-pss.crl":0 |
| 291 | 291 | ||
| 292 | SDV_X509_CRL_Sign_Func_TC001 v2 cert rsa -- rsa_pss-aki.crt.der | 292 | SDV_X509_CRL_Sign_Func_TC001 v2 cert rsa -- rsa_pss-aki.crt.der |
| 293 | -SDV_X509_CRL_Sign_Func_TC001:"../testdata/cert/asn1/rsa_cert/inter2.mul.crt":"../testdata/cert/asn1/rsa_cert/inter2.mul.key":CRYPT_PRIKEY_PKCS8_UNENCRYPT:CRYPT_PKEY_RSA:CRYPT_PKEY_EMSA_PSS:CRYPT_MD_SHA256:1:"tmp-rsa-pss-aki.crl" | 293 | +SDV_X509_CRL_Sign_Func_TC001:"../testdata/cert/asn1/rsa_cert/inter2.mul.crt":"../testdata/cert/asn1/rsa_cert/inter2.mul.key":CRYPT_PRIKEY_PKCS8_UNENCRYPT:CRYPT_PKEY_EMSA_PSS:CRYPT_MD_SHA256:1:"tmp-rsa-pss-aki.crl":0 |
| 294 | + | ||
| 295 | +SDV_X509_CRL_Sign_Func_TC001 v3 cert sm2 with userid | ||
| 296 | +SDV_X509_CRL_Sign_Func_TC001:"../testdata/cert/sm2_with_userid/ca.crt":"../testdata/cert/sm2_with_userid/ca.key":CRYPT_PRIKEY_PKCS8_UNENCRYPT:0:CRYPT_MD_SM3:0:"tmp-sm2-withuserId.crl":1 | ||
| 297 | + | ||
| @@ -31,6 +31,8 @@ | |||
| 31 | /* END_HEADER */ | 31 | /* END_HEADER */ |
| 32 | 32 | ||
| 33 | 33 | ||
| 34 | +static char g_sm2DefaultUserid[] = "1234567812345678"; | ||
| 35 | + | ||
| 34 | void *TestMallocErr(uint32_t len) | 36 | void *TestMallocErr(uint32_t len) |
| 35 | { | 37 | { |
| 36 | (void)len; | 38 | (void)len; |
| @@ -133,13 +135,16 @@ exit: | |||
| 133 | 135 | ||
| 134 | /* BEGIN_CASE */ | 136 | /* BEGIN_CASE */ |
| 135 | void SDV_X509_CSR_PARSE_FUNC_TC001(int format, char *path, int expRawDataLen, int expSignAlg, Hex *expectedSign, | 137 | void SDV_X509_CSR_PARSE_FUNC_TC001(int format, char *path, int expRawDataLen, int expSignAlg, Hex *expectedSign, |
| 136 | - int expectUnusedbits) | 138 | + int expectUnusedbits, int isUseSm2UserId) |
| 137 | { | 139 | { |
| 138 | TestMemInit(); | 140 | TestMemInit(); |
| 139 | HITLS_X509_Csr *csr = NULL; | 141 | HITLS_X509_Csr *csr = NULL; |
| 140 | uint32_t rawDataLen = 0; | 142 | uint32_t rawDataLen = 0; |
| 141 | ASSERT_EQ(HITLS_X509_CsrParseFile(format, path, &csr), HITLS_X509_SUCCESS); | 143 | ASSERT_EQ(HITLS_X509_CsrParseFile(format, path, &csr), HITLS_X509_SUCCESS); |
| 142 | - | 144 | + if (isUseSm2UserId != 0) { |
| 145 | + ASSERT_EQ(HITLS_X509_CsrCtrl(csr, HITLS_X509_SET_VEY_SM2_USER_ID, g_sm2DefaultUserid, | ||
| 146 | + strlen(g_sm2DefaultUserid)), HITLS_X509_SUCCESS); | ||
| 147 | + } | ||
| 143 | ASSERT_EQ(HITLS_X509_CsrVerify(csr), HITLS_X509_SUCCESS); | 148 | ASSERT_EQ(HITLS_X509_CsrVerify(csr), HITLS_X509_SUCCESS); |
| 144 | 149 | ||
| 145 | ASSERT_EQ(HITLS_X509_CsrCtrl(csr, HITLS_X509_GET_ENCODELEN, &rawDataLen, sizeof(rawDataLen)), 0); | 150 | ASSERT_EQ(HITLS_X509_CsrCtrl(csr, HITLS_X509_GET_ENCODELEN, &rawDataLen, sizeof(rawDataLen)), 0); |
| @@ -186,7 +191,7 @@ void SDV_X509_CSR_PARSE_FUNC_TC002(int format, char *path, int expectedNum, char | |||
| 186 | ASSERT_EQ(HITLS_X509_CsrParseFile(format, path, &csr), HITLS_X509_SUCCESS); | 191 | ASSERT_EQ(HITLS_X509_CsrParseFile(format, path, &csr), HITLS_X509_SUCCESS); |
| 187 | 192 | ||
| 188 | BslList *rawSubject = NULL; | 193 | BslList *rawSubject = NULL; |
| 189 | - ASSERT_EQ(HITLS_X509_CsrCtrl(csr, HITLS_X509_GET_SUBJECT_DNNAME, &rawSubject, sizeof(BslList *)), 0); | 194 | + ASSERT_EQ(HITLS_X509_CsrCtrl(csr, HITLS_X509_GET_SUBJECT_DN, &rawSubject, sizeof(BslList *)), 0); |
| 190 | ASSERT_NE(rawSubject, NULL); | 195 | ASSERT_NE(rawSubject, NULL); |
| 191 | int count = BSL_LIST_COUNT(rawSubject); | 196 | int count = BSL_LIST_COUNT(rawSubject); |
| 192 | ASSERT_EQ(count, expectedNum); | 197 | ASSERT_EQ(count, expectedNum); |
| @@ -222,18 +227,19 @@ void SDV_X509_CSR_PARSE_FUNC_TC003(int format, char *path, int attrNum, int attr | |||
| 222 | { | 227 | { |
| 223 | TestMemInit(); | 228 | TestMemInit(); |
| 224 | HITLS_X509_Csr *csr = NULL; | 229 | HITLS_X509_Csr *csr = NULL; |
| 225 | - BslList *rawAttrs = NULL; | 230 | + HITLS_X509_Attrs *rawAttrs = NULL; |
| 226 | 231 | ||
| 227 | ASSERT_EQ(HITLS_X509_CsrParseFile(format, path, &csr), HITLS_X509_SUCCESS); | 232 | ASSERT_EQ(HITLS_X509_CsrParseFile(format, path, &csr), HITLS_X509_SUCCESS); |
| 228 | 233 | ||
| 229 | - ASSERT_EQ(HITLS_X509_CsrCtrl(csr, HITLS_X509_CSR_GET_ATTRIBUTES, &rawAttrs, sizeof(BslList *)), HITLS_X509_SUCCESS); | 234 | + ASSERT_EQ(HITLS_X509_CsrCtrl(csr, HITLS_X509_CSR_GET_ATTRIBUTES, &rawAttrs, sizeof(HITLS_X509_Attrs *)), |
| 235 | + HITLS_X509_SUCCESS); | ||
| 230 | ASSERT_NE(rawAttrs, NULL); | 236 | ASSERT_NE(rawAttrs, NULL); |
| 231 | - ASSERT_EQ(attrNum, BSL_LIST_COUNT(rawAttrs)); | 237 | + ASSERT_EQ(attrNum, BSL_LIST_COUNT(rawAttrs->list)); |
| 232 | if (attrNum == 0) { | 238 | if (attrNum == 0) { |
| 233 | goto exit; | 239 | goto exit; |
| 234 | } | 240 | } |
| 235 | 241 | ||
| 236 | - HITLS_X509_AttrEntry *entry = BSL_LIST_GET_FIRST(rawAttrs); | 242 | + HITLS_X509_AttrEntry *entry = BSL_LIST_GET_FIRST(rawAttrs->list); |
| 237 | ASSERT_EQ(attrCid, entry->cid); | 243 | ASSERT_EQ(attrCid, entry->cid); |
| 238 | BslOidString *oid = BSL_OBJ_GetOidFromCID(entry->cid); | 244 | BslOidString *oid = BSL_OBJ_GetOidFromCID(entry->cid); |
| 239 | ASSERT_NE(oid, NULL); | 245 | ASSERT_NE(oid, NULL); |
| @@ -358,7 +364,7 @@ exit: | |||
| 358 | static void ResetCsrNameList(HITLS_X509_Csr *raw) | 364 | static void ResetCsrNameList(HITLS_X509_Csr *raw) |
| 359 | { | 365 | { |
| 360 | BslList *newSubject = NULL; | 366 | BslList *newSubject = NULL; |
| 361 | - (void)HITLS_X509_CsrCtrl(raw, HITLS_X509_GET_SUBJECT_DNNAME, &newSubject, sizeof(BslList **)); | 367 | + (void)HITLS_X509_CsrCtrl(raw, HITLS_X509_GET_SUBJECT_DN, &newSubject, sizeof(BslList **)); |
| 362 | newSubject->curr = NULL; | 368 | newSubject->curr = NULL; |
| 363 | newSubject->last = NULL; | 369 | newSubject->last = NULL; |
| 364 | newSubject->first = NULL; | 370 | newSubject->first = NULL; |
| @@ -368,13 +374,14 @@ static void ResetCsrNameList(HITLS_X509_Csr *raw) | |||
| 368 | 374 | ||
| 369 | static void ResetCsrAttrsList(HITLS_X509_Csr *raw) | 375 | static void ResetCsrAttrsList(HITLS_X509_Csr *raw) |
| 370 | { | 376 | { |
| 371 | - BslList *newAttrs = NULL; | 377 | + HITLS_X509_Attrs *newAttrs = NULL; |
| 372 | - (void)HITLS_X509_CsrCtrl(raw, HITLS_X509_CSR_GET_ATTRIBUTES, &newAttrs, sizeof(BslList **)); | 378 | + (void)HITLS_X509_CsrCtrl(raw, HITLS_X509_CSR_GET_ATTRIBUTES, &newAttrs, sizeof(HITLS_X509_Attrs *)); |
| 373 | - newAttrs->curr = NULL; | 379 | + newAttrs->list->curr = NULL; |
| 374 | - newAttrs->last = NULL; | 380 | + newAttrs->list->last = NULL; |
| 375 | - newAttrs->first = NULL; | 381 | + newAttrs->list->first = NULL; |
| 376 | - newAttrs->dataSize = sizeof(HITLS_X509_NameNode); | 382 | + newAttrs->list->dataSize = sizeof(HITLS_X509_NameNode); |
| 377 | - newAttrs->count = 0; | 383 | + newAttrs->list->count = 0; |
| 384 | + newAttrs->flag = 0; | ||
| 378 | } | 385 | } |
| 379 | 386 | ||
| 380 | static int32_t SetCsr(HITLS_X509_Csr *raw, HITLS_X509_Csr *new) | 387 | static int32_t SetCsr(HITLS_X509_Csr *raw, HITLS_X509_Csr *new) |
| @@ -384,20 +391,20 @@ static int32_t SetCsr(HITLS_X509_Csr *raw, HITLS_X509_Csr *new) | |||
| 384 | 391 | ||
| 385 | BslList *rawSubject = NULL; | 392 | BslList *rawSubject = NULL; |
| 386 | BslList *newSubject = NULL; | 393 | BslList *newSubject = NULL; |
| 387 | - ASSERT_EQ(HITLS_X509_CsrCtrl(raw, HITLS_X509_GET_SUBJECT_DNNAME, &rawSubject, sizeof(BslList *)), 0); | 394 | + ASSERT_EQ(HITLS_X509_CsrCtrl(raw, HITLS_X509_GET_SUBJECT_DN, &rawSubject, sizeof(BslList *)), 0); |
| 388 | - ASSERT_EQ(HITLS_X509_CsrCtrl(new, HITLS_X509_GET_SUBJECT_DNNAME, &newSubject, sizeof(BslList *)), 0); | 395 | + ASSERT_EQ(HITLS_X509_CsrCtrl(new, HITLS_X509_GET_SUBJECT_DN, &newSubject, sizeof(BslList *)), 0); |
| 389 | ASSERT_NE(rawSubject, NULL); | 396 | ASSERT_NE(rawSubject, NULL); |
| 390 | ASSERT_NE(newSubject, NULL); | 397 | ASSERT_NE(newSubject, NULL); |
| 391 | ASSERT_NE(BSL_LIST_Concat(newSubject, rawSubject), NULL); | 398 | ASSERT_NE(BSL_LIST_Concat(newSubject, rawSubject), NULL); |
| 392 | 399 | ||
| 393 | - BslList *rawAttrs = NULL; | 400 | + HITLS_X509_Attrs *rawAttrs = NULL; |
| 394 | - BslList *newAttrs = NULL; | 401 | + HITLS_X509_Attrs *newAttrs = NULL; |
| 395 | - ASSERT_EQ(HITLS_X509_CsrCtrl(raw, HITLS_X509_CSR_GET_ATTRIBUTES, &rawAttrs, sizeof(BslList *)), 0); | 402 | + ASSERT_EQ(HITLS_X509_CsrCtrl(raw, HITLS_X509_CSR_GET_ATTRIBUTES, &rawAttrs, sizeof(HITLS_X509_Attrs *)), 0); |
| 396 | - ASSERT_EQ(HITLS_X509_CsrCtrl(new, HITLS_X509_CSR_GET_ATTRIBUTES, &newAttrs, sizeof(BslList *)), 0); | 403 | + ASSERT_EQ(HITLS_X509_CsrCtrl(new, HITLS_X509_CSR_GET_ATTRIBUTES, &newAttrs, sizeof(HITLS_X509_Attrs *)), 0); |
| 397 | ASSERT_NE(rawAttrs, NULL); | 404 | ASSERT_NE(rawAttrs, NULL); |
| 398 | ASSERT_NE(newAttrs, NULL); | 405 | ASSERT_NE(newAttrs, NULL); |
| 399 | - if (BSL_LIST_COUNT(rawAttrs) > 0) { | 406 | + if (BSL_LIST_COUNT(rawAttrs->list) > 0) { |
| 400 | - ASSERT_NE(BSL_LIST_Concat(newAttrs, rawAttrs), NULL); | 407 | + ASSERT_NE(BSL_LIST_Concat(newAttrs->list, rawAttrs->list), NULL); |
| 401 | } | 408 | } |
| 402 | 409 | ||
| 403 | ret = 0; | 410 | ret = 0; |
| @@ -412,9 +419,10 @@ exit: | |||
| 412 | */ | 419 | */ |
| 413 | /* BEGIN_CASE */ | 420 | /* BEGIN_CASE */ |
| 414 | void SDV_X509_CSR_GEN_FUNC_TC002(int csrFormat, char *csrPath, int keyFormat, char *privPath, int keyType, int pad, | 421 | void SDV_X509_CSR_GEN_FUNC_TC002(int csrFormat, char *csrPath, int keyFormat, char *privPath, int keyType, int pad, |
| 415 | - int mdId, int mgfId, int saltLen) | 422 | + int mdId, int mgfId, int saltLen, int isUseSm2UserId) |
| 416 | { | 423 | { |
| 417 | TestMemInit(); | 424 | TestMemInit(); |
| 425 | + TestRandInit(); | ||
| 418 | HITLS_X509_Csr *raw = NULL; | 426 | HITLS_X509_Csr *raw = NULL; |
| 419 | HITLS_X509_Csr *new = NULL; | 427 | HITLS_X509_Csr *new = NULL; |
| 420 | CRYPT_EAL_PkeyCtx *privKey = NULL; | 428 | CRYPT_EAL_PkeyCtx *privKey = NULL; |
| @@ -425,14 +433,19 @@ void SDV_X509_CSR_GEN_FUNC_TC002(int csrFormat, char *csrPath, int keyFormat, ch | |||
| 425 | uint32_t rawCsrEncodeLen = 0; | 433 | uint32_t rawCsrEncodeLen = 0; |
| 426 | HITLS_X509_SignAlgParam algParam = {0}; | 434 | HITLS_X509_SignAlgParam algParam = {0}; |
| 427 | HITLS_X509_SignAlgParam *algParamPtr = NULL; | 435 | HITLS_X509_SignAlgParam *algParamPtr = NULL; |
| 428 | - if (pad == 0) { | 436 | + if (pad == CRYPT_PKEY_EMSA_PSS) { |
| 429 | - algParamPtr = NULL; | ||
| 430 | - } else if (pad == CRYPT_PKEY_EMSA_PSS) { | ||
| 431 | algParam.algId = BSL_CID_RSASSAPSS; | 437 | algParam.algId = BSL_CID_RSASSAPSS; |
| 432 | algParam.rsaPss.mdId = mdId; | 438 | algParam.rsaPss.mdId = mdId; |
| 433 | algParam.rsaPss.mgfId = mgfId; | 439 | algParam.rsaPss.mgfId = mgfId; |
| 434 | algParam.rsaPss.saltLen = saltLen; | 440 | algParam.rsaPss.saltLen = saltLen; |
| 435 | algParamPtr = &algParam; | 441 | algParamPtr = &algParam; |
| 442 | + } else if (isUseSm2UserId != 0) { | ||
| 443 | + algParam.algId = BSL_CID_SM2DSAWITHSM3; | ||
| 444 | + algParam.sm2UserId.data = (uint8_t *)g_sm2DefaultUserid; | ||
| 445 | + algParam.sm2UserId.dataLen = (uint32_t)strlen(g_sm2DefaultUserid); | ||
| 446 | + algParamPtr = &algParam; | ||
| 447 | + } else { | ||
| 448 | + algParamPtr = NULL; | ||
| 436 | } | 449 | } |
| 437 | 450 | ||
| 438 | TestMemInit(); | 451 | TestMemInit(); |
| @@ -443,6 +456,7 @@ void SDV_X509_CSR_GEN_FUNC_TC002(int csrFormat, char *csrPath, int keyFormat, ch | |||
| 443 | ASSERT_EQ(SetCsr(raw, new), 0); | 456 | ASSERT_EQ(SetCsr(raw, new), 0); |
| 444 | ASSERT_EQ(HITLS_X509_CsrSign(mdId, privKey, algParamPtr, new), HITLS_X509_SUCCESS); | 457 | ASSERT_EQ(HITLS_X509_CsrSign(mdId, privKey, algParamPtr, new), HITLS_X509_SUCCESS); |
| 445 | ASSERT_EQ(HITLS_X509_CsrGenBuff(csrFormat, new, &encode), HITLS_X509_SUCCESS); | 458 | ASSERT_EQ(HITLS_X509_CsrGenBuff(csrFormat, new, &encode), HITLS_X509_SUCCESS); |
| 459 | + ASSERT_EQ(HITLS_X509_CsrVerify(new), HITLS_X509_SUCCESS); | ||
| 446 | ASSERT_EQ(HITLS_X509_CsrCtrl(new, HITLS_X509_GET_ENCODELEN, &newCsrEncodeLen, sizeof(newCsrEncodeLen)), | 460 | ASSERT_EQ(HITLS_X509_CsrCtrl(new, HITLS_X509_GET_ENCODELEN, &newCsrEncodeLen, sizeof(newCsrEncodeLen)), |
| 447 | HITLS_X509_SUCCESS); | 461 | HITLS_X509_SUCCESS); |
| 448 | ASSERT_EQ(HITLS_X509_CsrCtrl(new, HITLS_X509_GET_ENCODE, &newCsrEncode, 0), HITLS_X509_SUCCESS); | 462 | ASSERT_EQ(HITLS_X509_CsrCtrl(new, HITLS_X509_GET_ENCODE, &newCsrEncode, 0), HITLS_X509_SUCCESS); |
| @@ -450,7 +464,7 @@ void SDV_X509_CSR_GEN_FUNC_TC002(int csrFormat, char *csrPath, int keyFormat, ch | |||
| 450 | HITLS_X509_SUCCESS); | 464 | HITLS_X509_SUCCESS); |
| 451 | ASSERT_EQ(HITLS_X509_CsrCtrl(raw, HITLS_X509_GET_ENCODE, &rawCsrEncode, 0), HITLS_X509_SUCCESS); | 465 | ASSERT_EQ(HITLS_X509_CsrCtrl(raw, HITLS_X509_GET_ENCODE, &rawCsrEncode, 0), HITLS_X509_SUCCESS); |
| 452 | 466 | ||
| 453 | - if (pad == CRYPT_PKEY_EMSA_PSS) { | 467 | + if (pad == CRYPT_PKEY_EMSA_PSS || new->signAlgId.algId == (BslCid)BSL_CID_SM2DSAWITHSM3) { |
| 454 | ASSERT_EQ(raw->reqInfo.reqInfoRawDataLen, new->reqInfo.reqInfoRawDataLen); | 468 | ASSERT_EQ(raw->reqInfo.reqInfoRawDataLen, new->reqInfo.reqInfoRawDataLen); |
| 455 | ASSERT_EQ(memcmp(raw->reqInfo.reqInfoRawData, new->reqInfo.reqInfoRawData, raw->reqInfo.reqInfoRawDataLen), 0); | 469 | ASSERT_EQ(memcmp(raw->reqInfo.reqInfoRawData, new->reqInfo.reqInfoRawData, raw->reqInfo.reqInfoRawDataLen), 0); |
| 456 | } else { | 470 | } else { |
| @@ -606,11 +620,11 @@ void SDV_X509_CSR_CTRL_SET_API_TC001(char *csrPath) | |||
| 606 | ASSERT_NE(HITLS_X509_CsrCtrl(csr, HITLS_X509_GET_SIGNALG, &signAlg, 0), HITLS_X509_SUCCESS); | 620 | ASSERT_NE(HITLS_X509_CsrCtrl(csr, HITLS_X509_GET_SIGNALG, &signAlg, 0), HITLS_X509_SUCCESS); |
| 607 | 621 | ||
| 608 | BslList *subjectName = 0; | 622 | BslList *subjectName = 0; |
| 609 | - ASSERT_NE(HITLS_X509_CsrCtrl(csr, HITLS_X509_GET_SUBJECT_DNNAME, NULL, 0), HITLS_X509_SUCCESS); | 623 | + ASSERT_NE(HITLS_X509_CsrCtrl(csr, HITLS_X509_GET_SUBJECT_DN, NULL, 0), HITLS_X509_SUCCESS); |
| 610 | - ASSERT_NE(HITLS_X509_CsrCtrl(NULL, HITLS_X509_GET_SUBJECT_DNNAME, &subjectName, 0), HITLS_X509_SUCCESS); | 624 | + ASSERT_NE(HITLS_X509_CsrCtrl(NULL, HITLS_X509_GET_SUBJECT_DN, &subjectName, 0), HITLS_X509_SUCCESS); |
| 611 | - ASSERT_NE(HITLS_X509_CsrCtrl(csr, HITLS_X509_GET_SUBJECT_DNNAME, &subjectName, 0), HITLS_X509_SUCCESS); | 625 | + ASSERT_NE(HITLS_X509_CsrCtrl(csr, HITLS_X509_GET_SUBJECT_DN, &subjectName, 0), HITLS_X509_SUCCESS); |
| 612 | 626 | ||
| 613 | - BslList *attrs = 0; | 627 | + HITLS_X509_Attrs attrs = {}; |
| 614 | ASSERT_NE(HITLS_X509_CsrCtrl(csr, HITLS_X509_CSR_GET_ATTRIBUTES, NULL, 0), HITLS_X509_SUCCESS); | 628 | ASSERT_NE(HITLS_X509_CsrCtrl(csr, HITLS_X509_CSR_GET_ATTRIBUTES, NULL, 0), HITLS_X509_SUCCESS); |
| 615 | ASSERT_NE(HITLS_X509_CsrCtrl(NULL, HITLS_X509_CSR_GET_ATTRIBUTES, &attrs, 0), HITLS_X509_SUCCESS); | 629 | ASSERT_NE(HITLS_X509_CsrCtrl(NULL, HITLS_X509_CSR_GET_ATTRIBUTES, &attrs, 0), HITLS_X509_SUCCESS); |
| 616 | ASSERT_NE(HITLS_X509_CsrCtrl(csr, HITLS_X509_CSR_GET_ATTRIBUTES, &attrs, 0), HITLS_X509_SUCCESS); | 630 | ASSERT_NE(HITLS_X509_CsrCtrl(csr, HITLS_X509_CSR_GET_ATTRIBUTES, &attrs, 0), HITLS_X509_SUCCESS); |
| @@ -710,61 +724,45 @@ exit: | |||
| 710 | void SDV_X509_CSR_AttrCtrl_API_TC001(void) | 724 | void SDV_X509_CSR_AttrCtrl_API_TC001(void) |
| 711 | { | 725 | { |
| 712 | TestMemInit(); | 726 | TestMemInit(); |
| 713 | - HITLS_X509_Attr attr = {0}; | 727 | + HITLS_X509_Ext *getExt = NULL; |
| 714 | - HITLS_X509_Attr getAttr = {0}; | ||
| 715 | HITLS_X509_Ext *ext = HITLS_X509_ExtNew(HITLS_X509_EXT_TYPE_CSR); | 728 | HITLS_X509_Ext *ext = HITLS_X509_ExtNew(HITLS_X509_EXT_TYPE_CSR); |
| 729 | + ASSERT_NE(ext, NULL); | ||
| 716 | HITLS_X509_ExtKeyUsage ku = {0, HITLS_X509_EXT_KU_NON_REPUDIATION}; | 730 | HITLS_X509_ExtKeyUsage ku = {0, HITLS_X509_EXT_KU_NON_REPUDIATION}; |
| 717 | int32_t cmd = HITLS_X509_ATTR_SET_REQUESTED_EXTENSIONS; | 731 | int32_t cmd = HITLS_X509_ATTR_SET_REQUESTED_EXTENSIONS; |
| 718 | - BslList *attrList = NULL; | 732 | + HITLS_X509_Attrs *attrs = NULL; |
| 719 | 733 | ||
| 720 | HITLS_X509_Csr *csr = HITLS_X509_CsrNew(); | 734 | HITLS_X509_Csr *csr = HITLS_X509_CsrNew(); |
| 721 | - ASSERT_NE(ext, NULL); | ||
| 722 | ASSERT_NE(csr, NULL); | 735 | ASSERT_NE(csr, NULL); |
| 723 | ASSERT_EQ(HITLS_X509_ExtCtrl(ext, HITLS_X509_EXT_SET_KUSAGE, &ku, sizeof(HITLS_X509_ExtKeyUsage)), 0); | 736 | ASSERT_EQ(HITLS_X509_ExtCtrl(ext, HITLS_X509_EXT_SET_KUSAGE, &ku, sizeof(HITLS_X509_ExtKeyUsage)), 0); |
| 724 | - ASSERT_EQ(HITLS_X509_CsrCtrl(csr, HITLS_X509_CSR_GET_ATTRIBUTES, &attrList, sizeof(BslList *)), 0); | 737 | + ASSERT_EQ(HITLS_X509_CsrCtrl(csr, HITLS_X509_CSR_GET_ATTRIBUTES, &attrs, sizeof(HITLS_X509_Attrs *)), 0); |
| 725 | 738 | ||
| 726 | // invalid param | 739 | // invalid param |
| 727 | - ASSERT_EQ(HITLS_X509_AttrCtrl(NULL, cmd, &attr, sizeof(HITLS_X509_Attr)), HITLS_X509_ERR_INVALID_PARAM); | 740 | + ASSERT_EQ(HITLS_X509_AttrCtrl(NULL, cmd, ext, 0), HITLS_X509_ERR_INVALID_PARAM); |
| 728 | - ASSERT_EQ(HITLS_X509_AttrCtrl(attrList, -1, &attr, sizeof(HITLS_X509_Attr)), HITLS_X509_ERR_INVALID_PARAM); | 741 | + ASSERT_EQ(HITLS_X509_AttrCtrl(attrs, -1, ext, 0), HITLS_X509_ERR_INVALID_PARAM); |
| 729 | - ASSERT_EQ(HITLS_X509_AttrCtrl(attrList, cmd, NULL, sizeof(HITLS_X509_Attr)), HITLS_X509_ERR_INVALID_PARAM); | 742 | + ASSERT_EQ(HITLS_X509_AttrCtrl(attrs, cmd, NULL, 0), HITLS_X509_ERR_INVALID_PARAM); |
| 730 | - ASSERT_EQ(HITLS_X509_AttrCtrl(attrList, cmd, &attr, 0), HITLS_X509_ERR_INVALID_PARAM); | ||
| 731 | - | ||
| 732 | - // attr.cid is unknown | ||
| 733 | - ASSERT_EQ(HITLS_X509_AttrCtrl(attrList, cmd, &attr, sizeof(HITLS_X509_Attr)), CRYPT_ERR_ALGID); | ||
| 734 | - | ||
| 735 | - // attr.value is null | ||
| 736 | - attr.cid = BSL_CID_REQ_EXTENSION; | ||
| 737 | - ASSERT_EQ(HITLS_X509_AttrCtrl(attrList, cmd, &attr, sizeof(HITLS_X509_Attr)), HITLS_X509_ERR_INVALID_PARAM); | ||
| 738 | - | ||
| 739 | - attr.value = ext; | ||
| 740 | - | ||
| 741 | // encode ext failed | 743 | // encode ext failed |
| 742 | ext->extList->count = 2; | 744 | ext->extList->count = 2; |
| 743 | - ASSERT_EQ(HITLS_X509_AttrCtrl(attrList, cmd, &attr, sizeof(HITLS_X509_Attr)), BSL_INVALID_ARG); | 745 | + ASSERT_EQ(HITLS_X509_AttrCtrl(attrs, cmd, ext, 0), BSL_INVALID_ARG); |
| 744 | ext->extList->count = 1; | 746 | ext->extList->count = 1; |
| 745 | 747 | ||
| 746 | // success | 748 | // success |
| 747 | - ASSERT_EQ(HITLS_X509_AttrCtrl(attrList, cmd, &attr, sizeof(HITLS_X509_Attr)), 0); | 749 | + ASSERT_EQ(HITLS_X509_AttrCtrl(attrs, cmd, ext, 0), HITLS_X509_SUCCESS); |
| 748 | 750 | ||
| 749 | // repeat | 751 | // repeat |
| 750 | - ASSERT_EQ(HITLS_X509_AttrCtrl(attrList, cmd, &attr, sizeof(HITLS_X509_Attr)), HITLS_X509_ERR_SET_ATTR_REPEAT); | 752 | + ASSERT_EQ(HITLS_X509_AttrCtrl(attrs, cmd, ext, 0), HITLS_X509_ERR_SET_ATTR_REPEAT); |
| 751 | 753 | ||
| 752 | // get attr | 754 | // get attr |
| 753 | - ASSERT_EQ(HITLS_X509_AttrCtrl(attrList, HITLS_X509_ATTR_GET_REQUESTED_EXTENSIONS, | 755 | + ASSERT_EQ(HITLS_X509_AttrCtrl(attrs, HITLS_X509_ATTR_GET_REQUESTED_EXTENSIONS, |
| 754 | - &getAttr, sizeof(HITLS_X509_Attr)), HITLS_X509_SUCCESS); | 756 | + &getExt, sizeof(HITLS_X509_Ext *)), HITLS_X509_SUCCESS); |
| 755 | - ASSERT_NE(getAttr.value, NULL); | 757 | + ASSERT_NE(getExt, NULL); |
| 756 | - ASSERT_EQ(getAttr.cid, BSL_CID_REQ_EXTENSION); | ||
| 757 | - HITLS_X509_Ext *getExt = getAttr.value; | ||
| 758 | HITLS_X509_CertExt *certExt = (HITLS_X509_CertExt *)getExt->extData; | 758 | HITLS_X509_CertExt *certExt = (HITLS_X509_CertExt *)getExt->extData; |
| 759 | ASSERT_EQ(certExt->keyUsage, HITLS_X509_EXT_KU_NON_REPUDIATION); | 759 | ASSERT_EQ(certExt->keyUsage, HITLS_X509_EXT_KU_NON_REPUDIATION); |
| 760 | - | ||
| 761 | // not found | 760 | // not found |
| 762 | X509_ExtFree(getExt, true); | 761 | X509_ExtFree(getExt, true); |
| 763 | getExt = NULL; | 762 | getExt = NULL; |
| 764 | - getAttr.value = NULL; | 763 | + BSL_LIST_DeleteAll(attrs->list, (BSL_LIST_PFUNC_FREE)HITLS_X509_AttrEntryFree); |
| 765 | - BSL_LIST_DeleteAll(attrList, (BSL_LIST_PFUNC_FREE)HITLS_X509_AttrEntryFree); | 764 | + ASSERT_EQ(HITLS_X509_AttrCtrl(attrs, HITLS_X509_ATTR_GET_REQUESTED_EXTENSIONS, |
| 766 | - ASSERT_EQ(HITLS_X509_AttrCtrl(attrList, HITLS_X509_ATTR_GET_REQUESTED_EXTENSIONS, | 765 | + &getExt, sizeof(HITLS_X509_Ext *)), HITLS_X509_ERR_ATTR_NOT_FOUND); |
| 767 | - &getAttr, sizeof(HITLS_X509_Attr)), HITLS_X509_ERR_ATTR_NOT_FOUND); | ||
| 768 | 766 | ||
| 769 | exit: | 767 | exit: |
| 770 | HITLS_X509_CsrFree(csr); | 768 | HITLS_X509_CsrFree(csr); |
| @@ -779,28 +777,27 @@ void SDV_X509_CSR_EncodeAttrList_FUNC_TC001(int critical1, int maxPath, int crit | |||
| 779 | TestMemInit(); | 777 | TestMemInit(); |
| 780 | 778 | ||
| 781 | HITLS_X509_Ext *ext = HITLS_X509_ExtNew(HITLS_X509_EXT_TYPE_CSR); | 779 | HITLS_X509_Ext *ext = HITLS_X509_ExtNew(HITLS_X509_EXT_TYPE_CSR); |
| 782 | - BslList *attrList = NULL; | 780 | + ASSERT_NE(ext, NULL); |
| 781 | + HITLS_X509_Attrs *attrs = NULL; | ||
| 783 | HITLS_X509_ExtBCons bCons = {critical1, false, maxPath}; | 782 | HITLS_X509_ExtBCons bCons = {critical1, false, maxPath}; |
| 784 | HITLS_X509_ExtKeyUsage ku = {critical2, keyUsage}; | 783 | HITLS_X509_ExtKeyUsage ku = {critical2, keyUsage}; |
| 785 | BSL_ASN1_Buffer encode = {0}; | 784 | BSL_ASN1_Buffer encode = {0}; |
| 786 | 785 | ||
| 787 | HITLS_X509_Csr *csr = HITLS_X509_CsrNew(); | 786 | HITLS_X509_Csr *csr = HITLS_X509_CsrNew(); |
| 788 | - ASSERT_NE(ext, NULL); | ||
| 789 | ASSERT_NE(csr, NULL); | 787 | ASSERT_NE(csr, NULL); |
| 790 | - ASSERT_EQ(HITLS_X509_CsrCtrl(csr, HITLS_X509_CSR_GET_ATTRIBUTES, &attrList, sizeof(BslList *)), 0); | 788 | + ASSERT_EQ(HITLS_X509_CsrCtrl(csr, HITLS_X509_CSR_GET_ATTRIBUTES, &attrs, sizeof(HITLS_X509_Attrs *)), 0); |
| 791 | - ASSERT_NE(attrList, NULL); | 789 | + ASSERT_NE(attrs, NULL); |
| 792 | 790 | ||
| 793 | // Generate ext | 791 | // Generate ext |
| 794 | ASSERT_EQ(HITLS_X509_ExtCtrl(ext, HITLS_X509_EXT_SET_KUSAGE, &ku, sizeof(HITLS_X509_ExtKeyUsage)), 0); | 792 | ASSERT_EQ(HITLS_X509_ExtCtrl(ext, HITLS_X509_EXT_SET_KUSAGE, &ku, sizeof(HITLS_X509_ExtKeyUsage)), 0); |
| 795 | ASSERT_EQ(HITLS_X509_ExtCtrl(ext, HITLS_X509_EXT_SET_BCONS, &bCons, sizeof(HITLS_X509_ExtBCons)), 0); | 793 | ASSERT_EQ(HITLS_X509_ExtCtrl(ext, HITLS_X509_EXT_SET_BCONS, &bCons, sizeof(HITLS_X509_ExtBCons)), 0); |
| 796 | 794 | ||
| 797 | // Set ext into attr | 795 | // Set ext into attr |
| 798 | - HITLS_X509_Attr attr = {BSL_CID_REQ_EXTENSION, ext}; | 796 | + ASSERT_EQ(HITLS_X509_AttrCtrl(attrs, HITLS_X509_ATTR_SET_REQUESTED_EXTENSIONS, ext, 0), |
| 799 | - ASSERT_EQ(HITLS_X509_AttrCtrl(attrList, HITLS_X509_ATTR_SET_REQUESTED_EXTENSIONS, &attr, sizeof(HITLS_X509_Attr)), | ||
| 800 | 0); | 797 | 0); |
| 801 | 798 | ||
| 802 | // Test: Encode and check | 799 | // Test: Encode and check |
| 803 | - ASSERT_EQ(HITLS_X509_EncodeAttrList(1, attrList, &encode), 0); | 800 | + ASSERT_EQ(HITLS_X509_EncodeAttrList(1, attrs, NULL, &encode), 0); |
| 804 | ASSERT_COMPARE("Encode attrs", expect->x, expect->len, encode.buff, encode.len); | 801 | ASSERT_COMPARE("Encode attrs", expect->x, expect->len, encode.buff, encode.len); |
| 805 | 802 | ||
| 806 | exit: | 803 | exit: |
| @@ -816,33 +813,31 @@ void SDV_X509_CSR_EncodeAttrList_FUNC_TC002(void) | |||
| 816 | TestMemInit(); | 813 | TestMemInit(); |
| 817 | 814 | ||
| 818 | HITLS_X509_Ext *ext = HITLS_X509_ExtNew(HITLS_X509_EXT_TYPE_CSR); | 815 | HITLS_X509_Ext *ext = HITLS_X509_ExtNew(HITLS_X509_EXT_TYPE_CSR); |
| 819 | - BslList *attrList = NULL; | 816 | + HITLS_X509_Attrs *attrs = NULL; |
| 820 | HITLS_X509_ExtKeyUsage ku = {0, HITLS_X509_EXT_KU_NON_REPUDIATION}; | 817 | HITLS_X509_ExtKeyUsage ku = {0, HITLS_X509_EXT_KU_NON_REPUDIATION}; |
| 821 | BSL_ASN1_Buffer encode = {0}; | 818 | BSL_ASN1_Buffer encode = {0}; |
| 822 | 819 | ||
| 823 | HITLS_X509_Csr *csr = HITLS_X509_CsrNew(); | 820 | HITLS_X509_Csr *csr = HITLS_X509_CsrNew(); |
| 824 | ASSERT_NE(ext, NULL); | 821 | ASSERT_NE(ext, NULL); |
| 825 | ASSERT_NE(csr, NULL); | 822 | ASSERT_NE(csr, NULL); |
| 826 | - ASSERT_EQ(HITLS_X509_CsrCtrl(csr, HITLS_X509_CSR_GET_ATTRIBUTES, &attrList, sizeof(BslList *)), 0); | 823 | + ASSERT_EQ(HITLS_X509_CsrCtrl(csr, HITLS_X509_CSR_GET_ATTRIBUTES, &attrs, sizeof(HITLS_X509_Attrs *)), 0); |
| 827 | - ASSERT_NE(attrList, NULL); | 824 | + ASSERT_NE(attrs->list, NULL); |
| 828 | ASSERT_EQ(HITLS_X509_ExtCtrl(ext, HITLS_X509_EXT_SET_KUSAGE, &ku, sizeof(HITLS_X509_ExtKeyUsage)), 0); | 825 | ASSERT_EQ(HITLS_X509_ExtCtrl(ext, HITLS_X509_EXT_SET_KUSAGE, &ku, sizeof(HITLS_X509_ExtKeyUsage)), 0); |
| 829 | 826 | ||
| 830 | // Test 1: no attr | 827 | // Test 1: no attr |
| 831 | - ASSERT_EQ(HITLS_X509_EncodeAttrList(1, attrList, &encode), 0); | 828 | + ASSERT_EQ(HITLS_X509_EncodeAttrList(1, attrs, NULL, &encode), 0); |
| 832 | ASSERT_EQ(encode.buff, NULL); | 829 | ASSERT_EQ(encode.buff, NULL); |
| 833 | ASSERT_EQ(encode.len, 0); | 830 | ASSERT_EQ(encode.len, 0); |
| 834 | 831 | ||
| 835 | // Test 2: encode attr entry failed | 832 | // Test 2: encode attr entry failed |
| 836 | - attrList->count = 1; | 833 | + attrs->list->count = 1; |
| 837 | - ASSERT_EQ(HITLS_X509_EncodeAttrList(1, attrList, &encode), BSL_INVALID_ARG); | 834 | + ASSERT_EQ(HITLS_X509_EncodeAttrList(1, attrs, NULL, &encode), BSL_INVALID_ARG); |
| 838 | 835 | ||
| 839 | // Set ext into attr | 836 | // Set ext into attr |
| 840 | - HITLS_X509_Attr attr = {BSL_CID_REQ_EXTENSION, ext}; | 837 | + ASSERT_EQ(HITLS_X509_AttrCtrl(attrs, HITLS_X509_ATTR_SET_REQUESTED_EXTENSIONS, ext, 0), 0); |
| 841 | - ASSERT_EQ(HITLS_X509_AttrCtrl(attrList, HITLS_X509_ATTR_SET_REQUESTED_EXTENSIONS, &attr, sizeof(HITLS_X509_Attr)), | ||
| 842 | - 0); | ||
| 843 | 838 | ||
| 844 | // Test 3: encode list item failed | 839 | // Test 3: encode list item failed |
| 845 | - ASSERT_EQ(HITLS_X509_EncodeAttrList(1, attrList, &encode), BSL_INVALID_ARG); | 840 | + ASSERT_EQ(HITLS_X509_EncodeAttrList(1, attrs, NULL, &encode), BSL_INVALID_ARG); |
| 846 | 841 | ||
| 847 | exit: | 842 | exit: |
| 848 | HITLS_X509_CsrFree(csr); | 843 | HITLS_X509_CsrFree(csr); |
| @@ -855,17 +850,17 @@ void SDV_X509_CSR_ParseAttrList_FUNC_TC001(Hex *encode, int ret) | |||
| 855 | { | 850 | { |
| 856 | TestMemInit(); | 851 | TestMemInit(); |
| 857 | 852 | ||
| 858 | - BSL_ASN1_Buffer attrs = {0, encode->len, encode->x}; | 853 | + BSL_ASN1_Buffer attrsBuff = {0, encode->len, encode->x}; |
| 859 | - BslList *attrList = NULL; | 854 | + HITLS_X509_Attrs *attrs = NULL; |
| 860 | 855 | ||
| 861 | HITLS_X509_Csr *csr = HITLS_X509_CsrNew(); | 856 | HITLS_X509_Csr *csr = HITLS_X509_CsrNew(); |
| 862 | csr->flag = 0x01; // HITLS_X509_CSR_PARSE_FLAG | 857 | csr->flag = 0x01; // HITLS_X509_CSR_PARSE_FLAG |
| 863 | ASSERT_NE(csr, NULL); | 858 | ASSERT_NE(csr, NULL); |
| 864 | - ASSERT_EQ(HITLS_X509_CsrCtrl(csr, HITLS_X509_CSR_GET_ATTRIBUTES, &attrList, sizeof(BslList *)), 0); | 859 | + ASSERT_EQ(HITLS_X509_CsrCtrl(csr, HITLS_X509_CSR_GET_ATTRIBUTES, &attrs, sizeof(HITLS_X509_Attrs *)), 0); |
| 865 | - ASSERT_NE(attrList, NULL); | 860 | + ASSERT_NE(attrs, NULL); |
| 866 | 861 | ||
| 867 | - attrs.tag = BSL_ASN1_TAG_CONSTRUCTED | BSL_ASN1_TAG_SEQUENCE; | 862 | + attrsBuff.tag = BSL_ASN1_TAG_CONSTRUCTED | BSL_ASN1_TAG_SEQUENCE; |
| 868 | - ASSERT_EQ(HITLS_X509_ParseAttrList(&attrs, attrList), ret); | 863 | + ASSERT_EQ(HITLS_X509_ParseAttrList(&attrsBuff, attrs, NULL, NULL), ret); |
| 869 | 864 | ||
| 870 | exit: | 865 | exit: |
| 871 | HITLS_X509_CsrFree(csr); | 866 | HITLS_X509_CsrFree(csr); |
| @@ -893,7 +888,7 @@ static int32_t SetNewCsrInfo(HITLS_X509_Csr *new, CRYPT_EAL_PkeyCtx *key, int dn | |||
| 893 | ASSERT_EQ(HITLS_X509_CsrCtrl(new, HITLS_X509_ADD_SUBJECT_NAME, &dnName[i], 1), HITLS_X509_SUCCESS); | 888 | ASSERT_EQ(HITLS_X509_CsrCtrl(new, HITLS_X509_ADD_SUBJECT_NAME, &dnName[i], 1), HITLS_X509_SUCCESS); |
| 894 | } | 889 | } |
| 895 | BslList *subjectName = 0; | 890 | BslList *subjectName = 0; |
| 896 | - ASSERT_EQ(HITLS_X509_CsrCtrl(new, HITLS_X509_GET_SUBJECT_DNNAME, &subjectName, sizeof(BslList *)), | 891 | + ASSERT_EQ(HITLS_X509_CsrCtrl(new, HITLS_X509_GET_SUBJECT_DN, &subjectName, sizeof(BslList *)), |
| 897 | HITLS_X509_SUCCESS); | 892 | HITLS_X509_SUCCESS); |
| 898 | ASSERT_EQ(BSL_LIST_COUNT(subjectName), 6); | 893 | ASSERT_EQ(BSL_LIST_COUNT(subjectName), 6); |
| 899 | 894 | ||
| @@ -11,16 +11,22 @@ SDV_X509_CSR_PARSE_API_TC002 | |||
| 11 | SDV_X509_CSR_PARSE_API_TC002: | 11 | SDV_X509_CSR_PARSE_API_TC002: |
| 12 | 12 | ||
| 13 | SDV_X509_CSR_PARSE_FUNC_TC001 #rsa sha256 csr without attribute | 13 | SDV_X509_CSR_PARSE_FUNC_TC001 #rsa sha256 csr without attribute |
| 14 | -SDV_X509_CSR_PARSE_FUNC_TC001:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/csr.pem":881:BSL_CID_SHA256WITHRSAENCRYPTION:"3808399e8e2fc4830067034e41ee13b77dc4e21e8a274c536254d43c7193b89987a2401f18dd830c147b0d270dd3d1ef8bbce2e1b379ca2d5fd301c8086609f961c0df9a4d0727b71635478e2e026784d1624bac2616408287876ed823fdb2f663075fdb2b4ed2fe1a0aeceecd562f37058ad0e951607807ef5af8a189d1f6d63e98cd7310f0c2348488ac331e1a6fdcf753536782e7fbafbb50685389acfff25fb6f6d6953c07a9fe09e0ffc565e78ec284dacb97742b9a960ecf6111ec4f9bdc1152709cf0bef13c4958bc80bd9a980c16fc09df130ea44d6a021ed649e0254d7eb01345afc600b0860104c48490bd131cc2c5e873956d86a53f13c7dcf65b":0 | 14 | +SDV_X509_CSR_PARSE_FUNC_TC001:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/csr.pem":881:BSL_CID_SHA256WITHRSAENCRYPTION:"3808399e8e2fc4830067034e41ee13b77dc4e21e8a274c536254d43c7193b89987a2401f18dd830c147b0d270dd3d1ef8bbce2e1b379ca2d5fd301c8086609f961c0df9a4d0727b71635478e2e026784d1624bac2616408287876ed823fdb2f663075fdb2b4ed2fe1a0aeceecd562f37058ad0e951607807ef5af8a189d1f6d63e98cd7310f0c2348488ac331e1a6fdcf753536782e7fbafbb50685389acfff25fb6f6d6953c07a9fe09e0ffc565e78ec284dacb97742b9a960ecf6111ec4f9bdc1152709cf0bef13c4958bc80bd9a980c16fc09df130ea44d6a021ed649e0254d7eb01345afc600b0860104c48490bd131cc2c5e873956d86a53f13c7dcf65b":0:0 |
| 15 | 15 | ||
| 16 | SDV_X509_CSR_PARSE_FUNC_TC001 #ecdsa sha256 csr pem without attribute | 16 | SDV_X509_CSR_PARSE_FUNC_TC001 #ecdsa sha256 csr pem without attribute |
| 17 | -SDV_X509_CSR_PARSE_FUNC_TC001:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/ecdsa_sha/ec_app256SHA256.csr":249:BSL_CID_ECDSAWITHSHA256:"304402202e4a266903514eb533b47a165965db05281e15d95b0525d84e5e7baae7c21faa02207dc750784c7ff0d1af5aaaa370abd54939a36c0024077a92fedeee17acb6ec0f":0 | 17 | +SDV_X509_CSR_PARSE_FUNC_TC001:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/ecdsa_sha/ec_app256SHA256.csr":249:BSL_CID_ECDSAWITHSHA256:"304402202e4a266903514eb533b47a165965db05281e15d95b0525d84e5e7baae7c21faa02207dc750784c7ff0d1af5aaaa370abd54939a36c0024077a92fedeee17acb6ec0f":0:0 |
| 18 | 18 | ||
| 19 | SDV_X509_CSR_PARSE_FUNC_TC001 #ecdsa sha256 csr asn1 without attribute | 19 | SDV_X509_CSR_PARSE_FUNC_TC001 #ecdsa sha256 csr asn1 without attribute |
| 20 | -SDV_X509_CSR_PARSE_FUNC_TC001:BSL_FORMAT_ASN1:"../testdata/cert/asn1/ecdsa_sha_csr/ec_app256SHA256.csr.der":249:BSL_CID_ECDSAWITHSHA256:"304402202e4a266903514eb533b47a165965db05281e15d95b0525d84e5e7baae7c21faa02207dc750784c7ff0d1af5aaaa370abd54939a36c0024077a92fedeee17acb6ec0f":0 | 20 | +SDV_X509_CSR_PARSE_FUNC_TC001:BSL_FORMAT_ASN1:"../testdata/cert/asn1/ecdsa_sha_csr/ec_app256SHA256.csr.der":249:BSL_CID_ECDSAWITHSHA256:"304402202e4a266903514eb533b47a165965db05281e15d95b0525d84e5e7baae7c21faa02207dc750784c7ff0d1af5aaaa370abd54939a36c0024077a92fedeee17acb6ec0f":0:0 |
| 21 | 21 | ||
| 22 | -SDV_X509_CSR_PARSE_FUNC_TC001 #rsa sha256 csr asn1 with attribute | 22 | +SDV_X509_CSR_PARSE_FUNC_TC001 #rsa sha256 csr pem with attribute |
| 23 | -SDV_X509_CSR_PARSE_FUNC_TC001:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/rsa_pss_sha/rsa2048_pss_withattr.csr":833:BSL_CID_RSASSAPSS:"9a7a66d969f90205e80a9f0c0bcbed9c2373a283a3f96b4d309b3eaf55d963c7b8e88cce8b5393ab91a5d8476707f2bdc4d534170c1422d1bbeb80fc02815e5e301340ac73f34ea111a91f024b973a4c262f6c554b09e2aff4407c99419f7f2a0f5dfd0d105caaaf4c0bf2776a98ea0129b0b9703753a6fcbe1c3c7c82181199ec2fbbf631d048805c8796003a517b76a76d3a3986d3428bfe3bb19f0d133b98c14f1fe4170c68db9b2924adab7a54e8e92b2fad65a77f0fb28cb85319540bf36a9797a0f3e8fc030a8056d9c64f1afe5fd83f2a9f5ac9063574310a89d8e3fece146e64fe853ff872169f9c77cb95b49570b98292d1be79b80a2f8c9b65d131":0 | 23 | +SDV_X509_CSR_PARSE_FUNC_TC001:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/rsa_pss_sha/rsa2048_pss_withattr.csr":833:BSL_CID_RSASSAPSS:"9a7a66d969f90205e80a9f0c0bcbed9c2373a283a3f96b4d309b3eaf55d963c7b8e88cce8b5393ab91a5d8476707f2bdc4d534170c1422d1bbeb80fc02815e5e301340ac73f34ea111a91f024b973a4c262f6c554b09e2aff4407c99419f7f2a0f5dfd0d105caaaf4c0bf2776a98ea0129b0b9703753a6fcbe1c3c7c82181199ec2fbbf631d048805c8796003a517b76a76d3a3986d3428bfe3bb19f0d133b98c14f1fe4170c68db9b2924adab7a54e8e92b2fad65a77f0fb28cb85319540bf36a9797a0f3e8fc030a8056d9c64f1afe5fd83f2a9f5ac9063574310a89d8e3fece146e64fe853ff872169f9c77cb95b49570b98292d1be79b80a2f8c9b65d131":0:0 |
| 24 | + | ||
| 25 | +SDV_X509_CSR_PARSE_FUNC_TC001 #sm2 csr pem with userid | ||
| 26 | +SDV_X509_CSR_PARSE_FUNC_TC001:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/sm2_with_userid/ca.csr":301:BSL_CID_SM2DSAWITHSM3:"304402206D1AD0B4587BD83AFD4374D994A74B9955086FB58BE34E3A4103454F26BF520302203C442A0E28728B9A97507A3CEE75A83268176D19D36E780B5A3095DCF32E94E0":0:1 | ||
| 27 | + | ||
| 28 | +SDV_X509_CSR_PARSE_FUNC_TC001 #sm2 csr pem without userid | ||
| 29 | +SDV_X509_CSR_PARSE_FUNC_TC001:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/sm2/ca.csr":302:BSL_CID_SM2DSAWITHSM3:"304502205403A19F11B48FD7EC181A70B28CCF069B1D1FFAC0A84816E3C656357E3B97DE0221008842D549992D282E2194B018DA6B5B7540408DC401B92DF2C33DCAB278981F3B":0:0 | ||
| 24 | 30 | ||
| 25 | SDV_X509_CSR_PARSE_FUNC_TC002 | 31 | SDV_X509_CSR_PARSE_FUNC_TC002 |
| 26 | SDV_X509_CSR_PARSE_FUNC_TC002:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/csr.pem":10:"ST":"The Great State of Long-Winded Certificate Field Names Whereby to Increase the Output Size":"L":"Toomanycharactersville":"O":"The Benevolent Society of Loquacious and Pleonastic Periphrasis":"OU":"Endorsement of Vouchsafe'd Evidentiary Certification":"CN":"cert.example" | 32 | SDV_X509_CSR_PARSE_FUNC_TC002:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/csr.pem":10:"ST":"The Great State of Long-Winded Certificate Field Names Whereby to Increase the Output Size":"L":"Toomanycharactersville":"O":"The Benevolent Society of Loquacious and Pleonastic Periphrasis":"OU":"Endorsement of Vouchsafe'd Evidentiary Certification":"CN":"cert.example" |
| @@ -76,11 +82,17 @@ SDV_X509_CSR_GEN_FUNC_TC001:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/ecdsa_sha/e | |||
| 76 | SDV_X509_CSR_GEN_FUNC_TC001: ec asn1 to pem | 82 | SDV_X509_CSR_GEN_FUNC_TC001: ec asn1 to pem |
| 77 | SDV_X509_CSR_GEN_FUNC_TC001:BSL_FORMAT_ASN1:"../testdata/cert/asn1/ecdsa_sha_csr/ec_app256SHA256.csr.der":BSL_FORMAT_PEM | 83 | SDV_X509_CSR_GEN_FUNC_TC001:BSL_FORMAT_ASN1:"../testdata/cert/asn1/ecdsa_sha_csr/ec_app256SHA256.csr.der":BSL_FORMAT_PEM |
| 78 | 84 | ||
| 79 | -SDV_X509_CSR_GEN_FUNC_TC002 | 85 | +SDV_X509_CSR_GEN_FUNC_TC002 rsa pkcs1.5 |
| 80 | -SDV_X509_CSR_GEN_FUNC_TC002:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/rsa_sha/rsa_sh256.csr":BSL_FORMAT_PEM:"../testdata/cert/pem/csr/rsa_sha/rsa_sh256.key.pem":CRYPT_PRIKEY_PKCS8_UNENCRYPT:CRYPT_PKEY_EMSA_PKCSV15:CRYPT_MD_SHA256:CRYPT_MD_SHA256:0 | 86 | +SDV_X509_CSR_GEN_FUNC_TC002:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/rsa_sha/rsa_sh256.csr":BSL_FORMAT_PEM:"../testdata/cert/pem/csr/rsa_sha/rsa_sh256.key.pem":CRYPT_PRIKEY_PKCS8_UNENCRYPT:CRYPT_PKEY_EMSA_PKCSV15:CRYPT_MD_SHA256:CRYPT_MD_SHA256:0:0 |
| 81 | 87 | ||
| 82 | -SDV_X509_CSR_GEN_FUNC_TC002 | 88 | +SDV_X509_CSR_GEN_FUNC_TC002 rsa pss |
| 83 | -SDV_X509_CSR_GEN_FUNC_TC002:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/rsa_pss_sha/rsa2048_pss_withattr.csr":BSL_FORMAT_PEM:"../testdata/cert/pem/csr/rsa_pss_sha/rsa2048_pss_withattr.key":CRYPT_PRIKEY_PKCS8_UNENCRYPT:CRYPT_PKEY_EMSA_PSS:CRYPT_MD_SHA256:CRYPT_MD_SHA256:0 | 89 | +SDV_X509_CSR_GEN_FUNC_TC002:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/rsa_pss_sha/rsa2048_pss_withattr.csr":BSL_FORMAT_PEM:"../testdata/cert/pem/csr/rsa_pss_sha/rsa2048_pss_withattr.key":CRYPT_PRIKEY_PKCS8_UNENCRYPT:CRYPT_PKEY_EMSA_PSS:CRYPT_MD_SHA256:CRYPT_MD_SHA256:0:0 |
| 90 | + | ||
| 91 | +SDV_X509_CSR_GEN_FUNC_TC002 sm2 with userid | ||
| 92 | +SDV_X509_CSR_GEN_FUNC_TC002:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/sm2_with_userid/ca.csr":BSL_FORMAT_PEM:"../testdata/cert/pem/csr/sm2_with_userid/ca.key":CRYPT_PRIKEY_PKCS8_UNENCRYPT:0:CRYPT_MD_SM3:0:0:1 | ||
| 93 | + | ||
| 94 | +SDV_X509_CSR_GEN_FUNC_TC002 sm2 without userid | ||
| 95 | +SDV_X509_CSR_GEN_FUNC_TC002:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/sm2/ca.csr":BSL_FORMAT_PEM:"../testdata/cert/pem/csr/sm2/ca.key":CRYPT_PRIKEY_PKCS8_UNENCRYPT:0:CRYPT_MD_SM3:0:0:0 | ||
| 84 | 96 | ||
| 85 | SDV_X509_CSR_GEN_PROCESS_TC001: | 97 | SDV_X509_CSR_GEN_PROCESS_TC001: |
| 86 | SDV_X509_CSR_GEN_PROCESS_TC001:"../testdata/cert/pem/csr/rsa_sha/rsa_sh256.csr":BSL_FORMAT_PEM:"../testdata/cert/pem/csr/rsa_sha/rsa_sh256.key.pem":BSL_FORMAT_PEM:CRYPT_PRIKEY_PKCS8_UNENCRYPT | 98 | SDV_X509_CSR_GEN_PROCESS_TC001:"../testdata/cert/pem/csr/rsa_sha/rsa_sh256.csr":BSL_FORMAT_PEM:"../testdata/cert/pem/csr/rsa_sha/rsa_sh256.key.pem":BSL_FORMAT_PEM:CRYPT_PRIKEY_PKCS8_UNENCRYPT |
| @@ -37,20 +37,12 @@ static void BagListsDestroyCb(void *bag) | |||
| 37 | HITLS_PKCS12_SafeBagFree((HITLS_PKCS12_SafeBag *)bag); | 37 | HITLS_PKCS12_SafeBagFree((HITLS_PKCS12_SafeBag *)bag); |
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | -static void AttributesFree(void *attribute) | ||
| 41 | -{ | ||
| 42 | - HITLS_PKCS12_SafeBagAttr *input = (HITLS_PKCS12_SafeBagAttr *)attribute; | ||
| 43 | - BSL_SAL_FREE(input->attrValue->data); | ||
| 44 | - BSL_SAL_FREE(input->attrValue); | ||
| 45 | - BSL_SAL_FREE(input); | ||
| 46 | -} | ||
| 47 | - | ||
| 48 | static void BagFree(void *value) | 40 | static void BagFree(void *value) |
| 49 | { | 41 | { |
| 50 | HITLS_PKCS12_Bag *bag = (HITLS_PKCS12_Bag *)value; | 42 | HITLS_PKCS12_Bag *bag = (HITLS_PKCS12_Bag *)value; |
| 51 | HITLS_X509_CertFree(bag->value.cert); | 43 | HITLS_X509_CertFree(bag->value.cert); |
| 52 | - BSL_LIST_DeleteAll(bag->attributes, HITLS_PKCS12_AttributesFree); | 44 | + HITLS_X509_AttrsFree(bag->attributes, HITLS_PKCS12_AttributesFree); |
| 53 | - BSL_SAL_FREE(bag->attributes); | 45 | + bag->attributes = NULL; |
| 54 | BSL_SAL_FREE(bag); | 46 | BSL_SAL_FREE(bag); |
| 55 | } | 47 | } |
| 56 | 48 | ||
| @@ -139,7 +131,7 @@ exit: | |||
| 139 | /* BEGIN_CASE */ | 131 | /* BEGIN_CASE */ |
| 140 | void SDV_PKCS12_PARSE_SAFEBAGS_OF_ATTRIBUTE_TC001(Hex *buff, Hex *friendlyName, Hex *localKeyId) | 132 | void SDV_PKCS12_PARSE_SAFEBAGS_OF_ATTRIBUTE_TC001(Hex *buff, Hex *friendlyName, Hex *localKeyId) |
| 141 | { | 133 | { |
| 142 | - BSL_ASN1_List *attrbutes = BSL_LIST_New(sizeof(HITLS_PKCS12_SafeBagAttr)); | 134 | + HITLS_X509_Attrs *attrbutes = HITLS_X509_AttrsNew(); |
| 143 | ASSERT_NE(attrbutes, NULL); | 135 | ASSERT_NE(attrbutes, NULL); |
| 144 | 136 | ||
| 145 | BSL_ASN1_Buffer asn = { | 137 | BSL_ASN1_Buffer asn = { |
| @@ -149,19 +141,19 @@ void SDV_PKCS12_PARSE_SAFEBAGS_OF_ATTRIBUTE_TC001(Hex *buff, Hex *friendlyName, | |||
| 149 | }; | 141 | }; |
| 150 | int32_t ret = HITLS_PKCS12_ParseSafeBagAttr(&asn, attrbutes); | 142 | int32_t ret = HITLS_PKCS12_ParseSafeBagAttr(&asn, attrbutes); |
| 151 | ASSERT_EQ(ret, HITLS_X509_SUCCESS); | 143 | ASSERT_EQ(ret, HITLS_X509_SUCCESS); |
| 152 | - HITLS_PKCS12_SafeBagAttr *firstAttr = BSL_LIST_GET_FIRST(attrbutes); | 144 | + HITLS_PKCS12_SafeBagAttr *firstAttr = BSL_LIST_GET_FIRST(attrbutes->list); |
| 153 | - HITLS_PKCS12_SafeBagAttr *second = BSL_LIST_GET_NEXT(attrbutes); | 145 | + HITLS_PKCS12_SafeBagAttr *second = BSL_LIST_GET_NEXT(attrbutes->list); |
| 154 | if (firstAttr->attrId == BSL_CID_FRIENDLYNAME) { | 146 | if (firstAttr->attrId == BSL_CID_FRIENDLYNAME) { |
| 155 | BSL_ASN1_Buffer asn = {BSL_ASN1_TAG_BMPSTRING, (uint32_t)friendlyName->len, friendlyName->x}; | 147 | BSL_ASN1_Buffer asn = {BSL_ASN1_TAG_BMPSTRING, (uint32_t)friendlyName->len, friendlyName->x}; |
| 156 | BSL_ASN1_Buffer encode = {0}; | 148 | BSL_ASN1_Buffer encode = {0}; |
| 157 | ret = BSL_ASN1_DecodePrimitiveItem(&asn, &encode); | 149 | ret = BSL_ASN1_DecodePrimitiveItem(&asn, &encode); |
| 158 | ASSERT_EQ(ret, BSL_SUCCESS); | 150 | ASSERT_EQ(ret, BSL_SUCCESS); |
| 159 | - ASSERT_COMPARE("friendly name", firstAttr->attrValue->data, firstAttr->attrValue->dataLen, | 151 | + ASSERT_COMPARE("friendly name", firstAttr->attrValue.data, firstAttr->attrValue.dataLen, |
| 160 | encode.buff, encode.len); | 152 | encode.buff, encode.len); |
| 161 | BSL_SAL_FREE(encode.buff); | 153 | BSL_SAL_FREE(encode.buff); |
| 162 | } | 154 | } |
| 163 | if (firstAttr->attrId == BSL_CID_LOCALKEYID) { | 155 | if (firstAttr->attrId == BSL_CID_LOCALKEYID) { |
| 164 | - ASSERT_EQ(memcmp(firstAttr->attrValue->data, localKeyId->x, localKeyId->len), 0); | 156 | + ASSERT_EQ(memcmp(firstAttr->attrValue.data, localKeyId->x, localKeyId->len), 0); |
| 165 | } | 157 | } |
| 166 | if (second == NULL) { | 158 | if (second == NULL) { |
| 167 | ASSERT_EQ(friendlyName->len, 0); | 159 | ASSERT_EQ(friendlyName->len, 0); |
| @@ -171,17 +163,16 @@ void SDV_PKCS12_PARSE_SAFEBAGS_OF_ATTRIBUTE_TC001(Hex *buff, Hex *friendlyName, | |||
| 171 | BSL_ASN1_Buffer encode = {0}; | 163 | BSL_ASN1_Buffer encode = {0}; |
| 172 | ret = BSL_ASN1_DecodePrimitiveItem(&asn, &encode); | 164 | ret = BSL_ASN1_DecodePrimitiveItem(&asn, &encode); |
| 173 | ASSERT_EQ(ret, BSL_SUCCESS); | 165 | ASSERT_EQ(ret, BSL_SUCCESS); |
| 174 | - ASSERT_COMPARE("friendly name", firstAttr->attrValue->data, firstAttr->attrValue->dataLen, | 166 | + ASSERT_COMPARE("friendly name", firstAttr->attrValue.data, firstAttr->attrValue.dataLen, |
| 175 | encode.buff, encode.len); | 167 | encode.buff, encode.len); |
| 176 | BSL_SAL_FREE(encode.buff); | 168 | BSL_SAL_FREE(encode.buff); |
| 177 | } | 169 | } |
| 178 | if (second->attrId == BSL_CID_LOCALKEYID) { | 170 | if (second->attrId == BSL_CID_LOCALKEYID) { |
| 179 | - ASSERT_EQ(memcmp(second->attrValue->data, localKeyId->x, localKeyId->len), 0); | 171 | + ASSERT_EQ(memcmp(second->attrValue.data, localKeyId->x, localKeyId->len), 0); |
| 180 | } | 172 | } |
| 181 | } | 173 | } |
| 182 | exit: | 174 | exit: |
| 183 | - BSL_LIST_DeleteAll(attrbutes, AttributesFree); | 175 | + HITLS_X509_AttrsFree(attrbutes, HITLS_PKCS12_AttributesFree); |
| 184 | - BSL_SAL_FREE(attrbutes); | ||
| 185 | } | 176 | } |
| 186 | /* END_CASE */ | 177 | /* END_CASE */ |
| 187 | 178 | ||
| @@ -191,7 +182,7 @@ exit: | |||
| 191 | /* BEGIN_CASE */ | 182 | /* BEGIN_CASE */ |
| 192 | void SDV_PKCS12_PARSE_SAFEBAGS_OF_ATTRIBUTE_TC002(Hex *buff) | 183 | void SDV_PKCS12_PARSE_SAFEBAGS_OF_ATTRIBUTE_TC002(Hex *buff) |
| 193 | { | 184 | { |
| 194 | - BSL_ASN1_List *attrbutes = BSL_LIST_New(sizeof(HITLS_PKCS12_SafeBagAttr)); | 185 | + HITLS_X509_Attrs *attrbutes = HITLS_X509_AttrsNew(); |
| 195 | ASSERT_NE(attrbutes, NULL); | 186 | ASSERT_NE(attrbutes, NULL); |
| 196 | 187 | ||
| 197 | BSL_ASN1_Buffer asn = { | 188 | BSL_ASN1_Buffer asn = { |
| @@ -209,8 +200,7 @@ void SDV_PKCS12_PARSE_SAFEBAGS_OF_ATTRIBUTE_TC002(Hex *buff) | |||
| 209 | ret = HITLS_PKCS12_ParseSafeBagAttr(&asn, attrbutes); | 200 | ret = HITLS_PKCS12_ParseSafeBagAttr(&asn, attrbutes); |
| 210 | ASSERT_NE(ret, HITLS_X509_SUCCESS); | 201 | ASSERT_NE(ret, HITLS_X509_SUCCESS); |
| 211 | exit: | 202 | exit: |
| 212 | - BSL_LIST_DeleteAll(attrbutes, AttributesFree); | 203 | + HITLS_X509_AttrsFree(attrbutes, HITLS_PKCS12_AttributesFree); |
| 213 | - BSL_SAL_FREE(attrbutes); | ||
| 214 | } | 204 | } |
| 215 | /* END_CASE */ | 205 | /* END_CASE */ |
| 216 | 206 | ||
| @@ -1125,12 +1115,16 @@ void SDV_PKCS12_ENCODE_P12_TC003(Hex *buff) | |||
| 1125 | ret = HITLS_PKCS12_GenBuff(BSL_FORMAT_ASN1, &p12_1, &encodeParam, true, &output3); | 1115 | ret = HITLS_PKCS12_GenBuff(BSL_FORMAT_ASN1, &p12_1, &encodeParam, true, &output3); |
| 1126 | ASSERT_EQ(ret, HITLS_X509_SUCCESS); | 1116 | ASSERT_EQ(ret, HITLS_X509_SUCCESS); |
| 1127 | 1117 | ||
| 1118 | + // test p12-encode of entityCert attribute = NULL. | ||
| 1128 | p12_1.entityCert->value.cert = entityCert; | 1119 | p12_1.entityCert->value.cert = entityCert; |
| 1129 | - BSL_LIST_DeleteAll(p12_1.entityCert->attributes, AttributesFree); // test p12-encode of entityCert attribute = NULL. | 1120 | + HITLS_X509_AttrsFree(p12_1.entityCert->attributes, HITLS_PKCS12_AttributesFree); |
| 1121 | + p12_1.entityCert->attributes = NULL; | ||
| 1130 | ret = HITLS_PKCS12_GenBuff(BSL_FORMAT_ASN1, &p12_1, &encodeParam, true, &output4); | 1122 | ret = HITLS_PKCS12_GenBuff(BSL_FORMAT_ASN1, &p12_1, &encodeParam, true, &output4); |
| 1131 | ASSERT_EQ(ret, HITLS_X509_SUCCESS); | 1123 | ASSERT_EQ(ret, HITLS_X509_SUCCESS); |
| 1132 | 1124 | ||
| 1133 | - BSL_LIST_DeleteAll(p12_1.key->attributes, AttributesFree); // test p12-encode of key attribute = NULL. | 1125 | + // test p12-encode of key attribute = NULL. |
| 1126 | + HITLS_X509_AttrsFree(p12_1.key->attributes, HITLS_PKCS12_AttributesFree); | ||
| 1127 | + p12_1.key->attributes = NULL; | ||
| 1134 | ret = HITLS_PKCS12_GenBuff(BSL_FORMAT_ASN1, &p12_1, &encodeParam, true, &output5); | 1128 | ret = HITLS_PKCS12_GenBuff(BSL_FORMAT_ASN1, &p12_1, &encodeParam, true, &output5); |
| 1135 | ASSERT_EQ(ret, HITLS_X509_SUCCESS); | 1129 | ASSERT_EQ(ret, HITLS_X509_SUCCESS); |
| 1136 | 1130 | ||
| @@ -1405,8 +1399,8 @@ void SDV_PKCS12_CTRL_TEST_TC001(char *pkeyPath, char *enCertPath, char *caCertPa | |||
| 1405 | 1399 | ||
| 1406 | ASSERT_NE(p12->key->value.key, NULL); | 1400 | ASSERT_NE(p12->key->value.key, NULL); |
| 1407 | ASSERT_NE(p12->entityCert->value.cert, NULL); | 1401 | ASSERT_NE(p12->entityCert->value.cert, NULL); |
| 1408 | - ASSERT_EQ(BSL_LIST_COUNT(p12->key->attributes), 1); | 1402 | + ASSERT_EQ(BSL_LIST_COUNT(p12->key->attributes->list), 1); |
| 1409 | - ASSERT_EQ(BSL_LIST_COUNT(p12->entityCert->attributes), 1); | 1403 | + ASSERT_EQ(BSL_LIST_COUNT(p12->entityCert->attributes->list), 1); |
| 1410 | ASSERT_EQ(BSL_LIST_COUNT(p12->certList), 1); | 1404 | ASSERT_EQ(BSL_LIST_COUNT(p12->certList), 1); |
| 1411 | 1405 | ||
| 1412 | exit: | 1406 | exit: |
| @@ -136,7 +136,6 @@ exit: | |||
| 136 | } | 136 | } |
| 137 | /* END_CASE */ | 137 | /* END_CASE */ |
| 138 | 138 | ||
| 139 | - | ||
| 140 | /* BEGIN_CASE */ | 139 | /* BEGIN_CASE */ |
| 141 | void SDV_X509_STORE_VFY_CRL_FUNC_TC001(int type, int expResult, char *path1, char *path2, char *path3, | 140 | void SDV_X509_STORE_VFY_CRL_FUNC_TC001(int type, int expResult, char *path1, char *path2, char *path3, |
| 142 | char *crl1, char *crl2) | 141 | char *crl1, char *crl2) |
| @@ -237,7 +236,7 @@ exit: | |||
| 237 | 236 | ||
| 238 | static int32_t HITLS_AddCertToStoreTest(char *path, HITLS_X509_StoreCtx *store, HITLS_X509_Cert **cert) | 237 | static int32_t HITLS_AddCertToStoreTest(char *path, HITLS_X509_StoreCtx *store, HITLS_X509_Cert **cert) |
| 239 | { | 238 | { |
| 240 | - int32_t ret = HITLS_X509_CertParseFile(BSL_FORMAT_ASN1, path, cert); | 239 | + int32_t ret = HITLS_X509_CertParseFile(BSL_FORMAT_UNKNOWN, path, cert); |
| 241 | if (ret != HITLS_X509_SUCCESS) { | 240 | if (ret != HITLS_X509_SUCCESS) { |
| 242 | return ret; | 241 | return ret; |
| 243 | } | 242 | } |
| @@ -253,7 +252,6 @@ static int32_t HITLS_AddCrlToStoreTest(char *path, HITLS_X509_StoreCtx *store, H | |||
| 253 | return HITLS_X509_StoreCtxCtrl(store, HITLS_X509_STORECTX_SET_CRL, *crl, sizeof(HITLS_X509_Crl)); | 252 | return HITLS_X509_StoreCtxCtrl(store, HITLS_X509_STORECTX_SET_CRL, *crl, sizeof(HITLS_X509_Crl)); |
| 254 | } | 253 | } |
| 255 | 254 | ||
| 256 | - | ||
| 257 | /* BEGIN_CASE */ | 255 | /* BEGIN_CASE */ |
| 258 | void SDV_X509_BUILD_CERT_CHAIN_FUNC_TC001(char *rootPath, char *caPath, char *cert, char *crlPath) | 256 | void SDV_X509_BUILD_CERT_CHAIN_FUNC_TC001(char *rootPath, char *caPath, char *cert, char *crlPath) |
| 259 | { | 257 | { |
| @@ -337,6 +335,7 @@ exit: | |||
| 337 | } | 335 | } |
| 338 | /* END_CASE */ | 336 | /* END_CASE */ |
| 339 | 337 | ||
| 338 | + | ||
| 340 | static int32_t X509_AddCertToChainTest(HITLS_X509_List *chain, HITLS_X509_Cert *cert) | 339 | static int32_t X509_AddCertToChainTest(HITLS_X509_List *chain, HITLS_X509_Cert *cert) |
| 341 | { | 340 | { |
| 342 | int ref; | 341 | int ref; |
| @@ -623,3 +622,36 @@ exit: | |||
| 623 | BSL_GLOBAL_DeInit(); | 622 | BSL_GLOBAL_DeInit(); |
| 624 | } | 623 | } |
| 625 | /* END_CASE */ | 624 | /* END_CASE */ |
| 625 | + | ||
| 626 | + | ||
| 627 | +/* BEGIN_CASE */ | ||
| 628 | +void SDV_X509_SM2_CERT_USERID_FUNC_TC001(char *caCertPath, char *interCertPath, char *entityCertPath, | ||
| 629 | + int isUseDefaultUserId) | ||
| 630 | +{ | ||
| 631 | + TestMemInit(); | ||
| 632 | + TestRandInit(); | ||
| 633 | + HITLS_X509_Cert *entityCert = NULL; | ||
| 634 | + HITLS_X509_Cert *interCert = NULL; | ||
| 635 | + HITLS_X509_Cert *caCert = NULL; | ||
| 636 | + HITLS_X509_List *chain = NULL; | ||
| 637 | + char sm2DefaultUserid[] = "1234567812345678"; | ||
| 638 | + HITLS_X509_StoreCtx *storeCtx = HITLS_X509_StoreCtxNew(); | ||
| 639 | + ASSERT_NE(storeCtx, NULL); | ||
| 640 | + ASSERT_EQ(HITLS_AddCertToStoreTest(caCertPath, storeCtx, &caCert), 0); | ||
| 641 | + ASSERT_EQ(HITLS_AddCertToStoreTest(interCertPath, storeCtx, &interCert), 0); | ||
| 642 | + ASSERT_EQ(HITLS_X509_CertParseFile(BSL_FORMAT_UNKNOWN, entityCertPath, &entityCert), 0); | ||
| 643 | + ASSERT_EQ(BSL_LIST_COUNT(storeCtx->store), 2); | ||
| 644 | + if (isUseDefaultUserId != 0) { | ||
| 645 | + ASSERT_EQ(HITLS_X509_StoreCtxCtrl(storeCtx, HITLS_X509_STORECTX_SET_VEY_SM2_USERID, sm2DefaultUserid, | ||
| 646 | + strlen(sm2DefaultUserid)), 0); | ||
| 647 | + } | ||
| 648 | + ASSERT_EQ(HITLS_X509_CertChainBuild(storeCtx, false, entityCert, &chain), 0); | ||
| 649 | + ASSERT_EQ(HITLS_X509_CertVerify(storeCtx, chain), HITLS_X509_SUCCESS); | ||
| 650 | +exit: | ||
| 651 | + HITLS_X509_StoreCtxFree(storeCtx); | ||
| 652 | + HITLS_X509_CertFree(entityCert); | ||
| 653 | + HITLS_X509_CertFree(interCert); | ||
| 654 | + HITLS_X509_CertFree(caCert); | ||
| 655 | + BSL_LIST_FREE(chain, (BSL_LIST_PFUNC_FREE)HITLS_X509_CertFree); | ||
| 656 | +} | ||
| 657 | +/* END_CASE */ | ||
| @@ -71,3 +71,8 @@ SDV_X509_BUILD_CERT_CHAIN_FUNC_TC009: | |||
| 71 | SDV_X509_BUILD_CERT_CHAIN_WITH_ROOT_FUNC_TC001 | 71 | SDV_X509_BUILD_CERT_CHAIN_WITH_ROOT_FUNC_TC001 |
| 72 | SDV_X509_BUILD_CERT_CHAIN_WITH_ROOT_FUNC_TC001: | 72 | SDV_X509_BUILD_CERT_CHAIN_WITH_ROOT_FUNC_TC001: |
| 73 | 73 | ||
| 74 | +SDV_X509_SM2_CERT_USERID_FUNC_TC001 | ||
| 75 | +SDV_X509_SM2_CERT_USERID_FUNC_TC001:"../testdata/cert/sm2_with_userid/ca.crt":"../testdata/cert/sm2_with_userid/inter.crt":"../testdata/cert/sm2_with_userid/sign.crt":1 | ||
| 76 | + | ||
| 77 | +SDV_X509_SM2_CERT_USERID_FUNC_TC001 | ||
| 78 | +SDV_X509_SM2_CERT_USERID_FUNC_TC001:"../testdata/cert/sm2/ca.mul.der":"../testdata/cert/sm2/inter.mul.der":"../testdata/cert/sm2/sign.mul.der":0 | ||
| @@ -0,0 +1,9 @@ | |||
| 1 | +-----BEGIN CERTIFICATE REQUEST----- | ||
| 2 | +MIIBKjCB0QIBADBvMQswCQYDVQQGEwJYWDELMAkGA1UECAwCWFgxCzAJBgNVBAcM | ||
| 3 | +AlhYMRQwEgYDVQQKDAtjZXJ0aWZpY2F0ZTEPMA0GA1UECwwGdGVzdGNhMR8wHQYD | ||
| 4 | +VQQDDBZjZXJ0aWZpY2F0ZS50ZXN0Y2EuY29tMFkwEwYHKoZIzj0CAQYIKoEcz1UB | ||
| 5 | +gi0DQgAEpG5TzhlUuJ8XurFmAHKtXKcfJN24i+xezTGMeBwWGLOExYDqGqEa3exQ | ||
| 6 | +ZkdSryWaDJwweRT3ttCTg1iEUZoXQqAAMAoGCCqBHM9VAYN1A0gAMEUCIFQDoZ8R | ||
| 7 | +tI/X7BgacLKMzwabHR/6wKhIFuPGVjV+O5feAiEAiELVSZktKC4hlLAY2mtbdUBA | ||
| 8 | +jcQBuS3ywz3KsniYHzs= | ||
| 9 | +-----END CERTIFICATE REQUEST----- | ||
| @@ -0,0 +1,5 @@ | |||
| 1 | +-----BEGIN PRIVATE KEY----- | ||
| 2 | +MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQgfNy8gAy1B+ADWXNp | ||
| 3 | +wx3+IT/Pk3o9WWo6yU1qvnKWR9uhRANCAASkblPOGVS4nxe6sWYAcq1cpx8k3biL | ||
| 4 | +7F7NMYx4HBYYs4TFgOoaoRrd7FBmR1KvJZoMnDB5FPe20JODWIRRmhdC | ||
| 5 | +-----END PRIVATE KEY----- | ||
| @@ -0,0 +1,9 @@ | |||
| 1 | +-----BEGIN CERTIFICATE REQUEST----- | ||
| 2 | +MIIBKTCB0QIBADBvMQswCQYDVQQGEwJYWDELMAkGA1UECAwCWFgxCzAJBgNVBAcM | ||
| 3 | +AlhYMRQwEgYDVQQKDAtjZXJ0aWZpY2F0ZTEPMA0GA1UECwwGdGVzdGNhMR8wHQYD | ||
| 4 | +VQQDDBZjZXJ0aWZpY2F0ZS50ZXN0Y2EuY29tMFkwEwYHKoZIzj0CAQYIKoEcz1UB | ||
| 5 | +gi0DQgAE+KNpyx2mT+9juhSs3uxMVKhm9aA9cDTsGh/5Wfd93BZqxGgKTWbIwhVL | ||
| 6 | +qh7e/qsIL1+nnwSXcad24sBm79UyG6AAMAoGCCqBHM9VAYN1A0cAMEQCIG0a0LRY | ||
| 7 | +e9g6/UN02ZSnS5lVCG+1i+NOOkEDRU8mv1IDAiA8RCoOKHKLmpdQejzudagyaBdt | ||
| 8 | +GdNueAtaMJXc8y6U4A== | ||
| 9 | +-----END CERTIFICATE REQUEST----- | ||
| @@ -0,0 +1,5 @@ | |||
| 1 | +-----BEGIN PRIVATE KEY----- | ||
| 2 | +MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQg2jCtrPzCI7eEZ+v8 | ||
| 3 | +uPoW2qdoflcXKa5dOM3nn5H4VV6hRANCAAT4o2nLHaZP72O6FKze7ExUqGb1oD1w | ||
| 4 | +NOwaH/lZ933cFmrEaApNZsjCFUuqHt7+qwgvX6efBJdxp3biwGbv1TIb | ||
| 5 | +-----END PRIVATE KEY----- | ||
| @@ -0,0 +1,21 @@ | |||
| 1 | +-----BEGIN CERTIFICATE----- | ||
| 2 | +MIIDizCCAnOgAwIBAgIUcZI8/pIrl78f5+pTDE3YSlHLyO8wDQYJKoZIhvcNAQEL | ||
| 3 | +BQAwbjETMBEGA1UEAwwKIFRlc3QgVXNlcjEXMBUGA1UECwwOI0lUIERlcGFydG1l | ||
| 4 | +bnQxFjAUBgNVBAoMDSxFeGFtcGxlIENvcnAxETAPBgNVBAcMCEJlaWppbmc+MRMw | ||
| 5 | +EQYDVQQIDAo8QjtlaWppbmcgMB4XDTI0MTEyMDA4Mjc0MVoXDTI1MTEyMDA4Mjc0 | ||
| 6 | +MVowbjETMBEGA1UEAwwKIFRlc3QgVXNlcjEXMBUGA1UECwwOI0lUIERlcGFydG1l | ||
| 7 | +bnQxFjAUBgNVBAoMDSxFeGFtcGxlIENvcnAxETAPBgNVBAcMCEJlaWppbmc+MRMw | ||
| 8 | +EQYDVQQIDAo8QjtlaWppbmcgMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC | ||
| 9 | +AQEA37uyHc1oraFnppV9uzgRtU7+gFylMXAXrbxVIYCfhwlquz6qaHJSC1zM4N5E | ||
| 10 | +vUqKTqghqQk6M7gszyyJ+pYLWskhraIbhCdzPfKNWvpjrpBbZBUpamP6GKQ9VYW8 | ||
| 11 | +z41N0U82bc0Y79PheBOu7lPG5K9HPis/po/wO0QNqrMRIUKhhiTD5+amnEo0vBWe | ||
| 12 | +UE67eKZbT5h3DY+xW9PRpT2oKljMG+WehXSCYg4NxKq4lru25QXS01Q3XQtWwhzg | ||
| 13 | +OSu47fN+QEVBnHPKmfzFUmLj4NvKDCPFGxrPME5fVTcKz48GUYz0shCDkMZkvXhx | ||
| 14 | +OGhHY0vWcpvRP1aS+ik9yGYNCwIDAQABoyEwHzAdBgNVHQ4EFgQUaNRa66mvsWXu | ||
| 15 | +NMt30VdxUHvFaukwDQYJKoZIhvcNAQELBQADggEBALSD75mZql2x+BDcY/XU8tZA | ||
| 16 | +uY3g4Yw3kmpAw8DbCjOnsqugUwT+uyzE0lfuXhB4wi1nF6whpr3FNY/twi9EUKNZ | ||
| 17 | +47hUKrTYA9OmCPrt3sYXySsIkrUHgGTEF/JMX1mVZiFjaDUDXvR1x7NOLX9RMKNi | ||
| 18 | +qd67IkKpZtAE3N7EGID+pI9hrjouIeRkanjrhe19nsKGnJD2TAyXPr59QbuxaYzX | ||
| 19 | +lFnT3kcwKv44NSitl67PspKNTHxDSwiW4C7f2BTNYrN4OoN6L3Gxy6dRvB0yd6uZ | ||
| 20 | +Sy/Qygsf4fk2F8MtDE7k7vrXaG+J3Wc7MSleuTIyy9HPRVLVYVZLmWtWAIDbbwk= | ||
| 21 | +-----END CERTIFICATE----- | ||
| @@ -0,0 +1,23 @@ | |||
| 1 | +-----BEGIN CERTIFICATE----- | ||
| 2 | +MIID2zCCAsOgAwIBAgIUQuu085+mtjPnJFDxOn1XUMP1kuQwDQYJKoZIhvcNAQEL | ||
| 3 | +BQAwgZUxEjAQBgNVBAMMCVRlc3QgVXNlcjEWMBQGA1UECwwNSVQgRGVwYXJ0bWVu | ||
| 4 | +dDEVMBMGA1UECgwMRXhhbXBsZSBDb3JwMRAwDgYDVQQHDAdCZWlqaW5nMRAwDgYD | ||
| 5 | +VQQIDAdCZWlqaW5nMQswCQYDVQQGEwJDTjEfMB0GCSqGSIb3DQEJARYQdGVzdEBl | ||
| 6 | +eGFtcGxlLmNvbTAeFw0yNDExMjAwOTMzMDdaFw0yNTExMjAwOTMzMDdaMIGVMRIw | ||
| 7 | +EAYDVQQDDAlUZXN0IFVzZXIxFjAUBgNVBAsMDUlUIERlcGFydG1lbnQxFTATBgNV | ||
| 8 | +BAoMDEV4YW1wbGUgQ29ycDEQMA4GA1UEBwwHQmVpamluZzEQMA4GA1UECAwHQmVp | ||
| 9 | +amluZzELMAkGA1UEBhMCQ04xHzAdBgkqhkiG9w0BCQEWEHRlc3RAZXhhbXBsZS5j | ||
| 10 | +b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDfu7IdzWitoWemlX27 | ||
| 11 | +OBG1Tv6AXKUxcBetvFUhgJ+HCWq7PqpoclILXMzg3kS9SopOqCGpCTozuCzPLIn6 | ||
| 12 | +lgtaySGtohuEJ3M98o1a+mOukFtkFSlqY/oYpD1VhbzPjU3RTzZtzRjv0+F4E67u | ||
| 13 | +U8bkr0c+Kz+mj/A7RA2qsxEhQqGGJMPn5qacSjS8FZ5QTrt4pltPmHcNj7Fb09Gl | ||
| 14 | +PagqWMwb5Z6FdIJiDg3EqriWu7blBdLTVDddC1bCHOA5K7jt835ARUGcc8qZ/MVS | ||
| 15 | +YuPg28oMI8UbGs8wTl9VNwrPjwZRjPSyEIOQxmS9eHE4aEdjS9Zym9E/VpL6KT3I | ||
| 16 | +Zg0LAgMBAAGjITAfMB0GA1UdDgQWBBRo1Frrqa+xZe40y3fRV3FQe8Vq6TANBgkq | ||
| 17 | +hkiG9w0BAQsFAAOCAQEArl0RXuSP+1L27F+DQlPiAeFcBpE8HjxJTBSDbo1UXaub | ||
| 18 | +oykZekanCVC7sJElzHAgMXTyVih3+av4o9tA43OqRw4Cdq+o2A+Oabeqn6QQNlcp | ||
| 19 | +6pkHBZ6ICel4TpS5si9HazRuOfZ1cRSCdI27zsQzOKCodO/gwZSCQaB81Xw8Kirk | ||
| 20 | +USv5LEw1BhHLa7TcgFOIchXXXJyXy6982tF68zNDZ1AiIcYR26BE0goVZ41WGA6T | ||
| 21 | +NawWt0y9fPEza31LqgLFRryJ967Wf+tiFJk3LwiGQP4Jt9M2IVjWiuU9XOc7dVSF | ||
| 22 | +KDJCd3AHA/jRt2/rKcaTOaSkev80PqKlTLjsPNjPyA== | ||
| 23 | +-----END CERTIFICATE----- | ||
| @@ -0,0 +1,21 @@ | |||
| 1 | +-----BEGIN CERTIFICATE----- | ||
| 2 | +MIIDjDCCAnSgAwIBAgIUcZI8/pIrl78f5+pTDE3YSlHLyO8wDQYJKoZIhvcNAQEL | ||
| 3 | +BQAwbzEUMBIGBFUEg3QMCiBUZXN0IFVzZXIxFzAVBgNVBAsMDiNJVCBEZXBhcnRt | ||
| 4 | +ZW50MRYwFAYDVQQKDA0sRXhhbXBsZSBDb3JwMREwDwYDVQQHDAhCZWlqaW5nPjET | ||
| 5 | +MBEGA1UECAwKPEI7ZWlqaW5nIDAeFw0yNDExMjAwODI3NDFaFw0yNTExMjAwODI3 | ||
| 6 | +NDFaMG4xEzARBgNVBAMMCiBUZXN0IFVzZXIxFzAVBgNVBAsMDiNJVCBEZXBhcnRt | ||
| 7 | +ZW50MRYwFAYDVQQKDA0sRXhhbXBsZSBDb3JwMREwDwYDVQQHDAhCZWlqaW5nPjET | ||
| 8 | +MBEGA1UECAwKPEI7ZWlqaW5nIDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC | ||
| 9 | +ggEBAN+7sh3NaK2hZ6aVfbs4EbVO/oBcpTFwF628VSGAn4cJars+qmhyUgtczODe | ||
| 10 | +RL1Kik6oIakJOjO4LM8sifqWC1rJIa2iG4Qncz3yjVr6Y66QW2QVKWpj+hikPVWF | ||
| 11 | +vM+NTdFPNm3NGO/T4XgTru5TxuSvRz4rP6aP8DtEDaqzESFCoYYkw+fmppxKNLwV | ||
| 12 | +nlBOu3imW0+Ydw2PsVvT0aU9qCpYzBvlnoV0gmIODcSquJa7tuUF0tNUN10LVsIc | ||
| 13 | +4DkruO3zfkBFQZxzypn8xVJi4+DbygwjxRsazzBOX1U3Cs+PBlGM9LIQg5DGZL14 | ||
| 14 | +cThoR2NL1nKb0T9WkvopPchmDQsCAwEAAaMhMB8wHQYDVR0OBBYEFGjUWuupr7Fl | ||
| 15 | +7jTLd9FXcVB7xWrpMA0GCSqGSIb3DQEBCwUAA4IBAQC0g++ZmapdsfgQ3GP11PLW | ||
| 16 | +QLmN4OGMN5JqQMPA2wozp7KroFME/rssxNJX7l4QeMItZxesIaa9xTWP7cIvRFCj | ||
| 17 | +WeO4VCq02APTpgj67d7GF8krCJK1B4BkxBfyTF9ZlWYhY2g1A170dcezTi1/UTCj | ||
| 18 | +YqneuyJCqWbQBNzexBiA/qSPYa46LiHkZGp464XtfZ7ChpyQ9kwMlz6+fUG7sWmM | ||
| 19 | +15RZ095HMCr+ODUorZeuz7KSjUx8Q0sIluAu39gUzWKzeDqDei9xscunUbwdMner | ||
| 20 | +mUsv0MoLH+H5NhfDLQxO5O7612hvid1nOzEpXrkyMsvRz0VS1WFWS5lrVgCA228J | ||
| 21 | +-----END CERTIFICATE----- | ||
| @@ -0,0 +1,15 @@ | |||
| 1 | +-----BEGIN CERTIFICATE----- | ||
| 2 | +MIICQjCCAemgAwIBAgIUVH0RkiQvN0SqTKy1sdDzhXHtkggwCgYIKoEcz1UBg3Uw | ||
| 3 | +bzELMAkGA1UEBhMCWFgxCzAJBgNVBAgMAlhYMQswCQYDVQQHDAJYWDEUMBIGA1UE | ||
| 4 | +CgwLY2VydGlmaWNhdGUxDzANBgNVBAsMBnRlc3RjYTEfMB0GA1UEAwwWY2VydGlm | ||
| 5 | +aWNhdGUudGVzdGNhLmNvbTAeFw0yNDA1MjIwNzAwMDZaFw0zNDA1MjAwNzAwMDZa | ||
| 6 | +MG8xCzAJBgNVBAYTAlhYMQswCQYDVQQIDAJYWDELMAkGA1UEBwwCWFgxFDASBgNV | ||
| 7 | +BAoMC2NlcnRpZmljYXRlMQ8wDQYDVQQLDAZ0ZXN0Y2ExHzAdBgNVBAMMFmNlcnRp | ||
| 8 | +ZmljYXRlLnRlc3RjYS5jb20wWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQDpkiQ | ||
| 9 | +sEW8nDG9uNqk08YZXOoAoIsNcOXNg+sm2HDraIjY2bLRo4gzfDqxgxAeth871qvR | ||
| 10 | +fmHyP5p4l/iqiAnwo2MwYTAdBgNVHQ4EFgQUH67jYB/AIFsNa4zKsL7pE1WRA9Yw | ||
| 11 | +HwYDVR0jBBgwFoAUH67jYB/AIFsNa4zKsL7pE1WRA9YwEgYDVR0TAQH/BAgwBgEB | ||
| 12 | +/wIBHjALBgNVHQ8EBAMCAQYwCgYIKoEcz1UBg3UDRwAwRAIgDii62EqXUtA7rFTH | ||
| 13 | +dFDboGzPHqV9EtZCc4jO1QfQLFoCIFVIa/Sc3G+gRCQsBr6LEwU4d1Dc0o071NSs | ||
| 14 | +yjVOeyi/ | ||
| 15 | +-----END CERTIFICATE----- | ||
| @@ -0,0 +1,5 @@ | |||
| 1 | +-----BEGIN PRIVATE KEY----- | ||
| 2 | +MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQg2kUOXPGwhEsv3o7h | ||
| 3 | +2RwFNtrmWg1kqasTHi/LLH5dmj6hRANCAAQDpkiQsEW8nDG9uNqk08YZXOoAoIsN | ||
| 4 | +cOXNg+sm2HDraIjY2bLRo4gzfDqxgxAeth871qvRfmHyP5p4l/iqiAnw | ||
| 5 | +-----END PRIVATE KEY----- | ||
| @@ -0,0 +1,14 @@ | |||
| 1 | +-----BEGIN CERTIFICATE----- | ||
| 2 | +MIICHjCCAcOgAwIBAgIBATAKBggqgRzPVQGDdTBvMQswCQYDVQQGEwJYWDELMAkG | ||
| 3 | +A1UECAwCWFgxCzAJBgNVBAcMAlhYMRQwEgYDVQQKDAtjZXJ0aWZpY2F0ZTEPMA0G | ||
| 4 | +A1UECwwGdGVzdGNhMR8wHQYDVQQDDBZjZXJ0aWZpY2F0ZS50ZXN0Y2EuY29tMB4X | ||
| 5 | +DTI0MDUyMjA3MDAwNloXDTM0MDUyMDA3MDAwNlowYjELMAkGA1UEBhMCWFgxCzAJ | ||
| 6 | +BgNVBAgMAlhYMRQwEgYDVQQKDAtjZXJ0aWZpY2F0ZTEPMA0GA1UECwwGdGVzdGlu | ||
| 7 | +MR8wHQYDVQQDDBZjZXJ0aWZpY2F0ZS50ZXN0aW4uY29tMFkwEwYHKoZIzj0CAQYI | ||
| 8 | +KoEcz1UBgi0DQgAEN7ryctUk9ISQTs+qQzvk3hTZLj4f90pCfFEC3e8O/au8RTs0 | ||
| 9 | +3f6fuwGWX0zH297CI80eaAYidzK25FkJZA7PnqNdMFswDAYDVR0TBAUwAwEB/zAL | ||
| 10 | +BgNVHQ8EBAMCAQYwHQYDVR0OBBYEFLF6vKQB1DF442gd6o7bN6Yv9u06MB8GA1Ud | ||
| 11 | +IwQYMBaAFB+u42AfwCBbDWuMyrC+6RNVkQPWMAoGCCqBHM9VAYN1A0kAMEYCIQDY | ||
| 12 | +DSufjGI1nxynGaD+SZR/s4TlPfxgOJ9J4hcT9xpweAIhAMqOe3N5nZVKlZrM71WC | ||
| 13 | +lvFqnJkmAkkZ8lJlmp4v79BQ | ||
| 14 | +-----END CERTIFICATE----- | ||
| @@ -0,0 +1,14 @@ | |||
| 1 | +-----BEGIN CERTIFICATE----- | ||
| 2 | +MIICETCCAbegAwIBAgIBAjAKBggqgRzPVQGDdTBiMQswCQYDVQQGEwJYWDELMAkG | ||
| 3 | +A1UECAwCWFgxFDASBgNVBAoMC2NlcnRpZmljYXRlMQ8wDQYDVQQLDAZ0ZXN0aW4x | ||
| 4 | +HzAdBgNVBAMMFmNlcnRpZmljYXRlLnRlc3Rpbi5jb20wHhcNMjQwNTIyMDcwMDA2 | ||
| 5 | +WhcNMzQwNTIwMDcwMDA2WjBmMQswCQYDVQQGEwJYWDELMAkGA1UECAwCWFgxFDAS | ||
| 6 | +BgNVBAoMC2NlcnRpZmljYXRlMREwDwYDVQQLDAh0ZXN0c2lnbjEhMB8GA1UEAwwY | ||
| 7 | +Y2VydGlmaWNhdGUudGVzdHNpZ24uY29tMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0D | ||
| 8 | +QgAEyp/bWrol7RGQaQfSaMgRQGgSBNV8Pu6M6Jl7jYLNlXMQ3Nbc3rU36f7teirK | ||
| 9 | +y22ymVlhWnTQOC73AP+uMZp3rqNaMFgwCQYDVR0TBAIwADALBgNVHQ8EBAMCBsAw | ||
| 10 | +HQYDVR0OBBYEFA7RZ1QXVll8KuvBR6hmNnldJgAPMB8GA1UdIwQYMBaAFLF6vKQB | ||
| 11 | +1DF442gd6o7bN6Yv9u06MAoGCCqBHM9VAYN1A0gAMEUCIQCh+dr3D4bWWZP8M3nJ | ||
| 12 | +eqzfKKt2YIsE7YhO3/PVTAhhPwIgarpo3xJ9OlGLgzH/Xl094Jc9rpOtJ/a2fgbw | ||
| 13 | +QM9Qpfg= | ||
| 14 | +-----END CERTIFICATE----- | ||
| @@ -0,0 +1,5 @@ | |||
| 1 | +-----BEGIN PRIVATE KEY----- | ||
| 2 | +MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQg/HnYZmznUQOOrfeb | ||
| 3 | +LpNt/0PSgXi1VdteMdSmuggJgdGhRANCAATKn9tauiXtEZBpB9JoyBFAaBIE1Xw+ | ||
| 4 | +7ozomXuNgs2VcxDc1tzetTfp/u16KsrLbbKZWWFadNA4LvcA/64xmneu | ||
| 5 | +-----END PRIVATE KEY----- | ||
| @@ -0,0 +1,15 @@ | |||
| 1 | +-----BEGIN CERTIFICATE----- | ||
| 2 | +MIICQjCCAemgAwIBAgIUVH0RkiQvN0SqTKy1sdDzhXHtkggwCgYIKoEcz1UBg3Uw | ||
| 3 | +bzELMAkGA1UEBhMCWFgxCzAJBgNVBAgMAlhYMQswCQYDVQQHDAJYWDEUMBIGA1UE | ||
| 4 | +CgwLY2VydGlmaWNhdGUxDzANBgNVBAsMBnRlc3RjYTEfMB0GA1UEAwwWY2VydGlm | ||
| 5 | +aWNhdGUudGVzdGNhLmNvbTAeFw0yNDA1MjIwNzAwMDZaFw0zNDA1MjAwNzAwMDZa | ||
| 6 | +MG8xCzAJBgNVBAYTAlhYMQswCQYDVQQIDAJYWDELMAkGA1UEBwwCWFgxFDASBgNV | ||
| 7 | +BAoMC2NlcnRpZmljYXRlMQ8wDQYDVQQLDAZ0ZXN0Y2ExHzAdBgNVBAMMFmNlcnRp | ||
| 8 | +ZmljYXRlLnRlc3RjYS5jb20wWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQDpkiQ | ||
| 9 | +sEW8nDG9uNqk08YZXOoAoIsNcOXNg+sm2HDraIjY2bLRo4gzfDqxgxAeth871qvR | ||
| 10 | +fmHyP5p4l/iqiAnwo2MwYTAdBgNVHQ4EFgQUH67jYB/AIFsNa4zKsL7pE1WRA9Yw | ||
| 11 | +HwYDVR0jBBgwFoAUH67jYB/AIFsNa4zKsL7pE1WRA9YwEgYDVR0TAQH/BAgwBgEB | ||
| 12 | +/wIBHjALBgNVHQ8EBAMCAQYwCgYIKoEcz1UBg3UDRwAwRAIgDii62EqXUtA7rFTH | ||
| 13 | +dFDboGzPHqV9EtZCc4jO1QfQLFoCIFVIa/Sc3G+gRCQsBr6LEwU4d1Dc0o071NSs | ||
| 14 | +yjVOeyi/ | ||
| 15 | +-----END CERTIFICATE----- | ||
Binary files do not support preview
| @@ -0,0 +1,5 @@ | |||
| 1 | +-----BEGIN PRIVATE KEY----- | ||
| 2 | +MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQg2kUOXPGwhEsv3o7h | ||
| 3 | +2RwFNtrmWg1kqasTHi/LLH5dmj6hRANCAAQDpkiQsEW8nDG9uNqk08YZXOoAoIsN | ||
| 4 | +cOXNg+sm2HDraIjY2bLRo4gzfDqxgxAeth871qvRfmHyP5p4l/iqiAnw | ||
| 5 | +-----END PRIVATE KEY----- | ||
Binary files do not support preview
| @@ -0,0 +1,49 @@ | |||
| 1 | +Certificate: | ||
| 2 | + Data: | ||
| 3 | + Version: 3 (0x2) | ||
| 4 | + Serial Number: 3 (0x3) | ||
| 5 | + Signature Algorithm: SM2-with-SM3 | ||
| 6 | + Issuer: C=XX, ST=XX, O=certificate, OU=testin, CN=certificate.testin.com | ||
| 7 | + Validity | ||
| 8 | + Not Before: May 22 07:00:06 2024 GMT | ||
| 9 | + Not After : May 20 07:00:06 2034 GMT | ||
| 10 | + Subject: C=XX, ST=XX, O=certificate, OU=testend, CN=certificate.testenc.com | ||
| 11 | + Subject Public Key Info: | ||
| 12 | + Public Key Algorithm: id-ecPublicKey | ||
| 13 | + Public-Key: (256 bit) | ||
| 14 | + pub: | ||
| 15 | + 04:9b:d6:d6:35:bb:e9:7b:cc:0b:bd:a3:cb:98:5f: | ||
| 16 | + 61:46:a5:b1:52:32:da:1e:89:b4:82:d5:2c:4b:56: | ||
| 17 | + fb:86:d0:7f:de:b4:74:f8:4e:04:e4:59:1b:2c:d3: | ||
| 18 | + 78:ea:6a:50:c0:05:30:9f:e8:ce:a1:37:59:77:e2: | ||
| 19 | + 8c:f6:5d:ee:86 | ||
| 20 | + ASN1 OID: SM2 | ||
| 21 | + X509v3 extensions: | ||
| 22 | + X509v3 Basic Constraints: | ||
| 23 | + CA:FALSE | ||
| 24 | + X509v3 Key Usage: | ||
| 25 | + Key Encipherment, Data Encipherment, Key Agreement | ||
| 26 | + X509v3 Subject Key Identifier: | ||
| 27 | + 30:1D:5A:5D:E8:06:77:EB:27:A1:8D:08:57:96:A5:83:C1:E2:79:CF | ||
| 28 | + X509v3 Authority Key Identifier: | ||
| 29 | + B1:7A:BC:A4:01:D4:31:78:E3:68:1D:EA:8E:DB:37:A6:2F:F6:ED:3A | ||
| 30 | + Signature Algorithm: SM2-with-SM3 | ||
| 31 | + Signature Value: | ||
| 32 | + 30:46:02:21:00:c9:b1:05:01:e4:26:7b:8d:94:d8:dc:cd:b7: | ||
| 33 | + 8b:91:49:99:72:6c:3e:71:63:a5:e4:f4:71:f7:fe:dd:0a:21: | ||
| 34 | + da:02:21:00:cf:2e:30:44:6c:c8:7b:a3:84:a2:48:05:ce:51: | ||
| 35 | + 7a:38:27:65:27:35:38:af:60:42:84:c9:15:17:7b:fb:7a:43 | ||
| 36 | +-----BEGIN CERTIFICATE----- | ||
| 37 | +MIICEDCCAbWgAwIBAgIBAzAKBggqgRzPVQGDdTBiMQswCQYDVQQGEwJYWDELMAkG | ||
| 38 | +A1UECAwCWFgxFDASBgNVBAoMC2NlcnRpZmljYXRlMQ8wDQYDVQQLDAZ0ZXN0aW4x | ||
| 39 | +HzAdBgNVBAMMFmNlcnRpZmljYXRlLnRlc3Rpbi5jb20wHhcNMjQwNTIyMDcwMDA2 | ||
| 40 | +WhcNMzQwNTIwMDcwMDA2WjBkMQswCQYDVQQGEwJYWDELMAkGA1UECAwCWFgxFDAS | ||
| 41 | +BgNVBAoMC2NlcnRpZmljYXRlMRAwDgYDVQQLDAd0ZXN0ZW5kMSAwHgYDVQQDDBdj | ||
| 42 | +ZXJ0aWZpY2F0ZS50ZXN0ZW5jLmNvbTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IA | ||
| 43 | +BJvW1jW76XvMC72jy5hfYUalsVIy2h6JtILVLEtW+4bQf960dPhOBORZGyzTeOpq | ||
| 44 | +UMAFMJ/ozqE3WXfijPZd7oajWjBYMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgM4MB0G | ||
| 45 | +A1UdDgQWBBQwHVpd6AZ36yehjQhXlqWDweJ5zzAfBgNVHSMEGDAWgBSxerykAdQx | ||
| 46 | +eONoHeqO2zemL/btOjAKBggqgRzPVQGDdQNJADBGAiEAybEFAeQme42U2NzNt4uR | ||
| 47 | +SZlybD5xY6Xk9HH3/t0KIdoCIQDPLjBEbMh7o4SiSAXOUXo4J2UnNTivYEKEyRUX | ||
| 48 | +e/t6Qw== | ||
| 49 | +-----END CERTIFICATE----- | ||
Binary files do not support preview
| @@ -0,0 +1,8 @@ | |||
| 1 | +-----BEGIN EC PARAMETERS----- | ||
| 2 | +BggqgRzPVQGCLQ== | ||
| 3 | +-----END EC PARAMETERS----- | ||
| 4 | +-----BEGIN PRIVATE KEY----- | ||
| 5 | +MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQgYA9L/gYVLcEKezBt | ||
| 6 | +DMAnC9xZqv9mWeQ/whAuWbS/WTahRANCAASb1tY1u+l7zAu9o8uYX2FGpbFSMtoe | ||
| 7 | +ibSC1SxLVvuG0H/etHT4TgTkWRss03jqalDABTCf6M6hN1l34oz2Xe6G | ||
| 8 | +-----END PRIVATE KEY----- | ||
Binary files do not support preview
| @@ -0,0 +1,14 @@ | |||
| 1 | +-----BEGIN CERTIFICATE----- | ||
| 2 | +MIICEDCCAbegAwIBAgIBBDAKBggqgRzPVQGDdTBiMQswCQYDVQQGEwJYWDELMAkG | ||
| 3 | +A1UECAwCWFgxFDASBgNVBAoMC2NlcnRpZmljYXRlMQ8wDQYDVQQLDAZ0ZXN0aW4x | ||
| 4 | +HzAdBgNVBAMMFmNlcnRpZmljYXRlLnRlc3Rpbi5jb20wHhcNMjQwNTIyMDcwMjM5 | ||
| 5 | +WhcNMzQwNTIwMDcwMjM5WjBmMQswCQYDVQQGEwJYWDELMAkGA1UECAwCWFgxFDAS | ||
| 6 | +BgNVBAoMC2NlcnRpZmljYXRlMRAwDgYDVQQLDAd0ZXN0ZW5kMSIwIAYDVQQDDBlj | ||
| 7 | +ZXJ0aWZpY2F0ZS50ZXN0ZW5jMjIuY29tMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0D | ||
| 8 | +QgAEzT4BmjIoUcEeho2IL0gpeOGD2hDSPPCaLHA6o1k43aoduht1g7GV8ldp97Yr | ||
| 9 | +d2z9oK+lG4quhYBrf8YALo+O3KNaMFgwCQYDVR0TBAIwADALBgNVHQ8EBAMCAzgw | ||
| 10 | +HQYDVR0OBBYEFDYDuzyKu06G6Med6d6hFtHxa78HMB8GA1UdIwQYMBaAFLF6vKQB | ||
| 11 | +1DF442gd6o7bN6Yv9u06MAoGCCqBHM9VAYN1A0cAMEQCIDar0JVTpRw1Ksqn8I/8 | ||
| 12 | +Kb4KPWH1OAQDvVUF1+7xMLeYAiAa/fzzN6mGVRWqbSa7GfAYkuNvR0MrlLiX+5uj | ||
| 13 | +Bh88dg== | ||
| 14 | +-----END CERTIFICATE----- | ||
Binary files do not support preview
| @@ -0,0 +1,8 @@ | |||
| 1 | +-----BEGIN EC PARAMETERS----- | ||
| 2 | +BggqgRzPVQGCLQ== | ||
| 3 | +-----END EC PARAMETERS----- | ||
| 4 | +-----BEGIN PRIVATE KEY----- | ||
| 5 | +MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQgCxTXCwd01oQOJ0g4 | ||
| 6 | +Tk5z2A0Mp6jeuYUSPiLtHdPAq8yhRANCAATNPgGaMihRwR6GjYgvSCl44YPaENI8 | ||
| 7 | +8JoscDqjWTjdqh26G3WDsZXyV2n3tit3bP2gr6Ubiq6FgGt/xgAuj47c | ||
| 8 | +-----END PRIVATE KEY----- | ||
Binary files do not support preview
| @@ -0,0 +1,14 @@ | |||
| 1 | +-----BEGIN CERTIFICATE----- | ||
| 2 | +MIICHjCCAcOgAwIBAgIBATAKBggqgRzPVQGDdTBvMQswCQYDVQQGEwJYWDELMAkG | ||
| 3 | +A1UECAwCWFgxCzAJBgNVBAcMAlhYMRQwEgYDVQQKDAtjZXJ0aWZpY2F0ZTEPMA0G | ||
| 4 | +A1UECwwGdGVzdGNhMR8wHQYDVQQDDBZjZXJ0aWZpY2F0ZS50ZXN0Y2EuY29tMB4X | ||
| 5 | +DTI0MDUyMjA3MDAwNloXDTM0MDUyMDA3MDAwNlowYjELMAkGA1UEBhMCWFgxCzAJ | ||
| 6 | +BgNVBAgMAlhYMRQwEgYDVQQKDAtjZXJ0aWZpY2F0ZTEPMA0GA1UECwwGdGVzdGlu | ||
| 7 | +MR8wHQYDVQQDDBZjZXJ0aWZpY2F0ZS50ZXN0aW4uY29tMFkwEwYHKoZIzj0CAQYI | ||
| 8 | +KoEcz1UBgi0DQgAEN7ryctUk9ISQTs+qQzvk3hTZLj4f90pCfFEC3e8O/au8RTs0 | ||
| 9 | +3f6fuwGWX0zH297CI80eaAYidzK25FkJZA7PnqNdMFswDAYDVR0TBAUwAwEB/zAL | ||
| 10 | +BgNVHQ8EBAMCAQYwHQYDVR0OBBYEFLF6vKQB1DF442gd6o7bN6Yv9u06MB8GA1Ud | ||
| 11 | +IwQYMBaAFB+u42AfwCBbDWuMyrC+6RNVkQPWMAoGCCqBHM9VAYN1A0kAMEYCIQDY | ||
| 12 | +DSufjGI1nxynGaD+SZR/s4TlPfxgOJ9J4hcT9xpweAIhAMqOe3N5nZVKlZrM71WC | ||
| 13 | +lvFqnJkmAkkZ8lJlmp4v79BQ | ||
| 14 | +-----END CERTIFICATE----- | ||
Binary files do not support preview
| @@ -0,0 +1,49 @@ | |||
| 1 | +Certificate: | ||
| 2 | + Data: | ||
| 3 | + Version: 3 (0x2) | ||
| 4 | + Serial Number: 2 (0x2) | ||
| 5 | + Signature Algorithm: SM2-with-SM3 | ||
| 6 | + Issuer: C=XX, ST=XX, O=certificate, OU=testin, CN=certificate.testin.com | ||
| 7 | + Validity | ||
| 8 | + Not Before: May 22 07:00:06 2024 GMT | ||
| 9 | + Not After : May 20 07:00:06 2034 GMT | ||
| 10 | + Subject: C=XX, ST=XX, O=certificate, OU=testsign, CN=certificate.testsign.com | ||
| 11 | + Subject Public Key Info: | ||
| 12 | + Public Key Algorithm: id-ecPublicKey | ||
| 13 | + Public-Key: (256 bit) | ||
| 14 | + pub: | ||
| 15 | + 04:ca:9f:db:5a:ba:25:ed:11:90:69:07:d2:68:c8: | ||
| 16 | + 11:40:68:12:04:d5:7c:3e:ee:8c:e8:99:7b:8d:82: | ||
| 17 | + cd:95:73:10:dc:d6:dc:de:b5:37:e9:fe:ed:7a:2a: | ||
| 18 | + ca:cb:6d:b2:99:59:61:5a:74:d0:38:2e:f7:00:ff: | ||
| 19 | + ae:31:9a:77:ae | ||
| 20 | + ASN1 OID: SM2 | ||
| 21 | + X509v3 extensions: | ||
| 22 | + X509v3 Basic Constraints: | ||
| 23 | + CA:FALSE | ||
| 24 | + X509v3 Key Usage: | ||
| 25 | + Digital Signature, Non Repudiation | ||
| 26 | + X509v3 Subject Key Identifier: | ||
| 27 | + 0E:D1:67:54:17:56:59:7C:2A:EB:C1:47:A8:66:36:79:5D:26:00:0F | ||
| 28 | + X509v3 Authority Key Identifier: | ||
| 29 | + B1:7A:BC:A4:01:D4:31:78:E3:68:1D:EA:8E:DB:37:A6:2F:F6:ED:3A | ||
| 30 | + Signature Algorithm: SM2-with-SM3 | ||
| 31 | + Signature Value: | ||
| 32 | + 30:45:02:21:00:a1:f9:da:f7:0f:86:d6:59:93:fc:33:79:c9: | ||
| 33 | + 7a:ac:df:28:ab:76:60:8b:04:ed:88:4e:df:f3:d5:4c:08:61: | ||
| 34 | + 3f:02:20:6a:ba:68:df:12:7d:3a:51:8b:83:31:ff:5e:5d:3d: | ||
| 35 | + e0:97:3d:ae:93:ad:27:f6:b6:7e:06:f0:40:cf:50:a5:f8 | ||
| 36 | +-----BEGIN CERTIFICATE----- | ||
| 37 | +MIICETCCAbegAwIBAgIBAjAKBggqgRzPVQGDdTBiMQswCQYDVQQGEwJYWDELMAkG | ||
| 38 | +A1UECAwCWFgxFDASBgNVBAoMC2NlcnRpZmljYXRlMQ8wDQYDVQQLDAZ0ZXN0aW4x | ||
| 39 | +HzAdBgNVBAMMFmNlcnRpZmljYXRlLnRlc3Rpbi5jb20wHhcNMjQwNTIyMDcwMDA2 | ||
| 40 | +WhcNMzQwNTIwMDcwMDA2WjBmMQswCQYDVQQGEwJYWDELMAkGA1UECAwCWFgxFDAS | ||
| 41 | +BgNVBAoMC2NlcnRpZmljYXRlMREwDwYDVQQLDAh0ZXN0c2lnbjEhMB8GA1UEAwwY | ||
| 42 | +Y2VydGlmaWNhdGUudGVzdHNpZ24uY29tMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0D | ||
| 43 | +QgAEyp/bWrol7RGQaQfSaMgRQGgSBNV8Pu6M6Jl7jYLNlXMQ3Nbc3rU36f7teirK | ||
| 44 | +y22ymVlhWnTQOC73AP+uMZp3rqNaMFgwCQYDVR0TBAIwADALBgNVHQ8EBAMCBsAw | ||
| 45 | +HQYDVR0OBBYEFA7RZ1QXVll8KuvBR6hmNnldJgAPMB8GA1UdIwQYMBaAFLF6vKQB | ||
| 46 | +1DF442gd6o7bN6Yv9u06MAoGCCqBHM9VAYN1A0gAMEUCIQCh+dr3D4bWWZP8M3nJ | ||
| 47 | +eqzfKKt2YIsE7YhO3/PVTAhhPwIgarpo3xJ9OlGLgzH/Xl094Jc9rpOtJ/a2fgbw | ||
| 48 | +QM9Qpfg= | ||
| 49 | +-----END CERTIFICATE----- | ||
Binary files do not support preview
| @@ -0,0 +1,8 @@ | |||
| 1 | +-----BEGIN EC PARAMETERS----- | ||
| 2 | +BggqgRzPVQGCLQ== | ||
| 3 | +-----END EC PARAMETERS----- | ||
| 4 | +-----BEGIN PRIVATE KEY----- | ||
| 5 | +MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQg/HnYZmznUQOOrfeb | ||
| 6 | +LpNt/0PSgXi1VdteMdSmuggJgdGhRANCAATKn9tauiXtEZBpB9JoyBFAaBIE1Xw+ | ||
| 7 | +7ozomXuNgs2VcxDc1tzetTfp/u16KsrLbbKZWWFadNA4LvcA/64xmneu | ||
| 8 | +-----END PRIVATE KEY----- | ||
Binary files do not support preview
| @@ -0,0 +1,14 @@ | |||
| 1 | +-----BEGIN CERTIFICATE----- | ||
| 2 | +MIICEzCCAbmgAwIBAgIBBTAKBggqgRzPVQGDdTBiMQswCQYDVQQGEwJYWDELMAkG | ||
| 3 | +A1UECAwCWFgxFDASBgNVBAoMC2NlcnRpZmljYXRlMQ8wDQYDVQQLDAZ0ZXN0aW4x | ||
| 4 | +HzAdBgNVBAMMFmNlcnRpZmljYXRlLnRlc3Rpbi5jb20wHhcNMjQwNTIyMDcwMjUw | ||
| 5 | +WhcNMzQwNTIwMDcwMjUwWjBoMQswCQYDVQQGEwJYWDELMAkGA1UECAwCWFgxFDAS | ||
| 6 | +BgNVBAoMC2NlcnRpZmljYXRlMREwDwYDVQQLDAh0ZXN0c2lnbjEjMCEGA1UEAwwa | ||
| 7 | +Y2VydGlmaWNhdGUudGVzdHNpZ24yMi5jb20wWTATBgcqhkjOPQIBBggqgRzPVQGC | ||
| 8 | +LQNCAAT92l+HlUMbZmPs0EaT2jhFGbAqcbQZcsQ9Q+2S14tfEBHKxaGnLt80+BSZ | ||
| 9 | +knak2i/kCY6a9I7HIgXRV8++pWkDo1owWDAJBgNVHRMEAjAAMAsGA1UdDwQEAwIG | ||
| 10 | +wDAdBgNVHQ4EFgQUdEUDucpnlfFZs3XZOEZNxdJp3tIwHwYDVR0jBBgwFoAUsXq8 | ||
| 11 | +pAHUMXjjaB3qjts3pi/27TowCgYIKoEcz1UBg3UDSAAwRQIgFCK9Vp5zLxy+sXtA | ||
| 12 | +PWzlYeFl0Pex10+ad64rrHk1W8cCIQC9nAq5YNDPo+H0F9sHPPgeQxQMfjAEcQrQ | ||
| 13 | +qJ2S6exk+g== | ||
| 14 | +-----END CERTIFICATE----- | ||
Binary files do not support preview
| @@ -0,0 +1,8 @@ | |||
| 1 | +-----BEGIN EC PARAMETERS----- | ||
| 2 | +BggqgRzPVQGCLQ== | ||
| 3 | +-----END EC PARAMETERS----- | ||
| 4 | +-----BEGIN PRIVATE KEY----- | ||
| 5 | +MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQghQhlBD4K4Ms08xk1 | ||
| 6 | +nvRy0DoxhUxK8z6buuBMqFaqfauhRANCAAT92l+HlUMbZmPs0EaT2jhFGbAqcbQZ | ||
| 7 | +csQ9Q+2S14tfEBHKxaGnLt80+BSZknak2i/kCY6a9I7HIgXRV8++pWkD | ||
| 8 | +-----END PRIVATE KEY----- | ||
Binary files do not support preview
| @@ -15,6 +15,7 @@ | |||
| 15 | 15 | ||
| 16 | 16 | ||
| 17 | 17 | ||
| 18 | + | ||
| 18 | 19 | ||
| 19 | 20 | ||
| 20 | 21 | ||
| @@ -23,6 +24,7 @@ | |||
| 23 | 24 | ||
| 24 | 25 | ||
| 25 | 26 | ||
| 27 | + | ||
| 26 | static int32_t BuildArrayFromList(HITLS_X509_List *list, HITLS_CERT_X509 **listArray, uint32_t *num) | 28 | static int32_t BuildArrayFromList(HITLS_X509_List *list, HITLS_CERT_X509 **listArray, uint32_t *num) |
| 27 | { | 29 | { |
| 28 | HITLS_X509_Cert *elemt = NULL; | 30 | HITLS_X509_Cert *elemt = NULL; |
| @@ -87,6 +89,8 @@ int32_t HITLS_X509_Adapt_BuildCertChain(HITLS_Config *config, HITLS_CERT_Store * | |||
| 87 | int32_t HITLS_X509_Adapt_VerifyCertChain(HITLS_Ctx *ctx, HITLS_CERT_Store *store, HITLS_CERT_X509 **list, uint32_t num) | 89 | int32_t HITLS_X509_Adapt_VerifyCertChain(HITLS_Ctx *ctx, HITLS_CERT_Store *store, HITLS_CERT_X509 **list, uint32_t num) |
| 88 | { | 90 | { |
| 89 | (void)ctx; | 91 | (void)ctx; |
| 92 | + /* The default user id as specified in GM/T 0009-2012 */ | ||
| 93 | + char sm2DefaultUserid[] = "1234567812345678"; | ||
| 90 | HITLS_X509_List *certList = NULL; | 94 | HITLS_X509_List *certList = NULL; |
| 91 | int32_t ret = BuildCertListFromCertArray(list, num, &certList); | 95 | int32_t ret = BuildCertListFromCertArray(list, num, &certList); |
| 92 | if (ret != HITLS_SUCCESS) { | 96 | if (ret != HITLS_SUCCESS) { |
| @@ -104,6 +108,12 @@ int32_t HITLS_X509_Adapt_VerifyCertChain(HITLS_Ctx *ctx, HITLS_CERT_Store *store | |||
| 104 | BSL_ERR_PUSH_ERROR(ret); | 108 | BSL_ERR_PUSH_ERROR(ret); |
| 105 | goto EXIT; | 109 | goto EXIT; |
| 106 | } | 110 | } |
| 111 | + ret = HITLS_X509_StoreCtxCtrl((HITLS_X509_StoreCtx *)store, HITLS_X509_STORECTX_SET_VEY_SM2_USERID, | ||
| 112 | + sm2DefaultUserid, strlen(sm2DefaultUserid)); | ||
| 113 | + if (ret != HITLS_SUCCESS) { | ||
| 114 | + BSL_ERR_PUSH_ERROR(ret); | ||
| 115 | + goto EXIT; | ||
| 116 | + } | ||
| 107 | ret = HITLS_X509_CertVerify((HITLS_X509_StoreCtx *)store, certList); | 117 | ret = HITLS_X509_CertVerify((HITLS_X509_StoreCtx *)store, certList); |
| 108 | if (ret != HITLS_SUCCESS) { | 118 | if (ret != HITLS_SUCCESS) { |
| 109 | BSL_ERR_PUSH_ERROR(ret); | 119 | BSL_ERR_PUSH_ERROR(ret); |


添加注释说明freeItem场景