Merge "SyntheticPasswordManager: consolidate hex encoding logic"

This commit is contained in:
Eric Biggers
2022-06-28 02:24:55 +00:00
committed by Gerrit Code Review
2 changed files with 12 additions and 15 deletions

View File

@@ -272,9 +272,8 @@ public class SyntheticPasswordManager {
* AuthenticationToken.mSyntheticPassword for details on what each block means. * AuthenticationToken.mSyntheticPassword for details on what each block means.
*/ */
private void recreate(byte[] escrowSplit0, byte[] escrowSplit1) { private void recreate(byte[] escrowSplit0, byte[] escrowSplit1) {
mSyntheticPassword = String.valueOf(HexEncoding.encode( mSyntheticPassword = bytesToHex(SyntheticPasswordCrypto.personalisedHash(
SyntheticPasswordCrypto.personalisedHash( PERSONALIZATION_SP_SPLIT, escrowSplit0, escrowSplit1));
PERSONALIZATION_SP_SPLIT, escrowSplit0, escrowSplit1))).getBytes();
} }
/** /**
@@ -1415,18 +1414,9 @@ public class SyntheticPasswordManager {
return result; return result;
} }
protected static final byte[] HEX_ARRAY = "0123456789ABCDEF".getBytes(); @VisibleForTesting
private static byte[] bytesToHex(byte[] bytes) { static byte[] bytesToHex(byte[] bytes) {
if (bytes == null) { return HexEncoding.encodeToString(bytes).getBytes();
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;
} }
/** /**

View File

@@ -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 // b/62213311
//TODO: add non-migration work profile case, and unify/un-unify transition. //TODO: add non-migration work profile case, and unify/un-unify transition.
//TODO: test token after user resets password //TODO: test token after user resets password