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 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 149 using 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 161 using 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 211 extern "C" { 212 #endif 213 DEVICE_AUTH_API_PUBLIC int InitDeviceAuthService(void); 214 DEVICE_AUTH_API_PUBLIC void DestroyDeviceAuthService(void); 215 DEVICE_AUTH_API_PUBLIC const GroupAuthManager *GetGaInstance(void); 216 DEVICE_AUTH_API_PUBLIC const DeviceGroupManager *GetGmInstance(void); 217 #ifdef __cplusplus 218 } 219 #endif 220 #endif 221