已合并
refactor pki module #61
JerryDevis创建于 2024年11月22日
refactor pki module #61
已合并
JerryDevis创建于 2024年11月22日
81 个文件变更+2464-670
Mbsl/asn1/include/bsl_asn1.h+26-0
@@ -20,6 +20,7 @@
20#include <stdlib.h>20#include <stdlib.h>
21#include <stdbool.h>21#include <stdbool.h>
22#include "bsl_list.h"22#include "bsl_list.h"
23+#include "bsl_uio.h"
23 24 
24#ifdef __cplusplus25#ifdef __cplusplus
25extern "C" {26extern "C" {
@@ -282,6 +283,31 @@ int32_t BSL_ASN1_EncodeListItem(uint8_t tag, uint32_t listSize, BSL_ASN1_Templat
282 */283 */
283int32_t BSL_ASN1_EncodeLimb(uint8_t tag, uint64_t limb, BSL_ASN1_Buffer *asn);284int32_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#ifdef __cplusplus311#ifdef __cplusplus
286}312}
287#endif313#endif
Absl/asn1/src/bsl_asn1_print.c+78-0
@@ -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+#include <stdint.h>
16+#include "securec.h"
17+#include "bsl_uio.h"
18+#include "bsl_errno.h"
19+#include "bsl_err_internal.h"
20+ 
21+#define BSL_ASN1_PRINT_LEN 1024
22+#define X509_PRINT_MAX_LAYER 10
23+#define X509_PRINT_EACH_LAYER_INDENT 4
24+#define X509_PRINT_MAX_INDENT ((X509_PRINT_EACH_LAYER_INDENT) * (X509_PRINT_MAX_LAYER))
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+}
Absl/buffer/include/bsl_buffer.h+43-0
@@ -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+#ifndef BSL_BUFFER_H
17+#define BSL_BUFFER_H
18+ 
19+#include "hitls_build.h"
20+#ifdef HITLS_BSL_BUFFER
21+ 
22+#include <stddef.h>
23+ 
24+#ifdef __cplusplus
25+extern "C" {
26+#endif
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+#ifdef __cplusplus
39+}
40+#endif
41+ 
42+#endif
43+#endif
Absl/buffer/src/bsl_buffer.c+91-0
@@ -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+#include "hitls_build.h"
16+#ifdef HITLS_BSL_BUFFER
17+#include "securec.h"
18+#include "bsl_sal.h"
19+#include "bsl_buffer.h"
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+#endif
Mbsl/uio/src/uio_abstraction.h+5-0
@@ -54,6 +54,11 @@ struct UIO_ControlBlock {
54 BSL_SAL_RefCount references; // reference count54 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 *
Absl/uio/src/uio_mem.c+399-0
@@ -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+#include "hitls_build.h"
17+#ifdef HITLS_BSL_UIO_MEM
18+#include "securec.h"
19+#include "bsl_buffer.h"
20+#include "bsl_errno.h"
21+#include "bsl_err_internal.h"
22+#include "uio_base.h"
23+#include "uio_abstraction.h"
24+#include "bsl_uio.h"
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+#endif /* HITLS_BSL_UIO_MEM */
Mconfig/json/feature.json+20-4
@@ -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/*",
Mconfig/macro_config/hitls_config_layer_bsl.h+14-1
@@ -49,6 +49,18 @@
49 #ifndef HITLS_BSL_UIO_TCP49 #ifndef HITLS_BSL_UIO_TCP
50 #define HITLS_BSL_UIO_TCP50 #define HITLS_BSL_UIO_TCP
51 #endif51 #endif
52+ #ifndef HITLS_BSL_SAL_MEM
53+ #define HITLS_BSL_UIO_MEM
54+ #endif
55+#endif
56+ 
57+#if defined(HITLS_BSL_UIO_MEM)
58+ #ifndef HITLS_BSL_SAL_MEM
59+ #define HITLS_BSL_UIO_MEM
60+ #endif
61+ #ifndef HITLS_BSL_BUFFER
62+ #define HITLS_BSL_BUFFER
63+ #endif
52#endif64#endif
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#endif71#endif
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 #ifndef HITLS_BSL_UIO_PLT76 #ifndef HITLS_BSL_UIO_PLT
64 #define HITLS_BSL_UIO_PLT77 #define HITLS_BSL_UIO_PLT
65 #endif78 #endif
Mcrypto/eal/src/eal_pkey_crypt.c+11-0
@@ -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+ 
69int32_t CRYPT_EAL_PkeyPairCheck(CRYPT_EAL_PkeyCtx *pubKey, CRYPT_EAL_PkeyCtx *prvKey)79int32_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;
Minclude/bsl/bsl_errno.h+6-0
@@ -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,
Minclude/bsl/bsl_uio.h+17-0
@@ -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#define BSL_UIO_FILE_READ 0x02120#define BSL_UIO_FILE_READ 0x02
@@ -213,6 +223,13 @@ const BSL_UIO_Method *BSL_UIO_SctpMethod(void);
213 */223 */
214const BSL_UIO_Method *BSL_UIO_BufferMethod(void);224const 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_uio234 * @ingroup bsl_uio
218 * @brief Create a UIO object235 * @brief Create a UIO object
Minclude/pki/hitls_pki.h+38-17
@@ -44,6 +44,8 @@ typedef struct _HITLS_X509_StoreCtx HITLS_X509_StoreCtx;
44 44 
45typedef struct _HITLS_X509_Csr HITLS_X509_Csr;45typedef struct _HITLS_X509_Csr HITLS_X509_Csr;
46 46 
47+typedef struct _HITLS_X509_Attrs HITLS_X509_Attrs;
48+ 
47typedef struct _HITLS_PKCS12 HITLS_PKCS12;49typedef struct _HITLS_PKCS12 HITLS_PKCS12;
48 50 
49typedef struct _HITLS_PKCS12_Bag HITLS_PKCS12_Bag;51typedef 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.6132 * GeneralName types defined in RFC 5280 Section 4.2.1.6
124 * Reference: https://tools.ietf.org/html/rfc5280#section-4.2.1.6133 * 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+ 
136typedef enum {146typedef enum {
137 HITLS_X509_GN_EMAIL, // rfc822Name [1] IA5String147 HITLS_X509_GN_EMAIL, // rfc822Name [1] IA5String
138 HITLS_X509_GN_DNS, // dNSName [2] IA5String148 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 pki481 * @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 list503 * @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_MAX707 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
740int32_t HITLS_X509_CertChainBuild(HITLS_X509_StoreCtx *storeCtx, bool isWithRoot, HITLS_X509_Cert *cert,771int32_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 pki775 * @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 */
856int32_t HITLS_X509_CsrVerify(HITLS_X509_Csr *csr);882int32_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 pki885 * @ingroup pki
865 * @brief Generic function to process attribute function886 * @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.h894 * 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 
877typedef struct {898typedef struct {
878 BSL_Buffer *macPwd;899 BSL_Buffer *macPwd;
Minclude/pki/hitls_pki_errno.h+5-0
@@ -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#ifdef __cplusplus155#ifdef __cplusplus
Mpki/pkcs12/include/hitls_pkcs12_local.h+4-6
@@ -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. */
71typedef struct {71typedef 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. */
77typedef struct {77typedef struct {
78 BslCid bagId;78 BslCid bagId;
79 BSL_Buffer *bag; // encode data79 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- 
85void HITLS_PKCS12_SafeBagFree(HITLS_PKCS12_SafeBag *safeBag);83void HITLS_PKCS12_SafeBagFree(HITLS_PKCS12_SafeBag *safeBag);
86 84 
87HITLS_PKCS12_MacData *HITLS_PKCS12_MacDataNew(void);85HITLS_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.
Mpki/pkcs12/src/hitls_pkcs12_common.c+62-127
@@ -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)
282err:247err:
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 
949static int32_t EncodeCertBag(HITLS_X509_Cert *cert, uint32_t certType, uint8_t **encode, uint32_t *encodeLen)893static 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 
1521static void DeleteAttribute(HITLS_PKCS12_Bag *bag, uint32_t type)1465static 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 
1534static bool IsAttrExist(HITLS_PKCS12_Bag *bag, uint32_t type)1481static 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}
Mpki/pkcs12/src/hitls_pkcs12_util.c+15-14
@@ -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 
40void HITLS_PKCS12_SafeBagFree(HITLS_PKCS12_SafeBag *safeBag)40void 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 
Mpki/x509_cert/src/hitls_x509_cert.c+49-106
@@ -35,6 +35,7 @@
35#include "bsl_err_internal.h"35#include "bsl_err_internal.h"
36#include "hitls_csr_local.h"36#include "hitls_csr_local.h"
37#include "hitls_cert_local.h"37#include "hitls_cert_local.h"
38+#include "hitls_print_local.h"
38#include "crypt_encode.h"39#include "crypt_encode.h"
39 40 
40#define HITLS_CERT_CTX_SPECIFIC_TAG_VER 041#define HITLS_CERT_CTX_SPECIFIC_TAG_VER 0
@@ -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- 
505static int32_t GetDistinguishNameStrFromList(BSL_ASN1_List *nameList, BSL_Buffer *buff)451static 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 
550static int32_t X509_GetDistinguishNameStr(HITLS_X509_Cert *cert, BSL_Buffer *val, int32_t opt)490static 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 
730static int32_t HITLS_X509_SetCsrExt(HITLS_X509_Ext *ext, HITLS_X509_Csr *csr)670static 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}
Mpki/x509_common/include/hitls_x509_local.h+27-2
@@ -19,6 +19,7 @@
19#include <stdint.h>19#include <stdint.h>
20#include "bsl_asn1.h"20#include "bsl_asn1.h"
21#include "bsl_obj.h"21#include "bsl_obj.h"
22+#include "bsl_uio.h"
22#include "hitls_pki.h"23#include "hitls_pki.h"
23#include "crypt_types.h"24#include "crypt_types.h"
24#include "crypt_eal_pkey.h"25#include "crypt_eal_pkey.h"
@@ -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+ 
116typedef struct _HITLS_X509_ValidTime {129typedef 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 
194int32_t HITLS_X509_CheckAlg(CRYPT_EAL_PkeyCtx *pubkey, HITLS_X509_Asn1AlgId *subAlg);208int32_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 
198void HITLS_X509_AttrEntryFree(HITLS_X509_AttrEntry *attr);216void HITLS_X509_AttrEntryFree(HITLS_X509_AttrEntry *attr);
199 217 
200int32_t HITLS_X509_SignAsn1Data(CRYPT_EAL_PkeyCtx *priv, CRYPT_MD_AlgId mdId,218int32_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 
205int32_t HITLS_X509_CheckSignature(const CRYPT_EAL_PkeyCtx *pubKey, uint8_t *rawData, uint32_t rawDataLen,228int32_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+ 
208int32_t HITLS_X509_RefUp(BSL_SAL_RefCount *references, int32_t *val, int32_t valLen);233int32_t HITLS_X509_RefUp(BSL_SAL_RefCount *references, int32_t *val, int32_t valLen);
209 234 
210int32_t HITLS_X509_GetList(BslList *list, void *val, int32_t valLen);235int32_t HITLS_X509_GetList(BslList *list, void *val, int32_t valLen);
Mpki/x509_common/src/hitls_x509_attrs.c+151-52
@@ -46,6 +46,47 @@ typedef enum {
46} HITLS_X509_ATTR_IDX;46} HITLS_X509_ATTR_IDX;
47 47 
48#define HITLS_X509_ATTR_MAX_NUM 2048#define HITLS_X509_ATTR_MAX_NUM 20
49+#define HITLS_X509_ATTRS_PARSE_FLAG 0x01
50+#define HITLS_X509_ATTRS_GEN_FLAG 0x02
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
OOoohui2024年11月23日

添加注释说明freeItem场景

likedislike
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 
50int32_t HITLS_X509_EncodeObjIdentity(BslCid cid, BSL_ASN1_Buffer *asnBuff)91int32_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+ 
64void HITLS_X509_AttrEntryFree(HITLS_X509_AttrEntry *attr)134void 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
100int32_t HITLS_X509_ParseAttrsListAsnItem(uint32_t layer, BSL_ASN1_Buffer *asn, void *cbParam, BSL_ASN1_List *list)170int32_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 
203ERR:284ERR:
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}
Mpki/x509_common/src/hitls_x509_common.c+51-2
@@ -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) {
O
OOoohui2024年11月23日

添加判断algParam.algId为sm2 对外头文件HITLS_X509_SignAlgParam的注释补充下,sm2和rsapss对应的algid

likedislike
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+ 
847int32_t HITLS_X509_Sign(uint32_t mdId, const CRYPT_EAL_PkeyCtx *prvKey, const HITLS_X509_SignAlgParam *algParam,884int32_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;
Mpki/x509_common/src/hitls_x509_ctrl.c+31-0
@@ -28,6 +28,9 @@
28 28 
29#define HITLS_X509_DNNAME_MAX_NUM 10029#define HITLS_X509_DNNAME_MAX_NUM 100
30 30 
31+#define SM2_MAX_ID_BITS 65535
32+#define SM2_MAX_ID_LENGTH (SM2_MAX_ID_BITS / 8)
33+ 
31int32_t HITLS_X509_RefUp(BSL_SAL_RefCount *references, int32_t *val, int32_t valLen)34int32_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+ 
390int32_t HITLS_X509_AddDnName(BslList *list, HITLS_X509_DN *dnNames, int32_t size)403int32_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+}
Mpki/x509_common/src/hitls_x509_ext.c+4-4
@@ -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 
1314int32_t HITLS_X509_EncodeExt(uint8_t tag, BSL_ASN1_List *list, BSL_ASN1_Buffer *ext)1314int32_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 }
Mpki/x509_crl/src/hitls_x509_crl.c+19-6
@@ -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 :extensions414 return HITLS_X509_EncodeExtEntry(crlEntry->extList, &asnBuf[2]); // 2 :extensions
412 } else {415 } else {
413 asnBuf[2].tag = 0; // 2 :extensions416 asnBuf[2].tag = 0; // 2 :extensions
@@ -421,7 +424,7 @@ static int32_t X509_EncodeCrlEntry(HITLS_X509_CrlEntry *crlEntry, BSL_ASN1_Buffe
421int32_t HITLS_X509_EncodeRevokeCrlList(BSL_ASN1_List *crlList, BSL_ASN1_Buffer *revokeBuf)424int32_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 name693 // 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}
Mpki/x509_csr/include/hitls_csr_local.h+1-1
@@ -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 
38typedef enum {38typedef enum {
Mpki/x509_csr/src/hitls_x509_csr.c+36-16
@@ -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;
99ERR:99ERR:
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;
233ERR:237ERR:
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+ 
586int32_t HITLS_X509_CsrCtrl(HITLS_X509_Csr *csr, int32_t cmd, void *val, int32_t valLen)601int32_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}
Apki/x509_print/include/hitls_print_local.h+43-0
@@ -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+#ifndef HITLS_PRINT_LOCAL_H
17+#define HITLS_PRINT_LOCAL_H
18+ 
19+#include <stdint.h>
20+#include "bsl_uio.h"
21+ 
22+#ifdef __cplusplus
23+extern "C" {
24+#endif
25+ 
26+/**
27+ * Print format
28+ */
29+#define HITLS_X509_PRINT_DN_ONELINE 0
30+#define HITLS_X509_PRINT_DN_MULTILINE 1
31+#define HITLS_X509_PRINT_DN_RFC2253 2
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+#ifdef __cplusplus
41+}
42+#endif
43+#endif
Apki/x509_print/src/hitls_x509_print.c+218-0
@@ -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+#include <stdbool.h>
17+#include <stdint.h>
18+#include <string.h>
19+#include "bsl_list.h"
20+#include "bsl_uio.h"
21+#include "bsl_asn1.h"
22+#include "bsl_obj_internal.h"
23+#include "bsl_err_internal.h"
24+#include "hitls_x509_local.h"
25+#include "hitls_pki_errno.h"
26+#include "hitls_print_local.h"
27+ 
28+static uint32_t g_nameFlag = HITLS_X509_PRINT_DN_RFC2253;
29+ 
30+static char g_rfc2253Ecsape[] = {',', '+', '"', '\\', '<', '>', ';'};
31+ 
32+#define RFC2253_ESCAPE_CHAR_CNT (sizeof(g_rfc2253Ecsape) / sizeof(g_rfc2253Ecsape[0]))
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, &quote, 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, &quote, 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);
O
OOoohui2024年11月23日

需要判断返回值

likedislike
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+}
Mpki/x509_verify/include/hitls_x509_verify.h+1-0
@@ -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 
40struct _HITLS_X509_StoreCtx {41struct _HITLS_X509_StoreCtx {
Mpki/x509_verify/src/hitls_x509_verify.c+30-5
@@ -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+ 
583int32_t HITLS_X509_CheckCertCrl(HITLS_X509_StoreCtx *storeCtx, HITLS_X509_Cert *cert, HITLS_X509_Cert *parent)607int32_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 }
Mtestcode/framework/tls/include/hlt_type.h+10-10
@@ -85,16 +85,16 @@ extern "C" {
85#define ECDSA_SHA256_EE_PATH2 "ecdsa_sha256/client.der"85#define ECDSA_SHA256_EE_PATH2 "ecdsa_sha256/client.der"
86#define ECDSA_SHA256_PRIV_PATH2 "ecdsa_sha256/client.key.der"86#define ECDSA_SHA256_PRIV_PATH2 "ecdsa_sha256/client.key.der"
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 
99typedef struct ProcessSt HLT_Process;99typedef struct ProcessSt HLT_Process;
100 100 
Mtestcode/script/build_hitls.sh+2-2
@@ -58,8 +58,8 @@ build_depend_code()
58 58 
59build_hitls_code()59build_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 openHiTLS64 # Compile openHiTLS
65 cd ${HITLS_ROOT_DIR}/build65 cd ${HITLS_ROOT_DIR}/build
Mtestcode/sdv/CMakeLists.txt+125-125
@@ -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)
66endif()66endif()
67target_include_directories(TEST_INTF67target_include_directories(TEST_INTF
68- INTERFACE68+ INTERFACE
69- ${openHiTLS_SRC}/platform/Secure_C/include69+ ${openHiTLS_SRC}/platform/Secure_C/include
70- ${openHiTLS_SRC}/include70+ ${openHiTLS_SRC}/include
71- ${openHiTLS_SRC}/testcode/framework/include71+ ${openHiTLS_SRC}/testcode/framework/include
72- ${openHiTLS_SRC}/testcode/framework/crypto72+ ${openHiTLS_SRC}/testcode/framework/crypto
73- ${openHiTLS_SRC}/testcode/framework/stub73+ ${openHiTLS_SRC}/testcode/framework/stub
74- ${openHiTLS_SRC}/testcode/framework/tls/func_wrapper/include74+ ${openHiTLS_SRC}/testcode/framework/tls/func_wrapper/include
75- ${openHiTLS_SRC}/testcode/framework/tls/include75+ ${openHiTLS_SRC}/testcode/framework/tls/include
76- ${openHiTLS_SRC}/testcode/framework/tls/callback/include76+ ${openHiTLS_SRC}/testcode/framework/tls/callback/include
77- ${openHiTLS_SRC}/testcode/framework/tls/base/include77+ ${openHiTLS_SRC}/testcode/framework/tls/base/include
78- ${openHiTLS_SRC}/testcode/framework/tls/resource/include78+ ${openHiTLS_SRC}/testcode/framework/tls/resource/include
79- ${openHiTLS_SRC}/testcode/framework/tls/rpc/include79+ ${openHiTLS_SRC}/testcode/framework/tls/rpc/include
80- ${openHiTLS_SRC}/testcode/framework/tls/process/include80+ ${openHiTLS_SRC}/testcode/framework/tls/process/include
81- ${openHiTLS_SRC}/testcode/framework/tls/crypt/include81+ ${openHiTLS_SRC}/testcode/framework/tls/crypt/include
82- ${openHiTLS_SRC}/testcode/framework/tls/transfer/include82+ ${openHiTLS_SRC}/testcode/framework/tls/transfer/include
83- ${openHiTLS_SRC}/testcode/framework/tls/frame/src83+ ${openHiTLS_SRC}/testcode/framework/tls/frame/src
84- ${openHiTLS_SRC}/testcode/framework/tls/msg/include84+ ${openHiTLS_SRC}/testcode/framework/tls/msg/include
85- ${openHiTLS_SRC}/testcode/framework/tls/io/include85+ ${openHiTLS_SRC}/testcode/framework/tls/io/include
86- ${openHiTLS_SRC}/testcode/framework/tls/io/src86+ ${openHiTLS_SRC}/testcode/framework/tls/io/src
87- ${openHiTLS_SRC}/bsl/sal/include87+ ${openHiTLS_SRC}/bsl/sal/include
88- ${openHiTLS_SRC}/bsl/tlv/include88+ ${openHiTLS_SRC}/bsl/tlv/include
89- ${openHiTLS_SRC}/include/bsl89+ ${openHiTLS_SRC}/include/bsl
90- ${openHiTLS_SRC}/include/tls90+ ${openHiTLS_SRC}/include/tls
91- ${openHiTLS_SRC}/bsl/log/include91+ ${openHiTLS_SRC}/bsl/log/include
92- ${openHiTLS_SRC}/bsl/hash/include92+ ${openHiTLS_SRC}/bsl/hash/include
93- ${openHiTLS_SRC}/bsl/base64/include93+ ${openHiTLS_SRC}/bsl/base64/include
94- ${openHiTLS_SRC}/bsl/pem/include94+ ${openHiTLS_SRC}/bsl/pem/include
95- ${openHiTLS_SRC}/bsl/list/include95+ ${openHiTLS_SRC}/bsl/list/include
96- ${openHiTLS_SRC}/bsl/usrdata/include96+ ${openHiTLS_SRC}/bsl/usrdata/include
97- ${openHiTLS_SRC}/bsl/obj/include97+ ${openHiTLS_SRC}/bsl/obj/include
98- ${openHiTLS_SRC}/bsl/include98+ ${openHiTLS_SRC}/bsl/include
99- ${openHiTLS_SRC}/bsl/sal/src99+ ${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/include104+ ${openHiTLS_SRC}/crypto/sm3/include
105- ${openHiTLS_SRC}/crypto/sha3/include105+ ${openHiTLS_SRC}/crypto/sha3/include
106- ${openHiTLS_SRC}/crypto/sha2/include106+ ${openHiTLS_SRC}/crypto/sha2/include
107- ${openHiTLS_SRC}/crypto/sha2/src107+ ${openHiTLS_SRC}/crypto/sha2/src
108- ${openHiTLS_SRC}/crypto/sha1/include108+ ${openHiTLS_SRC}/crypto/sha1/include
109- ${openHiTLS_SRC}/crypto/md5/include109+ ${openHiTLS_SRC}/crypto/md5/include
110- ${openHiTLS_SRC}/crypto/pbkdf2/include110+ ${openHiTLS_SRC}/crypto/pbkdf2/include
111- ${openHiTLS_SRC}/crypto/provider/include111+ ${openHiTLS_SRC}/crypto/provider/include
112- ${openHiTLS_SRC}/crypto/provider/src/mgr112+ ${openHiTLS_SRC}/crypto/provider/src/mgr
113- ${openHiTLS_SRC}/crypto/hkdf/include113+ ${openHiTLS_SRC}/crypto/hkdf/include
114- ${openHiTLS_SRC}/crypto/kdf/include114+ ${openHiTLS_SRC}/crypto/kdf/include
115- ${openHiTLS_SRC}/crypto/scrypt/include115+ ${openHiTLS_SRC}/crypto/scrypt/include
116- ${openHiTLS_SRC}/crypto/hmac/include116+ ${openHiTLS_SRC}/crypto/hmac/include
117- ${openHiTLS_SRC}/crypto/aes/include117+ ${openHiTLS_SRC}/crypto/aes/include
118- ${openHiTLS_SRC}/crypto/sm4/include118+ ${openHiTLS_SRC}/crypto/sm4/include
119- ${openHiTLS_SRC}/crypto/drbg/include119+ ${openHiTLS_SRC}/crypto/drbg/include
120- ${openHiTLS_SRC}/crypto/drbg/src120+ ${openHiTLS_SRC}/crypto/drbg/src
121- ${openHiTLS_SRC}/crypto/include121+ ${openHiTLS_SRC}/crypto/include
122- ${openHiTLS_SRC}/crypto/rsa/include122+ ${openHiTLS_SRC}/crypto/rsa/include
123- ${openHiTLS_SRC}/crypto/rsa/src123+ ${openHiTLS_SRC}/crypto/rsa/src
124- ${openHiTLS_SRC}/crypto/eal/src124+ ${openHiTLS_SRC}/crypto/eal/src
125- ${openHiTLS_SRC}/crypto/eal/include125+ ${openHiTLS_SRC}/crypto/eal/include
126- ${openHiTLS_SRC}/crypto/ealinit/include126+ ${openHiTLS_SRC}/crypto/ealinit/include
127- ${openHiTLS_SRC}/crypto/ealinit/src127+ ${openHiTLS_SRC}/crypto/ealinit/src
128- ${openHiTLS_SRC}/crypto/dsa/src128+ ${openHiTLS_SRC}/crypto/dsa/src
129- ${openHiTLS_SRC}/crypto/curve25519/src129+ ${openHiTLS_SRC}/crypto/curve25519/src
130- ${openHiTLS_SRC}/crypto/curve25519/include130+ ${openHiTLS_SRC}/crypto/curve25519/include
131- ${openHiTLS_SRC}/crypto/chacha20/include131+ ${openHiTLS_SRC}/crypto/chacha20/include
132- ${openHiTLS_SRC}/crypto/dsa/include132+ ${openHiTLS_SRC}/crypto/dsa/include
133- ${openHiTLS_SRC}/crypto/dsa/src133+ ${openHiTLS_SRC}/crypto/dsa/src
134- ${openHiTLS_SRC}/crypto/dh/include134+ ${openHiTLS_SRC}/crypto/dh/include
135- ${openHiTLS_SRC}/crypto/dh/src135+ ${openHiTLS_SRC}/crypto/dh/src
136- ${openHiTLS_SRC}/crypto/ecc/include136+ ${openHiTLS_SRC}/crypto/ecc/include
137- ${openHiTLS_SRC}/crypto/ecc/src137+ ${openHiTLS_SRC}/crypto/ecc/src
138- ${openHiTLS_SRC}/crypto/ecdh/include138+ ${openHiTLS_SRC}/crypto/ecdh/include
139- ${openHiTLS_SRC}/crypto/ecdsa/include139+ ${openHiTLS_SRC}/crypto/ecdsa/include
140- ${openHiTLS_SRC}/crypto/modes/include140+ ${openHiTLS_SRC}/crypto/modes/include
141- ${openHiTLS_SRC}/crypto/modes/src141+ ${openHiTLS_SRC}/crypto/modes/src
142- ${openHiTLS_SRC}/crypto/ecdh/include142+ ${openHiTLS_SRC}/crypto/ecdh/include
143- ${openHiTLS_SRC}/crypto/ecdsa/include143+ ${openHiTLS_SRC}/crypto/ecdsa/include
144- ${openHiTLS_SRC}/crypto/sm2/include144+ ${openHiTLS_SRC}/crypto/sm2/include
145- ${openHiTLS_SRC}/crypto/sm2/src145+ ${openHiTLS_SRC}/crypto/sm2/src
146- ${openHiTLS_SRC}/crypto/paillier/include146+ ${openHiTLS_SRC}/crypto/paillier/include
147- ${openHiTLS_SRC}/crypto/paillier/src147+ ${openHiTLS_SRC}/crypto/paillier/src
148- ${openHiTLS_SRC}/crypto/encode/include148+ ${openHiTLS_SRC}/crypto/encode/include
149- ${openHiTLS_SRC}/bsl/err/include149+ ${openHiTLS_SRC}/bsl/err/include
150- ${openHiTLS_SRC}/bsl/err/src150+ ${openHiTLS_SRC}/bsl/err/src
151- ${openHiTLS_SRC}/include/tls151+ ${openHiTLS_SRC}/include/tls
152- ${openHiTLS_SRC}/tls/include152+ ${openHiTLS_SRC}/tls/include
153- ${openHiTLS_SRC}/tls/cert/include153+ ${openHiTLS_SRC}/tls/cert/include
154- ${openHiTLS_SRC}/tls/cm/include154+ ${openHiTLS_SRC}/tls/cm/include
155- ${openHiTLS_SRC}/tls/config/include155+ ${openHiTLS_SRC}/tls/config/include
156- ${openHiTLS_SRC}/tls/crypt/include156+ ${openHiTLS_SRC}/tls/crypt/include
157- ${openHiTLS_SRC}/tls/app/include157+ ${openHiTLS_SRC}/tls/app/include
158- ${openHiTLS_SRC}/tls/app/src158+ ${openHiTLS_SRC}/tls/app/src
159- ${openHiTLS_SRC}/tls/ccs/include159+ ${openHiTLS_SRC}/tls/ccs/include
160- ${openHiTLS_SRC}/tls/alert/include160+ ${openHiTLS_SRC}/tls/alert/include
161- ${openHiTLS_SRC}/bsl/uio/include161+ ${openHiTLS_SRC}/bsl/uio/include
162- ${openHiTLS_SRC}/tls/record/include162+ ${openHiTLS_SRC}/tls/record/include
163- ${openHiTLS_SRC}/tls/record/src163+ ${openHiTLS_SRC}/tls/record/src
164- ${openHiTLS_SRC}/bsl/uio/src164+ ${openHiTLS_SRC}/bsl/uio/src
165- ${openHiTLS_SRC}/bsl/asn1/include165+ ${openHiTLS_SRC}/bsl/asn1/include
166- ${openHiTLS_SRC}/include/pki166+ ${openHiTLS_SRC}/include/pki
167- ${openHiTLS_SRC}/pki/x509_cert/include167+ ${openHiTLS_SRC}/pki/x509_cert/include
168- ${openHiTLS_SRC}/pki/x509_csr/include168+ ${openHiTLS_SRC}/pki/x509_csr/include
169- ${openHiTLS_SRC}/pki/x509_common/include169+ ${openHiTLS_SRC}/pki/x509_common/include
170- ${openHiTLS_SRC}/pki/x509_crl/include170+ ${openHiTLS_SRC}/pki/x509_crl/include
171- ${openHiTLS_SRC}/pki/pkcs12/include171+ ${openHiTLS_SRC}/pki/pkcs12/include
172- ${openHiTLS_SRC}/pki/cms/include172+ ${openHiTLS_SRC}/pki/cms/include
173- ${openHiTLS_SRC}/pki/x509_verify/include173+ ${openHiTLS_SRC}/pki/x509_verify/include
174- ${openHiTLS_SRC}/config/macro_config174+ ${openHiTLS_SRC}/pki/x509_print/include
175- ${openHiTLS_SRC}/tls/handshake/include175+ ${openHiTLS_SRC}/config/macro_config
176- ${openHiTLS_SRC}/tls/handshake/common/include176+ ${openHiTLS_SRC}/tls/handshake/include
177- ${openHiTLS_SRC}/tls/handshake/cookie/include177+ ${openHiTLS_SRC}/tls/handshake/common/include
178- ${openHiTLS_SRC}/tls/handshake/parse/include178+ ${openHiTLS_SRC}/tls/handshake/cookie/include
179- ${openHiTLS_SRC}/tls/handshake/pack/include179+ ${openHiTLS_SRC}/tls/handshake/parse/include
180- ${openHiTLS_SRC}/tls/handshake/pack/src180+ ${openHiTLS_SRC}/tls/handshake/pack/include
181- ${openHiTLS_SRC}/tls/handshake/send/src181+ ${openHiTLS_SRC}/tls/handshake/pack/src
182- ${openHiTLS_SRC}/tls/handshake/recv/src182+ ${openHiTLS_SRC}/tls/handshake/send/src
183- ${openHiTLS_SRC}/tls/handshake/recv/include183+ ${openHiTLS_SRC}/tls/handshake/recv/src
184- ${openHiTLS_SRC}/tls/feature/session/src184+ ${openHiTLS_SRC}/tls/handshake/recv/include
185- ${openHiTLS_SRC}/tls/cert/include185+ ${openHiTLS_SRC}/tls/feature/session/src
186- ${openHiTLS_SRC}/tls/cert/cert_adapt186+ ${openHiTLS_SRC}/tls/cert/include
187- ${openHiTLS_SRC}/tls/cert/hitls_x509_adapt187+ ${openHiTLS_SRC}/tls/cert/cert_adapt
188- ${openHiTLS_SRC}/tls/crypt/crypt_self188+ ${openHiTLS_SRC}/tls/cert/hitls_x509_adapt
189- ${openHiTLS_SRC}/config/macro_config189+ ${openHiTLS_SRC}/tls/crypt/crypt_self
190- ${openHiTLS_SRC}/tls/handshake/parse/src190+ ${openHiTLS_SRC}/config/macro_config
191- ${openHiTLS_SRC}/config/macro_config191+ ${openHiTLS_SRC}/tls/handshake/parse/src
192-)192+ ${openHiTLS_SRC}/config/macro_config)
193 193 
194add_library(TESTCASE_PRE ${TEST_SOURCE})194add_library(TESTCASE_PRE ${TEST_SOURCE})
195target_link_libraries(TESTCASE_PRE PRIVATE TEST_INTF)195target_link_libraries(TESTCASE_PRE PRIVATE TEST_INTF)
Mtestcode/sdv/testcase/bsl/uio/test_suite_sdv_uio.c+106-1
@@ -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 */
Mtestcode/sdv/testcase/bsl/uio/test_suite_sdv_uio.data+10-1
@@ -65,4 +65,13 @@ SDV_BSL_UIO_SCTP_API_TC001
65SDV_BSL_UIO_SCTP_API_TC001:65SDV_BSL_UIO_SCTP_API_TC001:
66 66 
67SDV_BSL_UIO_BUFFER_RESET_TC00167SDV_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:
Mtestcode/sdv/testcase/pki/cert/test_suite_sdv_x509_cert.c+10-9
@@ -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;
849exit:849exit:
@@ -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);
Mtestcode/sdv/testcase/pki/cert/test_suite_sdv_x509_cert.data+5-2
@@ -3105,13 +3105,13 @@ SDV_X509_CERT_CTRL_FUNC_TC001 with key usage sha256 rsa v3 ca
3105SDV_X509_CERT_CTRL_FUNC_TC001:"../testdata/cert/asn1/cawithkeyusage.der":852:BSL_CID_SHA256WITHRSAENCRYPTION:0:1:03105SDV_X509_CERT_CTRL_FUNC_TC001:"../testdata/cert/asn1/cawithkeyusage.der":852:BSL_CID_SHA256WITHRSAENCRYPTION:0:1:0
3106 3106 
3107SDV_X509_CERT_CTRL_FUNC_TC002 parse ecc p384 v3 ca cert3107SDV_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 
3110SDV_X509_CERT_CTRL_FUNC_TC002 parse rsa pss v3 ca cert, any is null3110SDV_X509_CERT_CTRL_FUNC_TC002 parse rsa pss v3 ca cert, any is null
3111SDV_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"3111SDV_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 
3113SDV_X509_CERT_CTRL_FUNC_TC002 with key usage sha256 rsa v3 ca3113SDV_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 
3116SDV_X509_CERT_DUP_FUNC_TC001 parse ecc p384 v3 ca cert3116SDV_X509_CERT_DUP_FUNC_TC001 parse ecc p384 v3 ca cert
3117SDV_X509_CERT_DUP_FUNC_TC001:"../testdata/cert/asn1/nist384ca.crt":BSL_CID_ECDSAWITHSHA256:0:0:03117SDV_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
3140SDV_X509_MUL_CERT_PARSE_FUNC_TC001 with 3 unknown(pem) certs (with redundant symbols)3140SDV_X509_MUL_CERT_PARSE_FUNC_TC001 with 3 unknown(pem) certs (with redundant symbols)
3141SDV_X509_MUL_CERT_PARSE_FUNC_TC001:BSL_FORMAT_UNKNOWN:"../testdata/cert/sm2/chain-red.pem":33141SDV_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+ 
3143SDV_X509_CERT_SET_VERIOSN_FUNC_TC0013146SDV_X509_CERT_SET_VERIOSN_FUNC_TC001
3144SDV_X509_CERT_SET_VERIOSN_FUNC_TC001:3147SDV_X509_CERT_SET_VERIOSN_FUNC_TC001:
3145 3148 
Mtestcode/sdv/testcase/pki/common/test_suite_sdv_common.c+112-6
@@ -26,11 +26,14 @@
26#include "hitls_crl_local.h"26#include "hitls_crl_local.h"
27#include "bsl_init.h"27#include "bsl_init.h"
28#include "bsl_obj_internal.h"28#include "bsl_obj_internal.h"
29+#include "bsl_uio.h"
29#include "crypt_errno.h"30#include "crypt_errno.h"
30#include "crypt_eal_encode.h"31#include "crypt_eal_encode.h"
31#include "crypt_eal_rand.h"32#include "crypt_eal_rand.h"
32#include "hitls_x509_local.h"33#include "hitls_x509_local.h"
34+#include "hitls_print_local.h"
33 35 
36+#define MAX_BUFF_SIZE 4096
34/* END_HEADER */37/* END_HEADER */
35 38 
36static void FreeListData(void *data)39static 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 san732 // 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 */
Mtestcode/sdv/testcase/pki/common/test_suite_sdv_common.data+40-1
@@ -275,4 +275,43 @@ SDV_X509_SIGN_Func_TC001: [fail: mdId must be sm3] sm2, mdId=sha256
275SDV_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_SIGNID275SDV_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 
277SDV_X509_SIGN_Func_TC002277SDV_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"
Mtestcode/sdv/testcase/pki/crl/test_suite_sdv_x509_crl.c+26-17
@@ -29,7 +29,7 @@
29#include "hitls_crl_local.h"29#include "hitls_crl_local.h"
30#include "hitls_cert_local.h"30#include "hitls_cert_local.h"
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 parameter419 // 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 command423 // 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 name585 // 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 certificate991 // 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 period997 // 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 key1042 // 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);
1074exit:1083exit:
1075 HITLS_X509_CrlFree(crl);1084 HITLS_X509_CrlFree(crl);
Mtestcode/sdv/testcase/pki/crl/test_suite_sdv_x509_crl.data+11-7
@@ -272,22 +272,26 @@ SDV_X509_CRL_Sign_RevokedCheck_TC001
272SDV_X509_CRL_Sign_RevokedCheck_TC001:272SDV_X509_CRL_Sign_RevokedCheck_TC001:
273 273 
274SDV_X509_CRL_Sign_Func_TC001 v1 cert rsa_p1_v1.crt.der274SDV_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 
277SDV_X509_CRL_Sign_Func_TC001 v3 cert rsa_p8.crt.der277SDV_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 
280SDV_X509_CRL_Sign_Func_TC001 v3 cert sm2.crt.der280SDV_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 
283SDV_X509_CRL_Sign_Func_TC001 v3 cert ecdsa_sha384.crt.der283SDV_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 
286SDV_X509_CRL_Sign_Func_TC001 v3 cert rsa_pss.crt.der286SDV_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 
289SDV_X509_CRL_Sign_Func_TC001 v3 cert rsa -- rsa_pss.crt.der289SDV_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 
292SDV_X509_CRL_Sign_Func_TC001 v2 cert rsa -- rsa_pss-aki.crt.der292SDV_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+ 
Mtestcode/sdv/testcase/pki/csr/test_suite_sdv_x509_csr.c+83-88
@@ -31,6 +31,8 @@
31/* END_HEADER */31/* END_HEADER */
32#define MAX_DATA_LEN 12832#define MAX_DATA_LEN 128
33 33 
34+static char g_sm2DefaultUserid[] = "1234567812345678";
35+ 
34void *TestMallocErr(uint32_t len)36void *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 */
135void SDV_X509_CSR_PARSE_FUNC_TC001(int format, char *path, int expRawDataLen, int expSignAlg, Hex *expectedSign,137void 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:
358static void ResetCsrNameList(HITLS_X509_Csr *raw)364static 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 
369static void ResetCsrAttrsList(HITLS_X509_Csr *raw)375static 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 
380static int32_t SetCsr(HITLS_X509_Csr *raw, HITLS_X509_Csr *new)387static 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 */
414void SDV_X509_CSR_GEN_FUNC_TC002(int csrFormat, char *csrPath, int keyFormat, char *privPath, int keyType, int pad,421void 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:
710void SDV_X509_CSR_AttrCtrl_API_TC001(void)724void 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 param739 // 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 failed743 // 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 // success748 // 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 // repeat751 // 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 attr754 // 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 found760 // 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 
769exit:767exit:
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 ext791 // 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 attr795 // 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 check799 // 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 
806exit:803exit:
@@ -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 attr827 // 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 failed832 // 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 attr836 // 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 failed839 // 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 
847exit:842exit:
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_FLAG857 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 
870exit:865exit:
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
Mtestcode/sdv/testcase/pki/csr/test_suite_sdv_x509_csr.data+21-9
@@ -11,16 +11,22 @@ SDV_X509_CSR_PARSE_API_TC002
11SDV_X509_CSR_PARSE_API_TC002:11SDV_X509_CSR_PARSE_API_TC002:
12 12 
13SDV_X509_CSR_PARSE_FUNC_TC001 #rsa sha256 csr without attribute13SDV_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":014+SDV_X509_CSR_PARSE_FUNC_TC001:BSL_FORMAT_PEM:"../testdata/cert/pem/csr/csr.pem":881:BSL_CID_SHA256WITHRSAENCRYPTION:"3808399e8e2fc4830067034e41ee13b77dc4e21e8a274c536254d43c7193b89987a2401f18dd830c147b0d270dd3d1ef8bbce2e1b379ca2d5fd301c8086609f961c0df9a4d0727b71635478e2e026784d1624bac2616408287876ed823fdb2f663075fdb2b4ed2fe1a0aeceecd562f37058ad0e951607807ef5af8a189d1f6d63e98cd7310f0c2348488ac331e1a6fdcf753536782e7fbafbb50685389acfff25fb6f6d6953c07a9fe09e0ffc565e78ec284dacb97742b9a960ecf6111ec4f9bdc1152709cf0bef13c4958bc80bd9a980c16fc09df130ea44d6a021ed649e0254d7eb01345afc600b0860104c48490bd131cc2c5e873956d86a53f13c7dcf65b":0:0
15 15 
16SDV_X509_CSR_PARSE_FUNC_TC001 #ecdsa sha256 csr pem without attribute16SDV_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":017+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 
19SDV_X509_CSR_PARSE_FUNC_TC001 #ecdsa sha256 csr asn1 without attribute19SDV_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":020+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 attribute22+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":023+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 
25SDV_X509_CSR_PARSE_FUNC_TC00231SDV_X509_CSR_PARSE_FUNC_TC002
26SDV_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"32SDV_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
76SDV_X509_CSR_GEN_FUNC_TC001: ec asn1 to pem82SDV_X509_CSR_GEN_FUNC_TC001: ec asn1 to pem
77SDV_X509_CSR_GEN_FUNC_TC001:BSL_FORMAT_ASN1:"../testdata/cert/asn1/ecdsa_sha_csr/ec_app256SHA256.csr.der":BSL_FORMAT_PEM83SDV_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_TC00285+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:086+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_TC00288+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:089+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 
85SDV_X509_CSR_GEN_PROCESS_TC001:97SDV_X509_CSR_GEN_PROCESS_TC001:
86SDV_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_UNENCRYPT98SDV_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
Mtestcode/sdv/testcase/pki/pkcs12/test_suite_sdv_pkcs12.c+20-26
@@ -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- 
48static void BagFree(void *value)40static 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 */
140void SDV_PKCS12_PARSE_SAFEBAGS_OF_ATTRIBUTE_TC001(Hex *buff, Hex *friendlyName, Hex *localKeyId)132void 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 }
182exit:174exit:
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 */
192void SDV_PKCS12_PARSE_SAFEBAGS_OF_ATTRIBUTE_TC002(Hex *buff)183void 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);
211exit:202exit:
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 
1412exit:1406exit:
Mtestcode/sdv/testcase/pki/verify/test_suite_sdv_x509_vfy.c+35-3
@@ -136,7 +136,6 @@ exit:
136}136}
137/* END_CASE */137/* END_CASE */
138 138 
139- 
140/* BEGIN_CASE */139/* BEGIN_CASE */
141void SDV_X509_STORE_VFY_CRL_FUNC_TC001(int type, int expResult, char *path1, char *path2, char *path3,140void 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 
238static int32_t HITLS_AddCertToStoreTest(char *path, HITLS_X509_StoreCtx *store, HITLS_X509_Cert **cert)237static 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 */
258void SDV_X509_BUILD_CERT_CHAIN_FUNC_TC001(char *rootPath, char *caPath, char *cert, char *crlPath)256void 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+ 
340static int32_t X509_AddCertToChainTest(HITLS_X509_List *chain, HITLS_X509_Cert *cert)339static 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 */
Mtestcode/sdv/testcase/pki/verify/test_suite_sdv_x509_vfy.data+5-0
@@ -71,3 +71,8 @@ SDV_X509_BUILD_CERT_CHAIN_FUNC_TC009:
71SDV_X509_BUILD_CERT_CHAIN_WITH_ROOT_FUNC_TC00171SDV_X509_BUILD_CERT_CHAIN_WITH_ROOT_FUNC_TC001
72SDV_X509_BUILD_CERT_CHAIN_WITH_ROOT_FUNC_TC001:72SDV_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
Atestcode/testdata/cert/pem/csr/sm2/ca.csr+9-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-----
Atestcode/testdata/cert/pem/csr/sm2/ca.key+5-0
@@ -0,0 +1,5 @@
1+-----BEGIN PRIVATE KEY-----
2+MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQgfNy8gAy1B+ADWXNp
3+wx3+IT/Pk3o9WWo6yU1qvnKWR9uhRANCAASkblPOGVS4nxe6sWYAcq1cpx8k3biL
4+7F7NMYx4HBYYs4TFgOoaoRrd7FBmR1KvJZoMnDB5FPe20JODWIRRmhdC
5+-----END PRIVATE KEY-----
Atestcode/testdata/cert/pem/csr/sm2_with_userid/ca.csr+9-0
@@ -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-----
Atestcode/testdata/cert/pem/csr/sm2_with_userid/ca.key+5-0
@@ -0,0 +1,5 @@
1+-----BEGIN PRIVATE KEY-----
2+MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQg2jCtrPzCI7eEZ+v8
3+uPoW2qdoflcXKa5dOM3nn5H4VV6hRANCAAT4o2nLHaZP72O6FKze7ExUqGb1oD1w
4+NOwaH/lZ933cFmrEaApNZsjCFUuqHt7+qwgvX6efBJdxp3biwGbv1TIb
5+-----END PRIVATE KEY-----
Atestcode/testdata/cert/pem/print/rfc2253_dntest.crt+21-0
@@ -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-----
Atestcode/testdata/cert/pem/print/rfc2253_dntest1.crt+23-0
@@ -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-----
Atestcode/testdata/cert/pem/print/rfc2253_dntest2.crt+0-0
Binary files do not support preview
Atestcode/testdata/cert/pem/print/rfc2253_dntest3.crt+21-0
@@ -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-----
Atestcode/testdata/cert/sm2_with_userid/ca.crt+15-0
@@ -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-----
Atestcode/testdata/cert/sm2_with_userid/ca.key+5-0
@@ -0,0 +1,5 @@
1+-----BEGIN PRIVATE KEY-----
2+MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQg2kUOXPGwhEsv3o7h
3+2RwFNtrmWg1kqasTHi/LLH5dmj6hRANCAAQDpkiQsEW8nDG9uNqk08YZXOoAoIsN
4+cOXNg+sm2HDraIjY2bLRo4gzfDqxgxAeth871qvRfmHyP5p4l/iqiAnw
5+-----END PRIVATE KEY-----
Atestcode/testdata/cert/sm2_with_userid/inter.crt+14-0
@@ -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-----
Atestcode/testdata/cert/sm2_with_userid/sign.crt+14-0
@@ -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-----
Atestcode/testdata/cert/sm2_with_userid/sign.key+5-0
@@ -0,0 +1,5 @@
1+-----BEGIN PRIVATE KEY-----
2+MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQg/HnYZmznUQOOrfeb
3+LpNt/0PSgXi1VdteMdSmuggJgdGhRANCAATKn9tauiXtEZBpB9JoyBFAaBIE1Xw+
4+7ozomXuNgs2VcxDc1tzetTfp/u16KsrLbbKZWWFadNA4LvcA/64xmneu
5+-----END PRIVATE KEY-----
Atestcode/testdata/tls/certificate/der/sm2_with_userid/ca.crt+15-0
@@ -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-----
Atestcode/testdata/tls/certificate/der/sm2_with_userid/ca.der+0-0
Binary files do not support preview
Atestcode/testdata/tls/certificate/der/sm2_with_userid/ca.key+5-0
@@ -0,0 +1,5 @@
1+-----BEGIN PRIVATE KEY-----
2+MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQg2kUOXPGwhEsv3o7h
3+2RwFNtrmWg1kqasTHi/LLH5dmj6hRANCAAQDpkiQsEW8nDG9uNqk08YZXOoAoIsN
4+cOXNg+sm2HDraIjY2bLRo4gzfDqxgxAeth871qvRfmHyP5p4l/iqiAnw
5+-----END PRIVATE KEY-----
Atestcode/testdata/tls/certificate/der/sm2_with_userid/ca.key.der+0-0
Binary files do not support preview
Atestcode/testdata/tls/certificate/der/sm2_with_userid/enc.crt+49-0
@@ -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-----
Atestcode/testdata/tls/certificate/der/sm2_with_userid/enc.der+0-0
Binary files do not support preview
Atestcode/testdata/tls/certificate/der/sm2_with_userid/enc.key+8-0
@@ -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-----
Atestcode/testdata/tls/certificate/der/sm2_with_userid/enc.key.der+0-0
Binary files do not support preview
Atestcode/testdata/tls/certificate/der/sm2_with_userid/enc22.crt+14-0
@@ -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-----
Atestcode/testdata/tls/certificate/der/sm2_with_userid/enc22.der+0-0
Binary files do not support preview
Atestcode/testdata/tls/certificate/der/sm2_with_userid/enc22.key+8-0
@@ -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-----
Atestcode/testdata/tls/certificate/der/sm2_with_userid/enc22.key.der+0-0
Binary files do not support preview
Atestcode/testdata/tls/certificate/der/sm2_with_userid/inter.crt+14-0
@@ -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-----
Atestcode/testdata/tls/certificate/der/sm2_with_userid/inter.der+0-0
Binary files do not support preview
Atestcode/testdata/tls/certificate/der/sm2_with_userid/sign.crt+49-0
@@ -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-----
Atestcode/testdata/tls/certificate/der/sm2_with_userid/sign.der+0-0
Binary files do not support preview
Atestcode/testdata/tls/certificate/der/sm2_with_userid/sign.key+8-0
@@ -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-----
Atestcode/testdata/tls/certificate/der/sm2_with_userid/sign.key.der+0-0
Binary files do not support preview
Atestcode/testdata/tls/certificate/der/sm2_with_userid/sign22.crt+14-0
@@ -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-----
Atestcode/testdata/tls/certificate/der/sm2_with_userid/sign22.der+0-0
Binary files do not support preview
Atestcode/testdata/tls/certificate/der/sm2_with_userid/sign22.key+8-0
@@ -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-----
Atestcode/testdata/tls/certificate/der/sm2_with_userid/sign22.key.der+0-0
Binary files do not support preview
Mtls/cert/hitls_x509_adapt/hitls_x509_cert_chain.c+10-0
@@ -15,6 +15,7 @@
15#include "hitls_build.h"15#include "hitls_build.h"
16#ifdef HITLS_TLS_CALLBACK_CERT16#ifdef HITLS_TLS_CALLBACK_CERT
17#include <stdint.h>17#include <stdint.h>
18+#include <string.h>
18#include "bsl_sal.h"19#include "bsl_sal.h"
19#include "bsl_err_internal.h"20#include "bsl_err_internal.h"
20#include "hitls_cert_type.h"21#include "hitls_cert_type.h"
@@ -23,6 +24,7 @@
23#include "bsl_list.h"24#include "bsl_list.h"
24#include "hitls_error.h"25#include "hitls_error.h"
25 26 
27+ 
26static int32_t BuildArrayFromList(HITLS_X509_List *list, HITLS_CERT_X509 **listArray, uint32_t *num)28static 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 *
87int32_t HITLS_X509_Adapt_VerifyCertChain(HITLS_Ctx *ctx, HITLS_CERT_Store *store, HITLS_CERT_X509 **list, uint32_t num)89int32_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);