117fd14ceSopenharmony_ci/*
217fd14ceSopenharmony_ci * Copyright (c) 2020-2021 Huawei Device Co., Ltd.
317fd14ceSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
417fd14ceSopenharmony_ci * you may not use this file except in compliance with the License.
517fd14ceSopenharmony_ci * You may obtain a copy of the License at
617fd14ceSopenharmony_ci *
717fd14ceSopenharmony_ci *    http://www.apache.org/licenses/LICENSE-2.0
817fd14ceSopenharmony_ci *
917fd14ceSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1017fd14ceSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1117fd14ceSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1217fd14ceSopenharmony_ci * See the License for the specific language governing permissions and
1317fd14ceSopenharmony_ci * limitations under the License.
1417fd14ceSopenharmony_ci */
1517fd14ceSopenharmony_ci
1617fd14ceSopenharmony_ci#ifndef __HICHAIN_H__
1717fd14ceSopenharmony_ci#define __HICHAIN_H__
1817fd14ceSopenharmony_ci
1917fd14ceSopenharmony_ci#include <stdint.h>
2017fd14ceSopenharmony_ci
2117fd14ceSopenharmony_ci#if defined(_WINDOWS)
2217fd14ceSopenharmony_ci#ifdef DLL_EXPORT
2317fd14ceSopenharmony_ci#define DLL_API_PUBLIC __declspec(dllexport)
2417fd14ceSopenharmony_ci#else
2517fd14ceSopenharmony_ci#define DLL_API_PUBLIC __declspec(dllimport)
2617fd14ceSopenharmony_ci#endif
2717fd14ceSopenharmony_ci#else
2817fd14ceSopenharmony_ci#define DLL_API_PUBLIC __attribute__ ((visibility("default")))
2917fd14ceSopenharmony_ci#endif
3017fd14ceSopenharmony_ci
3117fd14ceSopenharmony_ci#ifdef HILINK_E2E_SECURITY_CONFIG
3217fd14ceSopenharmony_ci#define _SCANTY_MEMORY_
3317fd14ceSopenharmony_ci#endif
3417fd14ceSopenharmony_ci
3517fd14ceSopenharmony_cienum hc_error {
3617fd14ceSopenharmony_ci    HC_OK = 0,
3717fd14ceSopenharmony_ci    HC_INPUT_ERROR,
3817fd14ceSopenharmony_ci    HC_INNER_ERROR,
3917fd14ceSopenharmony_ci    HC_STATE_ERROR,
4017fd14ceSopenharmony_ci    HC_SERVICE_CONFIRM_ERROR,
4117fd14ceSopenharmony_ci    HC_UNKNOW_MESSAGE,
4217fd14ceSopenharmony_ci    HC_NO_MESSAGE_TO_SEND,
4317fd14ceSopenharmony_ci    HC_REPEATED_REFERENCE,
4417fd14ceSopenharmony_ci    HC_NEED_DEPEND,
4517fd14ceSopenharmony_ci    HC_BUILD_OBJECT_FAILED,
4617fd14ceSopenharmony_ci    HC_BUILD_SEND_DATA_FAILED,
4717fd14ceSopenharmony_ci    HC_MALLOC_FAILED,
4817fd14ceSopenharmony_ci    HC_VERSION_UNSUPPORT,
4917fd14ceSopenharmony_ci    HC_LARGE_PRIME_NUMBER_LEN_UNSUPPORT,
5017fd14ceSopenharmony_ci    HC_CAL_BIGNUM_EXP_FAILED,
5117fd14ceSopenharmony_ci    HC_INTERNAL_ERROR,
5217fd14ceSopenharmony_ci    HC_IMPORT_AUTH_DATA_FAILED,
5317fd14ceSopenharmony_ci    HC_VERIFY_PROOF_FAILED,
5417fd14ceSopenharmony_ci    HC_GENERATE_PROOF_FAILED,
5517fd14ceSopenharmony_ci    HC_GENERATE_SESSION_KEY_FAILED,
5617fd14ceSopenharmony_ci    HC_ST_KEY_PAIR_FAILED,
5717fd14ceSopenharmony_ci    HC_COMPUTE_STS_SHARED_SECRET_FAILED,
5817fd14ceSopenharmony_ci    HC_COMPUTE_HKDF_FAILED,
5917fd14ceSopenharmony_ci    HC_PAKE_SESSION_KEY_ERROR,
6017fd14ceSopenharmony_ci    HC_PAKE_OBJECT_ERROR,
6117fd14ceSopenharmony_ci    HC_STS_OBJECT_ERROR,
6217fd14ceSopenharmony_ci    HC_DECRYPT_FAILED,
6317fd14ceSopenharmony_ci    HC_ENCRYPT_FAILED,
6417fd14ceSopenharmony_ci    HC_SIGN_TOO_SHORT,
6517fd14ceSopenharmony_ci    HC_VERIFY_EXCHANGE_FAILED,
6617fd14ceSopenharmony_ci    HC_SIGN_EXCHANGE_FAILED,
6717fd14ceSopenharmony_ci    HC_SAVE_LTPK_FAILED,
6817fd14ceSopenharmony_ci    HC_DELETE_LTPK_FAILED,
6917fd14ceSopenharmony_ci    HC_GET_LTPK_FAILED,
7017fd14ceSopenharmony_ci    HC_GEN_ALIAS_FAILED,
7117fd14ceSopenharmony_ci    HC_GEN_SERVICE_ID_FAILED,
7217fd14ceSopenharmony_ci    HC_GEN_RANDOM_FAILED,
7317fd14ceSopenharmony_ci    HC_UNSUPPORT,
7417fd14ceSopenharmony_ci    HC_MESSAGE_INCONSISTENCY,
7517fd14ceSopenharmony_ci    HC_OPERATION_CODE_ERROR,
7617fd14ceSopenharmony_ci    HC_MEMCPY_ERROR,
7717fd14ceSopenharmony_ci    PROTOCOL_STATE_ERROR,
7817fd14ceSopenharmony_ci    PROTOCOL_SET_STATE_ERROR,
7917fd14ceSopenharmony_ci    PROTOCOL_TIMEOUT_ERROR,
8017fd14ceSopenharmony_ci    PROTOCOL_SAHRED_SECRET_FAIL,
8117fd14ceSopenharmony_ci    PROTOCOL_HKDF_FAIL,
8217fd14ceSopenharmony_ci    PROTOCOL_SHA_FAIL,
8317fd14ceSopenharmony_ci    PROTOCOL_RAND_FAIL,
8417fd14ceSopenharmony_ci    PROTOCOL_ENCRYPT_FAIL,
8517fd14ceSopenharmony_ci    PROTOCOL_DECRYPT_FAIL,
8617fd14ceSopenharmony_ci    PROTOCOL_VERIFY_DATA_FAIL,
8717fd14ceSopenharmony_ci    PROTOCOL_KEY_ALG_FAIL,
8817fd14ceSopenharmony_ci    PROTOCOL_RESULT_ERROR,
8917fd14ceSopenharmony_ci    KEK_NOT_EXIST,
9017fd14ceSopenharmony_ci    DEK_NOT_EXIST,
9117fd14ceSopenharmony_ci    TEMP_KEY_GEN_FAILED,
9217fd14ceSopenharmony_ci    HC_INPUT_PTR_NULL
9317fd14ceSopenharmony_ci};
9417fd14ceSopenharmony_ci
9517fd14ceSopenharmony_cienum hc_type {
9617fd14ceSopenharmony_ci    HC_CENTRE = 1,
9717fd14ceSopenharmony_ci    HC_ACCESSORY,
9817fd14ceSopenharmony_ci};
9917fd14ceSopenharmony_ci
10017fd14ceSopenharmony_cienum hc_user_type {
10117fd14ceSopenharmony_ci    HC_USER_TYPE_ACCESSORY = 0,
10217fd14ceSopenharmony_ci    HC_USER_TYPE_CONTROLLER = 1
10317fd14ceSopenharmony_ci};
10417fd14ceSopenharmony_ci
10517fd14ceSopenharmony_cienum hc_operation {
10617fd14ceSopenharmony_ci    INVALID_OPERATION_CODE = -1,
10717fd14ceSopenharmony_ci    NO_OPERATION_CODE = 0,
10817fd14ceSopenharmony_ci    BIND = 1,
10917fd14ceSopenharmony_ci    AUTHENTICATE,
11017fd14ceSopenharmony_ci    ADD_AUTHINFO,
11117fd14ceSopenharmony_ci    REMOVE_AUTHINFO,
11217fd14ceSopenharmony_ci    UNBIND,
11317fd14ceSopenharmony_ci    AUTH_KEY_AGREEMENT,
11417fd14ceSopenharmony_ci    REGISTER,
11517fd14ceSopenharmony_ci    SEC_CLONE_OP,
11617fd14ceSopenharmony_ci    REMOVE_ALL_AUTHINFO,
11717fd14ceSopenharmony_ci    GET_PEER_USER_TYPE,
11817fd14ceSopenharmony_ci    GENERATE_KEY_PAIR = 99
11917fd14ceSopenharmony_ci};
12017fd14ceSopenharmony_ci
12117fd14ceSopenharmony_cienum hc_result {
12217fd14ceSopenharmony_ci    END_SUCCESS = 0,
12317fd14ceSopenharmony_ci    END_FAILED,
12417fd14ceSopenharmony_ci    KEY_AGREEMENT_PROCESSING,
12517fd14ceSopenharmony_ci    KEY_AGREEMENT_END,
12617fd14ceSopenharmony_ci    OPERATION_PROCESSING,
12717fd14ceSopenharmony_ci    OPERATION_END,
12817fd14ceSopenharmony_ci};
12917fd14ceSopenharmony_ci
13017fd14ceSopenharmony_cienum hc_export_type {
13117fd14ceSopenharmony_ci    EXPORT_DATA_FULL_AUTH_INFO   = 0,
13217fd14ceSopenharmony_ci    EXPORT_DATA_LITE_AUTH_INFO   = 1,
13317fd14ceSopenharmony_ci    EXPORT_DATA_SIGNED_AUTH_INFO = 2
13417fd14ceSopenharmony_ci};
13517fd14ceSopenharmony_ci
13617fd14ceSopenharmony_ci#define HC_AUTH_ID_BUFF_LEN 64
13717fd14ceSopenharmony_ci#define HC_SALT_BUFF_LEN    16
13817fd14ceSopenharmony_ci#define HC_PIN_BUFF_LEN     16
13917fd14ceSopenharmony_ci#define HC_SESSION_KEY_LEN  128
14017fd14ceSopenharmony_ci#define HC_KEY_TYPE_LEN     2
14117fd14ceSopenharmony_ci#define HC_BASE_KEY_NUM     5
14217fd14ceSopenharmony_ci
14317fd14ceSopenharmony_ci#if !defined(_SCANTY_MEMORY_)
14417fd14ceSopenharmony_ci#define HC_PACKAGE_NAME_BUFF_LEN    256
14517fd14ceSopenharmony_ci#define HC_SERVICE_TYPE_BUFF_LEN    256
14617fd14ceSopenharmony_ci#else /* _SCANTY_MEMORY_ */
14717fd14ceSopenharmony_ci#define HC_PACKAGE_NAME_BUFF_LEN    16
14817fd14ceSopenharmony_ci#define HC_SERVICE_TYPE_BUFF_LEN    16
14917fd14ceSopenharmony_ci#endif /* _SCANTY_MEMORY_ */
15017fd14ceSopenharmony_ci#define HC_KEY_ALIAS_MAX_LEN        64
15117fd14ceSopenharmony_ci
15217fd14ceSopenharmony_ci/* alia list max size */
15317fd14ceSopenharmony_ci#if defined(_SCANTY_MEMORY_)
15417fd14ceSopenharmony_ci#define HC_PUB_KEY_ALIAS_MAX_NUM    15
15517fd14ceSopenharmony_ci#elif defined(_SUPPORT_SEC_CLONE_SERVER_)
15617fd14ceSopenharmony_ci#define HC_PUB_KEY_ALIAS_MAX_NUM    120
15717fd14ceSopenharmony_ci#else
15817fd14ceSopenharmony_ci#define HC_PUB_KEY_ALIAS_MAX_NUM    20
15917fd14ceSopenharmony_ci#endif
16017fd14ceSopenharmony_ci
16117fd14ceSopenharmony_cienum hc_trust_peer_result {
16217fd14ceSopenharmony_ci    HC_NOT_TRUST_PEER = 0,
16317fd14ceSopenharmony_ci    HC_BINDED_TRUST_PEER,
16417fd14ceSopenharmony_ci    HC_AUTHED_TRUST_PEER,
16517fd14ceSopenharmony_ci    HC_ACCESSORY_TRUST_PEER
16617fd14ceSopenharmony_ci};
16717fd14ceSopenharmony_ci
16817fd14ceSopenharmony_citypedef void *hc_handle;
16917fd14ceSopenharmony_ci
17017fd14ceSopenharmony_cistruct uint8_buff {
17117fd14ceSopenharmony_ci    uint8_t *val;
17217fd14ceSopenharmony_ci    uint32_t size;
17317fd14ceSopenharmony_ci    uint32_t length;
17417fd14ceSopenharmony_ci};
17517fd14ceSopenharmony_ci
17617fd14ceSopenharmony_cistruct hc_pin {
17717fd14ceSopenharmony_ci    uint32_t length;
17817fd14ceSopenharmony_ci    uint8_t pin[HC_PIN_BUFF_LEN];
17917fd14ceSopenharmony_ci};
18017fd14ceSopenharmony_ci
18117fd14ceSopenharmony_cistruct hc_salt {
18217fd14ceSopenharmony_ci    uint32_t length;
18317fd14ceSopenharmony_ci    uint8_t salt[HC_SALT_BUFF_LEN];
18417fd14ceSopenharmony_ci};
18517fd14ceSopenharmony_ci
18617fd14ceSopenharmony_cistruct hc_auth_id {
18717fd14ceSopenharmony_ci    uint32_t length;
18817fd14ceSopenharmony_ci    uint8_t auth_id[HC_AUTH_ID_BUFF_LEN];
18917fd14ceSopenharmony_ci};
19017fd14ceSopenharmony_ci
19117fd14ceSopenharmony_cistruct hc_session_key {
19217fd14ceSopenharmony_ci    uint32_t length;
19317fd14ceSopenharmony_ci    uint8_t session_key[HC_SESSION_KEY_LEN];
19417fd14ceSopenharmony_ci};
19517fd14ceSopenharmony_ci
19617fd14ceSopenharmony_cistruct hc_package_name {
19717fd14ceSopenharmony_ci    uint32_t length;
19817fd14ceSopenharmony_ci    uint8_t name[HC_PACKAGE_NAME_BUFF_LEN];
19917fd14ceSopenharmony_ci};
20017fd14ceSopenharmony_ci
20117fd14ceSopenharmony_cistruct hc_service_type {
20217fd14ceSopenharmony_ci    uint32_t length;
20317fd14ceSopenharmony_ci    uint8_t type[HC_SERVICE_TYPE_BUFF_LEN];
20417fd14ceSopenharmony_ci};
20517fd14ceSopenharmony_ci
20617fd14ceSopenharmony_cistruct hc_user_info {
20717fd14ceSopenharmony_ci    struct hc_auth_id auth_id;
20817fd14ceSopenharmony_ci    int32_t user_type;
20917fd14ceSopenharmony_ci};
21017fd14ceSopenharmony_ci
21117fd14ceSopenharmony_cistruct operation_parameter {
21217fd14ceSopenharmony_ci    struct hc_auth_id self_auth_id;
21317fd14ceSopenharmony_ci    struct hc_auth_id peer_auth_id;
21417fd14ceSopenharmony_ci    uint32_t key_length;
21517fd14ceSopenharmony_ci};
21617fd14ceSopenharmony_ci
21717fd14ceSopenharmony_cistruct hc_key_alias {
21817fd14ceSopenharmony_ci    uint32_t length;
21917fd14ceSopenharmony_ci    uint8_t key_alias[HC_KEY_ALIAS_MAX_LEN];
22017fd14ceSopenharmony_ci};
22117fd14ceSopenharmony_ci
22217fd14ceSopenharmony_cistruct session_identity {
22317fd14ceSopenharmony_ci    uint32_t session_id;
22417fd14ceSopenharmony_ci    struct hc_package_name package_name;
22517fd14ceSopenharmony_ci    struct hc_service_type service_type;
22617fd14ceSopenharmony_ci    void *context;
22717fd14ceSopenharmony_ci};
22817fd14ceSopenharmony_ci
22917fd14ceSopenharmony_citypedef void (*transmit_cb)(const struct session_identity *identity, const void *data, uint32_t length);
23017fd14ceSopenharmony_citypedef void (*get_protocol_params_cb)(const struct session_identity *identity, int32_t operation_code,
23117fd14ceSopenharmony_ci                                       struct hc_pin *pin, struct operation_parameter *para);
23217fd14ceSopenharmony_citypedef void (*set_session_key_func)(const struct session_identity *identity,
23317fd14ceSopenharmony_ci                                     const struct hc_session_key *session_key);
23417fd14ceSopenharmony_citypedef void (*set_service_result_func)(const struct session_identity *identity, int32_t result, int32_t errorCodeRecv);
23517fd14ceSopenharmony_citypedef int32_t (*confirm_receive_request_func)(const struct session_identity *identity, int32_t operation_code);
23617fd14ceSopenharmony_ci
23717fd14ceSopenharmony_cistruct hc_call_back {
23817fd14ceSopenharmony_ci    transmit_cb transmit;
23917fd14ceSopenharmony_ci    get_protocol_params_cb get_protocol_params;
24017fd14ceSopenharmony_ci    set_session_key_func set_session_key;
24117fd14ceSopenharmony_ci    set_service_result_func set_service_result;
24217fd14ceSopenharmony_ci    confirm_receive_request_func confirm_receive_request;
24317fd14ceSopenharmony_ci};
24417fd14ceSopenharmony_ci
24517fd14ceSopenharmony_citypedef void (*log_func)(const char *tag, const char *func_name, const char *format, ...);
24617fd14ceSopenharmony_ci
24717fd14ceSopenharmony_cistruct log_func_group {
24817fd14ceSopenharmony_ci    log_func log_d;
24917fd14ceSopenharmony_ci    log_func log_i;
25017fd14ceSopenharmony_ci    log_func log_w;
25117fd14ceSopenharmony_ci    log_func log_e;
25217fd14ceSopenharmony_ci};
25317fd14ceSopenharmony_ci
25417fd14ceSopenharmony_ci#ifdef __cplusplus
25517fd14ceSopenharmony_ciextern "C" {
25617fd14ceSopenharmony_ci#endif
25717fd14ceSopenharmony_ci
25817fd14ceSopenharmony_ci/*
25917fd14ceSopenharmony_ci * Register log operation callback
26017fd14ceSopenharmony_ci *
26117fd14ceSopenharmony_ci * para log:  The log callback functions group
26217fd14ceSopenharmony_ci * return  void
26317fd14ceSopenharmony_ci */
26417fd14ceSopenharmony_ciDLL_API_PUBLIC void registe_log(struct log_func_group *log);
26517fd14ceSopenharmony_ci
26617fd14ceSopenharmony_ci/*
26717fd14ceSopenharmony_ci * Get hichain instance
26817fd14ceSopenharmony_ci *
26917fd14ceSopenharmony_ci * para identity:  basic information of session
27017fd14ceSopenharmony_ci * pare type:  hichain device type
27117fd14ceSopenharmony_ci * hc_call_back:  hichain callback functions
27217fd14ceSopenharmony_ci * return  hichain instance
27317fd14ceSopenharmony_ci */
27417fd14ceSopenharmony_ciDLL_API_PUBLIC hc_handle get_instance(const struct session_identity *identity, enum hc_type type,
27517fd14ceSopenharmony_ci    const struct hc_call_back *call_back);
27617fd14ceSopenharmony_ci
27717fd14ceSopenharmony_ci/*
27817fd14ceSopenharmony_ci * Destroy hichain instance
27917fd14ceSopenharmony_ci *
28017fd14ceSopenharmony_ci * para handle:  hichain instance
28117fd14ceSopenharmony_ci * return  void
28217fd14ceSopenharmony_ci */
28317fd14ceSopenharmony_ciDLL_API_PUBLIC void destroy(hc_handle *handle);
28417fd14ceSopenharmony_ci
28517fd14ceSopenharmony_ci/*
28617fd14ceSopenharmony_ci * set context in handle
28717fd14ceSopenharmony_ci *
28817fd14ceSopenharmony_ci * para handle:  hichain instance
28917fd14ceSopenharmony_ci * para context: put in an object in instance
29017fd14ceSopenharmony_ci * return  void
29117fd14ceSopenharmony_ci */
29217fd14ceSopenharmony_ciDLL_API_PUBLIC void set_context(hc_handle handle, void *context);
29317fd14ceSopenharmony_ci
29417fd14ceSopenharmony_ci/*
29517fd14ceSopenharmony_ci * Hichain receives message data
29617fd14ceSopenharmony_ci *
29717fd14ceSopenharmony_ci * para handle:  hichain instance
29817fd14ceSopenharmony_ci * para data:  message data
29917fd14ceSopenharmony_ci * return  0 ok, others error
30017fd14ceSopenharmony_ci */
30117fd14ceSopenharmony_ciDLL_API_PUBLIC int32_t receive_data(hc_handle handle, struct uint8_buff *data);
30217fd14ceSopenharmony_ci
30317fd14ceSopenharmony_ci/*
30417fd14ceSopenharmony_ci * Hichain receives message data , data is json object
30517fd14ceSopenharmony_ci *
30617fd14ceSopenharmony_ci * para handle:  hichain instance
30717fd14ceSopenharmony_ci * para json_object:  message data
30817fd14ceSopenharmony_ci * return  0 ok, others error
30917fd14ceSopenharmony_ci */
31017fd14ceSopenharmony_ciDLL_API_PUBLIC int32_t receive_data_with_json_object(hc_handle handle, const void *json_object);
31117fd14ceSopenharmony_ci
31217fd14ceSopenharmony_ci#ifndef _CUT_API_
31317fd14ceSopenharmony_ci
31417fd14ceSopenharmony_ci
31517fd14ceSopenharmony_ci/*
31617fd14ceSopenharmony_ci * Start pake module
31717fd14ceSopenharmony_ci *
31817fd14ceSopenharmony_ci * para handle:  hichain instance
31917fd14ceSopenharmony_ci * para params:  operating parameter
32017fd14ceSopenharmony_ci * return  0 ok, others error
32117fd14ceSopenharmony_ci */
32217fd14ceSopenharmony_ciDLL_API_PUBLIC int32_t start_pake(hc_handle handle, const struct operation_parameter *params);
32317fd14ceSopenharmony_ci
32417fd14ceSopenharmony_ci/*
32517fd14ceSopenharmony_ci * Authenticate peer identity and build session key
32617fd14ceSopenharmony_ci *
32717fd14ceSopenharmony_ci * para handle:  hichain instance
32817fd14ceSopenharmony_ci * para params:  operating parameter
32917fd14ceSopenharmony_ci * return  0 ok, others error
33017fd14ceSopenharmony_ci */
33117fd14ceSopenharmony_ciDLL_API_PUBLIC int32_t authenticate_peer(hc_handle handle, struct operation_parameter *params);
33217fd14ceSopenharmony_ci
33317fd14ceSopenharmony_ci/*
33417fd14ceSopenharmony_ci * Delete local saved authentication
33517fd14ceSopenharmony_ci *
33617fd14ceSopenharmony_ci * para handle:  hichain instance
33717fd14ceSopenharmony_ci * para hc_user_info:  user to be deleted
33817fd14ceSopenharmony_ci * return  0 ok, others error
33917fd14ceSopenharmony_ci */
34017fd14ceSopenharmony_ciDLL_API_PUBLIC int32_t delete_local_auth_info(hc_handle handle, struct hc_user_info *user_info);
34117fd14ceSopenharmony_ci
34217fd14ceSopenharmony_ci/*
34317fd14ceSopenharmony_ci * Share the bound device to other users
34417fd14ceSopenharmony_ci *
34517fd14ceSopenharmony_ci * para handle:  hichain instance
34617fd14ceSopenharmony_ci * para params:  operating parameter, self_auth_id: controller auth id, peer_auth_id: peer auth id
34717fd14ceSopenharmony_ci * para auth_id:  authorized auth id
34817fd14ceSopenharmony_ci * para user_type:  authorized user type. 0 : ACCESSORY ; 1 : CONTROLLER
34917fd14ceSopenharmony_ci * return  0 ok, others error
35017fd14ceSopenharmony_ci */
35117fd14ceSopenharmony_ciint32_t add_auth_info(hc_handle handle, const struct operation_parameter *params,
35217fd14ceSopenharmony_ci    const struct hc_auth_id *auth_id, int32_t user_type);
35317fd14ceSopenharmony_ci
35417fd14ceSopenharmony_ci/*
35517fd14ceSopenharmony_ci * Remove user authorization of an accessory
35617fd14ceSopenharmony_ci *
35717fd14ceSopenharmony_ci * para handle:  hichain instance
35817fd14ceSopenharmony_ci * para params:  operating parameter, self_auth_id: controller auth id, peer_auth_id: peer auth id
35917fd14ceSopenharmony_ci * para auth_id:  unauthorized auth id
36017fd14ceSopenharmony_ci * para user_type:  unauthorized user type. 0 : ACCESSORY ; 1 : CONTROLLER
36117fd14ceSopenharmony_ci * return  0 ok, others error
36217fd14ceSopenharmony_ci */
36317fd14ceSopenharmony_ciint32_t remove_auth_info(hc_handle handle, const struct operation_parameter *params,
36417fd14ceSopenharmony_ci    const struct hc_auth_id *auth_id, int32_t user_type);
36517fd14ceSopenharmony_ci
36617fd14ceSopenharmony_ci/*
36717fd14ceSopenharmony_ci * Delete local saved authentication
36817fd14ceSopenharmony_ci *
36917fd14ceSopenharmony_ci * para handle:  hichain instance
37017fd14ceSopenharmony_ci * para user_info:  user to be deleted
37117fd14ceSopenharmony_ci * return  0 ok, others error
37217fd14ceSopenharmony_ci */
37317fd14ceSopenharmony_ciint32_t delete_local_auth_info(hc_handle handle, struct hc_user_info *user_info);
37417fd14ceSopenharmony_ci
37517fd14ceSopenharmony_ci/*
37617fd14ceSopenharmony_ci * Judge trusted peer
37717fd14ceSopenharmony_ci *
37817fd14ceSopenharmony_ci * para handle:  hichain instance
37917fd14ceSopenharmony_ci * para hc_user_info:  user to be judged
38017fd14ceSopenharmony_ci * return 0 untrusted, 1 trusted(bind), 2 trusted(auth)
38117fd14ceSopenharmony_ci */
38217fd14ceSopenharmony_ciDLL_API_PUBLIC int32_t is_trust_peer(hc_handle handle, struct hc_user_info *user_info);
38317fd14ceSopenharmony_ci
38417fd14ceSopenharmony_ci/*
38517fd14ceSopenharmony_ci * List trusted peers
38617fd14ceSopenharmony_ci *
38717fd14ceSopenharmony_ci * para handle:  hichain instance
38817fd14ceSopenharmony_ci * para trust_user_type:  the type of peer. 0 : ACCESSORY ; 1 : CONTROLLER
38917fd14ceSopenharmony_ci * para owner_auth_id:  input null, output binding list; input owner, output auth list;others, output null
39017fd14ceSopenharmony_ci * para auth_id_list:  list to receive auth id
39117fd14ceSopenharmony_ci * return  number of trusted peers
39217fd14ceSopenharmony_ci */
39317fd14ceSopenharmony_ciDLL_API_PUBLIC uint32_t list_trust_peers(hc_handle handle, int32_t trust_user_type,
39417fd14ceSopenharmony_ci    struct hc_auth_id *owner_auth_id, struct hc_auth_id **auth_id_list);
39517fd14ceSopenharmony_ci#endif /* _CUT_XXX_ */
39617fd14ceSopenharmony_ci
39717fd14ceSopenharmony_ci/*
39817fd14ceSopenharmony_ci * Set self authId
39917fd14ceSopenharmony_ci *
40017fd14ceSopenharmony_ci * para handle:  hichain instance
40117fd14ceSopenharmony_ci * para data:  the data of auth id
40217fd14ceSopenharmony_ci * return  void
40317fd14ceSopenharmony_ci */
40417fd14ceSopenharmony_ciDLL_API_PUBLIC void set_self_auth_id(hc_handle handle, struct uint8_buff *data);
40517fd14ceSopenharmony_ci
40617fd14ceSopenharmony_ci#ifdef __cplusplus
40717fd14ceSopenharmony_ci}
40817fd14ceSopenharmony_ci#endif
40917fd14ceSopenharmony_ci
41017fd14ceSopenharmony_ci#endif /* __HICHAIN_H__ */
411