1 /*
2  * Copyright (c) 2020 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *    http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef __PARSEDATA_H__
17 #define __PARSEDATA_H__
18 
19 #include <stdint.h>
20 #include "base.h"
21 #include "mem_stat.h"
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 #define DEFINE_EMPTY_STRUCT_FUNC(d_name) \
28     void *parse_##d_name(const char *payload, enum json_object_data_type data_type) \
29     { \
30         (void)payload; \
31         (void)data_type; \
32         return NULL; \
33     } \
34     void free_##d_name(void *obj) \
35     { \
36         (void)obj; \
37     } \
38     char *make_##d_name(void *data) \
39     { \
40         (void)data; \
41         return "Current devices do not support this feature."; \
42     }
43 
44 
45 struct pass_through_data {
46     uint32_t message_code;
47     void *payload_data;
48 };
49 
50 uint32_t parse_header(const char *data);
51 
52 struct pass_through_data *parse_data(const char *data);
53 void free_data(struct pass_through_data *data);
54 
55 void *parse_payload(const char *payload, enum json_object_data_type data_type);
56 void free_payload(char *data, enum json_object_data_type data_type);
57 
58 /* pake request */
59 void free_pake_request(void *obj);
60 char *make_pake_request(void *data);
61 
62 /* pake response */
63 void *parse_pake_response(const char *payload, enum json_object_data_type data_type);
64 void free_pake_response(void *obj);
65 
66 /* pake client confirm */
67 void free_pake_client_confirm(void *obj);
68 char *make_pake_client_confirm(void *data);
69 
70 /* pake server confirm */
71 void *parse_pake_server_confirm(const char *payload, enum json_object_data_type data_type);
72 void free_pake_server_confirm(void *obj);
73 
74 /* sts auth start request */
75 void free_auth_start_request(void *obj);
76 char *make_auth_start_request(void *data);
77 
78 /* sts auth start response */
79 void *parse_auth_start_response(const char *payload, enum json_object_data_type data_type);
80 void free_auth_start_response(void *obj);
81 
82 /* sts auth ack request */
83 void free_auth_ack_request(void *obj);
84 char *make_auth_ack_request(void *data);
85 
86 /* sts auth ack response */
87 void *parse_auth_ack_response(const char *payload, enum json_object_data_type data_type);
88 void free_auth_ack_response(void *obj);
89 
90 /* add auth data */
91 void *parse_add_auth_info_data(const char *payload, enum json_object_data_type data_type);
92 void free_add_auth_info_data(void *obj);
93 char *make_add_auth_info_data(void *data);
94 
95 /* rmv auth request */
96 void *parse_rmv_auth_info_request(const char *payload, enum json_object_data_type data_type);
97 void free_rmv_auth_info_request(void *obj);
98 char *make_rmv_auth_info_request(void *data);
99 
100 /* rmv auth response */
101 void *parse_rmv_auth_info_response(const char *payload, enum json_object_data_type type);
102 void free_rmv_auth_info_response(void *obj);
103 char *make_rmv_auth_info_response(void *data);
104 
105 /* rmv auth data */
106 void *parse_rmv_auth_info_data(const char *payload, enum json_object_data_type data_type);
107 void free_rmv_auth_info_data(void *obj);
108 char *make_rmv_auth_info_data(void *data);
109 
110 /* exchange request */
111 void free_exchange_request(void *obj);
112 char *make_exchange_request(void *data);
113 
114 /* exchange response */
115 void *parse_exchange_response(const char *payload, enum json_object_data_type data_type);
116 void free_exchange_response(void *obj);
117 
118 /* exchange authdata */
119 void *parse_exchange_data(const char *payload, enum json_object_data_type data_type);
120 void free_exchange_data(void *obj);
121 char *make_exchange_data(void *data);
122 
123 /* sec_clone data */
124 void *sec_clone_parse_client_request(const char *payload, enum json_object_data_type data_type);
125 void sec_clone_free_client_request(void *obj);
126 char *sec_clone_make_srv_proof(void *data);
127 void *sec_clone_parse_client_ack(const char *payload, enum json_object_data_type data_type);
128 void sec_clone_free_client_ack(void *obj);
129 char *sec_clone_make_clone_ret(void *data);
130 void *sec_clone_parse_start_resp(const char *payload, enum json_object_data_type data_type);
131 void *sec_clone_parse_ack_resp(const char *payload, enum json_object_data_type data_type);
132 
133 /* inform message */
134 void *parse_inform_message(const char *payload, enum json_object_data_type data_type);
135 void free_inform_message(void *obj);
136 char *make_inform_message(void *data);
137 
138 #define FIELD_ADD_TYPE        "addType"
139 #define FIELD_ADD_ID          "addId"
140 #define FIELD_ADD_KEY         "addKey"
141 #define FIELD_AUTH_DATA       "authData"
142 #define FIELD_AUTH_RETURN     "authReturn"
143 #define FIELD_AUTH_ID         "authId"
144 #define FIELD_AUTH_PK         "authPk"
145 #define FIELD_AUTH_FORM       "authForm"
146 #define FIELD_ADD_AUTH_INFO   "addAuthInfo"
147 #define FIELD_ADD_RETURN      "addReturn"
148 #define FIELD_CHALLENGE       "challenge"
149 #define FIELD_CURRENT_VERSION "currentVersion"
150 #define FIELD_EPK             "epk"
151 #define FIELD_EPK_LEN         "epkLen"
152 #define FIELD_EX_AUTH_INFO    "exAuthInfo"
153 #define FIELD_ERROR_CODE      "errorCode"
154 #define FIELD_KCF_DATA        "kcfData"
155 #define FIELD_KEY_LENGTH      "keyLength"
156 #define FIELD_KEY_TYPE        "keyType"
157 #define FIELD_MESSAGE         "message"
158 #define FIELD_MIN_VERSION     "minVersion"
159 #define FIELD_OPERATION_CODE  "operationCode"
160 #define FIELD_OWNER_ID        "ownerId"
161 #define FIELD_PERMISSION      "Permission"
162 #define FIELD_PAYLOAD         "payload"
163 #define FIELD_PUBLIC_KEY      "publicKey"
164 #define FIELD_PKG_NAME        "pkgName"
165 #define FIELD_PEER_AUTH_ID    "peerAuthId"
166 #define FIELD_PEER_USER_TYPE  "peerUserType"
167 #define FIELD_RMV_TYPE        "rmvType"
168 #define FIELD_RMV_ID          "rmvId"
169 #define FIELD_RMV_AUTH_INFO   "rmvAuthInfo"
170 #define FIELD_RMV_RETURN      "rmvReturn"
171 #define FIELD_SALT            "salt"
172 #define FIELD_SUPPORT_256_MOD "support256mod"
173 #define FIELD_SERVICE_TYPE    "serviceType"
174 #define FIELD_VERSION         "version"
175 
176 #ifdef __cplusplus
177 }
178 #endif
179 #endif /* __PARSEDATA_H__ */
180