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