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 /* BEGIN_HEADER */
16
17 #include <stdio.h>
18 #include <stdint.h>
19 #include <stdlib.h>
20 #include <string.h>
21 #include "securec.h"
22 #include "bsl_errno.h"
23 #include "bsl_sal.h"
24 #include "bsl_pem_internal.h"
25
26 /* END_HEADER */
27
28 /* BEGIN_CASE */
SDV_BSL_PEM_ISPEM_FUNC_TC001(char * data,int expflag)29 void SDV_BSL_PEM_ISPEM_FUNC_TC001(char *data, int expflag)
30 {
31 char *encode = data;
32 uint32_t encodeLen = strlen(data);
33 bool isPem = BSL_PEM_IsPemFormat(encode, encodeLen);
34 ASSERT_TRUE(isPem == (bool)expflag);
35 EXIT:
36 return;
37 }
38 /* END_CASE */
39
40 /* BEGIN_CASE */
SDV_BSL_PEM_ISPEM_FUNC_TC002(void)41 void SDV_BSL_PEM_ISPEM_FUNC_TC002(void)
42 {
43 char *aa = "aaaaaaaa";
44 ASSERT_TRUE(BSL_PEM_IsPemFormat(NULL, 0) == false);
45 ASSERT_TRUE(BSL_PEM_IsPemFormat(aa, strlen(aa)) == false);
46 EXIT:
47 return;
48 }
49 /* END_CASE */
50
51 /* BEGIN_CASE */
SDV_BSL_PEM_PARSE_FUNC_TC001(char * encode,char * head,char * tail,int expRes)52 void SDV_BSL_PEM_PARSE_FUNC_TC001(char *encode, char *head, char *tail, int expRes)
53 {
54 BSL_PEM_Symbol sym = {head, tail};
55 char *pemdata = encode;
56 uint32_t len = strlen(encode);
57 uint8_t *asn1Encode = NULL;
58 uint32_t asn1Len;
59 TestMemInit();
60 ASSERT_EQ(BSL_PEM_DecodePemToAsn1(&pemdata, &len, &sym, &asn1Encode, &asn1Len), expRes);
61 EXIT:
62 BSL_SAL_Free(asn1Encode);
63 return;
64 }
65 /* END_CASE */
66
67 /* BEGIN_CASE */
SDV_BSL_PEM_PARSE_FUNC_TC002(void)68 void SDV_BSL_PEM_PARSE_FUNC_TC002(void)
69 {
70 BSL_PEM_Symbol sym = {BSL_PEM_EC_PRI_KEY_BEGIN_STR, BSL_PEM_EC_PRI_KEY_END_STR};
71 char *pemdata = "-----BEGIN EC PRIVATE KEY-----\n"
72 "MHcCAQEEIAadtjyegBKXLH9xvNDvH24j7cn3PsaNSXSMIVmvJZM7oAoGCCqGSM49\n"
73 "AwEHoUQDQgAEPFKNDGyE7HES1hPd8mXydX4QunGvk37ISPOhXJStzxTt8sWdcEtV\n"
74 "gaXhArNx9Dz8pKIhoGcviy8xML3wPICv9Q==\n"
75 "-----END EC PRIVATE KEY-----\n"
76 "-----BEGIN EC PRIVATE KEY-----\n"
77 "MHcCAQEEIAadtjyegBKXLH9xvNDvH24j7cn3PsaNSXSMIVmvJZM7oAoGCCqGSM49\n"
78 "AwEHoUQDQgAEPFKNDGyE7HES1hPd8mXydX4QunGvk37ISPOhXJStzxTt8sWdcEtV\n"
79 "gaXhArNx9Dz8pKIhoGcviy8xML3wPICv9Q==\n"
80 "-----END EC PRIVATE KEY-----\n";
81 int32_t len = strlen(pemdata);
82 char *next = pemdata;
83 uint32_t nextLen = len;
84 uint8_t *asn1Encode = NULL;
85 uint32_t asn1Len;
86 TestMemInit();
87 ASSERT_TRUE(BSL_PEM_DecodePemToAsn1(&next, &nextLen, &sym, &asn1Encode, &asn1Len) == BSL_SUCCESS);
88 BSL_SAL_Free(asn1Encode);
89 ASSERT_TRUE(BSL_PEM_DecodePemToAsn1(&next, &nextLen, &sym, &asn1Encode, &asn1Len) == BSL_SUCCESS);
90 EXIT:
91 BSL_SAL_Free(asn1Encode);
92 return;
93 }
94 /* END_CASE */
95
96 /* BEGIN_CASE */
SDV_BSL_PEM_PARSE_FUNC_TC003(void)97 void SDV_BSL_PEM_PARSE_FUNC_TC003(void)
98 {
99 BSL_PEM_Symbol sym = {BSL_PEM_EC_PRI_KEY_BEGIN_STR, BSL_PEM_EC_PRI_KEY_END_STR};
100 char *pemdata = "-----BEGIN EC PRIVATE KEY-----END EC PRIVATE KEY------------------END-----\n";
101 int32_t len = strlen(pemdata);
102 char *next = pemdata;
103 uint32_t nextLen = len;
104 uint8_t *asn1Encode = NULL;
105 uint32_t asn1Len;
106 ASSERT_TRUE(BSL_PEM_DecodePemToAsn1(&next, &nextLen, &sym, &asn1Encode, &asn1Len) == BSL_PEM_SYMBOL_NOT_FOUND);
107 EXIT:
108 BSL_SAL_Free(asn1Encode);
109 return;
110 }
111 /* END_CASE */
112