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 *parse_pake_request(const char *payload, enum json_object_data_type data_type); 60 void free_pake_request(void *obj); 61 char *make_pake_request(void *data); 62 63 /* pake response */ 64 void *parse_pake_response(const char *payload, enum json_object_data_type data_type); 65 void free_pake_response(void *obj); 66 char *make_pake_response(void *data); 67 68 /* pake client confirm */ 69 void *parse_pake_client_confirm(const char *payload, enum json_object_data_type data_type); 70 void free_pake_client_confirm(void *obj); 71 char *make_pake_client_confirm(void *data); 72 73 /* pake server confirm */ 74 void *parse_pake_server_confirm(const char *payload, enum json_object_data_type data_type); 75 void free_pake_server_confirm(void *obj); 76 char *make_pake_server_confirm(void *data); 77 78 /* sts auth start request */ 79 void *parse_auth_start_request(const char *payload, enum json_object_data_type data_type); 80 void free_auth_start_request(void *obj); 81 char *make_auth_start_request(void *data); 82 83 /* sts auth start response */ 84 void *parse_auth_start_response(const char *payload, enum json_object_data_type data_type); 85 void free_auth_start_response(void *obj); 86 char *make_auth_start_response(void *data); 87 88 /* sts auth ack request */ 89 void *parse_auth_ack_request(const char *payload, enum json_object_data_type data_type); 90 void free_auth_ack_request(void *obj); 91 char *make_auth_ack_request(void *data); 92 93 /* sts auth ack response */ 94 void *parse_auth_ack_response(const char *payload, enum json_object_data_type data_type); 95 void free_auth_ack_response(void *obj); 96 char *make_auth_ack_response(void *data); 97 98 /* add auth request */ 99 void *parse_add_auth_info_request(const char *payload, enum json_object_data_type data_type); 100 void free_add_auth_info_request(void *obj); 101 char *make_add_auth_info_request(void *data); 102 103 /* add auth response */ 104 void *parse_add_auth_info_response(const char *payload, enum json_object_data_type data_type); 105 void free_add_auth_info_response(void *obj); 106 char *make_add_auth_info_response(void *data); 107 108 /* add auth data */ 109 void *parse_add_auth_info_data(const char *payload, enum json_object_data_type data_type); 110 void free_add_auth_info_data(void *obj); 111 char *make_add_auth_info_data(void *data); 112 113 /* rmv auth request */ 114 void *parse_rmv_auth_info_request(const char *payload, enum json_object_data_type data_type); 115 void free_rmv_auth_info_request(void *obj); 116 char *make_rmv_auth_info_request(void *data); 117 118 /* rmv auth response */ 119 void *parse_rmv_auth_info_response(const char *payload, enum json_object_data_type type); 120 void free_rmv_auth_info_response(void *obj); 121 char *make_rmv_auth_info_response(void *data); 122 123 /* rmv auth data */ 124 void *parse_rmv_auth_info_data(const char *payload, enum json_object_data_type data_type); 125 void free_rmv_auth_info_data(void *obj); 126 char *make_rmv_auth_info_data(void *data); 127 128 /* exchange request */ 129 void *parse_exchange_request(const char *payload, enum json_object_data_type data_type); 130 void free_exchange_request(void *obj); 131 char *make_exchange_request(void *data); 132 133 /* exchange response */ 134 void *parse_exchange_response(const char *payload, enum json_object_data_type data_type); 135 void free_exchange_response(void *obj); 136 char *make_exchange_response(void *data); 137 138 /* exchange authdata */ 139 void *parse_exchange_data(const char *payload, enum json_object_data_type data_type); 140 void free_exchange_data(void *obj); 141 char *make_exchange_data(void *data); 142 143 /* sec_clone data */ 144 void *sec_clone_parse_client_request(const char *payload, enum json_object_data_type data_type); 145 void sec_clone_free_client_request(void *obj); 146 char *sec_clone_make_srv_proof(void *data); 147 void *sec_clone_parse_client_ack(const char *payload, enum json_object_data_type data_type); 148 void sec_clone_free_client_ack(void *obj); 149 char *sec_clone_make_clone_ret(void *data); 150 void *sec_clone_parse_start_resp(const char *payload, enum json_object_data_type data_type); 151 void *sec_clone_parse_ack_resp(const char *payload, enum json_object_data_type data_type); 152 153 /* inform message */ 154 void *parse_inform_message(const char *payload, enum json_object_data_type data_type); 155 void free_inform_message(void *obj); 156 char *make_inform_message(void *data); 157 158 /* improt data message */ 159 void *parse_import_add_auth_data(const char *payload, enum json_object_data_type data_type); 160 void free_import_add_auth_data(void *obj); 161 162 #define FIELD_ADD_TYPE "addType" 163 #define FIELD_ADD_ID "addId" 164 #define FIELD_ADD_KEY "addKey" 165 #define FIELD_AUTH_DATA "authData" 166 #define FIELD_AUTH_RETURN "authReturn" 167 #define FIELD_AUTH_ID "authId" 168 #define FIELD_AUTH_PK "authPk" 169 #define FIELD_AUTH_FORM "authForm" 170 #define FIELD_ADD_AUTH_INFO "addAuthInfo" 171 #define FIELD_ADD_RETURN "addReturn" 172 #define FIELD_CHALLENGE "challenge" 173 #define FIELD_CURRENT_VERSION "currentVersion" 174 #define FIELD_EPK "epk" 175 #define FIELD_EPK_LEN "epkLen" 176 #define FIELD_EX_AUTH_INFO "exAuthInfo" 177 #define FIELD_ERROR_CODE "errorCode" 178 #define FIELD_KCF_DATA "kcfData" 179 #define FIELD_KEY_LENGTH "keyLength" 180 #define FIELD_KEY_TYPE "keyType" 181 #define FIELD_MESSAGE "message" 182 #define FIELD_MIN_VERSION "minVersion" 183 #define FIELD_OPERATION_CODE "operationCode" 184 #define FIELD_OWNER_ID "ownerId" 185 #define FIELD_PERMISSION "Permission" 186 #define FIELD_PAYLOAD "payload" 187 #define FIELD_PUBLIC_KEY "publicKey" 188 #define FIELD_PKG_NAME "pkgName" 189 #define FIELD_PEER_AUTH_ID "peerAuthId" 190 #define FIELD_PEER_USER_TYPE "peerUserType" 191 #define FIELD_RMV_TYPE "rmvType" 192 #define FIELD_RMV_ID "rmvId" 193 #define FIELD_RMV_AUTH_INFO "rmvAuthInfo" 194 #define FIELD_RMV_RETURN "rmvReturn" 195 #define FIELD_SALT "salt" 196 #define FIELD_SUPPORT_256_MOD "support256mod" 197 #define FIELD_SERVICE_TYPE "serviceType" 198 #define FIELD_VERSION "version" 199 200 #ifdef __cplusplus 201 } 202 #endif 203 #endif /* __PARSEDATA_H__ */ 204