diff options
author | Rajesh Nyamagoud <nyamagoud@google.com> | 2021-09-14 17:06:30 +0000 |
---|---|---|
committer | Rajesh Nyamagoud <nyamagoud@google.com> | 2021-10-08 22:35:48 +0000 |
commit | b8af8955899bfc2065890594fe2ce16b4ee78515 (patch) | |
tree | bdc4a6bc6d256805027bf8964c9a294aec393404 | |
parent | 44b81d9d294af008e41cffde030a328efe8eeff9 (diff) | |
download | SecureElement-b8af8955899bfc2065890594fe2ce16b4ee78515.tar.gz |
Support for OMAPI Vendor stable interface
Registered OMAPI interface as Vendor Stable Interface and
also same interface is registered to access it in system partition as
well.
Bug: b/180639372
Test: Run OMAPI CTS and VTS tests
Change-Id: I23f7ba46b7ef32c0a621e7606514b47d63f25666
-rw-r--r-- | Android.bp | 3 | ||||
-rw-r--r-- | secure_element-service.xml | 10 | ||||
-rw-r--r-- | src/com/android/se/SecureElementService.java | 84 |
3 files changed, 61 insertions, 36 deletions
@@ -42,6 +42,9 @@ android_app { "src/**/*.java", ":statslog-secure-element-java-gen", ], + vintf_fragments: [ + "secure_element-service.xml", + ], platform_apis: true, certificate: "platform", static_libs: ["android.hardware.secure_element-V1.0-java", diff --git a/secure_element-service.xml b/secure_element-service.xml new file mode 100644 index 0000000..37c7465 --- /dev/null +++ b/secure_element-service.xml @@ -0,0 +1,10 @@ +<manifest version="1.0" type="framework"> + <hal format="aidl"> + <name>android.se.omapi</name> + <version>1</version> + <interface> + <name>ISecureElementService</name> + <instance>default</instance> + </interface> + </hal> +</manifest> diff --git a/src/com/android/se/SecureElementService.java b/src/com/android/se/SecureElementService.java index 099bc29..38899fa 100644 --- a/src/com/android/se/SecureElementService.java +++ b/src/com/android/se/SecureElementService.java @@ -62,51 +62,56 @@ public final class SecureElementService extends Service { public static final String UICC_TERMINAL = "SIM"; public static final String ESE_TERMINAL = "eSE"; + public static final String VSTABLE_SECURE_ELEMENT_SERVICE = + "android.se.omapi.ISecureElementService/default"; private final String mTag = "SecureElementService"; private static final boolean DEBUG = Build.IS_DEBUGGABLE; // LinkedHashMap will maintain the order of insertion private LinkedHashMap<String, Terminal> mTerminals = new LinkedHashMap<String, Terminal>(); private int mActiveSimCount = 0; - private final ISecureElementService.Stub mSecureElementServiceBinder = - new ISecureElementService.Stub() { + private class SecureElementServiceBinder extends ISecureElementService.Stub { - @Override - public String[] getReaders() throws RemoteException { - return mTerminals.keySet().toArray(new String[mTerminals.size()]); - } + @Override + public String[] getReaders() throws RemoteException { + return mTerminals.keySet().toArray(new String[mTerminals.size()]); + } - @Override - public ISecureElementReader getReader(String reader) - throws RemoteException { - Log.d(mTag, "getReader() " + reader); - Terminal terminal = getTerminal(reader); - return terminal.new SecureElementReader(SecureElementService.this); - } + @Override + public ISecureElementReader getReader(String reader) throws RemoteException { + Log.d(mTag, "getReader() " + reader); + Terminal terminal = getTerminal(reader); + return terminal.new SecureElementReader(SecureElementService.this); + } - @Override - public synchronized boolean[] isNFCEventAllowed(String reader, byte[] aid, - String[] packageNames) - throws RemoteException { - if (aid == null || aid.length == 0) { - aid = new byte[]{0x00, 0x00, 0x00, 0x00, 0x00}; - } - if (aid.length < 5 || aid.length > 16) { - throw new IllegalArgumentException("AID out of range"); - } - if (packageNames == null || packageNames.length == 0) { - throw new IllegalArgumentException("package names not specified"); - } - Terminal terminal = getTerminal(reader); - return terminal.isNfcEventAllowed(getPackageManager(), aid, packageNames); - } + @Override + public synchronized boolean[] isNFCEventAllowed(String reader, byte[] aid, + String[] packageNames) throws RemoteException { + if (aid == null || aid.length == 0) { + aid = new byte[]{0x00, 0x00, 0x00, 0x00, 0x00}; + } + if (aid.length < 5 || aid.length > 16) { + throw new IllegalArgumentException("AID out of range"); + } + if (packageNames == null || packageNames.length == 0) { + throw new IllegalArgumentException("package names not specified"); + } + Terminal terminal = getTerminal(reader); + return terminal.isNfcEventAllowed(getPackageManager(), aid, packageNames); + } - @Override - protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) { - for (Terminal terminal : mTerminals.values()) { - terminal.dump(writer); - } - } - }; + @Override + protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) { + for (Terminal terminal : mTerminals.values()) { + terminal.dump(writer); + } + } + } + + private final ISecureElementService.Stub mSecureElementServiceBinder = + new SecureElementServiceBinder(); + + private final ISecureElementService.Stub mSecureElementServiceBinderVntf = + new SecureElementServiceBinder(); public SecureElementService() { super(); @@ -148,6 +153,13 @@ public final class SecureElementService extends Service { Log.i(mTag, Thread.currentThread().getName() + " onCreate"); initialize(); createTerminals(); + + ServiceManager.addService(VSTABLE_SECURE_ELEMENT_SERVICE, mSecureElementServiceBinderVntf); + + // Since ISecureElementService is marked with VINTF stability + // to use this same interface within the system partition, will use + // forceDowngradeToSystemStability and register it. + mSecureElementServiceBinder.forceDowngradeToSystemStability(); ServiceManager.addService(Context.SECURE_ELEMENT_SERVICE, mSecureElementServiceBinder); } |