Perf: optimize getCertHash

SHA-1 was the only option in the GP SEAC standard GPD_SPE_013 since 2014.
GPD_SPE_068 said SHA-256 shall be used in 2017, which also became the de
factor standard in the industry. In the most cases (if not all), it's
not necessary to check SHA-1 at all. The SHA-1 code should be removed in
the near future as long as it's confirmed not necessary.

Bug: 168624720
Test: Confirmed only SHA-256 is calculated. The dogfood phone works with
master local build.

Change-Id: Id9f09cf200f02d72daf230b2dbf789c9f985e2b0
Signed-off-by: Li Li <dualli@google.com>
This commit is contained in:
Li Li
2020-10-16 21:30:59 -07:00
parent 7d69627294
commit feee500cfa

View File

@@ -204,13 +204,21 @@ public final class UiccAccessRule implements Parcelable {
* {@link TelephonyManager#CARRIER_PRIVILEGE_STATUS_NO_ACCESS}.
*/
public int getCarrierPrivilegeStatus(Signature signature, String packageName) {
// SHA-1 is for backward compatible support only, strongly discouraged for new use.
byte[] certHash = getCertHash(signature, "SHA-1");
byte[] certHash256 = getCertHash(signature, "SHA-256");
if (matches(certHash, packageName) || matches(certHash256, packageName)) {
// Check SHA-256 first as it's the new standard.
if (matches(certHash256, packageName)) {
return TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS;
}
// Then check SHA-1 for backward compatibility. This should be removed
// in the near future when GPD_SPE_068 fully replaces GPD_SPE_013.
if (this.mCertificateHash.length == 20) {
byte[] certHash = getCertHash(signature, "SHA-1");
if (matches(certHash, packageName)) {
return TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS;
}
}
return TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS;
}