Thread (13 messages) 13 messages, 5 authors, 2018-05-29

[v2,1/3] usb: gadget: ccid: add support for USB CCID Gadget Device

From: Marcus Folkesson <marcus.folkesson@gmail.com>
Date: 2018-05-28 09:33:06
Also in: linux-doc, lkml

Hi Andrzej,

Thank you for reviewing.

On Mon, May 28, 2018 at 11:12:27AM +0200, Andrzej Pietrasiewicz wrote:
W dniu 28.05.2018 o 10:38, Marcus Folkesson pisze:
quoted
Hi Andrzej,

On Mon, May 28, 2018 at 09:04:51AM +0200, Andrzej Pietrasiewicz wrote:
quoted
Mi Marcus,

W dniu 26.05.2018 o 23:19, Marcus Folkesson pisze:
quoted
Chip Card Interface Device (CCID) protocol is a USB protocol that
allows a smartcard device to be connected to a computer via a card
reader using a standard USB interface, without the need for each manufacturer
of smartcards to provide its own reader or protocol.

This gadget driver makes Linux show up as a CCID device to the host and let a
userspace daemon act as the smartcard.

This is useful when the Linux gadget itself should act as a cryptographic
device or forward APDUs to an embedded smartcard device.

Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com>
---
quoted
   
+config USB_CONFIGFS_CCID
+	bool "Chip Card Interface Device (CCID)"
+	depends on USB_CONFIGFS
+	select USB_F_CCID
+	help
+	  The CCID function driver provides generic emulation of a
+	  Chip Card Interface Device (CCID).
+
+	  You will need a user space server talking to /dev/ccidg*,
+	  since the kernel itself does not implement CCID/TPDU/APDU
+	  protocol.
Your function needs a userspace daemon to work.
It seems you want to use FunctionFS for such a purpose
instead of creating a new function.

Andrzej
quoted
quoted
+	  since the kernel itself does not implement CCID/TPDU/APDU
Oops, the driver does handle CCID.
Which parts of code do this handling?
My bad, I was thinking about the USB descriptors and endpoints setup.
That is of cause not part of the CCID protocol.
Is there any kind of state machine usual for protocols?
If the protocol is stateless then isn't it just a data format then?
The protocol is stateless.
Which part of this handling must be done in kernel and why?

Does the said handling do anything other than forwarding the
traffic between USB and a character device?
No, it forward the CCID messages to the character device to be handled
by the application.
What is the character device used for? I know: read, write and poll.
But why? To do what?
It is used for the application to fetch, interpret and then perform actions depending on
commands.
quoted
Well, yes, It needs an application that perform the "smartcard operations", such as
generate keys or sign data, as this depends on how it should be used.

The actual smartcard operations could for example be in software,
use a crypto engine in SoC or external HSM (Hardware Security Module).

Without the application, the gadget shows up as a smart card reader
with an unconnected smartcard.
Does showing up as anything require anything other than merely
providing USB descriptors?
I guess.
Andrzej
Thank you,
Marcus
---
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help