Add a new API for file Integrity.

Bug: 253568736
Bug: 196909329
Test: presubmit
No test coverage: this is an alias for the existing internal API which are in the wrong package.

Change-Id: I3efd5d81aac7b16a73b32a3f0120bb1f79e2cf73
This commit is contained in:
Alex Buynytskyy
2022-12-27 20:38:49 -08:00
parent b07264b7bd
commit 128092ac21
2 changed files with 32 additions and 1 deletions

View File

@@ -213,6 +213,19 @@ package com.android.server.role {
}
package com.android.server.security {
public class FileIntegrityService extends com.android.server.SystemService {
method public void onStart();
method public static void setUpFsVerity(@NonNull String) throws java.io.IOException;
}
public class KeyChainSystemService extends com.android.server.SystemService {
method public void onStart();
}
}
package com.android.server.stats {
public final class StatsHelper {

View File

@@ -18,6 +18,7 @@ package com.android.server.security;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.app.AppOpsManager;
import android.content.Context;
import android.content.pm.PackageManager;
@@ -59,6 +60,7 @@ import java.util.ArrayList;
* A {@link SystemService} that provides file integrity related operations.
* @hide
*/
@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
public class FileIntegrityService extends SystemService {
private static final String TAG = "FileIntegrityService";
@@ -71,7 +73,10 @@ public class FileIntegrityService extends SystemService {
private final ArrayList<X509Certificate> mTrustedCertificates =
new ArrayList<X509Certificate>();
/** Gets the instance of the service */
/**
* Gets the instance of the service.
* @hide
*/
public static FileIntegrityService getService() {
return LocalServices.getService(FileIntegrityService.class);
}
@@ -139,6 +144,7 @@ public class FileIntegrityService extends SystemService {
}
};
/** @hide */
public FileIntegrityService(final Context context) {
super(context);
try {
@@ -149,6 +155,7 @@ public class FileIntegrityService extends SystemService {
LocalServices.addService(FileIntegrityService.class, this);
}
/** @hide */
@Override
public void onStart() {
loadAllCertificates();
@@ -158,6 +165,7 @@ public class FileIntegrityService extends SystemService {
/**
* Returns whether the signature over the file's fs-verity digest can be verified by one of the
* known certiticates.
* @hide
*/
public boolean verifyPkcs7DetachedSignature(String signaturePath, String filePath)
throws IOException {
@@ -183,6 +191,16 @@ public class FileIntegrityService extends SystemService {
return false;
}
/**
* Enables fs-verity, if supported by the filesystem.
* @see <a href="https://www.kernel.org/doc/html/latest/filesystems/fsverity.html">
* @hide
*/
@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
public static void setUpFsVerity(@NonNull String filePath) throws IOException {
VerityUtils.setUpFsverity(filePath);
}
private void loadAllCertificates() {
// A better alternative to load certificates would be to read from .fs-verity kernel
// keyring, which fsverity_init loads to during earlier boot time from the same sources