1/*
2 * Copyright (c) 2022 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 DEVICE_AUTH_H
17#define DEVICE_AUTH_H
18
19#include <cstdint>
20
21#if defined(__LINUX__) || defined(_UNIX)
22#define DEVICE_AUTH_API_PUBLIC __attribute__ ((visibility("default")))
23#else
24#define DEVICE_AUTH_API_PUBLIC
25#endif
26
27#define FIELD_GROUP_ID "groupId"
28#define FIELD_GROUP_TYPE "groupType"
29#define FIELD_GROUP_NAME "groupName"
30#define FIELD_PEER_DEVICE_ID "peerDeviceId"
31#define FIELD_IS_ADMIN "isAdmin"
32#define FIELD_CREDENTIAL_TYPE "credentialType"
33#define FIELD_IS_FORCE_DELETE "isForceDelete"
34#define FIELD_IS_IGNORE_CHANNEL "isIgnoreChannel"
35#define FIELD_CONNECT_PARAMS "connectParams"
36#define FIELD_ADD_ID "addId"
37#define FIELD_DELETE_ID "deleteId"
38#define FIELD_APP_ID "appId"
39#define FIELD_SERVICE_TYPE "serviceType"
40#define FIELD_PEER_AUTH_STATE "peerAuthState"
41#define FIELD_IS_DEVICE_LEVEL "isDeviceLevel"
42#define FIELD_ALTERNATIVE "alternative"
43#define FIELD_PEER_UDID "peerUdid"
44#define FIELD_PEER_CONN_DEVICE_ID "peerConnDeviceId"
45#define FIELD_KEY_LENGTH "keyLength"
46#define FIELD_IS_CLIENT "isClient"
47#define FIELD_SESSION_KEY "sessionKey"
48#define FIELD_AUTH_FORM "authForm"
49#define FIELD_CONFIRMATION "confirmation"
50#define FIELD_GROUP_OWNER "groupOwner"
51#define FIELD_PEER_AUTH_ID "peerAuthId"
52#define FIELD_PEER_USER_TYPE "peerUserType"
53#define FIELD_PEER_USER_ID "peerUserId"
54#define FIELD_SERVICE_PKG_NAME "servicePkgName"
55#define FIELD_USER_TYPE "userType"
56#define FIELD_USER_ID "userId"
57#define FIELD_SHARED_USER_ID "sharedUserId"
58#define FIELD_OWNER_USER_ID "ownerUserId"
59#define FIELD_DEVICE_ID "deviceId"
60#define FIELD_UID_HASH "uidHash"
61#define FIELD_PIN_CODE "pinCode"
62#define FIELD_AUTH_ID "authId"
63#define FIELD_UDID "udid"
64#define FIELD_IS_SELF_PK "isSelfPk"
65#define FIELD_GROUP_VISIBILITY "groupVisibility"
66#define FIELD_EXPIRE_TIME "expireTime"
67#define FIELD_IS_DELETE_ALL "isDeleteAll"
68#define FIELD_BLE_CHALLENGE "bleChallenge"
69#define FIELD_OS_ACCOUNT_ID "osAccountId"
70#define FIELD_DEVICE_LIST "deviceList"
71#define FIELD_AUTH_CODE "authCode"
72
73using OsAccountEnum = enum OsAccountEnum : int32_t {
74    DEFAULT_OS_ACCOUNT = 0,
75    INVALID_OS_ACCOUNT = -1,
76    ANY_OS_ACCOUNT = -2,
77};
78
79using GroupType = enum GroupType : int32_t {
80    ALL_GROUP = 0,
81    IDENTICAL_ACCOUNT_GROUP = 1,
82    PEER_TO_PEER_GROUP = 256,
83    COMPATIBLE_GROUP = 512,
84    ACROSS_ACCOUNT_AUTHORIZE_GROUP = 1282
85};
86
87using GroupOperationCode = enum GroupOperationCode : int32_t {
88    GROUP_CREATE = 0,
89    GROUP_DISBAND = 1,
90    MEMBER_INVITE = 2,
91    MEMBER_JOIN = 3,
92    MEMBER_DELETE = 4,
93    ACCOUNT_BIND = 5
94};
95
96using GroupAuthForm = enum GroupAuthForm : int32_t {
97    AUTH_FORM_INVALID_TYPE = -1,
98    AUTH_FORM_ACCOUNT_UNRELATED = 0,
99    AUTH_FORM_IDENTICAL_ACCOUNT = 1,
100    AUTH_FORM_ACROSS_ACCOUNT = 2,
101};
102
103using CredentialCode = enum CredentialCode : int32_t {
104    IMPORT_SELF_CREDENTIAL = 0,
105    DELETE_SELF_CREDENTIAL = 1,
106    QUERY_SELF_CREDENTIAL_INFO = 2,
107    IMPORT_TRUSTED_CREDENTIALS = 3,
108    DELETE_TRUSTED_CREDENTIALS = 4,
109    QUERY_TRUSTED_CREDENTIALS = 5,
110    REQUEST_SIGNATURE = 6,
111};
112
113using UserType = enum UserType : int32_t {
114    DEVICE_TYPE_ACCESSORY = 0,
115    DEVICE_TYPE_CONTROLLER = 1,
116    DEVICE_TYPE_PROXY = 2
117};
118
119using ExpireTime = enum ExpireTime : int32_t {
120    EXPIRE_TIME_INDEFINITE = -1,
121    EXPIRE_TIME_MIN = 1,
122    EXPIRE_TIME_MAX = 90,
123};
124
125using RequestResponse = enum RequestResponse : int32_t {
126    REQUEST_REJECTED = 0x80000005,
127    REQUEST_ACCEPTED = 0x80000006,
128    REQUEST_WAITING = 0x80000007
129};
130
131using DataChangeListener = struct DataChangeListener {
132    void (*onGroupCreated)(const char *groupInfo);
133    void (*onGroupDeleted)(const char *groupInfo);
134    void (*onDeviceBound)(const char *peerUdid, const char *groupInfo);
135    void (*onDeviceUnBound)(const char *peerUdid, const char *groupInfo);
136    void (*onDeviceNotTrusted)(const char *peerUdid);
137    void (*onLastGroupDeleted)(const char *peerUdid, int groupType);
138    void (*onTrustedDeviceNumChanged)(int curTrustedDeviceNum);
139};
140
141using DeviceAuthCallback = struct DeviceAuthCallback {
142    bool (*onTransmit)(int64_t requestId, const uint8_t *data, uint32_t dataLen);
143    void (*onSessionKeyReturned)(int64_t requestId, const uint8_t *sessionKey, uint32_t sessionKeyLen);
144    void (*onFinish)(int64_t requestId, int operationCode, const char *returnData);
145    void (*onError)(int64_t requestId, int operationCode, int errorCode, const char *errorReturn);
146    char *(*onRequest)(int64_t requestId, int operationCode, const char *reqParams);
147};
148
149using GroupAuthManager = struct GroupAuthManager {
150    int32_t (*processData)(int64_t authReqId, const uint8_t *data, uint32_t dataLen,
151        const DeviceAuthCallback *gaCallback);
152    int32_t (*queryTrustedDeviceNum)(void);
153    bool (*isTrustedDevice)(const char *udid);
154    int32_t (*getAuthState)(int64_t authReqId, const char *groupId, const char *peerUdid,
155        uint8_t *out, uint32_t *outLen);
156    int32_t (*authDevice)(int32_t osAccountId, int64_t authReqId, const char *authParams,
157        const DeviceAuthCallback *gaCallback);
158    void (*informDeviceDisconnection)(const char *udid);
159};
160
161using DeviceGroupManager = struct DeviceGroupManager {
162    int32_t (*regCallback)(const char *appId, const DeviceAuthCallback *callback);
163    int32_t (*unRegCallback)(const char *appId);
164    int32_t (*regDataChangeListener)(const char *appId, const DataChangeListener *listener);
165    int32_t (*unRegDataChangeListener)(const char *appId);
166    int32_t (*createGroup)(int32_t osAccountId, int64_t requestId, const char *appId, const char *createParams);
167    int32_t (*deleteGroup)(int32_t osAccountId, int64_t requestId, const char *appId, const char *disbandParams);
168    int32_t (*addMemberToGroup)(int32_t osAccountId, int64_t requestId, const char *appId, const char *addParams);
169    int32_t (*deleteMemberFromGroup)(int32_t osAccountId, int64_t requestId, const char *appId,
170        const char *deleteParams);
171    int32_t (*processData)(int64_t requestId, const uint8_t *data, uint32_t dataLen);
172    int32_t (*addMultiMembersToGroup)(int32_t osAccountId, const char *appId, const char *addParams);
173    int32_t (*delMultiMembersFromGroup)(int32_t osAccountId, const char *appId, const char *deleteParams);
174    int32_t (*confirmRequest)(int32_t osAccountId, int64_t requestId, const char *appId, const char *confirmParams);
175    int32_t (*bindPeer)(int64_t requestId, const char *appId, const char *bindParams);
176    int32_t (*unbindPeer)(int64_t requestId, const char *appId, const char *unbindParams);
177    int32_t (*processLiteData)(int64_t requestId, const char *appId, const uint8_t *data, uint32_t dataLen);
178    int32_t (*authKeyAgree)(int64_t requestId, const char *appId, const char *buildParams);
179    int32_t (*processKeyAgreeData)(int64_t requestId, const char *appId, const uint8_t *data, uint32_t dataLen);
180    int32_t (*processCredential)(int operationCode, const char *reqJsonStr, char **returnJsonStr);
181    int32_t (*getRegisterInfo)(const char *reqJsonStr, char **returnRegisterInfo);
182    int32_t (*getLocalConnectInfo)(char *returnInfo, int32_t bufLen);
183    int32_t (*checkAccessToGroup)(int32_t osAccountId, const char *appId, const char *groupId);
184    int32_t (*getPkInfoList)(int32_t osAccountId, const char *appId, const char *queryParams, char **returnInfoList,
185        uint32_t *returnInfoNum);
186    int32_t (*addGroupManager)(int32_t osAccountId, const char *appId, const char *groupId, const char *managerAppId);
187    int32_t (*addGroupFriend)(int32_t osAccountId, const char *appId, const char *groupId, const char *friendAppId);
188    int32_t (*deleteGroupManager)(int32_t osAccountId, const char *appId, const char *groupId,
189        const char *managerAppId);
190    int32_t (*deleteGroupFriend)(int32_t osAccountId, const char *appId, const char *groupId, const char *friendAppId);
191    int32_t (*getGroupManagers)(int32_t osAccountId, const char *appId, const char *groupId, char **returnManagers,
192        uint32_t *returnSize);
193    int32_t (*getGroupFriends)(int32_t osAccountId, const char *appId, const char *groupId,
194        char **returnFriends, uint32_t *returnSize);
195    int32_t (*getGroupInfoById)(int32_t osAccountId, const char *appId, const char *groupId, char **returnGroupInfo);
196    int32_t (*getGroupInfo)(int32_t osAccountId, const char *appId, const char *queryParams,
197        char **returnGroupVec, uint32_t *groupNum);
198    int32_t (*getJoinedGroups)(int32_t osAccountId, const char *appId, int groupType,
199        char **returnGroupVec, uint32_t *groupNum);
200    int32_t (*getRelatedGroups)(int32_t osAccountId, const char *appId, const char *peerDeviceId,
201        char **returnGroupVec, uint32_t *groupNum);
202    int32_t (*getDeviceInfoById)(int32_t osAccountId, const char *appId, const char *deviceId, const char *groupId,
203        char **returnDeviceInfo);
204    int32_t (*getTrustedDevices)(int32_t osAccountId, const char *appId, const char *groupId,
205        char **returnDevInfoVec, uint32_t *deviceNum);
206    bool (*isDeviceInGroup)(int32_t osAccountId, const char *appId, const char *groupId, const char *deviceId);
207    void (*destroyInfo)(char **returnInfo);
208};
209
210#ifdef __cplusplus
211extern "C" {
212#endif
213DEVICE_AUTH_API_PUBLIC int InitDeviceAuthService(void);
214DEVICE_AUTH_API_PUBLIC void DestroyDeviceAuthService(void);
215DEVICE_AUTH_API_PUBLIC const GroupAuthManager *GetGaInstance(void);
216DEVICE_AUTH_API_PUBLIC const DeviceGroupManager *GetGmInstance(void);
217#ifdef __cplusplus
218}
219#endif
220#endif
221