117fd14ceSopenharmony_ci/*
217fd14ceSopenharmony_ci * Copyright (C) 2021-2023 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 DEVICE_AUTH_H
1717fd14ceSopenharmony_ci#define DEVICE_AUTH_H
1817fd14ceSopenharmony_ci
1917fd14ceSopenharmony_ci#include <stdint.h>
2017fd14ceSopenharmony_ci#include <stdbool.h>
2117fd14ceSopenharmony_ci
2217fd14ceSopenharmony_ci#if defined(__LINUX__) || defined(_UNIX)
2317fd14ceSopenharmony_ci#define DEVICE_AUTH_API_PUBLIC __attribute__ ((visibility("default")))
2417fd14ceSopenharmony_ci#else
2517fd14ceSopenharmony_ci#define DEVICE_AUTH_API_PUBLIC
2617fd14ceSopenharmony_ci#endif
2717fd14ceSopenharmony_ci
2817fd14ceSopenharmony_ci#define FIELD_GROUP_ID "groupId"
2917fd14ceSopenharmony_ci#define FIELD_GROUP_TYPE "groupType"
3017fd14ceSopenharmony_ci#define FIELD_GROUP_NAME "groupName"
3117fd14ceSopenharmony_ci#define FIELD_PEER_DEVICE_ID "peerDeviceId"
3217fd14ceSopenharmony_ci#define FIELD_IS_ADMIN "isAdmin"
3317fd14ceSopenharmony_ci#define FIELD_CREDENTIAL_TYPE "credentialType"
3417fd14ceSopenharmony_ci#define FIELD_IS_FORCE_DELETE "isForceDelete"
3517fd14ceSopenharmony_ci#define FIELD_IS_IGNORE_CHANNEL "isIgnoreChannel"
3617fd14ceSopenharmony_ci#define FIELD_CONNECT_PARAMS "connectParams"
3717fd14ceSopenharmony_ci#define FIELD_ADD_ID "addId"
3817fd14ceSopenharmony_ci#define FIELD_DELETE_ID "deleteId"
3917fd14ceSopenharmony_ci#define FIELD_APP_ID "appId"
4017fd14ceSopenharmony_ci#define FIELD_SERVICE_TYPE "serviceType"
4117fd14ceSopenharmony_ci#define FIELD_IS_DEVICE_LEVEL "isDeviceLevel"
4217fd14ceSopenharmony_ci#define FIELD_ALTERNATIVE "alternative"
4317fd14ceSopenharmony_ci#define FIELD_PEER_UDID "peerUdid"
4417fd14ceSopenharmony_ci#define FIELD_PEER_CONN_DEVICE_ID "peerConnDeviceId"
4517fd14ceSopenharmony_ci#define FIELD_KEY_LENGTH "keyLength"
4617fd14ceSopenharmony_ci#define FIELD_IS_CLIENT "isClient"
4717fd14ceSopenharmony_ci#define FIELD_SESSION_KEY "sessionKey"
4817fd14ceSopenharmony_ci#define FIELD_AUTH_FORM "authForm"
4917fd14ceSopenharmony_ci#define FIELD_CONFIRMATION "confirmation"
5017fd14ceSopenharmony_ci#define FIELD_GROUP_OWNER "groupOwner"
5117fd14ceSopenharmony_ci#define FIELD_PEER_AUTH_ID "peerAuthId"
5217fd14ceSopenharmony_ci#define FIELD_PEER_USER_TYPE "peerUserType"
5317fd14ceSopenharmony_ci#define FIELD_PEER_USER_ID "peerUserId"
5417fd14ceSopenharmony_ci#define FIELD_SERVICE_PKG_NAME "servicePkgName"
5517fd14ceSopenharmony_ci#define FIELD_USER_TYPE "userType"
5617fd14ceSopenharmony_ci#define FIELD_USER_ID "userId"
5717fd14ceSopenharmony_ci#define FIELD_SHARED_USER_ID "sharedUserId"
5817fd14ceSopenharmony_ci#define FIELD_OWNER_USER_ID "ownerUserId"
5917fd14ceSopenharmony_ci#define FIELD_DEVICE_ID "deviceId"
6017fd14ceSopenharmony_ci#define FIELD_PIN_CODE "pinCode"
6117fd14ceSopenharmony_ci#define FIELD_AUTH_ID "authId"
6217fd14ceSopenharmony_ci#define FIELD_UDID "udid"
6317fd14ceSopenharmony_ci#define FIELD_IS_SELF_PK "isSelfPk"
6417fd14ceSopenharmony_ci#define FIELD_GROUP_VISIBILITY "groupVisibility"
6517fd14ceSopenharmony_ci#define FIELD_EXPIRE_TIME "expireTime"
6617fd14ceSopenharmony_ci#define FIELD_IS_DELETE_ALL "isDeleteAll"
6717fd14ceSopenharmony_ci#define FIELD_OS_ACCOUNT_ID "osAccountId"
6817fd14ceSopenharmony_ci#define FIELD_ACQURIED_TYPE "acquireType"
6917fd14ceSopenharmony_ci#define FIELD_CRED_OP_FLAG "flag"
7017fd14ceSopenharmony_ci#define FIELD_CRED_OP_RESULT "result"
7117fd14ceSopenharmony_ci#define FIELD_AUTH_CODE "authCode"
7217fd14ceSopenharmony_ci#define FIELD_DEVICE_LIST "deviceList"
7317fd14ceSopenharmony_ci#define FIELD_IS_UDID_HASH "isUdidHash"
7417fd14ceSopenharmony_ci#define FIELD_PROTOCOL_EXPAND "protocolExpand"
7517fd14ceSopenharmony_ci#define FIELD_IS_SELF_FROM_UPGRADE "isSelfFromUpgrade"
7617fd14ceSopenharmony_ci#define FIELD_IS_PEER_FROM_UPGRADE "isPeerFromUpgrade"
7717fd14ceSopenharmony_ci
7817fd14ceSopenharmony_ci/**
7917fd14ceSopenharmony_ci * @brief protocol expand value for bind
8017fd14ceSopenharmony_ci */
8117fd14ceSopenharmony_citypedef enum {
8217fd14ceSopenharmony_ci    /** use this flag to support bind base on symmetric credential when interact with lite device */
8317fd14ceSopenharmony_ci    LITE_PROTOCOL_STANDARD_MODE = 1,
8417fd14ceSopenharmony_ci    /** use this flag when interact with lite device which used iso with short pin */
8517fd14ceSopenharmony_ci    LITE_PROTOCOL_COMPATIBILITY_MODE = 2,
8617fd14ceSopenharmony_ci} ProtocolExpandValue;
8717fd14ceSopenharmony_ci
8817fd14ceSopenharmony_ci/**
8917fd14ceSopenharmony_ci * @brief type of local system account
9017fd14ceSopenharmony_ci */
9117fd14ceSopenharmony_citypedef enum {
9217fd14ceSopenharmony_ci    /** default local system account */
9317fd14ceSopenharmony_ci    DEFAULT_OS_ACCOUNT = 0,
9417fd14ceSopenharmony_ci    /** the local system account of foreground user */
9517fd14ceSopenharmony_ci    ANY_OS_ACCOUNT = -2,
9617fd14ceSopenharmony_ci} OsAccountEnum;
9717fd14ceSopenharmony_ci
9817fd14ceSopenharmony_ci/**
9917fd14ceSopenharmony_ci * @brief describes all group types
10017fd14ceSopenharmony_ci */
10117fd14ceSopenharmony_citypedef enum {
10217fd14ceSopenharmony_ci    /** refers to all group types and is used to query group information */
10317fd14ceSopenharmony_ci    ALL_GROUP = 0,
10417fd14ceSopenharmony_ci    /** group type of the same clound account */
10517fd14ceSopenharmony_ci    IDENTICAL_ACCOUNT_GROUP = 1,
10617fd14ceSopenharmony_ci    /** group type of the p2p binding */
10717fd14ceSopenharmony_ci    PEER_TO_PEER_GROUP = 256,
10817fd14ceSopenharmony_ci    /** group type shared to other cloud accounts */
10917fd14ceSopenharmony_ci    ACROSS_ACCOUNT_AUTHORIZE_GROUP = 1282
11017fd14ceSopenharmony_ci} GroupType;
11117fd14ceSopenharmony_ci
11217fd14ceSopenharmony_ci/**
11317fd14ceSopenharmony_ci * @brief describes all group visibility types
11417fd14ceSopenharmony_ci */
11517fd14ceSopenharmony_citypedef enum {
11617fd14ceSopenharmony_ci    /** visibility type of private group */
11717fd14ceSopenharmony_ci    GROUP_VISIBILITY_PRIVATE = 0,
11817fd14ceSopenharmony_ci    /** visibility type of public group */
11917fd14ceSopenharmony_ci    GROUP_VISIBILITY_PUBLIC = -1
12017fd14ceSopenharmony_ci} GroupVisibility;
12117fd14ceSopenharmony_ci
12217fd14ceSopenharmony_ci/**
12317fd14ceSopenharmony_ci * @brief describes all group operation codes
12417fd14ceSopenharmony_ci */
12517fd14ceSopenharmony_citypedef enum {
12617fd14ceSopenharmony_ci    /** opeation code for group creation */
12717fd14ceSopenharmony_ci    GROUP_CREATE = 0,
12817fd14ceSopenharmony_ci    /** opeation code for group destruction */
12917fd14ceSopenharmony_ci    GROUP_DISBAND = 1,
13017fd14ceSopenharmony_ci    /** opeation code for inviting the peer device to join the local trusted group */
13117fd14ceSopenharmony_ci    MEMBER_INVITE = 2,
13217fd14ceSopenharmony_ci    /** opeation code for joining the peer trusted group */
13317fd14ceSopenharmony_ci    MEMBER_JOIN = 3,
13417fd14ceSopenharmony_ci    /** opeation code for unbinding with peer device */
13517fd14ceSopenharmony_ci    MEMBER_DELETE = 4,
13617fd14ceSopenharmony_ci} GroupOperationCode;
13717fd14ceSopenharmony_ci
13817fd14ceSopenharmony_ci/**
13917fd14ceSopenharmony_ci * @brief describes all group authentication types
14017fd14ceSopenharmony_ci */
14117fd14ceSopenharmony_citypedef enum {
14217fd14ceSopenharmony_ci    /** invalid group authentication type */
14317fd14ceSopenharmony_ci    AUTH_FORM_INVALID_TYPE = -1,
14417fd14ceSopenharmony_ci    /** p2p group authentication type */
14517fd14ceSopenharmony_ci    AUTH_FORM_ACCOUNT_UNRELATED = 0,
14617fd14ceSopenharmony_ci    /** group authentication type of the same cloud account */
14717fd14ceSopenharmony_ci    AUTH_FORM_IDENTICAL_ACCOUNT = 1,
14817fd14ceSopenharmony_ci    /** group authentication type shared to other cloud accounts */
14917fd14ceSopenharmony_ci    AUTH_FORM_ACROSS_ACCOUNT = 2,
15017fd14ceSopenharmony_ci} GroupAuthForm;
15117fd14ceSopenharmony_ci
15217fd14ceSopenharmony_ci/**
15317fd14ceSopenharmony_ci * @brief describes all credential types
15417fd14ceSopenharmony_ci */
15517fd14ceSopenharmony_citypedef enum {
15617fd14ceSopenharmony_ci    /** symmetrical credential type */
15717fd14ceSopenharmony_ci    SYMMETRIC_CRED = 1,
15817fd14ceSopenharmony_ci    /** asymmetric credential type */
15917fd14ceSopenharmony_ci    ASYMMETRIC_CRED = 2,
16017fd14ceSopenharmony_ci} CredType;
16117fd14ceSopenharmony_ci
16217fd14ceSopenharmony_ci/**
16317fd14ceSopenharmony_ci * @brief describes all device types
16417fd14ceSopenharmony_ci */
16517fd14ceSopenharmony_citypedef enum {
16617fd14ceSopenharmony_ci    /** device type is accessory */
16717fd14ceSopenharmony_ci    DEVICE_TYPE_ACCESSORY = 0,
16817fd14ceSopenharmony_ci    /** device type is controller */
16917fd14ceSopenharmony_ci    DEVICE_TYPE_CONTROLLER = 1,
17017fd14ceSopenharmony_ci    /** device type is proxy */
17117fd14ceSopenharmony_ci    DEVICE_TYPE_PROXY = 2
17217fd14ceSopenharmony_ci} UserType;
17317fd14ceSopenharmony_ci
17417fd14ceSopenharmony_ci/**
17517fd14ceSopenharmony_ci * @brief describes request response results
17617fd14ceSopenharmony_ci */
17717fd14ceSopenharmony_citypedef enum {
17817fd14ceSopenharmony_ci    /** reject the request from the peer device */
17917fd14ceSopenharmony_ci    REQUEST_REJECTED = 0x80000005,
18017fd14ceSopenharmony_ci    /** accept the request from the peer device */
18117fd14ceSopenharmony_ci    REQUEST_ACCEPTED = 0x80000006,
18217fd14ceSopenharmony_ci} RequestResponse;
18317fd14ceSopenharmony_ci
18417fd14ceSopenharmony_ci/**
18517fd14ceSopenharmony_ci * @brief This structure provides the ability to monitor changes in trusted groups and devices.
18617fd14ceSopenharmony_ci */
18717fd14ceSopenharmony_citypedef struct {
18817fd14ceSopenharmony_ci    /** Call it when a new group is created. */
18917fd14ceSopenharmony_ci    void (*onGroupCreated)(const char *groupInfo);
19017fd14ceSopenharmony_ci    /** Call it when a group is destroyed. */
19117fd14ceSopenharmony_ci    void (*onGroupDeleted)(const char *groupInfo);
19217fd14ceSopenharmony_ci    /** Call it when a group adds a trusted device. */
19317fd14ceSopenharmony_ci    void (*onDeviceBound)(const char *peerUdid, const char *groupInfo);
19417fd14ceSopenharmony_ci    /** Call it when a group deletes a trusted device. */
19517fd14ceSopenharmony_ci    void (*onDeviceUnBound)(const char *peerUdid, const char *groupInfo);
19617fd14ceSopenharmony_ci    /** Call it when a device has no trust relationship in all groups. */
19717fd14ceSopenharmony_ci    void (*onDeviceNotTrusted)(const char *peerUdid);
19817fd14ceSopenharmony_ci    /** Call it when a device has no trust relationship in all groups of a certain type. */
19917fd14ceSopenharmony_ci    void (*onLastGroupDeleted)(const char *peerUdid, int groupType);
20017fd14ceSopenharmony_ci    void (*onTrustedDeviceNumChanged)(int curTrustedDeviceNum);
20117fd14ceSopenharmony_ci} DataChangeListener;
20217fd14ceSopenharmony_ci
20317fd14ceSopenharmony_ci/**
20417fd14ceSopenharmony_ci * @brief This structure describes the callbacks that need to be provided by the business.
20517fd14ceSopenharmony_ci */
20617fd14ceSopenharmony_citypedef struct {
20717fd14ceSopenharmony_ci    /** Call it when there is data to be sent. */
20817fd14ceSopenharmony_ci    bool (*onTransmit)(int64_t requestId, const uint8_t *data, uint32_t dataLen);
20917fd14ceSopenharmony_ci    /** Call it when the session key is returned. */
21017fd14ceSopenharmony_ci    void (*onSessionKeyReturned)(int64_t requestId, const uint8_t *sessionKey, uint32_t sessionKeyLen);
21117fd14ceSopenharmony_ci    /** Call it when the asynchronous operation is successful. */
21217fd14ceSopenharmony_ci    void (*onFinish)(int64_t requestId, int operationCode, const char *returnData);
21317fd14ceSopenharmony_ci    /** Call it when the asynchronous operation fails. */
21417fd14ceSopenharmony_ci    void (*onError)(int64_t requestId, int operationCode, int errorCode, const char *errorReturn);
21517fd14ceSopenharmony_ci    /** Call it when receiving requests from other devices. */
21617fd14ceSopenharmony_ci    char *(*onRequest)(int64_t requestId, int operationCode, const char *reqParams);
21717fd14ceSopenharmony_ci} DeviceAuthCallback;
21817fd14ceSopenharmony_ci
21917fd14ceSopenharmony_ci/**
22017fd14ceSopenharmony_ci * @brief This structure provides all the capabilities of group authentication.
22117fd14ceSopenharmony_ci */
22217fd14ceSopenharmony_citypedef struct {
22317fd14ceSopenharmony_ci    /** This interface is used to process authentication data. */
22417fd14ceSopenharmony_ci    int32_t (*processData)(int64_t authReqId, const uint8_t *data, uint32_t dataLen,
22517fd14ceSopenharmony_ci        const DeviceAuthCallback *gaCallback);
22617fd14ceSopenharmony_ci    /** This interface is used to initiate authentication between devices. */
22717fd14ceSopenharmony_ci    int32_t (*authDevice)(int32_t osAccountId, int64_t authReqId, const char *authParams,
22817fd14ceSopenharmony_ci        const DeviceAuthCallback *gaCallback);
22917fd14ceSopenharmony_ci    /** This interface is used to cancel an authentication process. */
23017fd14ceSopenharmony_ci    void (*cancelRequest)(int64_t requestId, const char *appId);
23117fd14ceSopenharmony_ci    /** This interface is used to get real info by pseudonym id. */
23217fd14ceSopenharmony_ci    int32_t (*getRealInfo)(int32_t osAccountId, const char *pseudonymId, char **realInfo);
23317fd14ceSopenharmony_ci    /** This interface is used to get pseudonym id by an index. */
23417fd14ceSopenharmony_ci    int32_t (*getPseudonymId)(int32_t osAccountId, const char *indexKey, char **pseudonymId);
23517fd14ceSopenharmony_ci} GroupAuthManager;
23617fd14ceSopenharmony_ci
23717fd14ceSopenharmony_citypedef struct {
23817fd14ceSopenharmony_ci    /** This interface is used to register business callbacks. */
23917fd14ceSopenharmony_ci    int32_t (*regCallback)(const char *appId, const DeviceAuthCallback *callback);
24017fd14ceSopenharmony_ci    /** This interface is used to unregister business callbacks. */
24117fd14ceSopenharmony_ci    int32_t (*unRegCallback)(const char *appId);
24217fd14ceSopenharmony_ci    /** This interface is used to register callback for data change monitoring. */
24317fd14ceSopenharmony_ci    int32_t (*regDataChangeListener)(const char *appId, const DataChangeListener *listener);
24417fd14ceSopenharmony_ci    /** This interface is used to unregister callback for data change monitoring. */
24517fd14ceSopenharmony_ci    int32_t (*unRegDataChangeListener)(const char *appId);
24617fd14ceSopenharmony_ci    /** This interface is used to create a trusted group. */
24717fd14ceSopenharmony_ci    int32_t (*createGroup)(int32_t osAccountId, int64_t requestId, const char *appId, const char *createParams);
24817fd14ceSopenharmony_ci    /** This interface is used to delete a trusted group. */
24917fd14ceSopenharmony_ci    int32_t (*deleteGroup)(int32_t osAccountId, int64_t requestId, const char *appId, const char *disbandParams);
25017fd14ceSopenharmony_ci    /** This interface is used to add a trusted device to a trusted group. */
25117fd14ceSopenharmony_ci    int32_t (*addMemberToGroup)(int32_t osAccountId, int64_t requestId, const char *appId, const char *addParams);
25217fd14ceSopenharmony_ci    /** This interface is used to delete a trusted device from a trusted group. */
25317fd14ceSopenharmony_ci    int32_t (*deleteMemberFromGroup)(int32_t osAccountId, int64_t requestId, const char *appId,
25417fd14ceSopenharmony_ci        const char *deleteParams);
25517fd14ceSopenharmony_ci    /** This interface is used to process data of binding or unbinding devices. */
25617fd14ceSopenharmony_ci    int32_t (*processData)(int64_t requestId, const uint8_t *data, uint32_t dataLen);
25717fd14ceSopenharmony_ci    /** This interface is used to batch add trusted devices with account relationships. */
25817fd14ceSopenharmony_ci    int32_t (*addMultiMembersToGroup)(int32_t osAccountId, const char *appId, const char *addParams);
25917fd14ceSopenharmony_ci    /** This interface is used to batch delete trusted devices with account relationships. */
26017fd14ceSopenharmony_ci    int32_t (*delMultiMembersFromGroup)(int32_t osAccountId, const char *appId, const char *deleteParams);
26117fd14ceSopenharmony_ci    /** This interface is used to obtain the registration information of the local device. */
26217fd14ceSopenharmony_ci    int32_t (*getRegisterInfo)(const char *reqJsonStr, char **returnRegisterInfo);
26317fd14ceSopenharmony_ci    /** This interface is used to check whether the specified application has access rights to the group. */
26417fd14ceSopenharmony_ci    int32_t (*checkAccessToGroup)(int32_t osAccountId, const char *appId, const char *groupId);
26517fd14ceSopenharmony_ci    /** This interface is used to obtain all public key information related to a device. */
26617fd14ceSopenharmony_ci    int32_t (*getPkInfoList)(int32_t osAccountId, const char *appId, const char *queryParams, char **returnInfoList,
26717fd14ceSopenharmony_ci        uint32_t *returnInfoNum);
26817fd14ceSopenharmony_ci    /** This interface is used to obtain group information of a group. */
26917fd14ceSopenharmony_ci    int32_t (*getGroupInfoById)(int32_t osAccountId, const char *appId, const char *groupId, char **returnGroupInfo);
27017fd14ceSopenharmony_ci    /** This interface is used to obtain the group information of groups that meet the query parameters. */
27117fd14ceSopenharmony_ci    int32_t (*getGroupInfo)(int32_t osAccountId, const char *appId, const char *queryParams,
27217fd14ceSopenharmony_ci        char **returnGroupVec, uint32_t *groupNum);
27317fd14ceSopenharmony_ci    /** This interface is used to obtain all group information of a specific group type. */
27417fd14ceSopenharmony_ci    int32_t (*getJoinedGroups)(int32_t osAccountId, const char *appId, int groupType,
27517fd14ceSopenharmony_ci        char **returnGroupVec, uint32_t *groupNum);
27617fd14ceSopenharmony_ci    /** This interface is used to obtain all group information related to a certain device. */
27717fd14ceSopenharmony_ci    int32_t (*getRelatedGroups)(int32_t osAccountId, const char *appId, const char *peerDeviceId,
27817fd14ceSopenharmony_ci        char **returnGroupVec, uint32_t *groupNum);
27917fd14ceSopenharmony_ci    /** This interface is used to obtain the information of a trusted device. */
28017fd14ceSopenharmony_ci    int32_t (*getDeviceInfoById)(int32_t osAccountId, const char *appId, const char *deviceId, const char *groupId,
28117fd14ceSopenharmony_ci        char **returnDeviceInfo);
28217fd14ceSopenharmony_ci    /** This interface is used to obtain all trusted device information in a group. */
28317fd14ceSopenharmony_ci    int32_t (*getTrustedDevices)(int32_t osAccountId, const char *appId, const char *groupId,
28417fd14ceSopenharmony_ci        char **returnDevInfoVec, uint32_t *deviceNum);
28517fd14ceSopenharmony_ci    /** This interface is used to query whether a specified device exists in the group. */
28617fd14ceSopenharmony_ci    bool (*isDeviceInGroup)(int32_t osAccountId, const char *appId, const char *groupId, const char *deviceId);
28717fd14ceSopenharmony_ci    /** This interface is used to cancel a binding or unbinding process. */
28817fd14ceSopenharmony_ci    void (*cancelRequest)(int64_t requestId, const char *appId);
28917fd14ceSopenharmony_ci    /** This interface is used to destroy the information returned by the internal allocated memory. */
29017fd14ceSopenharmony_ci    void (*destroyInfo)(char **returnInfo);
29117fd14ceSopenharmony_ci} DeviceGroupManager;
29217fd14ceSopenharmony_ci
29317fd14ceSopenharmony_ci/**
29417fd14ceSopenharmony_ci * @brief This enum provides all the operationCode of interface ProcessCredential.
29517fd14ceSopenharmony_ci */
29617fd14ceSopenharmony_cienum {
29717fd14ceSopenharmony_ci    /** invalid operationCode for initialize */
29817fd14ceSopenharmony_ci    CRED_OP_INVALID = -1,
29917fd14ceSopenharmony_ci    /** operationCode for ProcessCredential to query credential */
30017fd14ceSopenharmony_ci    CRED_OP_QUERY,
30117fd14ceSopenharmony_ci    /** operationCode for ProcessCredential to create credential */
30217fd14ceSopenharmony_ci    CRED_OP_CREATE,
30317fd14ceSopenharmony_ci    /** operationCode for ProcessCredential to import credential */
30417fd14ceSopenharmony_ci    CRED_OP_IMPORT,
30517fd14ceSopenharmony_ci    /** operationCode for ProcessCredential to delete credential */
30617fd14ceSopenharmony_ci    CRED_OP_DELETE,
30717fd14ceSopenharmony_ci};
30817fd14ceSopenharmony_ci
30917fd14ceSopenharmony_ci/**
31017fd14ceSopenharmony_ci * @brief This enum provides all the flag of reqJsion for interface ProcessCredential.
31117fd14ceSopenharmony_ci */
31217fd14ceSopenharmony_cienum {
31317fd14ceSopenharmony_ci    /** invalid flag for initialize */
31417fd14ceSopenharmony_ci    RETURN_FLAG_INVALID = -1,
31517fd14ceSopenharmony_ci    /** flag for only return result */
31617fd14ceSopenharmony_ci    RETURN_FLAG_DEFAULT,
31717fd14ceSopenharmony_ci    /** flag for return result and publicKey */
31817fd14ceSopenharmony_ci    RETURN_FLAG_PUBLIC_KEY,
31917fd14ceSopenharmony_ci};
32017fd14ceSopenharmony_ci
32117fd14ceSopenharmony_ci/**
32217fd14ceSopenharmony_ci * @brief This enum provides all the acquireType of interface StartAuthDevice & ProcessAuthDevice.
32317fd14ceSopenharmony_ci */
32417fd14ceSopenharmony_citypedef enum {
32517fd14ceSopenharmony_ci    /** invalid acquireType for initialize */
32617fd14ceSopenharmony_ci    ACQUIRE_TYPE_INVALID = -1,
32717fd14ceSopenharmony_ci    /** acquireType for p2p bind */
32817fd14ceSopenharmony_ci    P2P_BIND,
32917fd14ceSopenharmony_ci} AcquireType;
33017fd14ceSopenharmony_ci
33117fd14ceSopenharmony_ci#ifdef __cplusplus
33217fd14ceSopenharmony_ciextern "C" {
33317fd14ceSopenharmony_ci#endif
33417fd14ceSopenharmony_ci
33517fd14ceSopenharmony_ci/**
33617fd14ceSopenharmony_ci * @brief Process Credential data.
33717fd14ceSopenharmony_ci *
33817fd14ceSopenharmony_ci * This API is used to process Credential data.
33917fd14ceSopenharmony_ci *
34017fd14ceSopenharmony_ci * @param operationCode: use one of CRED_OP_QUERY|CRED_OP_CREATE|CRED_OP_IMPORT|CRED_OP_DELETE
34117fd14ceSopenharmony_ci * @param requestParams: json string contains group of osAccountId|deviceId|serviceType|acquireType|flag
34217fd14ceSopenharmony_ci * @param returnData: json string contains group of result|publicKey
34317fd14ceSopenharmony_ci *
34417fd14ceSopenharmony_ci * @return When the ipc call is successful, it returns HC_SUCCESS.
34517fd14ceSopenharmony_ci * Otherwise, it returns other values.
34617fd14ceSopenharmony_ci */
34717fd14ceSopenharmony_ciDEVICE_AUTH_API_PUBLIC int32_t ProcessCredential(
34817fd14ceSopenharmony_ci    int32_t operationCode, const char *requestParams, char **returnData);
34917fd14ceSopenharmony_ci
35017fd14ceSopenharmony_ci/**
35117fd14ceSopenharmony_ci * @brief Start to auth device.
35217fd14ceSopenharmony_ci *
35317fd14ceSopenharmony_ci * This API is used to start to auth device.
35417fd14ceSopenharmony_ci *
35517fd14ceSopenharmony_ci * @param requestId: id of a request
35617fd14ceSopenharmony_ci * @param authParams: json string contains group of osAccountId|deviceId|serviceType|acquireType|pinCode
35717fd14ceSopenharmony_ci * @param callbak: callback object
35817fd14ceSopenharmony_ci *
35917fd14ceSopenharmony_ci * @return When the ipc call is successful, it returns HC_SUCCESS.
36017fd14ceSopenharmony_ci * Otherwise, it returns other values.
36117fd14ceSopenharmony_ci */
36217fd14ceSopenharmony_ciDEVICE_AUTH_API_PUBLIC int32_t StartAuthDevice(
36317fd14ceSopenharmony_ci    int64_t requestId, const char *authParams, const DeviceAuthCallback *callbak);
36417fd14ceSopenharmony_ci
36517fd14ceSopenharmony_ci/**
36617fd14ceSopenharmony_ci * @brief Process auth device data.
36717fd14ceSopenharmony_ci *
36817fd14ceSopenharmony_ci * This API is used to process auth device data.
36917fd14ceSopenharmony_ci *
37017fd14ceSopenharmony_ci * @param requestId: id of a request
37117fd14ceSopenharmony_ci * @param authParams: json string contains group of osAccountId|data
37217fd14ceSopenharmony_ci * @param callbak: callback object
37317fd14ceSopenharmony_ci *
37417fd14ceSopenharmony_ci * @return When the ipc call is successful, it returns HC_SUCCESS.
37517fd14ceSopenharmony_ci * Otherwise, it returns other values.
37617fd14ceSopenharmony_ci */
37717fd14ceSopenharmony_ciDEVICE_AUTH_API_PUBLIC int32_t ProcessAuthDevice(
37817fd14ceSopenharmony_ci    int64_t requestId, const char *authParams, const DeviceAuthCallback *callbak);
37917fd14ceSopenharmony_ci
38017fd14ceSopenharmony_ci/**
38117fd14ceSopenharmony_ci * @brief Cancle auth device request.
38217fd14ceSopenharmony_ci *
38317fd14ceSopenharmony_ci * This API is used to cancle auth device request.
38417fd14ceSopenharmony_ci *
38517fd14ceSopenharmony_ci * @param requestId: id of a request
38617fd14ceSopenharmony_ci * @param authParams: json string contains osAccountId or NULL
38717fd14ceSopenharmony_ci *
38817fd14ceSopenharmony_ci * @return When the ipc call is successful, it returns HC_SUCCESS.
38917fd14ceSopenharmony_ci * Otherwise, it returns other values.
39017fd14ceSopenharmony_ci */
39117fd14ceSopenharmony_ciDEVICE_AUTH_API_PUBLIC int32_t CancelAuthRequest(int64_t requestId, const char *authParams);
39217fd14ceSopenharmony_ci
39317fd14ceSopenharmony_ci/**
39417fd14ceSopenharmony_ci * @brief Initialize device auth service.
39517fd14ceSopenharmony_ci *
39617fd14ceSopenharmony_ci * This API is used to initialize device auth service.
39717fd14ceSopenharmony_ci *
39817fd14ceSopenharmony_ci * @return When the service initialization is successful, it returns HC_SUCCESS.
39917fd14ceSopenharmony_ci * Otherwise, it returns other values.
40017fd14ceSopenharmony_ci * @see DestroyDeviceAuthService
40117fd14ceSopenharmony_ci */
40217fd14ceSopenharmony_ciDEVICE_AUTH_API_PUBLIC int InitDeviceAuthService(void);
40317fd14ceSopenharmony_ci
40417fd14ceSopenharmony_ci/**
40517fd14ceSopenharmony_ci * @brief Destroy device auth service.
40617fd14ceSopenharmony_ci *
40717fd14ceSopenharmony_ci * This API is used to destroy device auth service.
40817fd14ceSopenharmony_ci *
40917fd14ceSopenharmony_ci * @see InitDeviceAuthService
41017fd14ceSopenharmony_ci */
41117fd14ceSopenharmony_ciDEVICE_AUTH_API_PUBLIC void DestroyDeviceAuthService(void);
41217fd14ceSopenharmony_ci
41317fd14ceSopenharmony_ci/**
41417fd14ceSopenharmony_ci * @brief Get group authentication instance.
41517fd14ceSopenharmony_ci *
41617fd14ceSopenharmony_ci * This API is used to get group authentication instance.
41717fd14ceSopenharmony_ci * The InitDeviceAuthService function must be called before using this method.
41817fd14ceSopenharmony_ci *
41917fd14ceSopenharmony_ci * @return When the method call result is successful, it returns GroupAuthManager instance.
42017fd14ceSopenharmony_ci * Otherwise, it returns NULL.
42117fd14ceSopenharmony_ci */
42217fd14ceSopenharmony_ciDEVICE_AUTH_API_PUBLIC const GroupAuthManager *GetGaInstance(void);
42317fd14ceSopenharmony_ci
42417fd14ceSopenharmony_ci/**
42517fd14ceSopenharmony_ci * @brief Get group management instance.
42617fd14ceSopenharmony_ci *
42717fd14ceSopenharmony_ci * This API is used to get group management instance.
42817fd14ceSopenharmony_ci * The InitDeviceAuthService function must be called before using this method.
42917fd14ceSopenharmony_ci *
43017fd14ceSopenharmony_ci * @return When the method call result is successful, it returns DeviceGroupManager instance.
43117fd14ceSopenharmony_ci * Otherwise, it returns NULL.
43217fd14ceSopenharmony_ci */
43317fd14ceSopenharmony_ciDEVICE_AUTH_API_PUBLIC const DeviceGroupManager *GetGmInstance(void);
43417fd14ceSopenharmony_ci
43517fd14ceSopenharmony_ci#ifdef __cplusplus
43617fd14ceSopenharmony_ci}
43717fd14ceSopenharmony_ci#endif
43817fd14ceSopenharmony_ci#endif
439