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