SlideShare a Scribd company logo
1 of 69
Download to read offline
HostCardEmulation
@azukinohiroki
@azukinohiroki
•
•
• IC OS
•
• 2011
• We are hiring!
HCE
• Android4.4 2013
•
HCE …
(^o^)
agenda
• HCE
• NFC
• Android with HCE
…
HCE
https://developer.android.com/guide/topics/connectivity/nfc/hce.html
Host-based Card Emulation
• Android NFC
NFC
SIM
Android 4.4 Host-based Card Emulation
Android NFC
Host-based Card Emulation
• HCE
Android
Host-based Card Emulation
• HCE
Android
•
•
•
•
Host-based Card Emulation
• HCE
Android
NFC
https://developer.android.com/guide/topics/connectivity/nfc/index.html
NFC
• Near Field Communication
• NFC
4cm NFC
Android NFC Android
3
• Card emulation mode

• Reader/writer mode

• P2P mode

NFC
NFC
…
• iOS iOS11 NFC
• NDEF
…
• iOS iOS11 NFC
• NDEF
• Service
• Manifest
•
1. Service
1. Service
class MyHostApduService : HostApduService() {
override fun processCommandApdu(commandApdu: ByteArray, extras: Bundle?): ByteArray {
if (Utils.isEqual(SELECT, commandApdu)) {
return "Hello, HCE!!".toByteArray()
}
return byteArrayOf(0x90.toByte(), 0x00)
}
override fun onDeactivated(reason: Int) {
}
……
1. Service
class MyHostApduService : HostApduService() {
override fun processCommandApdu(commandApdu: ByteArray, extras: Bundle?): ByteArray {
if (Utils.isEqual(SELECT, commandApdu)) {
return "Hello, HCE!!".toByteArray()
}
return byteArrayOf(0x90.toByte(), 0x00)
}
override fun onDeactivated(reason: Int) {
}
……
1. Service
class MyHostApduService : HostApduService() {
override fun processCommandApdu(commandApdu: ByteArray, extras: Bundle?): ByteArray {
if (Utils.isEqual(SELECT, commandApdu)) {
return "Hello, HCE!!".toByteArray()
}
return byteArrayOf(0x90.toByte(), 0x00)
}
override fun onDeactivated(reason: Int) {
}
……
1. Service
class MyHostApduService : HostApduService() {
override fun processCommandApdu(commandApdu: ByteArray, extras: Bundle?): ByteArray {
if (Utils.isEqual(SELECT, commandApdu)) {
return "Hello, HCE!!".toByteArray()
}
return byteArrayOf(0x90.toByte(), 0x00)
}
override fun onDeactivated(reason: Int) {
}
……
1. Service
class MyHostApduService : HostApduService() {
override fun processCommandApdu(commandApdu: ByteArray, extras: Bundle?): ByteArray {
if (Utils.isEqual(SELECT, commandApdu)) {
return "Hello, HCE!!".toByteArray()
}
return byteArrayOf(0x90.toByte(), 0x00)
}
override fun onDeactivated(reason: Int) {
}
……
1. Service
class MyHostApduService : HostApduService() {
override fun processCommandApdu(commandApdu: ByteArray, extras: Bundle?): ByteArray {
if (Utils.isEqual(SELECT, commandApdu)) {
return "Hello, HCE!!".toByteArray()
}
doSomething()
return null
}
fun somethingHasDone() {
sendResponseApdu(byteArrayOf(0x90.toByte(), 0x00))
}
override fun onDeactivated(reason: Int) {
}
……
1. Service
class MyHostApduService : HostApduService() {
override fun processCommandApdu(commandApdu: ByteArray, extras: Bundle?): ByteArray {
if (Utils.isEqual(SELECT, commandApdu)) {
return "Hello, HCE!!".toByteArray()
}
doSomething()
return null
}
fun somethingHasDone() {
sendResponseApdu(byteArrayOf(0x90.toByte(), 0x00))
}
override fun onDeactivated(reason: Int) {
}
……
1. Service
class MyHostApduService : HostApduService() {
override fun processCommandApdu(commandApdu: ByteArray, extras: Bundle?): ByteArray {
if (Utils.isEqual(SELECT, commandApdu)) {
return "Hello, HCE!!".toByteArray()
}
return byteArrayOf(0x90.toByte(), 0x00)
}
override fun onDeactivated(reason: Int) {
}
……
2. AndroidManifest.xml
permission
<uses-permission android:name=“android.permission.NFC"/>
<application … >
<service
android:name=“.MyHostApduService”
android:exported="true"
android:permission="android.permission.BIND_NFC_SERVICE">
<intent-filter>
<action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<meta-data
android:name="android.nfc.cardemulation.host_apdu_service"
android:resource="@xml/apduservice"/>
</service>
</application>
service
<uses-permission android:name=“android.permission.NFC"/>
<application … >
<service
android:name=“.MyHostApduService”
android:exported="true"
android:permission="android.permission.BIND_NFC_SERVICE">
<intent-filter>
<action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<meta-data
android:name="android.nfc.cardemulation.host_apdu_service"
android:resource="@xml/apduservice"/>
</service>
</application>
service
<uses-permission android:name=“android.permission.NFC"/>
<application … >
<service
android:name=“.MyHostApduService”
android:exported="true"
android:permission="android.permission.BIND_NFC_SERVICE">
<intent-filter>
<action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<meta-data
android:name="android.nfc.cardemulation.host_apdu_service"
android:resource="@xml/apduservice"/>
</service>
</application>
intent-filter meta-data
<uses-permission android:name=“android.permission.NFC"/>
<application … >
<service
android:name=“.MyHostApduService”
android:exported="true"
android:permission="android.permission.BIND_NFC_SERVICE">
<intent-filter>
<action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<meta-data
android:name="android.nfc.cardemulation.host_apdu_service"
android:resource="@xml/apduservice"/>
</service>
</application>
<uses-permission android:name=“android.permission.NFC"/>
<application … >
<service
android:name=“.MyHostApduService”
android:exported="true"
android:permission="android.permission.BIND_NFC_SERVICE">
<intent-filter>
<action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<meta-data
android:name="android.nfc.cardemulation.host_apdu_service"
android:resource="@xml/apduservice"/>
</service>
</application>
intent-filter meta-data
<uses-permission android:name=“android.permission.NFC"/>
<application … >
<service
android:name=“.MyHostApduService”
android:exported="true"
android:permission="android.permission.BIND_NFC_SERVICE">
<intent-filter>
<action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<meta-data
android:name="android.nfc.cardemulation.host_apdu_service"
android:resource="@xml/apduservice"/>
</service>
</application>
xml/apduservice.xml
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/servicedesc"
android:requireDeviceUnlock="false">
<aid-group
android:category="other"
android:description="@string/aiddescription">
<aid-filter android:name="F0010203040506"/>
<aid-filter android:name="F0394148148100"/>
</aid-group>
</host-apdu-service>
xml/apduservice.xml
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/servicedesc"
android:requireDeviceUnlock="false">
<aid-group
android:category="other"
android:description="@string/aiddescription">
<aid-filter android:name="F0010203040506"/>
<aid-filter android:name="F0394148148100"/>
</aid-group>
</host-apdu-service>
xml/apduservice.xml
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/servicedesc"
android:requireDeviceUnlock="false">
<aid-group
android:category="other"
android:description="@string/aiddescription">
<aid-filter android:name="F0010203040506"/>
<aid-filter android:name="F0394148148100"/>
</aid-group>
</host-apdu-service>
HCE
R/W
• NFC
• Tag Dispatch System
• Foreground Dispatch System
• NFC reader mode
• NFC
• Tag Dispatch System
• Foreground Dispatch System
• NFC reader mode
enableReaderMode
override fun onResume() {
super.onResume()
val adapter = NfcAdapter.getDefaultAdapter(context)
adapter.enableReaderMode(
context,
this,
NfcAdapter.FLAG_READER_NFC_A or NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK,
null)
}
override fun onTagDiscovered(tag: Tag) {
val nfc = IsoDep.get(tag)
nfc.connect()
val res = nfc.transceive(SELECT)
Log.d(TAG, String(res, Charset.forName("UTF-8")))
}
enableReaderMode
override fun onResume() {
super.onResume()
val adapter = NfcAdapter.getDefaultAdapter(context)
adapter.enableReaderMode(
context,
this,
NfcAdapter.FLAG_READER_NFC_A or NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK,
null)
}
override fun onTagDiscovered(tag: Tag) {
val nfc = IsoDep.get(tag)
nfc.connect()
val res = nfc.transceive(SELECT)
Log.d(TAG, String(res, Charset.forName("UTF-8")))
}
enableReaderMode
override fun onResume() {
super.onResume()
val adapter = NfcAdapter.getDefaultAdapter(context)
adapter.enableReaderMode(
context,
this,
NfcAdapter.FLAG_READER_NFC_A or NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK,
null)
}
override fun onTagDiscovered(tag: Tag) {
val nfc = IsoDep.get(tag)
nfc.connect()
val res = nfc.transceive(SELECT)
Log.d(TAG, String(res, Charset.forName("UTF-8")))
}
enableReaderMode
override fun onResume() {
super.onResume()
val adapter = NfcAdapter.getDefaultAdapter(context)
adapter.enableReaderMode(
context,
this,
NfcAdapter.FLAG_READER_NFC_A or NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK,
null)
}
override fun onTagDiscovered(tag: Tag) {
val nfc = IsoDep.get(tag)
nfc.connect()
val res = nfc.transceive(SELECT)
Log.d(TAG, String(res, Charset.forName("UTF-8")))
}
enableReaderMode
override fun onResume() {
super.onResume()
val adapter = NfcAdapter.getDefaultAdapter(context)
adapter.enableReaderMode(
context,
this,
NfcAdapter.FLAG_READER_NFC_A or NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK,
null)
}
override fun onTagDiscovered(tag: Tag) {
val nfc = IsoDep.get(tag)
nfc.connect()
val res = nfc.transceive(SELECT)
Log.d(TAG, String(res, Charset.forName("UTF-8")))
}
enableReaderMode
override fun onResume() {
super.onResume()
val adapter = NfcAdapter.getDefaultAdapter(context)
adapter.enableReaderMode(
context,
this,
NfcAdapter.FLAG_READER_NFC_A or NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK,
null)
}
override fun onTagDiscovered(tag: Tag) {
val nfc = IsoDep.get(tag)
nfc.connect()
val res = nfc.transceive(SELECT)
Log.d(TAG, String(res, Charset.forName("UTF-8")))
}
enableReaderMode
override fun onResume() {
super.onResume()
val adapter = NfcAdapter.getDefaultAdapter(context)
adapter.enableReaderMode(
context,
this,
NfcAdapter.FLAG_READER_NFC_A or NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK,
null)
}
override fun onTagDiscovered(tag: Tag) {
val nfc = IsoDep.get(tag)
nfc.connect()
val res = nfc.transceive(SELECT)
Log.d(TAG, String(res, Charset.forName("UTF-8")))
}
SELECT
val SELECT = byteArrayOf(
0x00, 0xA4.toByte(), 0x04, 0x00,
0x07,
0xF0.toByte(), 0x39, 0x41, 0x48, 0x14, 0x81.toByte(), 0x00,
0x00
)
SELECT
val SELECT = byteArrayOf(
0x00, 0xA4.toByte(), 0x04, 0x00,
0x07,
0xF0.toByte(), 0x39, 0x41, 0x48, 0x14, 0x81.toByte(), 0x00,
0x00
)
SELECT
val SELECT = byteArrayOf(
0x00, 0xA4.toByte(), 0x04, 0x00,
0x07,
0xF0.toByte(), 0x39, 0x41, 0x48, 0x14, 0x81.toByte(), 0x00,
0x00
)
xml/apduservice.xml
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/servicedesc"
android:requireDeviceUnlock="false">
<aid-group
android:category="other"
android:description="@string/aiddescription">
<aid-filter android:name="F0010203040506"/>
<aid-filter android:name="F0394148148100"/>
</aid-group>
</host-apdu-service>
…
• NfcA TagLostException
•
• EXTRA_READER_PRESENCE_CHECK_DELAY
HCE-F
• Android7.0
• FeliCa
• SystemCode Idm
•
https://developer.android.com/reference/android/nfc/cardemulation/
NfcFCardEmulation.html#registerSystemCodeForService(android.content.ComponentName,%20java.lang.String)
HCE on Android
• SE
•
•
Host-based Card Emulation in touch
Host-based Card Emulation in touch

More Related Content

What's hot

What's hot (6)

Android Internals
Android InternalsAndroid Internals
Android Internals
 
Hardware Probing in the Linux Kernel
Hardware Probing in the Linux KernelHardware Probing in the Linux Kernel
Hardware Probing in the Linux Kernel
 
Introduction to jQuery Mobile
Introduction to jQuery MobileIntroduction to jQuery Mobile
Introduction to jQuery Mobile
 
Firebase
FirebaseFirebase
Firebase
 
Embedded Android : System Development - Part IV (Android System Services)
Embedded Android : System Development - Part IV (Android System Services)Embedded Android : System Development - Part IV (Android System Services)
Embedded Android : System Development - Part IV (Android System Services)
 
Mobile application development ppt
Mobile application development pptMobile application development ppt
Mobile application development ppt
 

Similar to Host-based Card Emulation in touch

Java script at backend nodejs
Java script at backend   nodejsJava script at backend   nodejs
Java script at backend nodejs
Amit Thakkar
 
Getting Started with Couchbase Ruby
Getting Started with Couchbase RubyGetting Started with Couchbase Ruby
Getting Started with Couchbase Ruby
Sergey Avseyev
 
A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...
Tom Croucher
 
Twisted logic
Twisted logicTwisted logic
Twisted logic
ashfall
 

Similar to Host-based Card Emulation in touch (20)

web3j Overview
web3j Overviewweb3j Overview
web3j Overview
 
Introdution to Node.js
Introdution to Node.jsIntrodution to Node.js
Introdution to Node.js
 
Nodejs and WebSockets
Nodejs and WebSocketsNodejs and WebSockets
Nodejs and WebSockets
 
Java script at backend nodejs
Java script at backend   nodejsJava script at backend   nodejs
Java script at backend nodejs
 
HCE tutorial
HCE tutorialHCE tutorial
HCE tutorial
 
Python, do you even async?
Python, do you even async?Python, do you even async?
Python, do you even async?
 
Tadhack madrid June 2014: Joris Swinnen and WebRTC Nederland "Invite my colle...
Tadhack madrid June 2014: Joris Swinnen and WebRTC Nederland "Invite my colle...Tadhack madrid June 2014: Joris Swinnen and WebRTC Nederland "Invite my colle...
Tadhack madrid June 2014: Joris Swinnen and WebRTC Nederland "Invite my colle...
 
Tamir Dresher - What’s new in ASP.NET Core 6
Tamir Dresher - What’s new in ASP.NET Core 6Tamir Dresher - What’s new in ASP.NET Core 6
Tamir Dresher - What’s new in ASP.NET Core 6
 
Arduino and the real time web
Arduino and the real time webArduino and the real time web
Arduino and the real time web
 
Getting Started with Couchbase Ruby
Getting Started with Couchbase RubyGetting Started with Couchbase Ruby
Getting Started with Couchbase Ruby
 
A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...
 
Node.js - iJS 2019
Node.js - iJS 2019Node.js - iJS 2019
Node.js - iJS 2019
 
HTML5 tutorial: canvas, offfline & sockets
HTML5 tutorial: canvas, offfline & socketsHTML5 tutorial: canvas, offfline & sockets
HTML5 tutorial: canvas, offfline & sockets
 
A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...
 
Kinect v2 Introduction and Tutorial
Kinect v2 Introduction and TutorialKinect v2 Introduction and Tutorial
Kinect v2 Introduction and Tutorial
 
Introduction to Finch
Introduction to FinchIntroduction to Finch
Introduction to Finch
 
Original slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talkOriginal slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talk
 
Twisted logic
Twisted logicTwisted logic
Twisted logic
 
Kotlin. One language to dominate them all.
Kotlin. One language to dominate them all.Kotlin. One language to dominate them all.
Kotlin. One language to dominate them all.
 
aiohttp intro
aiohttp introaiohttp intro
aiohttp intro
 

Recently uploaded

ONLINE VEHICLE RENTAL SYSTEM PROJECT REPORT.pdf
ONLINE VEHICLE RENTAL SYSTEM PROJECT REPORT.pdfONLINE VEHICLE RENTAL SYSTEM PROJECT REPORT.pdf
ONLINE VEHICLE RENTAL SYSTEM PROJECT REPORT.pdf
Kamal Acharya
 
Complex plane, Modulus, Argument, Graphical representation of a complex numbe...
Complex plane, Modulus, Argument, Graphical representation of a complex numbe...Complex plane, Modulus, Argument, Graphical representation of a complex numbe...
Complex plane, Modulus, Argument, Graphical representation of a complex numbe...
MohammadAliNayeem
 
Paint shop management system project report.pdf
Paint shop management system project report.pdfPaint shop management system project report.pdf
Paint shop management system project report.pdf
Kamal Acharya
 
School management system project report.pdf
School management system project report.pdfSchool management system project report.pdf
School management system project report.pdf
Kamal Acharya
 

Recently uploaded (20)

BRAKING SYSTEM IN INDIAN RAILWAY AutoCAD DRAWING
BRAKING SYSTEM IN INDIAN RAILWAY AutoCAD DRAWINGBRAKING SYSTEM IN INDIAN RAILWAY AutoCAD DRAWING
BRAKING SYSTEM IN INDIAN RAILWAY AutoCAD DRAWING
 
ONLINE CAR SERVICING SYSTEM PROJECT REPORT.pdf
ONLINE CAR SERVICING SYSTEM PROJECT REPORT.pdfONLINE CAR SERVICING SYSTEM PROJECT REPORT.pdf
ONLINE CAR SERVICING SYSTEM PROJECT REPORT.pdf
 
ROAD CONSTRUCTION PRESENTATION.PPTX.pptx
ROAD CONSTRUCTION PRESENTATION.PPTX.pptxROAD CONSTRUCTION PRESENTATION.PPTX.pptx
ROAD CONSTRUCTION PRESENTATION.PPTX.pptx
 
Software Engineering - Modelling Concepts + Class Modelling + Building the An...
Software Engineering - Modelling Concepts + Class Modelling + Building the An...Software Engineering - Modelling Concepts + Class Modelling + Building the An...
Software Engineering - Modelling Concepts + Class Modelling + Building the An...
 
ONLINE VEHICLE RENTAL SYSTEM PROJECT REPORT.pdf
ONLINE VEHICLE RENTAL SYSTEM PROJECT REPORT.pdfONLINE VEHICLE RENTAL SYSTEM PROJECT REPORT.pdf
ONLINE VEHICLE RENTAL SYSTEM PROJECT REPORT.pdf
 
Involute of a circle,Square, pentagon,HexagonInvolute_Engineering Drawing.pdf
Involute of a circle,Square, pentagon,HexagonInvolute_Engineering Drawing.pdfInvolute of a circle,Square, pentagon,HexagonInvolute_Engineering Drawing.pdf
Involute of a circle,Square, pentagon,HexagonInvolute_Engineering Drawing.pdf
 
Supermarket billing system project report..pdf
Supermarket billing system project report..pdfSupermarket billing system project report..pdf
Supermarket billing system project report..pdf
 
Research Methodolgy & Intellectual Property Rights Series 2
Research Methodolgy & Intellectual Property Rights Series 2Research Methodolgy & Intellectual Property Rights Series 2
Research Methodolgy & Intellectual Property Rights Series 2
 
Attraction and Repulsion type Moving Iron Instruments.pptx
Attraction and Repulsion type Moving Iron Instruments.pptxAttraction and Repulsion type Moving Iron Instruments.pptx
Attraction and Repulsion type Moving Iron Instruments.pptx
 
How to Design and spec harmonic filter.pdf
How to Design and spec harmonic filter.pdfHow to Design and spec harmonic filter.pdf
How to Design and spec harmonic filter.pdf
 
ChatGPT Prompt Engineering for project managers.pdf
ChatGPT Prompt Engineering for project managers.pdfChatGPT Prompt Engineering for project managers.pdf
ChatGPT Prompt Engineering for project managers.pdf
 
Complex plane, Modulus, Argument, Graphical representation of a complex numbe...
Complex plane, Modulus, Argument, Graphical representation of a complex numbe...Complex plane, Modulus, Argument, Graphical representation of a complex numbe...
Complex plane, Modulus, Argument, Graphical representation of a complex numbe...
 
Paint shop management system project report.pdf
Paint shop management system project report.pdfPaint shop management system project report.pdf
Paint shop management system project report.pdf
 
School management system project report.pdf
School management system project report.pdfSchool management system project report.pdf
School management system project report.pdf
 
KIT-601 Lecture Notes-UNIT-5.pdf Frame Works and Visualization
KIT-601 Lecture Notes-UNIT-5.pdf Frame Works and VisualizationKIT-601 Lecture Notes-UNIT-5.pdf Frame Works and Visualization
KIT-601 Lecture Notes-UNIT-5.pdf Frame Works and Visualization
 
Theory for How to calculation capacitor bank
Theory for How to calculation capacitor bankTheory for How to calculation capacitor bank
Theory for How to calculation capacitor bank
 
RM&IPR M5 notes.pdfResearch Methodolgy & Intellectual Property Rights Series 5
RM&IPR M5 notes.pdfResearch Methodolgy & Intellectual Property Rights Series 5RM&IPR M5 notes.pdfResearch Methodolgy & Intellectual Property Rights Series 5
RM&IPR M5 notes.pdfResearch Methodolgy & Intellectual Property Rights Series 5
 
The battle for RAG, explore the pros and cons of using KnowledgeGraphs and Ve...
The battle for RAG, explore the pros and cons of using KnowledgeGraphs and Ve...The battle for RAG, explore the pros and cons of using KnowledgeGraphs and Ve...
The battle for RAG, explore the pros and cons of using KnowledgeGraphs and Ve...
 
Lab Manual Arduino UNO Microcontrollar.docx
Lab Manual Arduino UNO Microcontrollar.docxLab Manual Arduino UNO Microcontrollar.docx
Lab Manual Arduino UNO Microcontrollar.docx
 
Research Methodolgy & Intellectual Property Rights Series 1
Research Methodolgy & Intellectual Property Rights Series 1Research Methodolgy & Intellectual Property Rights Series 1
Research Methodolgy & Intellectual Property Rights Series 1
 

Host-based Card Emulation in touch