• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
73 using OsAccountEnum = enum OsAccountEnum : int32_t {
74     DEFAULT_OS_ACCOUNT = 0,
75     INVALID_OS_ACCOUNT = -1,
76     ANY_OS_ACCOUNT = -2,
77 };
78 
79 using 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 
87 using 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 
96 using 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 
103 using 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 
113 using UserType = enum UserType : int32_t {
114     DEVICE_TYPE_ACCESSORY = 0,
115     DEVICE_TYPE_CONTROLLER = 1,
116     DEVICE_TYPE_PROXY = 2
117 };
118 
119 using ExpireTime = enum ExpireTime : int32_t {
120     EXPIRE_TIME_INDEFINITE = -1,
121     EXPIRE_TIME_MIN = 1,
122     EXPIRE_TIME_MAX = 90,
123 };
124 
125 using RequestResponse = enum RequestResponse : int32_t {
126     REQUEST_REJECTED = 0x80000005,
127     REQUEST_ACCEPTED = 0x80000006,
128     REQUEST_WAITING = 0x80000007
129 };
130 
131 using 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 
141 using CredChangeListener = struct CredChangeListener {
142     void (*onCredAdd)(const char *credId, const char *credInfo);
143     void (*onCredDelete)(const char *credId, const char *credInfo);
144     void (*onCredUpdate)(const char *credId, const char *credInfo);
145 };
146 
147 using DeviceAuthCallback = struct DeviceAuthCallback {
148     bool (*onTransmit)(int64_t requestId, const uint8_t *data, uint32_t dataLen);
149     void (*onSessionKeyReturned)(int64_t requestId, const uint8_t *sessionKey, uint32_t sessionKeyLen);
150     void (*onFinish)(int64_t requestId, int operationCode, const char *returnData);
151     void (*onError)(int64_t requestId, int operationCode, int errorCode, const char *errorReturn);
152     char *(*onRequest)(int64_t requestId, int operationCode, const char *reqParams);
153 };
154 
155 using CredManager = struct CredManager {
156     int32_t (*addCredential)(int32_t osAccountId, const char *requestParams, char **returnData);
157     int32_t (*exportCredential)(int32_t osAccountId, const char *credId, char **returnData);
158     int32_t (*queryCredentialByParams)(int32_t osAccountId, const char *requestParams, char **returnData);
159     int32_t (*queryCredInfoByCredId)(int32_t osAccountId, const char *credId, char **returnData);
160     int32_t (*deleteCredential)(int32_t osAccountId, const char *credId);
161     int32_t (*updateCredInfo)(int32_t osAccountId, const char *credId, const char *requestParams);
162     int32_t (*agreeCredential)(int32_t osAccountId, const char *selfCredId, const char *requestParams,
163         char **returnData);
164     int32_t (*registerChangeListener)(const char *appId, CredChangeListener *listener);
165     int32_t (*unregisterChangeListener)(const char *appId);
166     int32_t (*deleteCredByParams)(int32_t osAccountId, const char *requestParams, char **returnData);
167     int32_t (*batchUpdateCredentials)(int32_t osAccountId, const char *requestParams, char **returnData);
168     void (*destroyInfo)(char **returnData);
169 };
170 
171 using GroupAuthManager = struct GroupAuthManager {
172     int32_t (*processData)(int64_t authReqId, const uint8_t *data, uint32_t dataLen,
173         const DeviceAuthCallback *gaCallback);
174     int32_t (*queryTrustedDeviceNum)(void);
175     bool (*isTrustedDevice)(const char *udid);
176     int32_t (*getAuthState)(int64_t authReqId, const char *groupId, const char *peerUdid,
177         uint8_t *out, uint32_t *outLen);
178     int32_t (*authDevice)(int32_t osAccountId, int64_t authReqId, const char *authParams,
179         const DeviceAuthCallback *gaCallback);
180     void (*informDeviceDisconnection)(const char *udid);
181 };
182 
183 using DeviceGroupManager = struct DeviceGroupManager {
184     int32_t (*regCallback)(const char *appId, const DeviceAuthCallback *callback);
185     int32_t (*unRegCallback)(const char *appId);
186     int32_t (*regDataChangeListener)(const char *appId, const DataChangeListener *listener);
187     int32_t (*unRegDataChangeListener)(const char *appId);
188     int32_t (*createGroup)(int32_t osAccountId, int64_t requestId, const char *appId, const char *createParams);
189     int32_t (*deleteGroup)(int32_t osAccountId, int64_t requestId, const char *appId, const char *disbandParams);
190     int32_t (*addMemberToGroup)(int32_t osAccountId, int64_t requestId, const char *appId, const char *addParams);
191     int32_t (*deleteMemberFromGroup)(int32_t osAccountId, int64_t requestId, const char *appId,
192         const char *deleteParams);
193     int32_t (*processData)(int64_t requestId, const uint8_t *data, uint32_t dataLen);
194     int32_t (*addMultiMembersToGroup)(int32_t osAccountId, const char *appId, const char *addParams);
195     int32_t (*delMultiMembersFromGroup)(int32_t osAccountId, const char *appId, const char *deleteParams);
196     int32_t (*confirmRequest)(int32_t osAccountId, int64_t requestId, const char *appId, const char *confirmParams);
197     int32_t (*bindPeer)(int64_t requestId, const char *appId, const char *bindParams);
198     int32_t (*unbindPeer)(int64_t requestId, const char *appId, const char *unbindParams);
199     int32_t (*processLiteData)(int64_t requestId, const char *appId, const uint8_t *data, uint32_t dataLen);
200     int32_t (*authKeyAgree)(int64_t requestId, const char *appId, const char *buildParams);
201     int32_t (*processKeyAgreeData)(int64_t requestId, const char *appId, const uint8_t *data, uint32_t dataLen);
202     int32_t (*processCredential)(int operationCode, const char *reqJsonStr, char **returnJsonStr);
203     int32_t (*getRegisterInfo)(const char *reqJsonStr, char **returnRegisterInfo);
204     int32_t (*getLocalConnectInfo)(char *returnInfo, int32_t bufLen);
205     int32_t (*checkAccessToGroup)(int32_t osAccountId, const char *appId, const char *groupId);
206     int32_t (*getPkInfoList)(int32_t osAccountId, const char *appId, const char *queryParams, char **returnInfoList,
207         uint32_t *returnInfoNum);
208     int32_t (*addGroupManager)(int32_t osAccountId, const char *appId, const char *groupId, const char *managerAppId);
209     int32_t (*addGroupFriend)(int32_t osAccountId, const char *appId, const char *groupId, const char *friendAppId);
210     int32_t (*deleteGroupManager)(int32_t osAccountId, const char *appId, const char *groupId,
211         const char *managerAppId);
212     int32_t (*deleteGroupFriend)(int32_t osAccountId, const char *appId, const char *groupId, const char *friendAppId);
213     int32_t (*getGroupManagers)(int32_t osAccountId, const char *appId, const char *groupId, char **returnManagers,
214         uint32_t *returnSize);
215     int32_t (*getGroupFriends)(int32_t osAccountId, const char *appId, const char *groupId,
216         char **returnFriends, uint32_t *returnSize);
217     int32_t (*getGroupInfoById)(int32_t osAccountId, const char *appId, const char *groupId, char **returnGroupInfo);
218     int32_t (*getGroupInfo)(int32_t osAccountId, const char *appId, const char *queryParams,
219         char **returnGroupVec, uint32_t *groupNum);
220     int32_t (*getJoinedGroups)(int32_t osAccountId, const char *appId, int groupType,
221         char **returnGroupVec, uint32_t *groupNum);
222     int32_t (*getRelatedGroups)(int32_t osAccountId, const char *appId, const char *peerDeviceId,
223         char **returnGroupVec, uint32_t *groupNum);
224     int32_t (*getDeviceInfoById)(int32_t osAccountId, const char *appId, const char *deviceId, const char *groupId,
225         char **returnDeviceInfo);
226     int32_t (*getTrustedDevices)(int32_t osAccountId, const char *appId, const char *groupId,
227         char **returnDevInfoVec, uint32_t *deviceNum);
228     bool (*isDeviceInGroup)(int32_t osAccountId, const char *appId, const char *groupId, const char *deviceId);
229     void (*destroyInfo)(char **returnInfo);
230 };
231 
232 #ifdef __cplusplus
233 extern "C" {
234 #endif
235 DEVICE_AUTH_API_PUBLIC int InitDeviceAuthService(void);
236 DEVICE_AUTH_API_PUBLIC void DestroyDeviceAuthService(void);
237 DEVICE_AUTH_API_PUBLIC const GroupAuthManager *GetGaInstance(void);
238 DEVICE_AUTH_API_PUBLIC const DeviceGroupManager *GetGmInstance(void);
239 DEVICE_AUTH_API_PUBLIC const CredManager *GetCredMgrInstance(void);
240 #ifdef __cplusplus
241 }
242 #endif
243 #endif
244