regenerated documentation

This commit is contained in:
Frank Morgner
2021-04-28 02:13:40 +02:00
parent 29a818c69a
commit 27b3dfb62b
216 changed files with 26154 additions and 24712 deletions

View File

@@ -1,35 +1,23 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>USB CCID Emulator &mdash; vsmartcard 2017-01-16 documentation</title>
<link rel="stylesheet" href="../_static/basic.css" type="text/css" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>USB CCID Emulator &#8212; vsmartcard 2021-04-28 documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/bootswatch-3.3.4/flatly/bootstrap.min.css" type="text/css" />
<link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: '2017-01-16',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="../_static/js/jquery-fix.js"></script>
<script type="text/javascript" src="../_static/bootstrap-3.3.4/js/bootstrap.min.js"></script>
<script type="text/javascript" src="../_static/bootstrap-sphinx.js"></script>
<link rel="stylesheet" type="text/css" href="../_static/graphviz.css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/js/jquery-1.11.0.min.js"></script>
<script src="../_static/js/jquery-fix.js"></script>
<script src="../_static/bootstrap-3.3.7/js/bootstrap.min.js"></script>
<script src="../_static/bootstrap-sphinx.js"></script>
<link rel="shortcut icon" href="../_static/chip.ico"/>
<link rel="top" title="vsmartcard 2017-01-16 documentation" href="../index.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Creating a Virtual Smart Card" href="../virtualsmartcard/api.html" />
<link rel="prev" title="PC/SC Relay" href="../pcsc-relay/README.html" />
<meta charset='utf-8'>
@@ -37,8 +25,7 @@
<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'>
<meta name="apple-mobile-web-app-capable" content="yes">
</head>
<body>
</head><body>
<a href="https://github.com/frankmorgner/vsmartcard"
class="visible-desktop hidden-xs"><img
@@ -87,7 +74,7 @@
<li class="toctree-l1"><a class="reference internal" href="../ACardEmulator/README.html">Android Smart Card Emulator</a></li>
<li class="toctree-l1"><a class="reference internal" href="../TCardEmulator/README.html">Tizen Smart Card Emulator</a></li>
<li class="toctree-l1"><a class="reference internal" href="../pcsc-relay/README.html">PC/SC Relay</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="">USB CCID Emulator</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">USB CCID Emulator</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../virtualsmartcard/api.html">Creating a Virtual Smart Card</a></li>
@@ -129,7 +116,7 @@
</a>
</li>
<li>
<a href="../virtualsmartcard/api.html" title="Next Chapter: Creating a Virtual Smart Card"><span class="glyphicon glyphicon-chevron-right visible-sm"></span><span class="hidden-sm hidden-tablet">Creating a Virtu... &raquo;</span>
<a href="../virtualsmartcard/api.html" title="Next Chapter: Creating a Virtual Smart Card"><span class="glyphicon glyphicon-chevron-right visible-sm"></span><span class="hidden-sm hidden-tablet">Creating a Vi... &raquo;</span>
</a>
</li>
@@ -162,67 +149,24 @@
<div class="section" id="usb-ccid-emulator">
<span id="ccid-emulator"></span><h1>USB CCID Emulator<a class="headerlink" href="#usb-ccid-emulator" title="Permalink to this headline"></a></h1>
<div class="sidebar">
<p class="first sidebar-title">Emulate a USB CCID compliant smart card reader</p>
<table class="last docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">License:</th><td class="field-body">GPL version 3</td>
</tr>
<tr class="field-even field"><th class="field-name" colspan="2">Tested Platforms:</th></tr>
<tr class="field-even field"><td>&nbsp;</td><td class="field-body">Linux (Debian, Ubuntu, OpenMoko)</td>
</tr>
</tbody>
</table>
<p class="sidebar-title">Emulate a USB CCID compliant smart card reader</p>
<dl class="field-list simple">
<dt class="field-odd">License</dt>
<dd class="field-odd"><p>GPL version 3</p>
</dd>
<dt class="field-even">Tested Platforms</dt>
<dd class="field-even"><p>Linux (Debian, Ubuntu, OpenMoko)</p>
</dd>
</dl>
</div>
<p>The USB CCID Emulator forwards a locally present PC/SC smart card reader as a
standard USB CCID reader. USB CCID Emulator can be used as trusted intermediary
enabling secure PIN entry and PIN modification. In combination with <a class="reference external" href="https://github.com/frankmorgner/OpenSC">OpenSC</a> <a class="footnote-reference" href="#id4" id="id5">[2]</a>
enabling secure PIN entry and PIN modification. In combination with <a class="reference external" href="https://github.com/frankmorgner/OpenSC">OpenSC</a> <a class="footnote-reference brackets" href="#id7" id="id8">2</a>
also <abbr title="Password Authenticated Connection Establishment">PACE</abbr> can be performed by the emulator.</p>
<div class="figure">
<p><img src="../_images/tikz-1281452b980f69540bc7520179e10f3ccc59fe36.svg" alt="\input{$wd/bilder/tikzstyles.tex}
\tikzstyle{bla}=[kleiner, text width=.45\textwidth]
\node (reader)
{\includegraphics[width=1cm]{$wd/bilder/my_cardreader.pdf}};
\node (readertext) [right=0of reader, bla]
{Smartphone provides smart card reader via USB};
\node (display) [below=0of reader]
{\includegraphics[width=1cm]{$wd/bilder/display.pdf}};
\node (displaytext) [right=0of display, bla]
{Secure display of service provider and purpose of transaction};
\node (keyboard) [below=0of display]
{\includegraphics[width=1cm]{$wd/bilder/keyboard.pdf}};
\node (keyboardtext) [right=0of keyboard, bla]
{Secure PIN Entry};
\node (firewall) [below=0of keyboard]
{\includegraphics[width=1cm]{$wd/bilder/Firewall.pdf}};
\node (firewalltext) [right=0of firewall, bla]
{Verification of terminal authentication and sanitiy checks};
\node (features) [fit=(display) (keyboard) (reader) (firewall)] {};
\node (moko) [left=0of features.west] {\includegraphics[height=4cm]{$wd/bilder/phone-fic-neo-freerunner.pdf}};
\node (epa) [left=1.5of moko, yshift=-2cm]
{\includegraphics[width=3cm]{$wd/bilder/nPA_VS.png}};
\node (pc) [left=1.5of moko, yshift=1.5cm]
{\includegraphics[width=3cm]{$wd/bilder/computer-tango.pdf}};
\begin{pgfonlayer}{background}
\node (mokobox)
[box,
fit=(moko) (readertext) (displaytext) (keyboardtext) (firewalltext)
(features)] {};
\draw [usb]
(moko) -- (pc.center) ;
\draw [decorate, decoration={expanding waves, angle=20, segment length=6}, nichtrundelinie]
(moko) -- (epa) ;
\end{pgfonlayer}" /></p>
<p class="caption">Portable smart card reader with trusted user interface</p></div><p>If the machine running <strong class="command">ccid-emulator</strong> is in USB device mode, a local
<div class="figure" id="id1" style="text-align: center">
<p><img src="../_images/tikz-1281452b980f69540bc7520179e10f3ccc59fe36.svg" alt="Figure made with TikZ" /></p>
<p class="caption"><span class="caption-text">Portable smart card reader with trusted user interface</span></p>
</div><p>If the machine running <strong class="command">ccid-emulator</strong> is in USB device mode, a local
reader is forwareded via USB to another machine. If in USB host mode, the USB
CCID reader will locally be present.</p>
<p>Applications on Windows and Unix-like systems can access the USB CCID Emulator
@@ -231,243 +175,120 @@ card driver is required since USB CCID drivers are usually shipped with the
modern OS.</p>
<p>Here is a subset of USB CCID commands supported by the USB CCID Emulator with
their PC/SC counterpart:</p>
<table border="1" class="docutils">
<table class="docutils align-default">
<colgroup>
<col width="36%" />
<col width="64%" />
<col style="width: 36%" />
<col style="width: 64%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">USB CCID</th>
<th class="head">PC/SC</th>
<thead>
<tr class="row-odd"><th class="head"><p>USB CCID</p></th>
<th class="head"><p>PC/SC</p></th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td><tt class="docutils literal"><span class="pre">PC_to_RDR_XfrBlock</span></tt></td>
<td><tt class="docutils literal"><span class="pre">SCardTransmit</span></tt></td>
<tbody>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">PC_to_RDR_XfrBlock</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">SCardTransmit</span></code></p></td>
</tr>
<tr class="row-odd"><td><tt class="docutils literal"><span class="pre">PC_to_RDR_Secure</span></tt></td>
<td><tt class="docutils literal"><span class="pre">FEATURE_VERIFY_PIN_DIRECT</span></tt>, <tt class="docutils literal"><span class="pre">FEATURE_MODIFY_PIN_DIRECT</span></tt></td>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">PC_to_RDR_Secure</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">FEATURE_VERIFY_PIN_DIRECT</span></code>, <code class="docutils literal notranslate"><span class="pre">FEATURE_MODIFY_PIN_DIRECT</span></code></p></td>
</tr>
<tr class="row-even"><td><tt class="docutils literal"><span class="pre">PC_to_RDR_Secure</span></tt> (proprietary)</td>
<td><tt class="docutils literal"><span class="pre">FEATURE_EXECUTE_PACE</span></tt></td>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">PC_to_RDR_Secure</span></code> (proprietary)</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">FEATURE_EXECUTE_PACE</span></code></p></td>
</tr>
</tbody>
</table>
<p>PIN verification/modification and <abbr title="Password Authenticated Connection Establishment">PACE</abbr> can also be started by the application
transmitting (SCardTransmit) specially crafted APDUs. Only the alternative
initialization of <abbr title="Password Authenticated Connection Establishment">PACE</abbr> using SCardControl requires patching the driver
(available for libccid, see <tt class="file docutils literal"><span class="pre">patches</span></tt>). The pseudo APDUs with no need for
patches are defined as follows (see <a class="reference external" href="https://www.bsi.bund.de/DE/Publikationen/TechnischeRichtlinien/tr03119/index_htm.html">BSI TR-03119 1.3</a> <a class="footnote-reference" href="#id13" id="id14">[6]</a> p. 33-34):</p>
<table border="1" class="docutils">
(available for libccid, see <code class="file docutils literal notranslate"><span class="pre">patches</span></code>). The pseudo APDUs with no need for
patches are defined as follows (see <a class="reference external" href="https://www.bsi.bund.de/DE/Publikationen/TechnischeRichtlinien/tr03119/index_htm.html">BSI TR-03119 1.3</a> <a class="footnote-reference brackets" href="#id16" id="id17">6</a> p. 33-34):</p>
<table class="docutils align-default">
<colgroup>
<col width="18%" />
<col width="7%" />
<col width="7%" />
<col width="7%" />
<col width="7%" />
<col width="22%" />
<col width="24%" />
<col width="8%" />
<col style="width: 18%" />
<col style="width: 7%" />
<col style="width: 7%" />
<col style="width: 7%" />
<col style="width: 7%" />
<col style="width: 22%" />
<col style="width: 24%" />
<col style="width: 8%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head" rowspan="2">&nbsp;</th>
<th class="head" colspan="5">Command APDU</th>
<th class="head" colspan="2">Response APDU</th>
<thead>
<tr class="row-odd"><th class="head" rowspan="2"></th>
<th class="head" colspan="5"><p>Command APDU</p></th>
<th class="head" colspan="2"><p>Response APDU</p></th>
</tr>
<tr class="row-even"><th class="head">CLA</th>
<th class="head">INS</th>
<th class="head">P1</th>
<th class="head">P2</th>
<th class="head">Command Data</th>
<th class="head">Response Data</th>
<th class="head">SW1/SW2</th>
<tr class="row-even"><th class="head"><p>CLA</p></th>
<th class="head"><p>INS</p></th>
<th class="head"><p>P1</p></th>
<th class="head"><p>P2</p></th>
<th class="head"><p>Command Data</p></th>
<th class="head"><p>Response Data</p></th>
<th class="head"><p>SW1/SW2</p></th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-odd"><td>GetReaderPACECapabilities</td>
<td><tt class="docutils literal"><span class="pre">0xFF</span></tt></td>
<td><tt class="docutils literal"><span class="pre">0x9A</span></tt></td>
<td><tt class="docutils literal"><span class="pre">0x04</span></tt></td>
<td><tt class="docutils literal"><span class="pre">0x01</span></tt></td>
<td>(No Data)</td>
<td><tt class="docutils literal"><span class="pre">PACECapabilities</span></tt></td>
<td rowspan="4"><tt class="docutils literal"><span class="pre">0x9000</span></tt>
<tbody>
<tr class="row-odd"><td><p>GetReaderPACECapabilities</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">0xFF</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">0x9A</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">0x04</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">0x01</span></code></p></td>
<td><p>(No Data)</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">PACECapabilities</span></code></p></td>
<td rowspan="4"><p><code class="docutils literal notranslate"><span class="pre">0x9000</span></code>
or other
in case of
an error</td>
an error</p></td>
</tr>
<tr class="row-even"><td>EstablishPACEChannel</td>
<td><tt class="docutils literal"><span class="pre">0xFF</span></tt></td>
<td><tt class="docutils literal"><span class="pre">0x9A</span></tt></td>
<td><tt class="docutils literal"><span class="pre">0x04</span></tt></td>
<td><tt class="docutils literal"><span class="pre">0x02</span></tt></td>
<td><tt class="docutils literal"><span class="pre">EstablishPACEChannelInput</span></tt></td>
<td><tt class="docutils literal"><span class="pre">EstablishPACEChannelOutput</span></tt></td>
<tr class="row-even"><td><p>EstablishPACEChannel</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">0xFF</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">0x9A</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">0x04</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">0x02</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">EstablishPACEChannelInput</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">EstablishPACEChannelOutput</span></code></p></td>
</tr>
<tr class="row-odd"><td>DestroyPACEChannel</td>
<td><tt class="docutils literal"><span class="pre">0xFF</span></tt></td>
<td><tt class="docutils literal"><span class="pre">0x9A</span></tt></td>
<td><tt class="docutils literal"><span class="pre">0x04</span></tt></td>
<td><tt class="docutils literal"><span class="pre">0x03</span></tt></td>
<td>(No Data)</td>
<td>(No Data)</td>
<tr class="row-odd"><td><p>DestroyPACEChannel</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">0xFF</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">0x9A</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">0x04</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">0x03</span></code></p></td>
<td><p>(No Data)</p></td>
<td><p>(No Data)</p></td>
</tr>
<tr class="row-even"><td>Verify/Modify PIN</td>
<td><tt class="docutils literal"><span class="pre">0xFF</span></tt></td>
<td><tt class="docutils literal"><span class="pre">0x9A</span></tt></td>
<td><tt class="docutils literal"><span class="pre">0x04</span></tt></td>
<td><tt class="docutils literal"><span class="pre">0x10</span></tt></td>
<td>Coding as <tt class="docutils literal"><span class="pre">PC_to_RDR_Secure</span></tt></td>
<td>Coding as <tt class="docutils literal"><span class="pre">RDR_to_PC_DataBlock</span></tt></td>
<tr class="row-even"><td><p>Verify/Modify PIN</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">0xFF</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">0x9A</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">0x04</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">0x10</span></code></p></td>
<td><p>Coding as <code class="docutils literal notranslate"><span class="pre">PC_to_RDR_Secure</span></code></p></td>
<td><p>Coding as <code class="docutils literal notranslate"><span class="pre">RDR_to_PC_DataBlock</span></code></p></td>
</tr>
</tbody>
</table>
<p>The USB CCID Emulator is implemented using <a class="reference external" href="http://www.linux-usb.org/gadget/">GadgetFS</a> <a class="footnote-reference" href="#id1" id="id2">[1]</a>. Some fragments of the source
<p>The USB CCID Emulator is implemented using <a class="reference external" href="http://www.linux-usb.org/gadget/">GadgetFS</a> <a class="footnote-reference brackets" href="#id4" id="id5">1</a>. Some fragments of the source
code are based on the GadgetFS example and on the source code of the OpenSC
tools.</p>
<div class="figure">
<p><img src="../_images/tikz-5b402031da401947efbeae7481d47bd35196791d.svg" alt="\input{$wd/bilder/tikzstyles.tex}
\tikzstyle{schicht}=[text width=5cm, align=right]
\tikzstyle{fade down}=[path fading=south, color=huslateblue]
\node (kernel)
[box, shape=rectangle split, rectangle split parts=3, kleiner]
{Linux Kernel
\nodepart{second}
\footnotesize S3C24xx Controller Driver
\nodepart{third}
\footnotesize GadgetFS
};
\node (ccid)
[aktivbox, shape=rectangle split, rectangle split parts=2, below=of kernel]
{CCID Emulator
\nodepart{second}
\texttt{usb}\qquad\texttt{ccid}
};
\draw [box] ($(ccid.text split)-(.05cm,0)$) -- ($(ccid.south)-(.05cm,0)$);
\node (opensc) [box, below=of ccid, kleiner] {OpenSC};
\node (controller) [klein, right=0of kernel.two east, schicht]
{Driver for USB Controller};
\node (gadget) [klein, right=0of kernel.three east, schicht]
{Gadget Driver};
\node (upper) [klein, right=0of kernel.three east, schicht, yshift=-1.75cm]
{Upper Layers};
\tikzstyle{rechts}=[to path={-- ++(1,0) |- (\tikztotarget)}]
\tikzstyle{links}=[to path={-- ++(-1,0) |- (\tikztotarget)}]
\begin{pgfonlayer}{background}
\path
(ccid.two west) edge [links, linie] (kernel.three west)
(ccid.two east) edge [rechts, linie] (opensc.east)
;
\path [color=black!30]
(controller.north east) edge +(-9,0)
(gadget.north east) edge +(-9,0)
(upper.north east) edge +(-9,0)
;
\end{pgfonlayer}
\node [kleiner, anchor=east, text width=3cm]
at ($($(ccid.two west)+(-3,0)$)!.5!(kernel.three west)$)
{\color{hublue}
\texttt{/dev/gadget/ep1-bulk}\\
\texttt{/dev/gadget/ep2-bulk}\\
\texttt{/dev/gadget/ep3-bulk}\\};" /></p>
<p class="caption">Software stack of the USB CCID Emulator running on the OpenMoko Neo FreeRunner</p></div><p>Running the USB CCID Emulator has the following dependencies:</p>
<div class="figure" id="id2" style="text-align: center">
<p><img src="../_images/tikz-5b402031da401947efbeae7481d47bd35196791d.svg" alt="Figure made with TikZ" /></p>
<p class="caption"><span class="caption-text">Software stack of the USB CCID Emulator running on the OpenMoko Neo FreeRunner</span></p>
</div><p>Running the USB CCID Emulator has the following dependencies:</p>
<ul class="simple">
<li>Linux Kernel with <a class="reference external" href="http://www.linux-usb.org/gadget/">GadgetFS</a> <a class="footnote-reference" href="#id1" id="id3">[1]</a></li>
<li><a class="reference external" href="https://github.com/frankmorgner/OpenSC">OpenSC</a> <a class="footnote-reference" href="#id4" id="id6">[2]</a></li>
<li><p>Linux Kernel with <a class="reference external" href="http://www.linux-usb.org/gadget/">GadgetFS</a> <a class="footnote-reference brackets" href="#id4" id="id6">1</a></p></li>
<li><p><a class="reference external" href="https://github.com/frankmorgner/OpenSC">OpenSC</a> <a class="footnote-reference brackets" href="#id7" id="id9">2</a></p></li>
</ul>
<p>Whereas using the USB CCID Emulator on the host system as smart card reader only
needs a usable PC/SC middleware with USB CCID driver. This is the case for most
modern Windows and Unix-like systems by default.</p>
<div class="figure">
<p><img src="../_images/tikz-6e71605956d62bb837a2533794c8c50348b2f87c.svg" alt="\input{$wd/bilder/tikzstyles.tex}
\tikzstyle{keks}=[to path={-- ++(.1,0) |- (\tikztotarget)}]
\tikzstyle{bla}=[shape=rectangle split, rectangle split parts=2,
every text node part/.style={align=center, klein}, text width=7cm,
every second node part/.style={kleiner}, inner sep=0pt]
\node (ccid-emulator)
{\texttt{ccid-emulator}};
\node (basis) [below=3of ccid-emulator]
{\includegraphics[keepaspectratio, height=2cm,
width=2cm]{$wd/bilder/moko/basisleser_plain_klein.png}};
\node (basisbeschreibung) [below=0cm of basis, kleiner, text width=2cm]
{Reiner SCT RFID basis};
\node (npa) [left=1.5of basis]
{\includegraphics[keepaspectratio, height=3cm,
width=3cm]{$wd/bilder/nPA_VS.png}};
\node (npabeschreibung) [below=0cm of npa, kleiner]
{German identity card};
\node (funktionenchat) [right=.6cm of ccid-emulator.east, anchor=text west, bla]
{
PACE
\nodepart{second}
\begin{itemize}
\item Display CHAT
\begin{itemize}
\item Display context (eID/eSign)
\item Display requested permissions
\end{itemize}
\item Display certificate description
\begin{itemize}
\item Identification of service provider
\item Display purpose of transaction
\end{itemize}
\item Secure PIN entry
\end{itemize}
};
\node (funktionenpace) [below=.5 of funktionenchat, bla]
{
Terminal Authentication
\nodepart{second}
\begin{itemize}
\item Verify authenticy of terminal
\item Check freshness of cv certificate
\end{itemize}
};
\begin{pgfonlayer}{background}
\node (box) [fit=(ccid-emulator) (basis) (basisbeschreibung)
(funktionenchat) (funktionenpace), box, inner sep=.5cm] {};
\node (boxbild) at (box.north west)
{\includegraphics[keepaspectratio, height=1.5cm,
width=1.5cm]{$wd/bilder/moko/moko_reader.png}};
\node [right=0cm of boxbild.east, yshift=.3cm]
{Openmoko Neo FreeRunner};
\end{pgfonlayer}
\node (a) [above=1of npa]
{\includegraphics[keepaspectratio, height=3cm,
width=3cm]{$wd/bilder/computer-tango.pdf}};
\begin{pgfonlayer}{background}
\path
(ccid-emulator) edge [doppelpfeil] (basis)
(basis) edge [rfid] (npa)
(a.center) edge [usb] (ccid-emulator)
(ccid-emulator.east) edge [pfeil, keks] (funktionenchat.text west)
(ccid-emulator.east) edge [pfeil, keks] (funktionenpace.text west);
\end{pgfonlayer}" /></p>
<p class="caption">Implementation of a mobile smart card reader for the German ID card</p></div><div class="section" id="download">
<div class="figure" id="id3" style="text-align: center">
<p><img src="../_images/tikz-6e71605956d62bb837a2533794c8c50348b2f87c.svg" alt="Figure made with TikZ" /></p>
<p class="caption"><span class="caption-text">Implementation of a mobile smart card reader for the German ID card</span></p>
</div><div class="section" id="download">
<h2>Download<a class="headerlink" href="#download" title="Permalink to this headline"></a></h2>
<p>You can find the latest release of USB CCID Emulator on <a class="reference external" href="https://github.com/frankmorgner/vsmartcard/releases">Github</a>. Older releases are
still available on <a class="reference external" href="http://sourceforge.net/projects/vsmartcard/files">Sourceforge</a>.</p>
<p>Alternatively, you can clone our git repository:</p>
<div class="highlight-sh"><div class="highlight"><pre>git clone https://github.com/frankmorgner/vsmartcard.git
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>git clone https://github.com/frankmorgner/vsmartcard.git
</pre></div>
</div>
</div>
@@ -476,16 +297,16 @@ still available on <a class="reference external" href="http://sourceforge.net/pr
<div class="section" id="installation-on-linux-unix-and-similar">
<h3>Installation on Linux, Unix and similar<a class="headerlink" href="#installation-on-linux-unix-and-similar" title="Permalink to this headline"></a></h3>
<p>The USB CCID Emulator uses the GNU Build System to compile and install. If you are
unfamiliar with it, please have a look at <tt class="file docutils literal"><span class="pre">INSTALL</span></tt>. If you can not find
it, you are probably working bleeding edge in the repository. Run the
following command in <tt class="file docutils literal"><span class="pre">ccid-emulator</span></tt> to get the missing standard
auxiliary files:</p>
<div class="highlight-sh"><div class="highlight"><pre>autoreconf --verbose --install
unfamiliar with it, please have a look at <code class="file docutils literal notranslate"><span class="pre">INSTALL</span></code>. If you can not find
it, you are probably working bleeding edge in the repository. To generate the
missing standard auxiliary files you need to additionally install <cite>libtool</cite> and
<cite>pkg-config</cite> and run the following command in <code class="file docutils literal notranslate"><span class="pre">ccid-emulator</span></code>:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>autoreconf --verbose --install
</pre></div>
</div>
<p>To configure (<strong class="command">configure &#8211;help</strong> lists possible options), build and
<p>To configure (<strong class="command">configure --help</strong> lists possible options), build and
install the USB CCID Emulator now do the following:</p>
<div class="highlight-sh"><div class="highlight"><pre>./configure
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>./configure
make
make install
</pre></div>
@@ -497,22 +318,22 @@ built from a snapshot of the OpenSC source code and then statically linked.</p>
<h3>Hints on GadgetFS<a class="headerlink" href="#hints-on-gadgetfs" title="Permalink to this headline"></a></h3>
<p>To create a USB Gadget in both USB host and USB client mode, you need to load
the kernel module <strong class="program">gadgetfs</strong>. Here is how to get a running version of
GadgetFS on a Debian system (see also <a class="reference external" href="http://wiki.openmoko.org/wiki/Building_Gadget_USB_Module">OpenMoko Wiki</a> <a class="footnote-reference" href="#id11" id="id12">[5]</a>):</p>
<div class="highlight-sh"><div class="highlight"><pre>sudo apt-get install linux-source linux-headers-<span class="sb">`</span>uname -r<span class="sb">`</span>
GadgetFS on a Debian system (see also <a class="reference external" href="http://wiki.openmoko.org/wiki/Building_Gadget_USB_Module">OpenMoko Wiki</a> <a class="footnote-reference brackets" href="#id14" id="id15">5</a>):</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo apt-get install linux-source linux-headers-<span class="sb">`</span>uname -r<span class="sb">`</span>
sudo tar xjf /usr/src/linux-source-*.tar.bz2
<span class="nb">cd </span>linux-source-*/drivers/usb/gadget
<span class="c"># build dummy_hcd and gadgetfs</span>
<span class="nb">cd</span> linux-source-*/drivers/usb/gadget
<span class="c1"># build dummy_hcd and gadgetfs</span>
<span class="nb">echo</span> <span class="s2">&quot;KDIR := /lib/modules/`uname -r`/build&quot;</span> &gt;&gt; Makefile
<span class="nb">echo</span> <span class="s2">&quot;PWD := `pwd`&quot;</span> &gt;&gt; Makefile
<span class="nb">echo</span> <span class="s2">&quot;obj-m := dummy_hcd.o gadgetfs.o&quot;</span> &gt;&gt; Makefile
<span class="nb">echo</span> <span class="s2">&quot;default: &quot;</span> &gt;&gt; Makefile
<span class="nb">echo</span> -e <span class="s2">&quot;\t\$(MAKE) -C \$(KDIR) SUBDIRS=\$(PWD) modules&quot;</span> &gt;&gt; Makefile
make
<span class="c"># load GadgetFS with its dependencies</span>
<span class="c1"># load GadgetFS with its dependencies</span>
sudo modprobe udc-core
sudo insmod ./dummy_hcd.ko
sudo insmod ./gadgetfs.ko <span class="nv">default_uid</span><span class="o">=</span><span class="sb">`</span>id -u<span class="sb">`</span>
<span class="c"># mount GadgetFS</span>
<span class="c1"># mount GadgetFS</span>
sudo mkdir /dev/gadget
sudo mount -t gadgetfs gadgetfs /dev/gadget
</pre></div>
@@ -528,19 +349,16 @@ loading the module, you maybe want to check out <a class="reference external" hr
<h2>Usage<a class="headerlink" href="#usage" title="Permalink to this headline"></a></h2>
<p>The USB CCID Emulator has various command line options to customize the appearance
on the USB host. In order to run the USB CCID Emulator GadgetFS must be loaded
and mounted. The USB CCID Emulator is compatible with the unix driver <a class="reference external" href="https://ccid.apdu.fr/">libccid</a> <a class="footnote-reference" href="#id7" id="id8">[3]</a>
and the <a class="reference external" href="http://msdn.microsoft.com/en-us/windows/hardware/gg487509">Windows USB CCID driver</a> <a class="footnote-reference" href="#id9" id="id10">[4]</a>. PIN commands are supported if implemented
and mounted. The USB CCID Emulator is compatible with the unix driver <a class="reference external" href="https://ccid.apdu.fr/">libccid</a> <a class="footnote-reference brackets" href="#id10" id="id11">3</a>
and the <a class="reference external" href="http://msdn.microsoft.com/en-us/windows/hardware/gg487509">Windows USB CCID driver</a> <a class="footnote-reference brackets" href="#id12" id="id13">4</a>. PIN commands are supported if implemented
by the driver.</p>
<div class="versionadded">
<p><span class="versionmodified">New in version 0.7: </span>USB CCID Emulator now supports the boxing commands defined in <a class="reference external" href="https://www.bsi.bund.de/DE/Publikationen/TechnischeRichtlinien/tr03119/index_htm.html">BSI TR-03119
1.3</a> <a class="footnote-reference" href="#id13" id="id15">[6]</a>.</p>
<p><span class="versionmodified added">New in version 0.7: </span>USB CCID Emulator now supports the boxing commands defined in <a class="reference external" href="https://www.bsi.bund.de/DE/Publikationen/TechnischeRichtlinien/tr03119/index_htm.html">BSI TR-03119
1.3</a> <a class="footnote-reference brackets" href="#id16" id="id18">6</a>.</p>
</div>
<div class="highlight-text"><div class="highlight"><pre>USB CCID Emulator 0.8
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>Usage: ccid-emulator [OPTION]...
Emulate a USB CCID compliant smart card reader
Usage: ccid-emulator [OPTIONS]...
-h, --help Print help and exit
-V, --version Print version and exit
-i, --info Print available readers and drivers. (default=off)
@@ -570,42 +388,26 @@ more than welcome! Please use our <a class="reference external" href="https://gi
</div>
<div class="section" id="notes-and-references">
<h2>Notes and References<a class="headerlink" href="#notes-and-references" title="Permalink to this headline"></a></h2>
<table class="docutils footnote" frame="void" id="id1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label">[1]</td><td><em>(<a class="fn-backref" href="#id2">1</a>, <a class="fn-backref" href="#id3">2</a>)</em> <a class="reference external" href="http://www.linux-usb.org/gadget/">http://www.linux-usb.org/gadget/</a></td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id4" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label">[2]</td><td><em>(<a class="fn-backref" href="#id5">1</a>, <a class="fn-backref" href="#id6">2</a>)</em> <a class="reference external" href="https://github.com/frankmorgner/OpenSC">https://github.com/frankmorgner/OpenSC</a></td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id7" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id8">[3]</a></td><td><a class="reference external" href="https://ccid.apdu.fr/">https://ccid.apdu.fr/</a></td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id9" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id10">[4]</a></td><td><a class="reference external" href="http://msdn.microsoft.com/en-us/windows/hardware/gg487509">http://msdn.microsoft.com/en-us/windows/hardware/gg487509</a></td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id11" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id12">[5]</a></td><td><a class="reference external" href="http://wiki.openmoko.org/wiki/Building_Gadget_USB_Module">http://wiki.openmoko.org/wiki/Building_Gadget_USB_Module</a></td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id13" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label">[6]</td><td><em>(<a class="fn-backref" href="#id14">1</a>, <a class="fn-backref" href="#id15">2</a>)</em> <a class="reference external" href="https://www.bsi.bund.de/DE/Publikationen/TechnischeRichtlinien/tr03119/index_htm.html">https://www.bsi.bund.de/DE/Publikationen/TechnischeRichtlinien/tr03119/index_htm.html</a></td></tr>
</tbody>
</table>
<dl class="footnote brackets">
<dt class="label" id="id4"><span class="brackets">1</span><span class="fn-backref">(<a href="#id5">1</a>,<a href="#id6">2</a>)</span></dt>
<dd><p><a class="reference external" href="http://www.linux-usb.org/gadget/">http://www.linux-usb.org/gadget/</a></p>
</dd>
<dt class="label" id="id7"><span class="brackets">2</span><span class="fn-backref">(<a href="#id8">1</a>,<a href="#id9">2</a>)</span></dt>
<dd><p><a class="reference external" href="https://github.com/frankmorgner/OpenSC">https://github.com/frankmorgner/OpenSC</a></p>
</dd>
<dt class="label" id="id10"><span class="brackets"><a class="fn-backref" href="#id11">3</a></span></dt>
<dd><p><a class="reference external" href="https://ccid.apdu.fr/">https://ccid.apdu.fr/</a></p>
</dd>
<dt class="label" id="id12"><span class="brackets"><a class="fn-backref" href="#id13">4</a></span></dt>
<dd><p><a class="reference external" href="http://msdn.microsoft.com/en-us/windows/hardware/gg487509">http://msdn.microsoft.com/en-us/windows/hardware/gg487509</a></p>
</dd>
<dt class="label" id="id14"><span class="brackets"><a class="fn-backref" href="#id15">5</a></span></dt>
<dd><p><a class="reference external" href="http://wiki.openmoko.org/wiki/Building_Gadget_USB_Module">http://wiki.openmoko.org/wiki/Building_Gadget_USB_Module</a></p>
</dd>
<dt class="label" id="id16"><span class="brackets">6</span><span class="fn-backref">(<a href="#id17">1</a>,<a href="#id18">2</a>)</span></dt>
<dd><p><a class="reference external" href="https://www.bsi.bund.de/DE/Publikationen/TechnischeRichtlinien/tr03119/index_htm.html">https://www.bsi.bund.de/DE/Publikationen/TechnischeRichtlinien/tr03119/index_htm.html</a></p>
</dd>
</dl>
</div>
</div>
@@ -621,9 +423,9 @@ more than welcome! Please use our <a class="reference external" href="https://gi
</p>
<p>
&copy; Copyright 2009-2017 by Dominik Oepen and Frank Morgner.<br/>
&copy; Copyright 2009-2021 by Dominik Oepen and Frank Morgner.<br/>
</p>
</div>
</footer>
</body>
</html>
</html>