diff --git a/trusty/gatekeeper/gatekeeper_ipc.h b/trusty/gatekeeper/gatekeeper_ipc.h index b05dcd848..8709d1a08 100644 --- a/trusty/gatekeeper/gatekeeper_ipc.h +++ b/trusty/gatekeeper/gatekeeper_ipc.h @@ -20,11 +20,13 @@ #define GATEKEEPER_MAX_BUFFER_LENGTH 1024 enum gatekeeper_command { - GK_REQ_SHIFT = 1, - GK_RESP_BIT = 1, + GK_REQ_SHIFT = 1, + GK_RESP_BIT = 1, - GK_ENROLL = (0 << GK_REQ_SHIFT), - GK_VERIFY = (1 << GK_REQ_SHIFT), + GK_ENROLL = (0 << GK_REQ_SHIFT), + GK_VERIFY = (1 << GK_REQ_SHIFT), + GK_DELETE_USER = (2 << GK_REQ_SHIFT), + GK_DELETE_ALL_USERS = (3 << GK_REQ_SHIFT), }; /** diff --git a/trusty/gatekeeper/trusty_gatekeeper.cpp b/trusty/gatekeeper/trusty_gatekeeper.cpp index e416fb2ac..ec4f81bf7 100644 --- a/trusty/gatekeeper/trusty_gatekeeper.cpp +++ b/trusty/gatekeeper/trusty_gatekeeper.cpp @@ -133,13 +133,48 @@ Return TrustyGateKeeperDevice::verify( return {}; } -Return TrustyGateKeeperDevice::deleteUser(uint32_t /*uid*/, deleteUser_cb _hidl_cb) { - _hidl_cb({GatekeeperStatusCode::ERROR_NOT_IMPLEMENTED, 0, {}}); +Return TrustyGateKeeperDevice::deleteUser(uint32_t uid, deleteUser_cb _hidl_cb) { + if (error_ != 0) { + _hidl_cb({GatekeeperStatusCode::ERROR_GENERAL_FAILURE, 0, {}}); + return {}; + } + + DeleteUserRequest request(uid); + DeleteUserResponse response; + auto error = Send(request, &response); + + if (error != ERROR_NONE) { + _hidl_cb({GatekeeperStatusCode::ERROR_GENERAL_FAILURE, 0, {}}); + } else if (response.error == ERROR_NOT_IMPLEMENTED) { + _hidl_cb({GatekeeperStatusCode::ERROR_NOT_IMPLEMENTED, 0, {}}); + } else if (response.error != ERROR_NONE) { + _hidl_cb({GatekeeperStatusCode::ERROR_GENERAL_FAILURE, 0, {}}); + } else { + _hidl_cb({GatekeeperStatusCode::STATUS_OK, response.retry_timeout, {}}); + } return {}; } Return TrustyGateKeeperDevice::deleteAllUsers(deleteAllUsers_cb _hidl_cb) { - _hidl_cb({GatekeeperStatusCode::ERROR_NOT_IMPLEMENTED, 0, {}}); + if (error_ != 0) { + _hidl_cb({GatekeeperStatusCode::ERROR_GENERAL_FAILURE, 0, {}}); + return {}; + } + + DeleteAllUsersRequest request; + DeleteAllUsersResponse response; + auto error = Send(request, &response); + + if (error != ERROR_NONE) { + _hidl_cb({GatekeeperStatusCode::ERROR_GENERAL_FAILURE, 0, {}}); + } else if (response.error == ERROR_NOT_IMPLEMENTED) { + _hidl_cb({GatekeeperStatusCode::ERROR_NOT_IMPLEMENTED, 0, {}}); + } else if (response.error != ERROR_NONE) { + _hidl_cb({GatekeeperStatusCode::ERROR_GENERAL_FAILURE, 0, {}}); + } else { + _hidl_cb({GatekeeperStatusCode::STATUS_OK, response.retry_timeout, {}}); + } + return {}; } diff --git a/trusty/gatekeeper/trusty_gatekeeper.h b/trusty/gatekeeper/trusty_gatekeeper.h index c0713f4b9..420dd7a09 100644 --- a/trusty/gatekeeper/trusty_gatekeeper.h +++ b/trusty/gatekeeper/trusty_gatekeeper.h @@ -81,6 +81,15 @@ class TrustyGateKeeperDevice : public ::android::hardware::gatekeeper::V1_0::IGa return Send(GK_VERIFY, request, response); } + gatekeeper_error_t Send(const DeleteUserRequest& request, DeleteUserResponse* response) { + return Send(GK_DELETE_USER, request, response); + } + + gatekeeper_error_t Send(const DeleteAllUsersRequest& request, + DeleteAllUsersResponse* response) { + return Send(GK_DELETE_ALL_USERS, request, response); + } + int error_; };