1*4d7e907cSAndroid Build Coastguard Worker/* 2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2016 The Android Open Source Project 3*4d7e907cSAndroid Build Coastguard Worker * 4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*4d7e907cSAndroid Build Coastguard Worker * 8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*4d7e907cSAndroid Build Coastguard Worker * 10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License. 15*4d7e907cSAndroid Build Coastguard Worker */ 16*4d7e907cSAndroid Build Coastguard Workerpackage [email protected]; 17*4d7e907cSAndroid Build Coastguard Worker 18*4d7e907cSAndroid Build Coastguard Worker@SensitiveData 19*4d7e907cSAndroid Build Coastguard Workerinterface IGatekeeper { 20*4d7e907cSAndroid Build Coastguard Worker 21*4d7e907cSAndroid Build Coastguard Worker/** 22*4d7e907cSAndroid Build Coastguard Worker * Enrolls desiredPassword, which may be derived from a user selected pin 23*4d7e907cSAndroid Build Coastguard Worker * or password, with the private key used only for enrolling authentication 24*4d7e907cSAndroid Build Coastguard Worker * factor data. 25*4d7e907cSAndroid Build Coastguard Worker * 26*4d7e907cSAndroid Build Coastguard Worker * If there was already a password enrolled, current password handle must be 27*4d7e907cSAndroid Build Coastguard Worker * passed in currentPasswordHandle, and current password must be passed in 28*4d7e907cSAndroid Build Coastguard Worker * currentPassword. Valid currentPassword must verify() against 29*4d7e907cSAndroid Build Coastguard Worker * currentPasswordHandle. 30*4d7e907cSAndroid Build Coastguard Worker * 31*4d7e907cSAndroid Build Coastguard Worker * @param uid The Android user identifier 32*4d7e907cSAndroid Build Coastguard Worker * 33*4d7e907cSAndroid Build Coastguard Worker * @param currentPasswordHandle The currently enrolled password handle the user 34*4d7e907cSAndroid Build Coastguard Worker * wants to replace. May be empty only if there's no currently enrolled 35*4d7e907cSAndroid Build Coastguard Worker * password. Otherwise must be non-empty. 36*4d7e907cSAndroid Build Coastguard Worker * 37*4d7e907cSAndroid Build Coastguard Worker * @param currentPassword The user's current password in plain text. 38*4d7e907cSAndroid Build Coastguard Worker * it MUST verify against current_password_handle if the latter is not-empty 39*4d7e907cSAndroid Build Coastguard Worker * 40*4d7e907cSAndroid Build Coastguard Worker * @param desiredPassword The new password the user wishes to enroll in 41*4d7e907cSAndroid Build Coastguard Worker * plaintext. 42*4d7e907cSAndroid Build Coastguard Worker * 43*4d7e907cSAndroid Build Coastguard Worker * @return response 44*4d7e907cSAndroid Build Coastguard Worker * On success, data buffer must contain the new password handle referencing 45*4d7e907cSAndroid Build Coastguard Worker * the password provided in desiredPassword. 46*4d7e907cSAndroid Build Coastguard Worker * This buffer can be used on subsequent calls to enroll or 47*4d7e907cSAndroid Build Coastguard Worker * verify. On error, this buffer must be empty. 48*4d7e907cSAndroid Build Coastguard Worker * response.code must always contain operation completion status. 49*4d7e907cSAndroid Build Coastguard Worker * This method may return ERROR_GENERAL_FAILURE or ERROR_RETRY_TIMEOUT on 50*4d7e907cSAndroid Build Coastguard Worker * failure. It must return STATUS_OK on success. 51*4d7e907cSAndroid Build Coastguard Worker * If ERROR_RETRY_TIMEOUT is returned, response.timeout must be non-zero. 52*4d7e907cSAndroid Build Coastguard Worker */ 53*4d7e907cSAndroid Build Coastguard Workerenroll(uint32_t uid, 54*4d7e907cSAndroid Build Coastguard Worker vec<uint8_t> currentPasswordHandle, 55*4d7e907cSAndroid Build Coastguard Worker vec<uint8_t> currentPassword, 56*4d7e907cSAndroid Build Coastguard Worker vec<uint8_t> desiredPassword) 57*4d7e907cSAndroid Build Coastguard Worker generates (GatekeeperResponse response); 58*4d7e907cSAndroid Build Coastguard Worker 59*4d7e907cSAndroid Build Coastguard Worker/** 60*4d7e907cSAndroid Build Coastguard Worker * Verifies that providedPassword matches enrolledPasswordHandle. 61*4d7e907cSAndroid Build Coastguard Worker * 62*4d7e907cSAndroid Build Coastguard Worker * Implementations of this module may retain the result of this call 63*4d7e907cSAndroid Build Coastguard Worker * to attest to the recency of authentication. 64*4d7e907cSAndroid Build Coastguard Worker * 65*4d7e907cSAndroid Build Coastguard Worker * On success, returns verification token in response.data, which shall be 66*4d7e907cSAndroid Build Coastguard Worker * usable to attest password verification to other trusted services. 67*4d7e907cSAndroid Build Coastguard Worker * 68*4d7e907cSAndroid Build Coastguard Worker * @param uid The Android user identifier 69*4d7e907cSAndroid Build Coastguard Worker * 70*4d7e907cSAndroid Build Coastguard Worker * @param challenge An optional challenge to authenticate against, or 0. 71*4d7e907cSAndroid Build Coastguard Worker * Used when a separate authenticator requests password verification, 72*4d7e907cSAndroid Build Coastguard Worker * or for transactional password authentication. 73*4d7e907cSAndroid Build Coastguard Worker * 74*4d7e907cSAndroid Build Coastguard Worker * @param enrolledPasswordHandle The currently enrolled password handle that 75*4d7e907cSAndroid Build Coastguard Worker * user wishes to verify against. Must be non-empty. 76*4d7e907cSAndroid Build Coastguard Worker * 77*4d7e907cSAndroid Build Coastguard Worker * @param providedPassword The plaintext password to be verified against the 78*4d7e907cSAndroid Build Coastguard Worker * enrolledPasswordHandle 79*4d7e907cSAndroid Build Coastguard Worker * 80*4d7e907cSAndroid Build Coastguard Worker * @return response 81*4d7e907cSAndroid Build Coastguard Worker * On success, a non-empty data buffer containing the 82*4d7e907cSAndroid Build Coastguard Worker * authentication token resulting from this verification is returned. 83*4d7e907cSAndroid Build Coastguard Worker * On error, data buffer must be empty. 84*4d7e907cSAndroid Build Coastguard Worker * response.code must always contain operation completion status. 85*4d7e907cSAndroid Build Coastguard Worker * This method may return ERROR_GENERAL_FAILURE or ERROR_RETRY_TIMEOUT on 86*4d7e907cSAndroid Build Coastguard Worker * failure. It must return STATUS_OK on success. 87*4d7e907cSAndroid Build Coastguard Worker * If password re-enrollment is necessary, it must return STATUS_REENROLL. 88*4d7e907cSAndroid Build Coastguard Worker * If ERROR_RETRY_TIMEOUT is returned, response.timeout must be non-zero. 89*4d7e907cSAndroid Build Coastguard Worker */ 90*4d7e907cSAndroid Build Coastguard Workerverify(uint32_t uid, uint64_t challenge, 91*4d7e907cSAndroid Build Coastguard Worker vec<uint8_t> enrolledPasswordHandle, 92*4d7e907cSAndroid Build Coastguard Worker vec<uint8_t> providedPassword) 93*4d7e907cSAndroid Build Coastguard Worker generates (GatekeeperResponse response); 94*4d7e907cSAndroid Build Coastguard Worker 95*4d7e907cSAndroid Build Coastguard Worker/** 96*4d7e907cSAndroid Build Coastguard Worker * Deletes the enrolledPasswordHandle associated with the uid. Once deleted 97*4d7e907cSAndroid Build Coastguard Worker * the user cannot be verified anymore. 98*4d7e907cSAndroid Build Coastguard Worker * This is an optional method. 99*4d7e907cSAndroid Build Coastguard Worker * 100*4d7e907cSAndroid Build Coastguard Worker * @param uid The Android user identifier 101*4d7e907cSAndroid Build Coastguard Worker * 102*4d7e907cSAndroid Build Coastguard Worker * @return response 103*4d7e907cSAndroid Build Coastguard Worker * response.code must always contain operation completion status. 104*4d7e907cSAndroid Build Coastguard Worker * This method may return ERROR_GENERAL_FAILURE or ERROR_RETRY_TIMEOUT on 105*4d7e907cSAndroid Build Coastguard Worker * failure. It must return STATUS_OK on success. 106*4d7e907cSAndroid Build Coastguard Worker * If not implemented, it must return ERROR_NOT_IMPLEMENTED. 107*4d7e907cSAndroid Build Coastguard Worker * If ERROR_RETRY_TIMEOUT is returned, response.timeout must be non-zero. 108*4d7e907cSAndroid Build Coastguard Worker */ 109*4d7e907cSAndroid Build Coastguard WorkerdeleteUser(uint32_t uid) generates (GatekeeperResponse response); 110*4d7e907cSAndroid Build Coastguard Worker 111*4d7e907cSAndroid Build Coastguard Worker/** 112*4d7e907cSAndroid Build Coastguard Worker * Deletes all the enrolled_password_handles for all uid's. Once called, 113*4d7e907cSAndroid Build Coastguard Worker * no users must be enrolled on the device. 114*4d7e907cSAndroid Build Coastguard Worker * This is an optional method. 115*4d7e907cSAndroid Build Coastguard Worker * 116*4d7e907cSAndroid Build Coastguard Worker * @return response 117*4d7e907cSAndroid Build Coastguard Worker * response.code must always contain operation completion status. 118*4d7e907cSAndroid Build Coastguard Worker * This method may return ERROR_GENERAL_FAILURE or ERROR_RETRY_TIMEOUT on 119*4d7e907cSAndroid Build Coastguard Worker * failure. It must return STATUS_OK on success. 120*4d7e907cSAndroid Build Coastguard Worker * If not implemented, it must return ERROR_NOT_IMPLEMENTED. 121*4d7e907cSAndroid Build Coastguard Worker * If ERROR_RETRY_TIMEOUT is returned, response.timeout must be non-zero. 122*4d7e907cSAndroid Build Coastguard Worker */ 123*4d7e907cSAndroid Build Coastguard WorkerdeleteAllUsers() generates (GatekeeperResponse response); 124*4d7e907cSAndroid Build Coastguard Worker}; 125