diff --git a/gatekeeper/1.0/vts/functional/VtsHalGatekeeperV1_0TargetTest.cpp b/gatekeeper/1.0/vts/functional/VtsHalGatekeeperV1_0TargetTest.cpp index f3fa0b469e..e938b01be4 100644 --- a/gatekeeper/1.0/vts/functional/VtsHalGatekeeperV1_0TargetTest.cpp +++ b/gatekeeper/1.0/vts/functional/VtsHalGatekeeperV1_0TargetTest.cpp @@ -243,6 +243,47 @@ TEST_P(GatekeeperHidlTest, VerifySuccess) { ALOGI("Testing Enroll+Verify done"); } +/** + * Ensure that passwords containing a NUL byte aren't truncated + */ +TEST_P(GatekeeperHidlTest, PasswordIsBinaryData) { + GatekeeperResponse enrollRsp; + GatekeeperResponse verifyRsp; + hidl_vec rightPassword = {'A', 'B', 'C', '\0', 'D', 'E', 'F'}; + hidl_vec wrongPassword = {'A', 'B', 'C', '\0', '\0', '\0', '\0'}; + + ALOGI("Testing Enroll+Verify of password with embedded NUL (expected success)"); + enrollNewPassword(rightPassword, enrollRsp, true); + verifyPassword(rightPassword, enrollRsp.data, 1, verifyRsp, true); + + ALOGI("Testing Verify of wrong password (expected failure)"); + verifyPassword(wrongPassword, enrollRsp.data, 1, verifyRsp, false); + + ALOGI("PasswordIsBinaryData test done"); +} + +/** + * Ensure that long passwords aren't truncated + */ +TEST_P(GatekeeperHidlTest, LongPassword) { + GatekeeperResponse enrollRsp; + GatekeeperResponse verifyRsp; + hidl_vec password; + + password.resize(64); // maximum length used by Android + memset(password.data(), 'A', password.size()); + + ALOGI("Testing Enroll+Verify of long password (expected success)"); + enrollNewPassword(password, enrollRsp, true); + verifyPassword(password, enrollRsp.data, 1, verifyRsp, true); + + ALOGI("Testing Verify of wrong password (expected failure)"); + password[password.size() - 1] ^= 1; + verifyPassword(password, enrollRsp.data, 1, verifyRsp, false); + + ALOGI("LongPassword test done"); +} + /** * Ensure we can securely update password (keep the same * secure user_id) if we prove we know old password