xref: /aosp_15_r20/external/libese/tools/ese_relay/README.md (revision 5c4dab75aa57366379dce576b1a9e082a44e2b3a)
1*5c4dab75SAndroid Build Coastguard Worker# What?
2*5c4dab75SAndroid Build Coastguard Worker
3*5c4dab75SAndroid Build Coastguard Workerese-relay connects libese's functionality to a local abstract socket on
4*5c4dab75SAndroid Build Coastguard Workeran Android device.  The primary purpose is to ease development and provision
5*5c4dab75SAndroid Build Coastguard Workerwith test hardware without bringing up all the development tools needed.
6*5c4dab75SAndroid Build Coastguard Worker
7*5c4dab75SAndroid Build Coastguard Workerese-relay uses the same wire protocol as the
8*5c4dab75SAndroid Build Coastguard Worker[Virtual Smart Card](http://frankmorgner.github.io/vsmartcard/) project by acting
9*5c4dab75SAndroid Build Coastguard Workeras the "viccd" service.  This enables use of any tool that supports
10*5c4dab75SAndroid Build Coastguard Worker[pcsc-lite](https://pcsclite.alioth.debian.org/) without any additional
11*5c4dab75SAndroid Build Coastguard Workerdevelopment.
12*5c4dab75SAndroid Build Coastguard Worker
13*5c4dab75SAndroid Build Coastguard Worker# Wire protocol
14*5c4dab75SAndroid Build Coastguard Worker
15*5c4dab75SAndroid Build Coastguard WorkerThe format is always
16*5c4dab75SAndroid Build Coastguard Worker    Ln d0..dn
17*5c4dab75SAndroid Build Coastguard WorkerLn is a network byte order 16-bit unsigned integer length of the data.
18*5c4dab75SAndroid Build Coastguard Workerd0..dn are uint8_t bytes to tunneled directly to/from the card.
19*5c4dab75SAndroid Build Coastguard Worker
20*5c4dab75SAndroid Build Coastguard WorkerIf Ln == 1, it indicates an out of band control message. Supported messages
21*5c4dab75SAndroid Build Coastguard Workerare 1:0 - 1:4:
22*5c4dab75SAndroid Build Coastguard Worker  * 0: Power off (ignored)
23*5c4dab75SAndroid Build Coastguard Worker  * 1: Power on (implemented with a reset)
24*5c4dab75SAndroid Build Coastguard Worker  * 3: Reset
25*5c4dab75SAndroid Build Coastguard Worker  * 4: ATR - returns a fake ATR
26*5c4dab75SAndroid Build Coastguard Worker
27*5c4dab75SAndroid Build Coastguard Worker# Prerequisites
28*5c4dab75SAndroid Build Coastguard Worker
29*5c4dab75SAndroid Build Coastguard Worker  * pcscd is installed on your system.
30*5c4dab75SAndroid Build Coastguard Worker  * Build and install https://frankmorgner.github.io/vsmartcard/virtualsmartcard
31*5c4dab75SAndroid Build Coastguard Worker  * Configure /etc/reader.d/vpcd as below.
32*5c4dab75SAndroid Build Coastguard Worker  * Build ese-relay configured for the hardware in use.
33*5c4dab75SAndroid Build Coastguard Worker
34*5c4dab75SAndroid Build Coastguard Worker## /etc/reader.conf.d/vpcd:
35*5c4dab75SAndroid Build Coastguard Worker
36*5c4dab75SAndroid Build Coastguard Worker    FRIENDLYNAME "Virtual PCD"
37*5c4dab75SAndroid Build Coastguard Worker    DEVICENAME   localhost:0x1000
38*5c4dab75SAndroid Build Coastguard Worker    LIBPATH      /usr/lib/pcsc/drivers/serial/libifdvpcd.so
39*5c4dab75SAndroid Build Coastguard Worker    CHANNELID    0x1000
40*5c4dab75SAndroid Build Coastguard Worker
41*5c4dab75SAndroid Build Coastguard WorkerThis will cause pcscd to connect to localhost port 4096 on start as per the vsmartcard
42*5c4dab75SAndroid Build Coastguard Workerdocumentation.
43*5c4dab75SAndroid Build Coastguard Worker
44*5c4dab75SAndroid Build Coastguard Worker# Usage
45*5c4dab75SAndroid Build Coastguard Worker## In one terminal, run the service and forward the abstract UNIX socket to a local TCP socket:
46*5c4dab75SAndroid Build Coastguard Worker  $ adb shell ese-relay-<hw>
47*5c4dab75SAndroid Build Coastguard Worker  $ adb forward tcp:4096 localabstract:ese-relay
48*5c4dab75SAndroid Build Coastguard Worker
49*5c4dab75SAndroid Build Coastguard Worker## In another terminal, restart pcscd configured with an appropriate reader:
50*5c4dab75SAndroid Build Coastguard Worker  $ /etc/init.d/pcscd restart # (Or whatever your init system requires.)
51*5c4dab75SAndroid Build Coastguard Worker
52*5c4dab75SAndroid Build Coastguard Worker## In yet another terminal, use your preferred* pcsc client:
53*5c4dab75SAndroid Build Coastguard Worker
54*5c4dab75SAndroid Build Coastguard Worker  $ java -jar gp.jar -info
55*5c4dab75SAndroid Build Coastguard Worker
56*5c4dab75SAndroid Build Coastguard Worker* https://github.com/martinpaljak/GlobalPlatformPro is used here.
57