xref: /aosp_15_r20/external/libese/README.md (revision 5c4dab75aa57366379dce576b1a9e082a44e2b3a)
1*5c4dab75SAndroid Build Coastguard Worker# libese
2*5c4dab75SAndroid Build Coastguard Worker
3*5c4dab75SAndroid Build Coastguard WorkerDocument last updated: 13 Jan 2017
4*5c4dab75SAndroid Build Coastguard Worker
5*5c4dab75SAndroid Build Coastguard Worker## Introduction
6*5c4dab75SAndroid Build Coastguard Worker
7*5c4dab75SAndroid Build Coastguard Workerlibese provides a minimal transport wrapper for communicating with
8*5c4dab75SAndroid Build Coastguard Workerembedded secure elements. Embedded secure elements typically adhere
9*5c4dab75SAndroid Build Coastguard Workerto smart card standards whose translation is not always smooth when
10*5c4dab75SAndroid Build Coastguard Workermigrated to an always connected bus, like SPI.  The interfaces
11*5c4dab75SAndroid Build Coastguard Workerexposed by libese should enable higher level "terminal" implementations
12*5c4dab75SAndroid Build Coastguard Workerto be written on top and/or a service which provides a similar
13*5c4dab75SAndroid Build Coastguard Workerinterface.
14*5c4dab75SAndroid Build Coastguard Worker
15*5c4dab75SAndroid Build Coastguard WorkerBehind the interface, libese should help smooth over the differences
16*5c4dab75SAndroid Build Coastguard Workerbetween eSEs and smart cards use in the hardware adapter
17*5c4dab75SAndroid Build Coastguard Workerimplementations. Additionally, a T=1 implementation is supplied,
18*5c4dab75SAndroid Build Coastguard Workeras it appears to be the most common wire transport for these chips.
19*5c4dab75SAndroid Build Coastguard Worker
20*5c4dab75SAndroid Build Coastguard Worker## Usage
21*5c4dab75SAndroid Build Coastguard Worker
22*5c4dab75SAndroid Build Coastguard WorkerPublic client interface for Embedded Secure Elements.
23*5c4dab75SAndroid Build Coastguard Worker
24*5c4dab75SAndroid Build Coastguard WorkerPrior to use in a file, import all necessary variables with:
25*5c4dab75SAndroid Build Coastguard Worker
26*5c4dab75SAndroid Build Coastguard Worker    ESE_INCLUDE_HW(SOME_HAL_IMPL);
27*5c4dab75SAndroid Build Coastguard Worker
28*5c4dab75SAndroid Build Coastguard WorkerInstantiate in a function with:
29*5c4dab75SAndroid Build Coastguard Worker
30*5c4dab75SAndroid Build Coastguard Worker    ESE_DECLARE(my_ese, SOME_HAL_IMPL);
31*5c4dab75SAndroid Build Coastguard Worker
32*5c4dab75SAndroid Build Coastguard Workeror
33*5c4dab75SAndroid Build Coastguard Worker
34*5c4dab75SAndroid Build Coastguard Worker    struct EseInterface my_ese = ESE_INITIALIZER(SOME_HAL_IMPL);
35*5c4dab75SAndroid Build Coastguard Worker
36*5c4dab75SAndroid Build Coastguard Workeror
37*5c4dab75SAndroid Build Coastguard Worker
38*5c4dab75SAndroid Build Coastguard Worker    struct EseInterface *my_ese = malloc(sizeof(struct EseInterface));
39*5c4dab75SAndroid Build Coastguard Worker    ...
40*5c4dab75SAndroid Build Coastguard Worker    ese_init(my_ese, SOME_HAL_IMPL);
41*5c4dab75SAndroid Build Coastguard Worker
42*5c4dab75SAndroid Build Coastguard WorkerTo initialize the hardware abstraction, call:
43*5c4dab75SAndroid Build Coastguard Worker
44*5c4dab75SAndroid Build Coastguard Worker    ese_open(my_ese);
45*5c4dab75SAndroid Build Coastguard Worker
46*5c4dab75SAndroid Build Coastguard WorkerTo release any claimed resources, call
47*5c4dab75SAndroid Build Coastguard Worker
48*5c4dab75SAndroid Build Coastguard Worker    ese_close(my_ese)
49*5c4dab75SAndroid Build Coastguard Worker
50*5c4dab75SAndroid Build Coastguard Workerwhen interface use is complete.
51*5c4dab75SAndroid Build Coastguard Worker
52*5c4dab75SAndroid Build Coastguard WorkerTo perform a transmit-receive cycle, call
53*5c4dab75SAndroid Build Coastguard Worker
54*5c4dab75SAndroid Build Coastguard Worker    ese_transceive(my_ese, ...);
55*5c4dab75SAndroid Build Coastguard Worker
56*5c4dab75SAndroid Build Coastguard Workerwith a filled transmit buffer with total data length and
57*5c4dab75SAndroid Build Coastguard Workeran empty receive buffer and a maximum fill length.
58*5c4dab75SAndroid Build Coastguard WorkerA negative return value indicates an error and a hardware
59*5c4dab75SAndroid Build Coastguard Workerspecific code and string may be collected with calls to
60*5c4dab75SAndroid Build Coastguard Worker
61*5c4dab75SAndroid Build Coastguard Worker    ese_error_code(my_ese);
62*5c4dab75SAndroid Build Coastguard Worker    ese_error_message(my_ese);
63*5c4dab75SAndroid Build Coastguard Worker
64*5c4dab75SAndroid Build Coastguard WorkerThe EseInterface is not safe for concurrent access.
65*5c4dab75SAndroid Build Coastguard Worker(Patches welcome! ;).
66*5c4dab75SAndroid Build Coastguard Worker
67*5c4dab75SAndroid Build Coastguard Worker# Components
68*5c4dab75SAndroid Build Coastguard Worker
69*5c4dab75SAndroid Build Coastguard Workerlibese is broken into multiple pieces:
70*5c4dab75SAndroid Build Coastguard Worker  * libese
71*5c4dab75SAndroid Build Coastguard Worker  * libese-sysdeps
72*5c4dab75SAndroid Build Coastguard Worker  * libese-hw
73*5c4dab75SAndroid Build Coastguard Worker  * libese-teq1
74*5c4dab75SAndroid Build Coastguard Worker
75*5c4dab75SAndroid Build Coastguard Worker*libese* provides the headers and wrappers for writing libese clients
76*5c4dab75SAndroid Build Coastguard Workerand for implementing hardware backends.  It depends on a backend being
77*5c4dab75SAndroid Build Coastguard Workerprovided as per *libese-hw* and on *libese-sysdeps*.
78*5c4dab75SAndroid Build Coastguard Worker
79*5c4dab75SAndroid Build Coastguard Worker*libese-sysdeps* provides the system level libraries that are needed by
80*5c4dab75SAndroid Build Coastguard Workerlibese provided software.  If libese is being ported to a new environment,
81*5c4dab75SAndroid Build Coastguard Workerlike a bootloader or non-Linux OS, this library may need to be replaced.
82*5c4dab75SAndroid Build Coastguard Worker(Also take a look at libese/include/ese/log.h for the macro definitions
83*5c4dab75SAndroid Build Coastguard Worker that may be needed.)
84*5c4dab75SAndroid Build Coastguard Worker
85*5c4dab75SAndroid Build Coastguard Worker*libese-hw* provides existing libese hardware backends.
86*5c4dab75SAndroid Build Coastguard Worker
87*5c4dab75SAndroid Build Coastguard Worker*libese-teq1* provides a T=1 compatible transcieve function that may be
88*5c4dab75SAndroid Build Coastguard Workerused by a hardware backend.  It comes with some prequisites for use,
89*5c4dab75SAndroid Build Coastguard Workersuch as a specifically structured set of error messages and
90*5c4dab75SAndroid Build Coastguard WorkerEseInteface pad usage, but otherwise it does not depends on any specific
91*5c4dab75SAndroid Build Coastguard Workerfunctionality not abstracted via the libese EseOperations structure.
92*5c4dab75SAndroid Build Coastguard Worker
93*5c4dab75SAndroid Build Coastguard Worker
94*5c4dab75SAndroid Build Coastguard Worker## Supported backends
95*5c4dab75SAndroid Build Coastguard Worker
96*5c4dab75SAndroid Build Coastguard WorkerThere are two test backends, fake and echo, as well as one
97*5c4dab75SAndroid Build Coastguard Workerreal backend for the NXP PN80T/PN81A.
98*5c4dab75SAndroid Build Coastguard Worker
99*5c4dab75SAndroid Build Coastguard WorkerThe NXP backends support both a direct kernel driver and
100*5c4dab75SAndroid Build Coastguard Workera Linux SPIdev interface.
101