diff options
| author | 2022-06-28 02:24:55 +0000 | |
|---|---|---|
| committer | 2022-06-28 02:24:55 +0000 | |
| commit | 2be0e5e3e9080083f2ef0e7db0a00a99c7e63d8c (patch) | |
| tree | 1ee997012212443e8254f37507729ebe624e442a | |
| parent | cb854dc1fd9aa33b999453cfb38b0413c9d52ffb (diff) | |
| parent | ac4ab7b08e58e22a1126f3217cf812926929bc79 (diff) | |
Merge "SyntheticPasswordManager: consolidate hex encoding logic"
| -rw-r--r-- | services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java | 20 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java | 7 |
2 files changed, 12 insertions, 15 deletions
diff --git a/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java b/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java index d4d1b9054149..46315708cb1e 100644 --- a/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java +++ b/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java @@ -272,9 +272,8 @@ public class SyntheticPasswordManager { * AuthenticationToken.mSyntheticPassword for details on what each block means. */ private void recreate(byte[] escrowSplit0, byte[] escrowSplit1) { - mSyntheticPassword = String.valueOf(HexEncoding.encode( - SyntheticPasswordCrypto.personalisedHash( - PERSONALIZATION_SP_SPLIT, escrowSplit0, escrowSplit1))).getBytes(); + mSyntheticPassword = bytesToHex(SyntheticPasswordCrypto.personalisedHash( + PERSONALIZATION_SP_SPLIT, escrowSplit0, escrowSplit1)); } /** @@ -1415,18 +1414,9 @@ public class SyntheticPasswordManager { return result; } - protected static final byte[] HEX_ARRAY = "0123456789ABCDEF".getBytes(); - private static byte[] bytesToHex(byte[] bytes) { - if (bytes == null) { - return "null".getBytes(); - } - byte[] hexBytes = new byte[bytes.length * 2]; - for ( int j = 0; j < bytes.length; j++ ) { - int v = bytes[j] & 0xFF; - hexBytes[j * 2] = HEX_ARRAY[v >>> 4]; - hexBytes[j * 2 + 1] = HEX_ARRAY[v & 0x0F]; - } - return hexBytes; + @VisibleForTesting + static byte[] bytesToHex(byte[] bytes) { + return HexEncoding.encodeToString(bytes).getBytes(); } /** diff --git a/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java b/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java index 9c64107c903c..09d3b485a46d 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java @@ -567,6 +567,13 @@ public class SyntheticPasswordTests extends BaseLockSettingsServiceTests { } } + @Test + public void testHexEncodingIsUppercase() { + final byte[] raw = new byte[] { (byte)0xAB, (byte)0xCD, (byte)0xEF }; + final byte[] expected = new byte[] { 'A', 'B', 'C', 'D', 'E', 'F' }; + assertArrayEquals(expected, SyntheticPasswordManager.bytesToHex(raw)); + } + // b/62213311 //TODO: add non-migration work profile case, and unify/un-unify transition. //TODO: test token after user resets password |