summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajesh Nyamagoud <nyamagoud@google.com>2021-09-14 17:06:30 +0000
committerRajesh Nyamagoud <nyamagoud@google.com>2021-10-08 22:35:48 +0000
commitb8af8955899bfc2065890594fe2ce16b4ee78515 (patch)
treebdc4a6bc6d256805027bf8964c9a294aec393404
parent44b81d9d294af008e41cffde030a328efe8eeff9 (diff)
downloadSecureElement-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.bp3
-rw-r--r--secure_element-service.xml10
-rw-r--r--src/com/android/se/SecureElementService.java84
3 files changed, 61 insertions, 36 deletions
diff --git a/Android.bp b/Android.bp
index f86ad26..afea5c6 100644
--- a/Android.bp
+++ b/Android.bp
@@ -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);
}