179a732c7Sopenharmony_ci/*
279a732c7Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
379a732c7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
479a732c7Sopenharmony_ci * you may not use this file except in compliance with the License.
579a732c7Sopenharmony_ci * You may obtain a copy of the License at
679a732c7Sopenharmony_ci *
779a732c7Sopenharmony_ci *    http://www.apache.org/licenses/LICENSE-2.0
879a732c7Sopenharmony_ci *
979a732c7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1079a732c7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1179a732c7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1279a732c7Sopenharmony_ci * See the License for the specific language governing permissions and
1379a732c7Sopenharmony_ci * limitations under the License.
1479a732c7Sopenharmony_ci */
1579a732c7Sopenharmony_ci
1679a732c7Sopenharmony_ci#ifndef DEVICE_AUTH_H
1779a732c7Sopenharmony_ci#define DEVICE_AUTH_H
1879a732c7Sopenharmony_ci
1979a732c7Sopenharmony_ci#include <cstdint>
2079a732c7Sopenharmony_ci
2179a732c7Sopenharmony_ci#if defined(__LINUX__) || defined(_UNIX)
2279a732c7Sopenharmony_ci#define DEVICE_AUTH_API_PUBLIC __attribute__ ((visibility("default")))
2379a732c7Sopenharmony_ci#else
2479a732c7Sopenharmony_ci#define DEVICE_AUTH_API_PUBLIC
2579a732c7Sopenharmony_ci#endif
2679a732c7Sopenharmony_ci
2779a732c7Sopenharmony_ci#define FIELD_GROUP_ID "groupId"
2879a732c7Sopenharmony_ci#define FIELD_GROUP_TYPE "groupType"
2979a732c7Sopenharmony_ci#define FIELD_GROUP_NAME "groupName"
3079a732c7Sopenharmony_ci#define FIELD_PEER_DEVICE_ID "peerDeviceId"
3179a732c7Sopenharmony_ci#define FIELD_IS_ADMIN "isAdmin"
3279a732c7Sopenharmony_ci#define FIELD_CREDENTIAL_TYPE "credentialType"
3379a732c7Sopenharmony_ci#define FIELD_IS_FORCE_DELETE "isForceDelete"
3479a732c7Sopenharmony_ci#define FIELD_IS_IGNORE_CHANNEL "isIgnoreChannel"
3579a732c7Sopenharmony_ci#define FIELD_CONNECT_PARAMS "connectParams"
3679a732c7Sopenharmony_ci#define FIELD_ADD_ID "addId"
3779a732c7Sopenharmony_ci#define FIELD_DELETE_ID "deleteId"
3879a732c7Sopenharmony_ci#define FIELD_APP_ID "appId"
3979a732c7Sopenharmony_ci#define FIELD_SERVICE_TYPE "serviceType"
4079a732c7Sopenharmony_ci#define FIELD_PEER_AUTH_STATE "peerAuthState"
4179a732c7Sopenharmony_ci#define FIELD_IS_DEVICE_LEVEL "isDeviceLevel"
4279a732c7Sopenharmony_ci#define FIELD_ALTERNATIVE "alternative"
4379a732c7Sopenharmony_ci#define FIELD_PEER_UDID "peerUdid"
4479a732c7Sopenharmony_ci#define FIELD_PEER_CONN_DEVICE_ID "peerConnDeviceId"
4579a732c7Sopenharmony_ci#define FIELD_KEY_LENGTH "keyLength"
4679a732c7Sopenharmony_ci#define FIELD_IS_CLIENT "isClient"
4779a732c7Sopenharmony_ci#define FIELD_SESSION_KEY "sessionKey"
4879a732c7Sopenharmony_ci#define FIELD_AUTH_FORM "authForm"
4979a732c7Sopenharmony_ci#define FIELD_CONFIRMATION "confirmation"
5079a732c7Sopenharmony_ci#define FIELD_GROUP_OWNER "groupOwner"
5179a732c7Sopenharmony_ci#define FIELD_PEER_AUTH_ID "peerAuthId"
5279a732c7Sopenharmony_ci#define FIELD_PEER_USER_TYPE "peerUserType"
5379a732c7Sopenharmony_ci#define FIELD_PEER_USER_ID "peerUserId"
5479a732c7Sopenharmony_ci#define FIELD_SERVICE_PKG_NAME "servicePkgName"
5579a732c7Sopenharmony_ci#define FIELD_USER_TYPE "userType"
5679a732c7Sopenharmony_ci#define FIELD_USER_ID "userId"
5779a732c7Sopenharmony_ci#define FIELD_SHARED_USER_ID "sharedUserId"
5879a732c7Sopenharmony_ci#define FIELD_OWNER_USER_ID "ownerUserId"
5979a732c7Sopenharmony_ci#define FIELD_DEVICE_ID "deviceId"
6079a732c7Sopenharmony_ci#define FIELD_UID_HASH "uidHash"
6179a732c7Sopenharmony_ci#define FIELD_PIN_CODE "pinCode"
6279a732c7Sopenharmony_ci#define FIELD_AUTH_ID "authId"
6379a732c7Sopenharmony_ci#define FIELD_UDID "udid"
6479a732c7Sopenharmony_ci#define FIELD_IS_SELF_PK "isSelfPk"
6579a732c7Sopenharmony_ci#define FIELD_GROUP_VISIBILITY "groupVisibility"
6679a732c7Sopenharmony_ci#define FIELD_EXPIRE_TIME "expireTime"
6779a732c7Sopenharmony_ci#define FIELD_IS_DELETE_ALL "isDeleteAll"
6879a732c7Sopenharmony_ci#define FIELD_BLE_CHALLENGE "bleChallenge"
6979a732c7Sopenharmony_ci#define FIELD_OS_ACCOUNT_ID "osAccountId"
7079a732c7Sopenharmony_ci#define FIELD_DEVICE_LIST "deviceList"
7179a732c7Sopenharmony_ci#define FIELD_AUTH_CODE "authCode"
7279a732c7Sopenharmony_ci
7379a732c7Sopenharmony_ciusing OsAccountEnum = enum OsAccountEnum : int32_t {
7479a732c7Sopenharmony_ci    DEFAULT_OS_ACCOUNT = 0,
7579a732c7Sopenharmony_ci    INVALID_OS_ACCOUNT = -1,
7679a732c7Sopenharmony_ci    ANY_OS_ACCOUNT = -2,
7779a732c7Sopenharmony_ci};
7879a732c7Sopenharmony_ci
7979a732c7Sopenharmony_ciusing GroupType = enum GroupType : int32_t {
8079a732c7Sopenharmony_ci    ALL_GROUP = 0,
8179a732c7Sopenharmony_ci    IDENTICAL_ACCOUNT_GROUP = 1,
8279a732c7Sopenharmony_ci    PEER_TO_PEER_GROUP = 256,
8379a732c7Sopenharmony_ci    COMPATIBLE_GROUP = 512,
8479a732c7Sopenharmony_ci    ACROSS_ACCOUNT_AUTHORIZE_GROUP = 1282
8579a732c7Sopenharmony_ci};
8679a732c7Sopenharmony_ci
8779a732c7Sopenharmony_ciusing GroupOperationCode = enum GroupOperationCode : int32_t {
8879a732c7Sopenharmony_ci    GROUP_CREATE = 0,
8979a732c7Sopenharmony_ci    GROUP_DISBAND = 1,
9079a732c7Sopenharmony_ci    MEMBER_INVITE = 2,
9179a732c7Sopenharmony_ci    MEMBER_JOIN = 3,
9279a732c7Sopenharmony_ci    MEMBER_DELETE = 4,
9379a732c7Sopenharmony_ci    ACCOUNT_BIND = 5
9479a732c7Sopenharmony_ci};
9579a732c7Sopenharmony_ci
9679a732c7Sopenharmony_ciusing GroupAuthForm = enum GroupAuthForm : int32_t {
9779a732c7Sopenharmony_ci    AUTH_FORM_INVALID_TYPE = -1,
9879a732c7Sopenharmony_ci    AUTH_FORM_ACCOUNT_UNRELATED = 0,
9979a732c7Sopenharmony_ci    AUTH_FORM_IDENTICAL_ACCOUNT = 1,
10079a732c7Sopenharmony_ci    AUTH_FORM_ACROSS_ACCOUNT = 2,
10179a732c7Sopenharmony_ci};
10279a732c7Sopenharmony_ci
10379a732c7Sopenharmony_ciusing CredentialCode = enum CredentialCode : int32_t {
10479a732c7Sopenharmony_ci    IMPORT_SELF_CREDENTIAL = 0,
10579a732c7Sopenharmony_ci    DELETE_SELF_CREDENTIAL = 1,
10679a732c7Sopenharmony_ci    QUERY_SELF_CREDENTIAL_INFO = 2,
10779a732c7Sopenharmony_ci    IMPORT_TRUSTED_CREDENTIALS = 3,
10879a732c7Sopenharmony_ci    DELETE_TRUSTED_CREDENTIALS = 4,
10979a732c7Sopenharmony_ci    QUERY_TRUSTED_CREDENTIALS = 5,
11079a732c7Sopenharmony_ci    REQUEST_SIGNATURE = 6,
11179a732c7Sopenharmony_ci};
11279a732c7Sopenharmony_ci
11379a732c7Sopenharmony_ciusing UserType = enum UserType : int32_t {
11479a732c7Sopenharmony_ci    DEVICE_TYPE_ACCESSORY = 0,
11579a732c7Sopenharmony_ci    DEVICE_TYPE_CONTROLLER = 1,
11679a732c7Sopenharmony_ci    DEVICE_TYPE_PROXY = 2
11779a732c7Sopenharmony_ci};
11879a732c7Sopenharmony_ci
11979a732c7Sopenharmony_ciusing ExpireTime = enum ExpireTime : int32_t {
12079a732c7Sopenharmony_ci    EXPIRE_TIME_INDEFINITE = -1,
12179a732c7Sopenharmony_ci    EXPIRE_TIME_MIN = 1,
12279a732c7Sopenharmony_ci    EXPIRE_TIME_MAX = 90,
12379a732c7Sopenharmony_ci};
12479a732c7Sopenharmony_ci
12579a732c7Sopenharmony_ciusing RequestResponse = enum RequestResponse : int32_t {
12679a732c7Sopenharmony_ci    REQUEST_REJECTED = 0x80000005,
12779a732c7Sopenharmony_ci    REQUEST_ACCEPTED = 0x80000006,
12879a732c7Sopenharmony_ci    REQUEST_WAITING = 0x80000007
12979a732c7Sopenharmony_ci};
13079a732c7Sopenharmony_ci
13179a732c7Sopenharmony_ciusing DataChangeListener = struct DataChangeListener {
13279a732c7Sopenharmony_ci    void (*onGroupCreated)(const char *groupInfo);
13379a732c7Sopenharmony_ci    void (*onGroupDeleted)(const char *groupInfo);
13479a732c7Sopenharmony_ci    void (*onDeviceBound)(const char *peerUdid, const char *groupInfo);
13579a732c7Sopenharmony_ci    void (*onDeviceUnBound)(const char *peerUdid, const char *groupInfo);
13679a732c7Sopenharmony_ci    void (*onDeviceNotTrusted)(const char *peerUdid);
13779a732c7Sopenharmony_ci    void (*onLastGroupDeleted)(const char *peerUdid, int groupType);
13879a732c7Sopenharmony_ci    void (*onTrustedDeviceNumChanged)(int curTrustedDeviceNum);
13979a732c7Sopenharmony_ci};
14079a732c7Sopenharmony_ci
14179a732c7Sopenharmony_ciusing DeviceAuthCallback = struct DeviceAuthCallback {
14279a732c7Sopenharmony_ci    bool (*onTransmit)(int64_t requestId, const uint8_t *data, uint32_t dataLen);
14379a732c7Sopenharmony_ci    void (*onSessionKeyReturned)(int64_t requestId, const uint8_t *sessionKey, uint32_t sessionKeyLen);
14479a732c7Sopenharmony_ci    void (*onFinish)(int64_t requestId, int operationCode, const char *returnData);
14579a732c7Sopenharmony_ci    void (*onError)(int64_t requestId, int operationCode, int errorCode, const char *errorReturn);
14679a732c7Sopenharmony_ci    char *(*onRequest)(int64_t requestId, int operationCode, const char *reqParams);
14779a732c7Sopenharmony_ci};
14879a732c7Sopenharmony_ci
14979a732c7Sopenharmony_ciusing GroupAuthManager = struct GroupAuthManager {
15079a732c7Sopenharmony_ci    int32_t (*processData)(int64_t authReqId, const uint8_t *data, uint32_t dataLen,
15179a732c7Sopenharmony_ci        const DeviceAuthCallback *gaCallback);
15279a732c7Sopenharmony_ci    int32_t (*queryTrustedDeviceNum)(void);
15379a732c7Sopenharmony_ci    bool (*isTrustedDevice)(const char *udid);
15479a732c7Sopenharmony_ci    int32_t (*getAuthState)(int64_t authReqId, const char *groupId, const char *peerUdid,
15579a732c7Sopenharmony_ci        uint8_t *out, uint32_t *outLen);
15679a732c7Sopenharmony_ci    int32_t (*authDevice)(int32_t osAccountId, int64_t authReqId, const char *authParams,
15779a732c7Sopenharmony_ci        const DeviceAuthCallback *gaCallback);
15879a732c7Sopenharmony_ci    void (*informDeviceDisconnection)(const char *udid);
15979a732c7Sopenharmony_ci};
16079a732c7Sopenharmony_ci
16179a732c7Sopenharmony_ciusing DeviceGroupManager = struct DeviceGroupManager {
16279a732c7Sopenharmony_ci    int32_t (*regCallback)(const char *appId, const DeviceAuthCallback *callback);
16379a732c7Sopenharmony_ci    int32_t (*unRegCallback)(const char *appId);
16479a732c7Sopenharmony_ci    int32_t (*regDataChangeListener)(const char *appId, const DataChangeListener *listener);
16579a732c7Sopenharmony_ci    int32_t (*unRegDataChangeListener)(const char *appId);
16679a732c7Sopenharmony_ci    int32_t (*createGroup)(int32_t osAccountId, int64_t requestId, const char *appId, const char *createParams);
16779a732c7Sopenharmony_ci    int32_t (*deleteGroup)(int32_t osAccountId, int64_t requestId, const char *appId, const char *disbandParams);
16879a732c7Sopenharmony_ci    int32_t (*addMemberToGroup)(int32_t osAccountId, int64_t requestId, const char *appId, const char *addParams);
16979a732c7Sopenharmony_ci    int32_t (*deleteMemberFromGroup)(int32_t osAccountId, int64_t requestId, const char *appId,
17079a732c7Sopenharmony_ci        const char *deleteParams);
17179a732c7Sopenharmony_ci    int32_t (*processData)(int64_t requestId, const uint8_t *data, uint32_t dataLen);
17279a732c7Sopenharmony_ci    int32_t (*addMultiMembersToGroup)(int32_t osAccountId, const char *appId, const char *addParams);
17379a732c7Sopenharmony_ci    int32_t (*delMultiMembersFromGroup)(int32_t osAccountId, const char *appId, const char *deleteParams);
17479a732c7Sopenharmony_ci    int32_t (*confirmRequest)(int32_t osAccountId, int64_t requestId, const char *appId, const char *confirmParams);
17579a732c7Sopenharmony_ci    int32_t (*bindPeer)(int64_t requestId, const char *appId, const char *bindParams);
17679a732c7Sopenharmony_ci    int32_t (*unbindPeer)(int64_t requestId, const char *appId, const char *unbindParams);
17779a732c7Sopenharmony_ci    int32_t (*processLiteData)(int64_t requestId, const char *appId, const uint8_t *data, uint32_t dataLen);
17879a732c7Sopenharmony_ci    int32_t (*authKeyAgree)(int64_t requestId, const char *appId, const char *buildParams);
17979a732c7Sopenharmony_ci    int32_t (*processKeyAgreeData)(int64_t requestId, const char *appId, const uint8_t *data, uint32_t dataLen);
18079a732c7Sopenharmony_ci    int32_t (*processCredential)(int operationCode, const char *reqJsonStr, char **returnJsonStr);
18179a732c7Sopenharmony_ci    int32_t (*getRegisterInfo)(const char *reqJsonStr, char **returnRegisterInfo);
18279a732c7Sopenharmony_ci    int32_t (*getLocalConnectInfo)(char *returnInfo, int32_t bufLen);
18379a732c7Sopenharmony_ci    int32_t (*checkAccessToGroup)(int32_t osAccountId, const char *appId, const char *groupId);
18479a732c7Sopenharmony_ci    int32_t (*getPkInfoList)(int32_t osAccountId, const char *appId, const char *queryParams, char **returnInfoList,
18579a732c7Sopenharmony_ci        uint32_t *returnInfoNum);
18679a732c7Sopenharmony_ci    int32_t (*addGroupManager)(int32_t osAccountId, const char *appId, const char *groupId, const char *managerAppId);
18779a732c7Sopenharmony_ci    int32_t (*addGroupFriend)(int32_t osAccountId, const char *appId, const char *groupId, const char *friendAppId);
18879a732c7Sopenharmony_ci    int32_t (*deleteGroupManager)(int32_t osAccountId, const char *appId, const char *groupId,
18979a732c7Sopenharmony_ci        const char *managerAppId);
19079a732c7Sopenharmony_ci    int32_t (*deleteGroupFriend)(int32_t osAccountId, const char *appId, const char *groupId, const char *friendAppId);
19179a732c7Sopenharmony_ci    int32_t (*getGroupManagers)(int32_t osAccountId, const char *appId, const char *groupId, char **returnManagers,
19279a732c7Sopenharmony_ci        uint32_t *returnSize);
19379a732c7Sopenharmony_ci    int32_t (*getGroupFriends)(int32_t osAccountId, const char *appId, const char *groupId,
19479a732c7Sopenharmony_ci        char **returnFriends, uint32_t *returnSize);
19579a732c7Sopenharmony_ci    int32_t (*getGroupInfoById)(int32_t osAccountId, const char *appId, const char *groupId, char **returnGroupInfo);
19679a732c7Sopenharmony_ci    int32_t (*getGroupInfo)(int32_t osAccountId, const char *appId, const char *queryParams,
19779a732c7Sopenharmony_ci        char **returnGroupVec, uint32_t *groupNum);
19879a732c7Sopenharmony_ci    int32_t (*getJoinedGroups)(int32_t osAccountId, const char *appId, int groupType,
19979a732c7Sopenharmony_ci        char **returnGroupVec, uint32_t *groupNum);
20079a732c7Sopenharmony_ci    int32_t (*getRelatedGroups)(int32_t osAccountId, const char *appId, const char *peerDeviceId,
20179a732c7Sopenharmony_ci        char **returnGroupVec, uint32_t *groupNum);
20279a732c7Sopenharmony_ci    int32_t (*getDeviceInfoById)(int32_t osAccountId, const char *appId, const char *deviceId, const char *groupId,
20379a732c7Sopenharmony_ci        char **returnDeviceInfo);
20479a732c7Sopenharmony_ci    int32_t (*getTrustedDevices)(int32_t osAccountId, const char *appId, const char *groupId,
20579a732c7Sopenharmony_ci        char **returnDevInfoVec, uint32_t *deviceNum);
20679a732c7Sopenharmony_ci    bool (*isDeviceInGroup)(int32_t osAccountId, const char *appId, const char *groupId, const char *deviceId);
20779a732c7Sopenharmony_ci    void (*destroyInfo)(char **returnInfo);
20879a732c7Sopenharmony_ci};
20979a732c7Sopenharmony_ci
21079a732c7Sopenharmony_ci#ifdef __cplusplus
21179a732c7Sopenharmony_ciextern "C" {
21279a732c7Sopenharmony_ci#endif
21379a732c7Sopenharmony_ciDEVICE_AUTH_API_PUBLIC int InitDeviceAuthService(void);
21479a732c7Sopenharmony_ciDEVICE_AUTH_API_PUBLIC void DestroyDeviceAuthService(void);
21579a732c7Sopenharmony_ciDEVICE_AUTH_API_PUBLIC const GroupAuthManager *GetGaInstance(void);
21679a732c7Sopenharmony_ciDEVICE_AUTH_API_PUBLIC const DeviceGroupManager *GetGmInstance(void);
21779a732c7Sopenharmony_ci#ifdef __cplusplus
21879a732c7Sopenharmony_ci}
21979a732c7Sopenharmony_ci#endif
22079a732c7Sopenharmony_ci#endif
221