1 /* 2 * Copyright (C) 2021 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 71 using OsAccountEnum = enum _OsAccountEnum : int32_t { 72 DEFAULT_OS_ACCOUNT = 0, 73 INVALID_OS_ACCOUNT = -1, 74 ANY_OS_ACCOUNT = -2, 75 }; 76 77 using GroupType = enum _GroupType : int32_t { 78 ALL_GROUP = 0, 79 IDENTICAL_ACCOUNT_GROUP = 1, 80 PEER_TO_PEER_GROUP = 256, 81 COMPATIBLE_GROUP = 512, 82 ACROSS_ACCOUNT_AUTHORIZE_GROUP = 1282 83 }; 84 85 using GroupOperationCode = enum _GroupOperationCode : int32_t { 86 GROUP_CREATE = 0, 87 GROUP_DISBAND = 1, 88 MEMBER_INVITE = 2, 89 MEMBER_JOIN = 3, 90 MEMBER_DELETE = 4, 91 ACCOUNT_BIND = 5 92 }; 93 94 using GroupAuthForm = enum _GroupAuthForm : int32_t { 95 AUTH_FORM_INVALID_TYPE = -1, 96 AUTH_FORM_ACCOUNT_UNRELATED = 0, 97 AUTH_FORM_IDENTICAL_ACCOUNT = 1, 98 AUTH_FORM_ACROSS_ACCOUNT = 2, 99 }; 100 101 using CredentialCode = enum _CredentialCode : int32_t { 102 IMPORT_SELF_CREDENTIAL = 0, 103 DELETE_SELF_CREDENTIAL = 1, 104 QUERY_SELF_CREDENTIAL_INFO = 2, 105 IMPORT_TRUSTED_CREDENTIALS = 3, 106 DELETE_TRUSTED_CREDENTIALS = 4, 107 QUERY_TRUSTED_CREDENTIALS = 5, 108 REQUEST_SIGNATURE = 6, 109 }; 110 111 using UserType = enum _UserType : int32_t { 112 DEVICE_TYPE_ACCESSORY = 0, 113 DEVICE_TYPE_CONTROLLER = 1, 114 DEVICE_TYPE_PROXY = 2 115 }; 116 117 using ExpireTime = enum _ExpireTime : int32_t { 118 EXPIRE_TIME_INDEFINITE = -1, 119 EXPIRE_TIME_MIN = 1, 120 EXPIRE_TIME_MAX = 90, 121 }; 122 123 using RequestResponse = enum _RequestResponse : int32_t { 124 REQUEST_REJECTED = 0x80000005, 125 REQUEST_ACCEPTED = 0x80000006, 126 REQUEST_WAITING = 0x80000007 127 }; 128 129 using DataChangeListener = struct _DataChangeListener { 130 void (*onGroupCreated)(const char *groupInfo); 131 void (*onGroupDeleted)(const char *groupInfo); 132 void (*onDeviceBound)(const char *peerUdid, const char *groupInfo); 133 void (*onDeviceUnBound)(const char *peerUdid, const char *groupInfo); 134 void (*onDeviceNotTrusted)(const char *peerUdid); 135 void (*onLastGroupDeleted)(const char *peerUdid, int groupType); 136 void (*onTrustedDeviceNumChanged)(int curTrustedDeviceNum); 137 }; 138 139 using DeviceAuthCallback = struct _DeviceAuthCallback { 140 bool (*onTransmit)(int64_t requestId, const uint8_t *data, uint32_t dataLen); 141 void (*onSessionKeyReturned)(int64_t requestId, const uint8_t *sessionKey, uint32_t sessionKeyLen); 142 void (*onFinish)(int64_t requestId, int operationCode, const char *returnData); 143 void (*onError)(int64_t requestId, int operationCode, int errorCode, const char *errorReturn); 144 char *(*onRequest)(int64_t requestId, int operationCode, const char *reqParams); 145 }; 146 147 using GroupAuthManager = struct _GroupAuthManager { 148 int32_t (*processData)(int64_t authReqId, const uint8_t *data, uint32_t dataLen, 149 const DeviceAuthCallback *gaCallback); 150 int32_t (*queryTrustedDeviceNum)(void); 151 bool (*isTrustedDevice)(const char *udid); 152 int32_t (*getAuthState)(int64_t authReqId, const char *groupId, const char *peerUdid, 153 uint8_t *out, uint32_t *outLen); 154 int32_t (*authDevice)(int32_t osAccountId, int64_t authReqId, const char *authParams, 155 const DeviceAuthCallback *gaCallback); 156 void (*informDeviceDisconnection)(const char *udid); 157 }; 158 159 using DeviceGroupManager = struct _DeviceGroupManager { 160 int32_t (*regCallback)(const char *appId, const DeviceAuthCallback *callback); 161 int32_t (*unRegCallback)(const char *appId); 162 int32_t (*regDataChangeListener)(const char *appId, const DataChangeListener *listener); 163 int32_t (*unRegDataChangeListener)(const char *appId); 164 int32_t (*createGroup)(int32_t osAccountId, int64_t requestId, const char *appId, const char *createParams); 165 int32_t (*deleteGroup)(int32_t osAccountId, int64_t requestId, const char *appId, const char *disbandParams); 166 int32_t (*addMemberToGroup)(int32_t osAccountId, int64_t requestId, const char *appId, const char *addParams); 167 int32_t (*deleteMemberFromGroup)(int32_t osAccountId, int64_t requestId, const char *appId, 168 const char *deleteParams); 169 int32_t (*processData)(int64_t requestId, const uint8_t *data, uint32_t dataLen); 170 int32_t (*confirmRequest)(int32_t osAccountId, int64_t requestId, const char *appId, const char *confirmParams); 171 int32_t (*bindPeer)(int64_t requestId, const char *appId, const char *bindParams); 172 int32_t (*unbindPeer)(int64_t requestId, const char *appId, const char *unbindParams); 173 int32_t (*processLiteData)(int64_t requestId, const char *appId, const uint8_t *data, uint32_t dataLen); 174 int32_t (*authKeyAgree)(int64_t requestId, const char *appId, const char *buildParams); 175 int32_t (*processKeyAgreeData)(int64_t requestId, const char *appId, const uint8_t *data, uint32_t dataLen); 176 int32_t (*processCredential)(int operationCode, const char *reqJsonStr, char **returnJsonStr); 177 int32_t (*getRegisterInfo)(char **returnRegisterInfo); 178 int32_t (*getLocalConnectInfo)(char *returnInfo, int32_t bufLen); 179 int32_t (*checkAccessToGroup)(int32_t osAccountId, const char *appId, const char *groupId); 180 int32_t (*getPkInfoList)(int32_t osAccountId, const char *appId, const char *queryParams, char **returnInfoList, 181 uint32_t *returnInfoNum); 182 int32_t (*addGroupManager)(int32_t osAccountId, const char *appId, const char *groupId, const char *managerAppId); 183 int32_t (*addGroupFriend)(int32_t osAccountId, const char *appId, const char *groupId, const char *friendAppId); 184 int32_t (*deleteGroupManager)(int32_t osAccountId, const char *appId, const char *groupId, 185 const char *managerAppId); 186 int32_t (*deleteGroupFriend)(int32_t osAccountId, const char *appId, const char *groupId, const char *friendAppId); 187 int32_t (*getGroupManagers)(int32_t osAccountId, const char *appId, const char *groupId, char **returnManagers, 188 uint32_t *returnSize); 189 int32_t (*getGroupFriends)(int32_t osAccountId, const char *appId, const char *groupId, 190 char **returnFriends, uint32_t *returnSize); 191 int32_t (*getGroupInfoById)(int32_t osAccountId, const char *appId, const char *groupId, char **returnGroupInfo); 192 int32_t (*getGroupInfo)(int32_t osAccountId, const char *appId, const char *queryParams, 193 char **returnGroupVec, uint32_t *groupNum); 194 int32_t (*getJoinedGroups)(int32_t osAccountId, const char *appId, int groupType, 195 char **returnGroupVec, uint32_t *groupNum); 196 int32_t (*getRelatedGroups)(int32_t osAccountId, const char *appId, const char *peerDeviceId, 197 char **returnGroupVec, uint32_t *groupNum); 198 int32_t (*getDeviceInfoById)(int32_t osAccountId, const char *appId, const char *deviceId, const char *groupId, 199 char **returnDeviceInfo); 200 int32_t (*getTrustedDevices)(int32_t osAccountId, const char *appId, const char *groupId, 201 char **returnDevInfoVec, uint32_t *deviceNum); 202 bool (*isDeviceInGroup)(int32_t osAccountId, const char *appId, const char *groupId, const char *deviceId); 203 void (*destroyInfo)(char **returnInfo); 204 }; 205 206 #ifdef __cplusplus 207 extern "C" { 208 #endif 209 DEVICE_AUTH_API_PUBLIC int InitDeviceAuthService(void); 210 DEVICE_AUTH_API_PUBLIC void DestroyDeviceAuthService(void); 211 DEVICE_AUTH_API_PUBLIC const GroupAuthManager *GetGaInstance(void); 212 DEVICE_AUTH_API_PUBLIC const DeviceGroupManager *GetGmInstance(void); 213 #ifdef __cplusplus 214 } 215 #endif 216 #endif 217