Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1396f237 authored by Eric Biggers's avatar Eric Biggers
Browse files

Test that the password isn't truncated

Test that Gatekeeper doesn't truncate passwords, either due to them
containing NUL bytes or being long.

Bug: 238919794
Test: atest VtsHalGatekeeperV1_0TargetTest # on Cuttlefish
Change-Id: I8dd40c66bbe5cd8d309a6461053389b479fa0745
parent 6a9f697d
Loading
Loading
Loading
Loading
+41 −0
Original line number Diff line number Diff line
@@ -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<uint8_t> rightPassword = {'A', 'B', 'C', '\0', 'D', 'E', 'F'};
  hidl_vec<uint8_t> 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<uint8_t> 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