feat(keystore): mirror lifecycle via maintenance
Hook the keystore2 daemon's android.security.maintenance binder (hosted by the same process, reached by the already-injected native hook) so synthetic key state follows real key-lifecycle events: - clearNamespace(APP) purges synthetic keys for the uid and their grants. - deleteAllKeys() clears all synthetic keys and grants. - migrateKeyNamespace() re-keys the synthetic entry, preserving material, chain, and grants. Pure side-effect hook: every handled transaction mutates only our own synthetic state, then returns ContinueAndSkipPost so the real keystore2 still performs the real operation. Unhandled codes pass through, so real key lifecycle is never disturbed. Pre-empts delete-then-read and clearNamespace coherence probes (Phase 9 Change 4). Adds a minimal IKeystoreMaintenance compile stub for the descriptor; transaction codes resolve reflectively on-device. Refs Phase 9 .omc/plans/tee-fingerprint-phase-9-grant-plane-coherence.md
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
package android.security.maintenance;
|
||||
|
||||
import android.os.IBinder;
|
||||
|
||||
/**
|
||||
* Compile-time stub for the hidden keystore2 maintenance binder
|
||||
* ({@code android.security.maintenance.IKeystoreMaintenance}).
|
||||
*
|
||||
* <p>This module is a {@code compileOnly} dependency, so the real framework class
|
||||
* (which carries the actual {@code TRANSACTION_*} codes) is loaded at runtime. We
|
||||
* only need the {@link #DESCRIPTOR} token to parse the transaction parcel and the
|
||||
* inner {@code Stub} class so {@code getTransactCode} can reflect the real codes.
|
||||
*/
|
||||
public interface IKeystoreMaintenance {
|
||||
String DESCRIPTOR = "android.security.maintenance.IKeystoreMaintenance";
|
||||
|
||||
class Stub {
|
||||
public static IKeystoreMaintenance asInterface(IBinder b) {
|
||||
throw new UnsupportedOperationException("STUB!");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user