diff --git a/docs/.buildinfo b/docs/.buildinfo index 6f1ab4c..3adb779 100644 --- a/docs/.buildinfo +++ b/docs/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: b6c0a435aa7d2e7b87f7f3b438fbe297 +config: a3d188836219804b05091b34c89f1341 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/ACardEmulator/README.html b/docs/ACardEmulator/README.html index 4489c36..4f85803 100644 --- a/docs/ACardEmulator/README.html +++ b/docs/ACardEmulator/README.html @@ -4,7 +4,7 @@ - Android Smart Card Emulator — vsmartcard 2021-04-28 documentation + Android Smart Card Emulator — vsmartcard 2023-09-27 documentation @@ -12,10 +12,6 @@ - - - - @@ -24,6 +20,10 @@ + + + + @@ -138,7 +138,7 @@
-
+

Android Smart Card Emulator

@@ -180,14 +180,51 @@ which allows emulating a contactless card from an existing contact-based card (by relaying the commands from PC/SC to the phone).

You may also attach your own simulation to the remote interface by implementing a simple interface through a socket communication.

-
-

Figure made with TikZ

+
+

System Message: WARNING/2 (\input{$wd/bilder/tikzstyles.tex} +\node (reader) {\includegraphics[width=3cm]{$wd/bilder/my_cardreader.pdf}}; +\node [below=0cm of reader, kleiner] {Contact-less Reader}; +\node (phone) [right=1cm of reader] {\includegraphics[width=3cm]{$wd/bilder/smartphone.pdf}}; +\node (app) [at=(phone.center)] {\includegraphics[width=2.8cm, height=4.9cm]{$wd/bilder/ACardEmulator.png}}; + +\begin{pgfonlayer}{background} + \draw [rfid] (reader.center) -- (phone.west) ; +\end{pgfonlayer})

+

!pdf2svg command cannot be run

+

Simulate a contact-less Java Card with Android Smart Card Emulator

-
-

Figure made with TikZ

+
+

System Message: WARNING/2 (\input{$wd/bilder/tikzstyles.tex} +\node (reader) {\includegraphics[width=3cm]{$wd/bilder/my_cardreader.pdf}}; +\node [below=0cm of reader, kleiner] {Contact-less Reader}; +\node (phone) [right=1cm of reader] {\includegraphics[width=3cm]{$wd/bilder/smartphone.pdf}}; +\node (app) [at=(phone.center)] {\includegraphics[width=2.8cm, height=4.9cm]{$wd/bilder/ACardEmulator.png}}; +\node (vicc) [aktivbox, right=2cm of phone, kleiner] {\texttt{vicc --reversed}}; + +\begin{pgfonlayer}{background} + \draw [rfid] (reader.center) -- (phone.west) ; + \path[linie] (phone) edge node {\includegraphics[width=1.5cm]{$wd/bilder/simplecloud.pdf}} (vicc) ; +\end{pgfonlayer})

+

!pdf2svg command cannot be run

+

Simulate a contact-less smart card with a remote virtual smart card

-
-

Figure made with TikZ

+
+

System Message: WARNING/2 (\input{$wd/bilder/tikzstyles.tex} +\node (reader) {\includegraphics[width=3cm]{$wd/bilder/my_cardreader.pdf}}; +\node [below=0cm of reader, kleiner] {Contact-less Reader}; +\node (phone) [right=1cm of reader] {\includegraphics[width=3cm]{$wd/bilder/smartphone.pdf}}; +\node (app) [at=(phone.center)] {\includegraphics[width=2.8cm, height=4.9cm]{$wd/bilder/ACardEmulator.png}}; +\node (pcsc-relay) [aktivbox, right=2cm of phone, kleiner] {\texttt{pcsc-relay --emulator=vpcd}}; +\node (card) [below=.5cm of pcsc-relay)] {\includegraphics[width=0.8cm]{$wd/bilder/smartcard.pdf}}; +\node (reader2) [below=1cm of pcsc-relay] {\includegraphics[width=1.3cm]{$wd/bilder/my_cardreader.pdf}}; + +\begin{pgfonlayer}{background} + \draw [rfid] (reader.center) -- (phone.west) ; + \path[linie] (phone) edge node {\includegraphics[width=1.5cm]{$wd/bilder/simplecloud.pdf}} (pcsc-relay) ; + \path[linie] (pcsc-relay) edge (reader2) ; +\end{pgfonlayer})

+

!pdf2svg command cannot be run

+

Relaying a contact-based smart card with pcsc-relay

The Android Smart Card Emulator has the following dependencies:

We use Android Studio 8 to build and deploy the application. Use @@ -268,7 +303,7 @@ more than welcome! Please use our - Tizen Smart Card Emulator — vsmartcard 2021-04-28 documentation + Tizen Smart Card Emulator — vsmartcard 2023-09-27 documentation @@ -12,10 +12,6 @@ - - - - @@ -24,6 +20,10 @@ + + + + @@ -138,7 +138,7 @@

-
+

Tizen Smart Card Emulator

@@ -161,8 +161,19 @@ sends responses back to the contact-less reader via the Tizen Smart Card Emulator.

You may also attach your own simulation by using the Samsung Accessory Protocol for communicating with the tizen service.

-
-

Figure made with TikZ

+
+

System Message: WARNING/2 (\input{$wd/bilder/tikzstyles.tex} +\node (reader) {\includegraphics[width=3cm]{$wd/bilder/my_cardreader.pdf}}; +\node [below=0cm of reader, kleiner] {Contact-less Reader}; +\node (gears2) [right=1cm of reader] {\includegraphics[width=3cm]{$wd/bilder/gears2.jpg}}; +\node (phone) [right=-.5cm of gears2] {\includegraphics[width=3cm]{$wd/bilder/smartphone.pdf}}; +\node (app) [at=(phone.center)] {\includegraphics[width=2.8cm, height=4.9cm]{$wd/bilder/ACardEmulator.png}}; + +\begin{pgfonlayer}{background} + \draw [rfid] (reader.center) -- (gears2.west) ; +\end{pgfonlayer})

+

!pdf2svg command cannot be run

+

Simulate a contact-less smart card with Android Smart Card Emulator

Download and Install

@@ -222,7 +233,7 @@ more than welcome! Please use our - - - diff --git a/docs/_images/inheritance-5827e1a05433ba14df2d516741c83a340d46b696.png b/docs/_images/inheritance-5827e1a05433ba14df2d516741c83a340d46b696.png deleted file mode 100644 index 9d843ca..0000000 Binary files a/docs/_images/inheritance-5827e1a05433ba14df2d516741c83a340d46b696.png and /dev/null differ diff --git a/docs/_images/inheritance-5827e1a05433ba14df2d516741c83a340d46b696.png.map b/docs/_images/inheritance-5827e1a05433ba14df2d516741c83a340d46b696.png.map deleted file mode 100644 index e5e2cbd..0000000 --- a/docs/_images/inheritance-5827e1a05433ba14df2d516741c83a340d46b696.png.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/_images/inheritance-5c600c60a9fcc658bb9a017dd609c3bff8e456b3.png b/docs/_images/inheritance-5c600c60a9fcc658bb9a017dd609c3bff8e456b3.png deleted file mode 100644 index b6a07d7..0000000 Binary files a/docs/_images/inheritance-5c600c60a9fcc658bb9a017dd609c3bff8e456b3.png and /dev/null differ diff --git a/docs/_images/inheritance-5c600c60a9fcc658bb9a017dd609c3bff8e456b3.png.map b/docs/_images/inheritance-5c600c60a9fcc658bb9a017dd609c3bff8e456b3.png.map deleted file mode 100644 index 938dc5a..0000000 --- a/docs/_images/inheritance-5c600c60a9fcc658bb9a017dd609c3bff8e456b3.png.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/_images/inheritance-95149f9804291dbbbe502519b9ab8d95f3e28f93.png b/docs/_images/inheritance-95149f9804291dbbbe502519b9ab8d95f3e28f93.png deleted file mode 100644 index 53909d0..0000000 Binary files a/docs/_images/inheritance-95149f9804291dbbbe502519b9ab8d95f3e28f93.png and /dev/null differ diff --git a/docs/_images/inheritance-95149f9804291dbbbe502519b9ab8d95f3e28f93.png.map b/docs/_images/inheritance-95149f9804291dbbbe502519b9ab8d95f3e28f93.png.map deleted file mode 100644 index 082f9c3..0000000 --- a/docs/_images/inheritance-95149f9804291dbbbe502519b9ab8d95f3e28f93.png.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/_images/inheritance-c92efbd974214a247217ba79cf0775fb65c344af.png b/docs/_images/inheritance-c92efbd974214a247217ba79cf0775fb65c344af.png deleted file mode 100644 index 70b2792..0000000 Binary files a/docs/_images/inheritance-c92efbd974214a247217ba79cf0775fb65c344af.png and /dev/null differ diff --git a/docs/_images/inheritance-c92efbd974214a247217ba79cf0775fb65c344af.png.map b/docs/_images/inheritance-c92efbd974214a247217ba79cf0775fb65c344af.png.map deleted file mode 100644 index d0bd8c2..0000000 --- a/docs/_images/inheritance-c92efbd974214a247217ba79cf0775fb65c344af.png.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/_images/inheritance-c95de3c82405e783e52102c0d9ccbc16f7e48d7c.png b/docs/_images/inheritance-c95de3c82405e783e52102c0d9ccbc16f7e48d7c.png deleted file mode 100644 index 835d1a4..0000000 Binary files a/docs/_images/inheritance-c95de3c82405e783e52102c0d9ccbc16f7e48d7c.png and /dev/null differ diff --git a/docs/_images/inheritance-c95de3c82405e783e52102c0d9ccbc16f7e48d7c.png.map b/docs/_images/inheritance-c95de3c82405e783e52102c0d9ccbc16f7e48d7c.png.map deleted file mode 100644 index 99e13ee..0000000 --- a/docs/_images/inheritance-c95de3c82405e783e52102c0d9ccbc16f7e48d7c.png.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/_images/inheritance-d51eb1f410a57b99d3b85ed60b3f73a1a03a39de.png b/docs/_images/inheritance-d51eb1f410a57b99d3b85ed60b3f73a1a03a39de.png deleted file mode 100644 index 06da744..0000000 Binary files a/docs/_images/inheritance-d51eb1f410a57b99d3b85ed60b3f73a1a03a39de.png and /dev/null differ diff --git a/docs/_images/inheritance-d51eb1f410a57b99d3b85ed60b3f73a1a03a39de.png.map b/docs/_images/inheritance-d51eb1f410a57b99d3b85ed60b3f73a1a03a39de.png.map deleted file mode 100644 index b6ba07e..0000000 --- a/docs/_images/inheritance-d51eb1f410a57b99d3b85ed60b3f73a1a03a39de.png.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/_images/tikz-0405e52eb98193c32482e91a30737e1e9684bad0.svg b/docs/_images/tikz-0405e52eb98193c32482e91a30737e1e9684bad0.svg deleted file mode 100644 index cd2ed0a..0000000 --- a/docs/_images/tikz-0405e52eb98193c32482e91a30737e1e9684bad0.svg +++ /dev/null @@ -1,841 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_images/tikz-115ce7f91e19ed28b7af35a9f18aa096148209ea.svg b/docs/_images/tikz-115ce7f91e19ed28b7af35a9f18aa096148209ea.svg deleted file mode 100644 index 94204d3..0000000 --- a/docs/_images/tikz-115ce7f91e19ed28b7af35a9f18aa096148209ea.svg +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_images/tikz-1281452b980f69540bc7520179e10f3ccc59fe36.svg b/docs/_images/tikz-1281452b980f69540bc7520179e10f3ccc59fe36.svg deleted file mode 100644 index 692fcdc..0000000 --- a/docs/_images/tikz-1281452b980f69540bc7520179e10f3ccc59fe36.svg +++ /dev/null @@ -1,7897 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_images/tikz-2debc244e414ed09dc8909102139ca8f37bae82b.svg b/docs/_images/tikz-2debc244e414ed09dc8909102139ca8f37bae82b.svg deleted file mode 100644 index 0a99188..0000000 --- a/docs/_images/tikz-2debc244e414ed09dc8909102139ca8f37bae82b.svg +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_images/tikz-30c9c7049675e5b06e8364c63b0718d51986e380.svg b/docs/_images/tikz-30c9c7049675e5b06e8364c63b0718d51986e380.svg deleted file mode 100644 index c0194a7..0000000 --- a/docs/_images/tikz-30c9c7049675e5b06e8364c63b0718d51986e380.svg +++ /dev/null @@ -1,3670 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_images/tikz-5b402031da401947efbeae7481d47bd35196791d.svg b/docs/_images/tikz-5b402031da401947efbeae7481d47bd35196791d.svg deleted file mode 100644 index 16626df..0000000 --- a/docs/_images/tikz-5b402031da401947efbeae7481d47bd35196791d.svg +++ /dev/null @@ -1,633 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_images/tikz-6e71605956d62bb837a2533794c8c50348b2f87c.svg b/docs/_images/tikz-6e71605956d62bb837a2533794c8c50348b2f87c.svg deleted file mode 100644 index 38cc7f8..0000000 --- a/docs/_images/tikz-6e71605956d62bb837a2533794c8c50348b2f87c.svg +++ /dev/null @@ -1,2269 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_images/tikz-ae1e764f23cec8b5d67952bc6d8bbe66280e80d1.svg b/docs/_images/tikz-ae1e764f23cec8b5d67952bc6d8bbe66280e80d1.svg deleted file mode 100644 index b0fe297..0000000 --- a/docs/_images/tikz-ae1e764f23cec8b5d67952bc6d8bbe66280e80d1.svg +++ /dev/null @@ -1,2139 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_images/tikz-b5a668553fb9bf21fb5abcc4cae46289d11490d1.svg b/docs/_images/tikz-b5a668553fb9bf21fb5abcc4cae46289d11490d1.svg deleted file mode 100644 index da74e3d..0000000 --- a/docs/_images/tikz-b5a668553fb9bf21fb5abcc4cae46289d11490d1.svg +++ /dev/null @@ -1,427 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_images/tikz-b87c5ab6092153f7f845370e9964b266e5d97f55.svg b/docs/_images/tikz-b87c5ab6092153f7f845370e9964b266e5d97f55.svg deleted file mode 100644 index 8b2fbb9..0000000 --- a/docs/_images/tikz-b87c5ab6092153f7f845370e9964b266e5d97f55.svg +++ /dev/null @@ -1,2024 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_images/tikz-c523bba45f9fcaa801dd4f6284c7efa1f320c9b1.svg b/docs/_images/tikz-c523bba45f9fcaa801dd4f6284c7efa1f320c9b1.svg deleted file mode 100644 index bc17e73..0000000 --- a/docs/_images/tikz-c523bba45f9fcaa801dd4f6284c7efa1f320c9b1.svg +++ /dev/null @@ -1,345 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_images/tikz-ce55fa00e38973c00fdf255926bb46304226f2dc.svg b/docs/_images/tikz-ce55fa00e38973c00fdf255926bb46304226f2dc.svg deleted file mode 100644 index 7a233b4..0000000 --- a/docs/_images/tikz-ce55fa00e38973c00fdf255926bb46304226f2dc.svg +++ /dev/null @@ -1,2481 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_images/tikz-f675fc9e85a93771428d0790db395907b3f662fe.svg b/docs/_images/tikz-f675fc9e85a93771428d0790db395907b3f662fe.svg deleted file mode 100644 index a1d1e9f..0000000 --- a/docs/_images/tikz-f675fc9e85a93771428d0790db395907b3f662fe.svg +++ /dev/null @@ -1,5005 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_images/tikz-f7010fa8209b3752026a52619d57bbebb8fa2bcd.svg b/docs/_images/tikz-f7010fa8209b3752026a52619d57bbebb8fa2bcd.svg deleted file mode 100644 index 48de5bf..0000000 --- a/docs/_images/tikz-f7010fa8209b3752026a52619d57bbebb8fa2bcd.svg +++ /dev/null @@ -1,2016 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_sources/ACardEmulator/README.txt b/docs/_sources/ACardEmulator/README.txt index 66edc24..5ff5b0c 100644 --- a/docs/_sources/ACardEmulator/README.txt +++ b/docs/_sources/ACardEmulator/README.txt @@ -134,9 +134,7 @@ submodules:: git clone https://github.com/frankmorgner/vsmartcard.git cd vsmartcard - # fetch the applets that are in the submodules - git submodule init - git submodule update + git submodule update --init --recursive We use `Android Studio`_ to build and deploy the application. Use :menuselection:`File --> Open` to select :file:`vsmartcard/ACardEmulator`. diff --git a/docs/_sources/ccid/README.txt b/docs/_sources/ccid/README.txt index 7cf142e..4f3ed3c 100644 --- a/docs/_sources/ccid/README.txt +++ b/docs/_sources/ccid/README.txt @@ -168,12 +168,6 @@ tools. \texttt{/dev/gadget/ep2-bulk}\\ \texttt{/dev/gadget/ep3-bulk}\\}; - -Running the USB CCID Emulator has the following dependencies: - -- Linux Kernel with GadgetFS_ -- OpenSC_ - 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. @@ -266,7 +260,12 @@ modern Windows and Unix-like systems by default. .. include:: autotools.txt The USB CCID Emulator depends on :program:`libopensc`, which is automatically -built from a snapshot of the OpenSC source code and then statically linked. +built from a snapshot of the OpenSC_ source code and then statically linked. + +Running the USB CCID Emulator has the following dependencies: + +- Linux Kernel with GadgetFS_ +- OpenSSL_ 1.0.0 or later ================= @@ -334,6 +333,7 @@ Notes and References .. _`GadgetFS`: http://www.linux-usb.org/gadget/ .. _`OpenSC`: https://github.com/frankmorgner/OpenSC +.. _`OpenSSL`: https://www.openssl.org .. _`libccid`: https://ccid.apdu.fr/ .. _`Windows USB CCID driver`: http://msdn.microsoft.com/en-us/windows/hardware/gg487509 .. _`OpenMoko Wiki`: http://wiki.openmoko.org/wiki/Building_Gadget_USB_Module diff --git a/docs/_sources/index.txt b/docs/_sources/index.txt index 5c4df01..bfb7294 100644 --- a/docs/_sources/index.txt +++ b/docs/_sources/index.txt @@ -61,17 +61,17 @@ have a look at these programming guides and try yourself: virtualsmartcard/api -.. image:: https://img.shields.io/travis/frankmorgner/vsmartcard/master.svg?label=Travis%20CI%20build - :target: https://travis-ci.org/frankmorgner/vsmartcard - :alt: Travis CI Build Status Image +.. image:: https://img.shields.io/github/actions/workflow/status/frankmorgner/vsmartcard/ci.yml?branch=master&label=Ubuntu%2FmacOS&logo=github + :target: https://github.com/frankmorgner/vsmartcard/actions/workflows/ci.yml?branch=master + :alt: GitHub CI status .. image:: https://img.shields.io/appveyor/ci/frankmorgner/vsmartcard/master.svg?label=AppVeyor%20build :target: https://ci.appveyor.com/project/frankmorgner/vsmartcard - :alt: AppVeyor CI Build Status Image + :alt: AppVeyor CI status .. image:: https://img.shields.io/coverity/scan/3987.svg?label=Coverity%20scan :target: https://scan.coverity.com/projects/3987 - :alt: Coverity Scan Status + :alt: Coverity Scan status Download diff --git a/docs/_sources/pcsc-relay/README.txt b/docs/_sources/pcsc-relay/README.txt index c81c0eb..e7dd8ba 100644 --- a/docs/_sources/pcsc-relay/README.txt +++ b/docs/_sources/pcsc-relay/README.txt @@ -16,7 +16,7 @@ PC/SC Relay Welcome to PC/SC Relay. The purpose of PC/SC Relay is to relay a smart card using an contact-less interface. Currently the following contact-less -emulators are supported: +**emulators** are supported: - `Hardware supported by libnfc`_ - OpenPICC_ @@ -24,7 +24,7 @@ emulators are supported: Command APDUs are received with the contact-less interface and relayed. The Response APDUs are then sent back via RFID. The contact-less data will be -relayed to one of the following: +relayed to one of the following **connectors**: - to a *real* smart card inserted into one of the systems' smart card readers. The smart card reader must be accessible with PC/SC. The smart card may be @@ -33,6 +33,32 @@ relayed to one of the following: smart card's native interface is used and (despite its name) PC/SC Relay does not need to access PC/SC in this case. +.. + http://www.plantuml.com/plantuml/txt/SoWkIImgAStDuNBDBSr9BCalKj2rKr0gI2vErYrApKciL5AmKd3EpyrDp4jHS0nm2UL2bWEg1KhcvQKc0pLoGLcOHc3eWTjbfH2KMboGdrUS2Z7S8JKl1UWO0000 + + @startuml + skinparam responseMessageBelowArrow true + Emulator -> "pcsc-relay" : Command APDU + "pcsc-relay" -> Connector + Connector -> "pcsc-relay" + "pcsc-relay" -> Emulator : Response APDU + @enduml + +:: + + ┌────────┐ ┌──────────┐ ┌─────────┐ + │Emulator│ │pcsc-relay│ │Connector│ + └───┬────┘ └────┬─────┘ └────┬────┘ + │ Command APDU │ │ + │ ───────────────────> │ + │ │ ───────────────────>│ + │ │ <───────────────────│ + │ Response APDU │ │ + │ <─────────────────── │ + ┌───┴────┐ ┌────┴─────┐ ┌────┴────┐ + │Emulator│ │pcsc-relay│ │Connector│ + └────────┘ └──────────┘ └─────────┘ + .. tikz:: Debug, Analyze and Emulate with PC/SC Relay :stringsubst: :libs: arrows, calc, fit, patterns, plotmarks, shapes.geometric, shapes.misc, shapes.symbols, shapes.arrows, shapes.callouts, shapes.multipart, shapes.gates.logic.US, shapes.gates.logic.IEC, er, automata, backgrounds, chains, topaths, trees, petri, mindmap, matrix, calendar, folding, fadings, through, positioning, scopes, decorations.fractals, decorations.shapes, decorations.text, decorations.pathmorphing, decorations.pathreplacing, decorations.footprints, decorations.markings, shadows diff --git a/docs/_sources/virtualsmartcard/README.txt b/docs/_sources/virtualsmartcard/README.txt index cb2c29d..95e766a 100644 --- a/docs/_sources/virtualsmartcard/README.txt +++ b/docs/_sources/virtualsmartcard/README.txt @@ -103,7 +103,7 @@ Depending on your usage of the |vpicc| you may need to install the following: - Python_ - pyscard_ (relaying a local smart card with `--type=relay`) -- PyCryptodome_, PBKDF2_, PIL_, readline_ or PyReadline_ (emulation of electronic +- PyCryptodome, PBKDF2_, PIL_, readline_ or PyReadline_ (emulation of electronic passport with `--type=ePass`) - OpenPACE_ (emulation of German identity card with `--type=nPA`) - libqrencode_ (to print a QR code on the command line for `vpcd-config`; an @@ -145,11 +145,15 @@ Building and installing |vpcd| on Windows PC/SC. For the Windows integration we extended `Fabio Ottavi's UMDF Driver for a -Virtual Smart Card Reader`_ with a |vpcd| interface. To build |vpcd| for -Windows we use `Windows Driver Kit 10 and Visual Studio 2015`_. The vpcd -installer requires the `WiX Toolset 3.10`_. If you choose +Virtual Smart Card Reader`_ with a |vpcd| interface. If you choose to download the `Windows binaries`_, you may directly jump to step 4. +In the CI environment, we're building |vpcd| for Windows with Visual Studio +Community 2019 with SDK/WDK for Windows 11. (The WDK version needs to match +at least your targeted version of Windows, see this `guide for installing VS +with WDK`_) The vpcd installer additionally +requires the `WiX Toolset 3.10`_ to be installed. + 1. Clone the git repository and make sure it is initialized with all submodules:: @@ -166,10 +170,21 @@ to download the `Windows binaries`_, you may directly jump to step 4. the installer (:file:`BixVReaderInstaller.msi`) in :file:`virtualsmartcard\\win32\\BixVReaderInstaller\\bin\\*Release` -4. To install |vpcd|, double click :file:`BixVReaderInstaller.msi`. Since we - are currently not signing the Installer, this will yield a warning about an - unverified driver software publisher on Windows 8 and later. Click - :guilabel:`Install this driver software anyway`. +4. To import the installer's test signing certificate, double click + :file:`BixVReader.cer` and add it to the *Trusted Root Certification + Authority* and the *Trusted Publishers* at the *Local Computer" (not the + *Current User*). + + On the commandline, you could do this :ref:`as follows`:: + + CertMgr.exe /add BixVReader.cer /s /r localMachine root /all + CertMgr.exe /add BixVReader.cer /s /r localMachine trustedpublisher + + Feel free to remove the certificate from the certificate stores once the + device is installed. + +5. To install |vpcd|, double click :file:`BixVReaderInstaller.msi`. For debugging |vpcd| and building the driver with an older version of Visual Studio or WDK please see `Fabio Ottavi's UMDF Driver for a Virtual Smart Card @@ -300,6 +315,38 @@ through the PC/SC API. You can use the :command:`opensc-explorer` or provide scripts for testing with npa-tool_ and PCSC-Lite's smart card reader driver tester. +-------------------------------------------------------------------------------- +Testing |vpicc| -t ePass +-------------------------------------------------------------------------------- + +A simple tool to test |BAC| is available for Python 2.7. On Ubuntu, its +requiremets are installed as follows:: + + sudo apt-get install python2.7-dev + curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py + python2.7 get-pip.py + python2.7 -m pip install pycryptodomex pyscard + python2.7 readpass.py --no-gui + git clone https://github.com/henryk/cyberflex-shell + cd cyberflex-shell + +Now we can create and run a small script:: + + echo "select_application a0000002471001" > script.txt + echo "perform_bac L898902C<3UTO6908061F9406236ZE184226B<<<<<14" >> script.txt + python2.7 cyberflex-shell.py script.txt + +The tool will wait for a (virtual) smart card to appear. Start |vpicc| and make +sure to configure it with the correct MRZ, i.e. +``P - USB CCID Emulator — vsmartcard 2021-04-28 documentation + USB CCID Emulator — vsmartcard 2023-09-27 documentation @@ -12,10 +12,6 @@ - - - - @@ -24,6 +20,10 @@ + + + + @@ -144,7 +144,7 @@
-
+

USB CCID Emulator

@@ -163,8 +163,51 @@ standard USB CCID reader. USB CCID Emulator can be used as trusted intermediary enabling secure PIN entry and PIN modification. In combination with OpenSC 2 also PACE can be performed by the emulator.

-
-

Figure made with TikZ

+
+

System Message: WARNING/2 (\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})

+

!pdf2svg command cannot be run

+

Portable smart card reader with trusted user interface

If the machine running ccid-emulator is in USB device mode, a local reader is forwareded via USB to another machine. If in USB host mode, the USB @@ -201,7 +244,7 @@ their PC/SC counterpart:

transmitting (SCardTransmit) specially crafted APDUs. Only the alternative initialization of PACE using SCardControl requires patching the driver (available for libccid, see patches). The pseudo APDUs with no need for -patches are defined as follows (see BSI TR-03119 1.3 6 p. 33-34):

+patches are defined as follows (see BSI TR-03119 1.3 7 p. 33-34):

@@ -269,19 +312,143 @@ an error

The USB CCID Emulator is implemented using GadgetFS 1. Some fragments of the source code are based on the GadgetFS example and on the source code of the OpenSC tools.

-
-

Figure made with TikZ

+
+

System Message: WARNING/2 (\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}\\};)

+

!pdf2svg command cannot be run

+

Software stack of the USB CCID Emulator running on the OpenMoko Neo FreeRunner

-

Running the USB CCID Emulator has the following dependencies:

- -

Whereas using the USB CCID Emulator on the host system as smart card reader only +

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.

-
-

Figure made with TikZ

+
+

System Message: WARNING/2 (\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})

+

!pdf2svg command cannot be run

+

Implementation of a mobile smart card reader for the German ID card

Download

@@ -289,6 +456,8 @@ modern Windows and Unix-like systems by default.

still available on Sourceforge.

Alternatively, you can clone our git repository:

git clone https://github.com/frankmorgner/vsmartcard.git
+cd vsmartcard
+git submodule update --init --recursive
 
@@ -312,13 +481,18 @@ make install

The USB CCID Emulator depends on libopensc, which is automatically -built from a snapshot of the OpenSC source code and then statically linked.

+built from a snapshot of the OpenSC2 source code and then statically linked.

+

Running the USB CCID Emulator has the following dependencies:

+

Hints on GadgetFS

To create a USB Gadget in both USB host and USB client mode, you need to load the kernel module gadgetfs. Here is how to get a running version of -GadgetFS on a Debian system (see also OpenMoko Wiki 5):

+GadgetFS on a Debian system (see also OpenMoko Wiki 6):

sudo apt-get install linux-source linux-headers-`uname -r`
 sudo tar xjf /usr/src/linux-source-*.tar.bz2
 cd linux-source-*/drivers/usb/gadget
@@ -349,12 +523,12 @@ loading the module, you maybe want to check out Usage
 

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 libccid 3 -and the Windows USB CCID driver 4. PIN commands are supported if implemented +and mounted. The USB CCID Emulator is compatible with the unix driver libccid 4 +and the Windows USB CCID driver 5. PIN commands are supported if implemented by the driver.

New in version 0.7: USB CCID Emulator now supports the boxing commands defined in BSI TR-03119 -1.3 6.

+1.3 7.

Usage: ccid-emulator [OPTION]...
 Emulate a USB CCID compliant smart card reader
@@ -396,15 +570,18 @@ more than welcome! Please use our https://github.com/frankmorgner/OpenSC

3
-

https://ccid.apdu.fr/

+

https://www.openssl.org

4
-

http://msdn.microsoft.com/en-us/windows/hardware/gg487509

+

https://ccid.apdu.fr/

5
+

http://msdn.microsoft.com/en-us/windows/hardware/gg487509

+
+
6

http://wiki.openmoko.org/wiki/Building_Gadget_USB_Module

-
6(1,2)
+
7(1,2)

https://www.bsi.bund.de/DE/Publikationen/TechnischeRichtlinien/tr03119/index_htm.html

@@ -423,7 +600,7 @@ more than welcome! Please use our - Welcome to the Virtual Smart Card Architecture documentation! — vsmartcard 2021-04-28 documentation + Welcome to the Virtual Smart Card Architecture documentation! — vsmartcard 2023-09-27 documentation @@ -12,10 +12,6 @@ - - - - @@ -23,6 +19,10 @@ + + + + @@ -132,15 +132,40 @@
-
+

Welcome to the Virtual Smart Card Architecture documentation!

Welcome to the Virtual Smart Card Architecture. Virtual Smart Card Architecture is an umbrella project for various projects concerned with the emulation of different types of smart card readers or smart cards themselves.

-
-

Figure made with TikZ

+
+

System Message: WARNING/2 (\input{$wd/bilder/tikzstyles.tex} +\tikzstyle{bla}=[box, klein, rounded rectangle, inner sep=.3cm] +\node (a) {}; + +\node[bla, above left=.5cm of a] +(usb) {USB Terminal}; + +\node[bla, below left=.5cm of a] +(nfc) {NFC Terminal}; + +\node[bla, rounded rectangle left arc=concave, above right=.5cm of a] +(sc) {Real Smart Card}; + +\node[bla, rounded rectangle left arc=concave, below right=.5cm of a] +(vsc) {Virtual Smart Card}; + +\begin{pgfonlayer}{background} +\path[line width=.8cm,color=hublue!20] +(a.mid) edge [out=180, in=0] (usb.center) +edge [out=180, in=0] (nfc.center) +edge [out=0, in=180] (sc.center) +edge [out=0, in=180] (vsc.center) +; +\end{pgfonlayer})

+

!pdf2svg command cannot be run

+

The Virtual Smart Card Architecture connects different aspects of smart card handling

Currently the following projects are part of Virtual Smart Card Architecture:

@@ -161,9 +186,9 @@ have a look at these programming guides and try yourself:

  • Creating a Virtual Smart Card
  • -Travis CI Build Status Image -AppVeyor CI Build Status Image -Coverity Scan Status +GitHub CI status +AppVeyor CI status +Coverity Scan status

    Download

    You can download the latest release of the Virtual Smart Card Architecture here. Older releases are @@ -212,7 +237,7 @@ location.

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    + © Copyright 2009-2023 by Dominik Oepen and Frank Morgner.

    diff --git a/docs/objects.inv b/docs/objects.inv index f26e99b..2fb98a8 100644 Binary files a/docs/objects.inv and b/docs/objects.inv differ diff --git a/docs/pcsc-relay/README.html b/docs/pcsc-relay/README.html index c6929e4..89e1f14 100644 --- a/docs/pcsc-relay/README.html +++ b/docs/pcsc-relay/README.html @@ -4,7 +4,7 @@ - PC/SC Relay — vsmartcard 2021-04-28 documentation + PC/SC Relay — vsmartcard 2023-09-27 documentation @@ -12,10 +12,6 @@ - - - - @@ -24,6 +20,10 @@ + + + + @@ -146,7 +146,7 @@
    -
    +

    PC/SC Relay

    @@ -166,7 +166,7 @@

    Welcome to PC/SC Relay. The purpose of PC/SC Relay is to relay a smart card using an contact-less interface. Currently the following contact-less -emulators are supported:

    +emulators are supported:

    Command APDUs are received with the contact-less interface and relayed. The Response APDUs are then sent back via RFID. The contact-less data will be -relayed to one of the following:

    +relayed to one of the following connectors:

    • to a real smart card inserted into one of the systems’ smart card readers. The smart card reader must be accessible with PC/SC. The smart card may be @@ -183,14 +183,147 @@ contact-based or contact-less.

    • smart card’s native interface is used and (despite its name) PC/SC Relay does not need to access PC/SC in this case.

    -
    -

    Figure made with TikZ

    +
    ┌────────┐          ┌──────────┐          ┌─────────┐
    +│Emulator│          │pcsc-relay│          │Connector│
    +└───┬────┘          └────┬─────┘          └────┬────┘
    +    │    Command APDU    │                     │
    +    │ ───────────────────>                     │
    +    │                    │ ───────────────────>│
    +    │                    │ <───────────────────│
    +    │    Response APDU   │                     │
    +    │ <───────────────────                     │
    +┌───┴────┐          ┌────┴─────┐          ┌────┴────┐
    +│Emulator│          │pcsc-relay│          │Connector│
    +└────────┘          └──────────┘          └─────────┘
    +
    +
    +
    +

    System Message: WARNING/2 (\input{$wd/bilder/tikzstyles.tex} +\node (pcsc-relay) {\texttt{pcsc-relay}}; + +\node [kleiner, right=2cm of pcsc-relay, yshift=.9cm] +(libnfc) {Libnfc Devices}; +\node [kleiner, right=2cm of pcsc-relay, yshift=.3cm] +(openpicc) {OpenPICC}; +\node [kleiner, right=2cm of pcsc-relay, yshift=-.3cm] +(vpcd) {Virtual Smart Card Reader}; +\node [kleiner, right=2cm of pcsc-relay, yshift=-.9cm] +(acardemulator) {Android Smart Card Emulator}; + +\node [kleiner, left=2cm of pcsc-relay, yshift=.9cm] +(contactbased) {Contact-based Smart Card}; +\node [kleiner, left=2cm of pcsc-relay, yshift=.3cm] +(contactless) {Contact-less Smart Card}; +\node [kleiner, left=2cm of pcsc-relay, yshift=-.9cm] +(remotereader) {Remote Smart Card Reader}; +\node [kleiner, left=2cm of pcsc-relay, yshift=-.3cm] +(virtual) {Virtual Smart Card}; + +\node [above=.3cm of pcsc-relay, kleiner, xshift=1.2cm] +(capdu) {Command APDU}; +\node [below=.3cm of pcsc-relay, kleiner, xshift=-1.2cm] +(rapdu) {Response APDU}; +\draw (rapdu.east) edge [pfeil] +(1,0); +\draw (capdu.west) edge [pfeil] +(-1,0); + +\begin{pgfonlayer}{background} +\path[line width=.5cm,color=hublue!20] +(pcsc-relay.mid) edge [out=180, in=0] (contactbased.east) +edge [out=180, in=0] (contactless.east) +edge [out=180, in=0] (virtual.east) +edge [out=180, in=0] (remotereader.east) +edge [out=0, in=180] (libnfc.west) +edge [out=0, in=180] (openpicc.west) +edge [out=0, in=180] (vpcd.west) +edge [out=0, in=180] (acardemulator.west) +; +\end{pgfonlayer})

    +

    !pdf2svg command cannot be run

    +

    Debug, Analyze and Emulate with PC/SC Relay

    With PC/SC Relay you can relay a contact-less or contact based smart card over a long distance. Also you can use it in combination with the Virtual Smart Card to completely emulate an ISO/IEC 14443 smart card.

    -
    -

    Figure made with TikZ

    +
    +

    System Message: WARNING/2 (\input{$wd/bilder/tikzstyles.tex} +\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] + +\tikzstyle{keks}=[to path={-- ++(.1,0) |- (\tikztotarget)}] + +\node (touchatag) + {\includegraphics[keepaspectratio, height=2cm, + width=2cm]{$wd/bilder/touchatag.png}}; +\node (touchatagbeschreibung) [below=0cm of touchatag, kleiner] +{touchatag}; + +\node (pcsc-relay) [right=of touchatag] +{\texttt{pcsc-relay}}; +\node (pcsc-relaybeschreibung) [below=0cm of pcsc-relay, kleiner] +{NFC emulator +}; + +\node (vicc) [right=of pcsc-relay] +{\texttt{vicc -t nPA}}; +\node (viccbeschreibung) [below=0cm of vicc, kleiner] +{nPA emulator}; + +\node (group) [fit=(touchatag) (pcsc-relay) (vicc) (touchatagbeschreibung) +(pcsc-relaybeschreibung) (viccbeschreibung)] {}; +\node (funktionenchat) [below=0cm of group, bla] +{ + PACE + \nodepart{second} + \begin{itemize} + \item Display context (eID/eSign) + \item Display requested permissions + \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 + \item With certificate database + \begin{itemize} + \item Identification of service provider + \item Display purpose of transaction + \end{itemize} + \end{itemize} +}; + +\begin{pgfonlayer}{background} + \node (box) [fit=(touchatag) (pcsc-relay) (vicc) (touchatagbeschreibung) + (pcsc-relaybeschreibung) (viccbeschreibung) (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) [left=1.5of box] + {\includegraphics[keepaspectratio, height=4cm, + width=4cm]{$wd/bilder/ivak_kiosk-terminal.pdf}}; +\node (e) [below=0cm of a, text width=2.5cm, align=center] +{(Public) Terminal}; + + +\begin{pgfonlayer}{background} + \path + (touchatag) edge [doppelpfeil] (pcsc-relay) + (pcsc-relay) edge [doppelpfeil] (vicc) + (vicc.east) edge [keks, pfeil] (funktionenchat.text east) + (vicc.east) edge [keks, pfeil] (funktionenpace.text east) + (a) edge [decorate, decoration={expanding waves, angle=20, segment + length=6}, nichtrundelinie] (touchatag.south west); +\end{pgfonlayer})

    +

    !pdf2svg command cannot be run

    +

    Emulate a contact-less German ID card to perform sanity checks

    PC/SC Relay has the following dependencies:

      @@ -209,6 +342,8 @@ but it generally concerns all contact-less smart cards.

      still available on Sourceforge.

      Alternatively, you can clone our git repository:

      git clone https://github.com/frankmorgner/vsmartcard.git
      +cd vsmartcard
      +git submodule update --init --recursive
       
    @@ -420,7 +555,7 @@ more than welcome! Please use our - Remote Smart Card Reader — vsmartcard 2021-04-28 documentation + Remote Smart Card Reader — vsmartcard 2023-09-27 documentation @@ -12,10 +12,6 @@ - - - - @@ -24,6 +20,10 @@ + + + + @@ -138,7 +138,7 @@
    -
    +

    Remote Smart Card Reader

    @@ -157,8 +157,26 @@ smartcard reader. On the host computer a special smart card driver, vpcd, must be installed. The app establishes a connection to vpcd over the network when a contact-less card is detected.

    -
    -

    Figure made with TikZ

    +
    +

    System Message: WARNING/2 (\input{$wd/bilder/tikzstyles.tex} + \node (pcsc) [klein, aktivbox, inner xsep=.75cm, align=center] {PC/SC\\Framework}; +\node (sca) [aktivbox, klein, left=.75cm of pcsc, align=center] {Smart Card\\Application}; +\node (vpcd) [box, at=(pcsc.east), kleiner] {\texttt{vpcd}}; +\node (phone) [right=2cm of vpcd] {\includegraphics[width=3cm]{$wd/bilder/smartphone.pdf}}; +\node (app) [at=(phone.center)] {\includegraphics[width=2.8cm, height=4.9cm]{$wd/bilder/remote-reader.png}}; +\node (card) [right=0cm of phone, rotate=45] {\includegraphics[width=2cm]{$wd/bilder/smartcard.pdf}}; + +\begin{pgfonlayer}{background} + \node (box) [box, fit=(pcsc) (sca) (vpcd), inner ysep=1.5em] {}; + \node [at=(box.north west)] {\includegraphics[width=1cm]{$wd/bilder/computer-tango.pdf}}; + \path[linie] + (sca) edge (pcsc) + (vpcd) edge node {\includegraphics[width=1.5cm]{$wd/bilder/simplecloud.pdf}} (app) + ; + \draw [rfid] (phone.center) -- (card.center) ; +\end{pgfonlayer})

    +

    !pdf2svg command cannot be run

    +

    Remote Smart Card Reader used to access a contact-less card

    The Remote Smart Card Reader has the following dependencies:

      @@ -171,8 +189,30 @@ requires permission to access the camera

    For remotely accessing a traditional smart card reader on one computer from an other computer, the Virtual Smart Card in relay mode can be used:

    -
    -

    Figure made with TikZ

    +
    +

    System Message: WARNING/2 (\input{$wd/bilder/tikzstyles.tex} + \node (pcsc) [klein, aktivbox, inner xsep=.75cm, align=center] {PC/SC\\Framework}; +\node (sca) [aktivbox, klein, left=.75cm of pcsc, align=center] {Smart Card\\Application}; +\node (vpcd) [box, at=(pcsc.east), kleiner] {\texttt{vpcd}}; + \node (pcsc2) [klein, aktivbox, inner xsep=.75cm, align=center, below=2.5cm of vpcd] {PC/SC\\Framework}; +\node (vicc) [aktivbox, left=1cm of pcsc2, kleiner] {\texttt{vicc -t relay}}; +\node (reader) [right=1cm of pcsc2] {\includegraphics[width=2cm]{$wd/bilder/my_cardreader.pdf}}; +\node (card) [at=(reader.east), rotate=45] {\includegraphics[width=2cm]{$wd/bilder/smartcard.pdf}}; + +\begin{pgfonlayer}{background} + \node (box) [box, fit=(pcsc) (sca) (vpcd), inner ysep=1.5em] {}; + \node (box2) [box, fit=(vicc) (pcsc2), inner ysep=1.5em] {}; + \node [at=(box.north west)] {\includegraphics[width=1cm]{$wd/bilder/computer-tango.pdf}}; + \node [at=(box2.north west)] {\includegraphics[width=1cm]{$wd/bilder/computer-tango.pdf}}; + \path[linie] + (sca) edge (pcsc) + (vpcd) edge [out=south, in=north] node {\includegraphics[width=1.5cm]{$wd/bilder/simplecloud.pdf}} (vicc) + (vicc) edge (pcsc2) + (pcsc2) edge [usb] (reader.center) + ; +\end{pgfonlayer})

    +

    !pdf2svg command cannot be run

    +

    Virtual Smart Card used in relay mode to remotely access a card

    Note

    @@ -228,7 +268,7 @@ more than welcome! Please use our - Search — vsmartcard 2021-04-28 documentation + Search — vsmartcard 2023-09-27 documentation @@ -12,16 +12,10 @@ - - - - - - + + @@ -29,6 +23,10 @@ + + + + @@ -121,7 +119,7 @@
    -
    +

    Search

    @@ -145,9 +143,9 @@
    - - + +
    @@ -164,7 +162,7 @@

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    + © Copyright 2009-2023 by Dominik Oepen and Frank Morgner.

    diff --git a/docs/searchindex.js b/docs/searchindex.js index 4286fb3..5189e16 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["ACardEmulator/README","TCardEmulator/README","ccid/README","index","pcsc-relay/README","remote-reader/README","virtualsmartcard/README","virtualsmartcard/api","virtualsmartcard/api/virtualsmartcard","virtualsmartcard/api/virtualsmartcard.CardGenerator","virtualsmartcard/api/virtualsmartcard.ConstantDefinitions","virtualsmartcard/api/virtualsmartcard.CryptoUtils","virtualsmartcard/api/virtualsmartcard.SEutils","virtualsmartcard/api/virtualsmartcard.SWutils","virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem","virtualsmartcard/api/virtualsmartcard.SmartcardSAM","virtualsmartcard/api/virtualsmartcard.TLVutils","virtualsmartcard/api/virtualsmartcard.VirtualSmartcard","virtualsmartcard/api/virtualsmartcard.cards","virtualsmartcard/api/virtualsmartcard.cards.HandlerTest","virtualsmartcard/api/virtualsmartcard.cards.Relay","virtualsmartcard/api/virtualsmartcard.cards.RelayMiddleman","virtualsmartcard/api/virtualsmartcard.cards.cryptoflex","virtualsmartcard/api/virtualsmartcard.cards.ePass","virtualsmartcard/api/virtualsmartcard.cards.nPA","virtualsmartcard/api/virtualsmartcard.tests","virtualsmartcard/api/virtualsmartcard.tests.CardGenerator_test","virtualsmartcard/api/virtualsmartcard.tests.CryptoUtils_test","virtualsmartcard/api/virtualsmartcard.tests.SmartcardSAM_test","virtualsmartcard/api/virtualsmartcard.tests.utils_test","virtualsmartcard/api/virtualsmartcard.utils"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinxcontrib.bibtex":7,sphinx:56},filenames:["ACardEmulator/README.txt","TCardEmulator/README.txt","ccid/README.txt","index.txt","pcsc-relay/README.txt","remote-reader/README.txt","virtualsmartcard/README.txt","virtualsmartcard/api.txt","virtualsmartcard/api/virtualsmartcard.txt","virtualsmartcard/api/virtualsmartcard.CardGenerator.txt","virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.txt","virtualsmartcard/api/virtualsmartcard.CryptoUtils.txt","virtualsmartcard/api/virtualsmartcard.SEutils.txt","virtualsmartcard/api/virtualsmartcard.SWutils.txt","virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.txt","virtualsmartcard/api/virtualsmartcard.SmartcardSAM.txt","virtualsmartcard/api/virtualsmartcard.TLVutils.txt","virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.txt","virtualsmartcard/api/virtualsmartcard.cards.txt","virtualsmartcard/api/virtualsmartcard.cards.HandlerTest.txt","virtualsmartcard/api/virtualsmartcard.cards.Relay.txt","virtualsmartcard/api/virtualsmartcard.cards.RelayMiddleman.txt","virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.txt","virtualsmartcard/api/virtualsmartcard.cards.ePass.txt","virtualsmartcard/api/virtualsmartcard.cards.nPA.txt","virtualsmartcard/api/virtualsmartcard.tests.txt","virtualsmartcard/api/virtualsmartcard.tests.CardGenerator_test.txt","virtualsmartcard/api/virtualsmartcard.tests.CryptoUtils_test.txt","virtualsmartcard/api/virtualsmartcard.tests.SmartcardSAM_test.txt","virtualsmartcard/api/virtualsmartcard.tests.utils_test.txt","virtualsmartcard/api/virtualsmartcard.utils.txt"],objects:{"virtualsmartcard.CardGenerator":{CardGenerator:[9,1,1,""]},"virtualsmartcard.CardGenerator.CardGenerator":{__generate_cryptoflex:[9,2,1,""],__generate_ePass:[9,2,1,""],__generate_iso_card:[9,2,1,""],__generate_nPA:[9,2,1,""],generateCard:[9,2,1,""],getCard:[9,2,1,""],readDatagroups:[9,2,1,""],setCard:[9,2,1,""]},"virtualsmartcard.CryptoUtils":{_makesalt:[11,3,1,""],append_padding:[11,3,1,""],calculate_MAC:[11,3,1,""],cipher:[11,3,1,""],crypto_checksum:[11,3,1,""],decrypt:[11,3,1,""],encrypt:[11,3,1,""],get_cipher:[11,3,1,""],get_cipher_blocklen:[11,3,1,""],get_cipher_keylen:[11,3,1,""],hash:[11,3,1,""],operation_on_string:[11,3,1,""],strip_padding:[11,3,1,""]},"virtualsmartcard.SEutils":{ControlReferenceTemplate:[12,1,1,""],Security_Environment:[12,1,1,""]},"virtualsmartcard.SEutils.ControlReferenceTemplate":{__replace_tag:[12,2,1,""],__set_algo:[12,2,1,""],__set_iv:[12,2,1,""],__set_key:[12,2,1,""],parse_SE_config:[12,2,1,""],to_string:[12,2,1,""]},"virtualsmartcard.SEutils.Security_Environment":{_set_SE:[12,2,1,""],compute_cryptographic_checksum:[12,2,1,""],compute_digital_signature:[12,2,1,""],decipher:[12,2,1,""],encipher:[12,2,1,""],generate_public_key_pair:[12,2,1,""],hash:[12,2,1,""],manage_security_environment:[12,2,1,""],parse_SM_CAPDU:[12,2,1,""],perform_security_operation:[12,2,1,""],protect_response:[12,2,1,""],verify_certificate:[12,2,1,""],verify_cryptographic_checksum:[12,2,1,""],verify_digital_signature:[12,2,1,""]},"virtualsmartcard.SWutils":{SwError:[13,4,1,""]},"virtualsmartcard.SWutils.SwError":{args:[13,5,1,""],with_traceback:[13,2,1,""]},"virtualsmartcard.SmartcardFilesystem":{DF:[14,1,1,""],EF:[14,1,1,""],File:[14,1,1,""],MF:[14,1,1,""],Record:[14,1,1,""],RecordStructureEF:[14,1,1,""],TransparentStructureEF:[14,1,1,""],get_indexes:[14,3,1,""],getfile_byrefdataobj:[14,3,1,""],isEqual:[14,3,1,""],make_property:[14,3,1,""],prettyprint_anything:[14,3,1,""],walk:[14,3,1,""],write:[14,3,1,""]},"virtualsmartcard.SmartcardFilesystem.DF":{append:[14,2,1,""],appendrecord:[14,2,1,""],bertlv_data:[14,2,1,""],content:[14,2,1,""],data:[14,2,1,""],decrypt:[14,2,1,""],dfname:[14,2,1,""],encrypt:[14,2,1,""],erasebinary:[14,2,1,""],fid:[14,2,1,""],filedescriptor:[14,2,1,""],getMF:[14,2,1,""],getdata:[14,2,1,""],getpath:[14,2,1,""],lifecycle:[14,2,1,""],parent:[14,2,1,""],putdata:[14,2,1,""],readbinary:[14,2,1,""],readrecord:[14,2,1,""],remove:[14,2,1,""],select:[14,2,1,""],simpletlv_data:[14,2,1,""],updatebinary:[14,2,1,""],updaterecord:[14,2,1,""],writebinary:[14,2,1,""],writerecord:[14,2,1,""]},"virtualsmartcard.SmartcardFilesystem.EF":{appendrecord:[14,2,1,""],bertlv_data:[14,2,1,""],datacoding:[14,2,1,""],decrypt:[14,2,1,""],encrypt:[14,2,1,""],erasebinary:[14,2,1,""],fid:[14,2,1,""],filedescriptor:[14,2,1,""],getMF:[14,2,1,""],getdata:[14,2,1,""],getpath:[14,2,1,""],lifecycle:[14,2,1,""],parent:[14,2,1,""],putdata:[14,2,1,""],readbinary:[14,2,1,""],readrecord:[14,2,1,""],select:[14,2,1,""],shortfid:[14,2,1,""],simpletlv_data:[14,2,1,""],updatebinary:[14,2,1,""],updaterecord:[14,2,1,""],writebinary:[14,2,1,""],writerecord:[14,2,1,""]},"virtualsmartcard.SmartcardFilesystem.File":{appendrecord:[14,2,1,""],bertlv_data:[14,2,1,""],decrypt:[14,2,1,""],encrypt:[14,2,1,""],erasebinary:[14,2,1,""],fid:[14,2,1,""],filedescriptor:[14,2,1,""],getMF:[14,2,1,""],getdata:[14,2,1,""],getpath:[14,2,1,""],lifecycle:[14,2,1,""],parent:[14,2,1,""],putdata:[14,2,1,""],readbinary:[14,2,1,""],readrecord:[14,2,1,""],select:[14,2,1,""],simpletlv_data:[14,2,1,""],updatebinary:[14,2,1,""],updaterecord:[14,2,1,""],writebinary:[14,2,1,""],writerecord:[14,2,1,""]},"virtualsmartcard.SmartcardFilesystem.MF":{_selectFile:[14,2,1,""],append:[14,2,1,""],appendRecord:[14,2,1,""],appendrecord:[14,2,1,""],bertlv_data:[14,2,1,""],content:[14,2,1,""],create:[14,2,1,""],createFile:[14,2,1,""],current:[14,2,1,""],currentDF:[14,2,1,""],currentEF:[14,2,1,""],data:[14,2,1,""],dataObjectHandlingDecodeEncapsulated:[14,2,1,""],dataObjectHandlingDecodePlain:[14,2,1,""],dataUnitsDecodeEncapsulated:[14,2,1,""],dataUnitsDecodePlain:[14,2,1,""],decrypt:[14,2,1,""],deleteFile:[14,2,1,""],dfname:[14,2,1,""],encodeFileControlParameter:[14,2,1,""],encrypt:[14,2,1,""],eraseBinaryEncapsulated:[14,2,1,""],eraseBinaryPlain:[14,2,1,""],eraseRecord:[14,2,1,""],erasebinary:[14,2,1,""],fid:[14,2,1,""],filedescriptor:[14,2,1,""],firstSFT:[14,2,1,""],getDataEncapsulated:[14,2,1,""],getDataPlain:[14,2,1,""],getMF:[14,2,1,""],getdata:[14,2,1,""],getpath:[14,2,1,""],lifecycle:[14,2,1,""],makeFirstSoftwareFunctionTable:[14,2,1,""],makeSecondSoftwareFunctionTable:[14,2,1,""],named_dfs:[14,2,1,""],parent:[14,2,1,""],putDataEncapsulated:[14,2,1,""],putDataPlain:[14,2,1,""],putdata:[14,2,1,""],readBinaryEncapsulated:[14,2,1,""],readBinaryPlain:[14,2,1,""],readRecordEncapsulated:[14,2,1,""],readRecordPlain:[14,2,1,""],readbinary:[14,2,1,""],readrecord:[14,2,1,""],recordHandlingDecode:[14,2,1,""],remove:[14,2,1,""],searchBinaryEncapsulated:[14,2,1,""],searchBinaryPlain:[14,2,1,""],secondSFT:[14,2,1,""],select:[14,2,1,""],selectFile:[14,2,1,""],simpletlv_data:[14,2,1,""],updateBinaryEncapsulated:[14,2,1,""],updateBinaryPlain:[14,2,1,""],updateRecordEncapsulated:[14,2,1,""],updateRecordPlain:[14,2,1,""],updatebinary:[14,2,1,""],updaterecord:[14,2,1,""],writeBinaryEncapsulated:[14,2,1,""],writeBinaryPlain:[14,2,1,""],writeRecord:[14,2,1,""],writebinary:[14,2,1,""],writerecord:[14,2,1,""]},"virtualsmartcard.SmartcardFilesystem.Record":{data:[14,2,1,""],identifier:[14,2,1,""]},"virtualsmartcard.SmartcardFilesystem.RecordStructureEF":{__getRecords:[14,2,1,""],__getRecordsByIdentifier:[14,2,1,""],__getRecordsByNumber:[14,2,1,""],appendrecord:[14,2,1,""],bertlv_data:[14,2,1,""],datacoding:[14,2,1,""],decrypt:[14,2,1,""],encrypt:[14,2,1,""],erasebinary:[14,2,1,""],eraserecord:[14,2,1,""],fid:[14,2,1,""],filedescriptor:[14,2,1,""],getMF:[14,2,1,""],getdata:[14,2,1,""],getpath:[14,2,1,""],hasFixedRecordSize:[14,2,1,""],hasSimpleTlv:[14,2,1,""],isCyclic:[14,2,1,""],lifecycle:[14,2,1,""],maxrecordsize:[14,2,1,""],parent:[14,2,1,""],putdata:[14,2,1,""],readbinary:[14,2,1,""],readrecord:[14,2,1,""],recordpointer:[14,2,1,""],records:[14,2,1,""],resetRecordPointer:[14,2,1,""],select:[14,2,1,""],shortfid:[14,2,1,""],simpletlv_data:[14,2,1,""],updatebinary:[14,2,1,""],updaterecord:[14,2,1,""],writebinary:[14,2,1,""],writerecord:[14,2,1,""]},"virtualsmartcard.SmartcardFilesystem.TransparentStructureEF":{appendrecord:[14,2,1,""],bertlv_data:[14,2,1,""],data:[14,2,1,""],datacoding:[14,2,1,""],decrypt:[14,2,1,""],encrypt:[14,2,1,""],erasebinary:[14,2,1,""],fid:[14,2,1,""],filedescriptor:[14,2,1,""],getMF:[14,2,1,""],getdata:[14,2,1,""],getpath:[14,2,1,""],lifecycle:[14,2,1,""],parent:[14,2,1,""],putdata:[14,2,1,""],readbinary:[14,2,1,""],readrecord:[14,2,1,""],select:[14,2,1,""],shortfid:[14,2,1,""],simpletlv_data:[14,2,1,""],updatebinary:[14,2,1,""],updaterecord:[14,2,1,""],writebinary:[14,2,1,""],writerecord:[14,2,1,""]},"virtualsmartcard.SmartcardSAM":{SAM:[15,1,1,""],get_referenced_cipher:[15,3,1,""]},"virtualsmartcard.SmartcardSAM.SAM":{FSdecrypt:[15,2,1,""],FSencrypt:[15,2,1,""],_get_referenced_key:[15,2,1,""],change_reference_data:[15,2,1,""],erase_SE:[15,2,1,""],external_authenticate:[15,2,1,""],generate_public_key_pair:[15,2,1,""],get_card_number:[15,2,1,""],get_challenge:[15,2,1,""],internal_authenticate:[15,2,1,""],manage_security_environment:[15,2,1,""],mutual_authenticate:[15,2,1,""],parse_SM_CAPDU:[15,2,1,""],perform_security_operation:[15,2,1,""],protect_result:[15,2,1,""],restore_SE:[15,2,1,""],set_MF:[15,2,1,""],set_asym_algorithm:[15,2,1,""],store_SE:[15,2,1,""],verify:[15,2,1,""]},"virtualsmartcard.TLVutils":{bertlv_pack:[16,3,1,""],bertlv_unpack:[16,3,1,""],decodeDiscretionaryDataObjects:[16,3,1,""],decodeExtendedHeaderList:[16,3,1,""],decodeHeaderList:[16,3,1,""],decodeOffsetDataObjects:[16,3,1,""],decodeTagList:[16,3,1,""],encodeDataOffsetObjects:[16,3,1,""],encodeDiscretionaryDataObjects:[16,3,1,""],encodebertlvDatalist:[16,3,1,""],pack:[16,3,1,""],simpletlv_pack:[16,3,1,""],simpletlv_unpack:[16,3,1,""],tlv_find_tag:[16,3,1,""],tlv_find_tags:[16,3,1,""],tlv_unpack:[16,3,1,""],unpack:[16,3,1,""]},"virtualsmartcard.VirtualSmartcard":{Iso7816OS:[17,1,1,""],SmartcardOS:[17,1,1,""],VirtualICC:[17,1,1,""],loadMitMFromPath:[17,3,1,""]},"virtualsmartcard.VirtualSmartcard.Iso7816OS":{SAM:[17,2,1,""],execute:[17,2,1,""],formatResult:[17,2,1,""],getATR:[17,2,1,""],getResponse:[17,2,1,""],makeATR:[17,2,1,""],makeThirdSoftwareFunctionTable:[17,2,1,""],mf:[17,2,1,""],powerDown:[17,2,1,""],powerUp:[17,2,1,""],reset:[17,2,1,""],seekable:[17,2,1,""]},"virtualsmartcard.VirtualSmartcard.SmartcardOS":{execute:[17,2,1,""],getATR:[17,2,1,""],powerDown:[17,2,1,""],powerUp:[17,2,1,""],reset:[17,2,1,""]},"virtualsmartcard.VirtualSmartcard.VirtualICC":{__recvFromVPICC:[17,2,1,""],__sendToVPICC:[17,2,1,""],connectToPort:[17,2,1,""],openPort:[17,2,1,""],run:[17,2,1,""],stop:[17,2,1,""]},"virtualsmartcard.cards":{HandlerTest:[19,0,0,"-"],Relay:[20,0,0,"-"],RelayMiddleman:[21,0,0,"-"],cryptoflex:[22,0,0,"-"],ePass:[23,0,0,"-"]},"virtualsmartcard.cards.HandlerTest":{HandlerTestOS:[19,1,1,""]},"virtualsmartcard.cards.HandlerTest.HandlerTestOS":{__output_from_le:[19,2,1,""],execute:[19,2,1,""],getATR:[19,2,1,""],powerDown:[19,2,1,""],powerUp:[19,2,1,""],reset:[19,2,1,""]},"virtualsmartcard.cards.Relay":{RelayOS:[20,1,1,""]},"virtualsmartcard.cards.Relay.RelayOS":{cleanup:[20,2,1,""],execute:[20,2,1,""],getATR:[20,2,1,""],powerDown:[20,2,1,""],powerUp:[20,2,1,""],reset:[20,2,1,""]},"virtualsmartcard.cards.RelayMiddleman":{RelayMiddleman:[21,1,1,""]},"virtualsmartcard.cards.RelayMiddleman.RelayMiddleman":{handleInPDU:[21,2,1,""],handleOutPDU:[21,2,1,""]},"virtualsmartcard.cards.cryptoflex":{CryptoflexMF:[22,1,1,""],CryptoflexOS:[22,1,1,""],CryptoflexSAM:[22,1,1,""],CryptoflexSE:[22,1,1,""]},"virtualsmartcard.cards.cryptoflex.CryptoflexMF":{_selectFile:[22,2,1,""],append:[22,2,1,""],appendRecord:[22,2,1,""],appendrecord:[22,2,1,""],bertlv_data:[22,2,1,""],content:[22,2,1,""],create:[22,2,1,""],createFile:[22,2,1,""],current:[22,2,1,""],currentDF:[22,2,1,""],currentEF:[22,2,1,""],data:[22,2,1,""],dataObjectHandlingDecodeEncapsulated:[22,2,1,""],dataObjectHandlingDecodePlain:[22,2,1,""],dataUnitsDecodeEncapsulated:[22,2,1,""],dataUnitsDecodePlain:[22,2,1,""],decrypt:[22,2,1,""],deleteFile:[22,2,1,""],dfname:[22,2,1,""],encodeFileControlParameter:[22,2,1,""],encrypt:[22,2,1,""],eraseBinaryEncapsulated:[22,2,1,""],eraseBinaryPlain:[22,2,1,""],eraseRecord:[22,2,1,""],erasebinary:[22,2,1,""],fid:[22,2,1,""],filedescriptor:[22,2,1,""],firstSFT:[22,2,1,""],getDataEncapsulated:[22,2,1,""],getDataPlain:[22,2,1,""],getMF:[22,2,1,""],getdata:[22,2,1,""],getpath:[22,2,1,""],lifecycle:[22,2,1,""],makeFirstSoftwareFunctionTable:[22,2,1,""],makeSecondSoftwareFunctionTable:[22,2,1,""],named_dfs:[22,2,1,""],parent:[22,2,1,""],putDataEncapsulated:[22,2,1,""],putDataPlain:[22,2,1,""],putdata:[22,2,1,""],readBinaryEncapsulated:[22,2,1,""],readBinaryPlain:[22,2,1,""],readRecordEncapsulated:[22,2,1,""],readRecordPlain:[22,2,1,""],readbinary:[22,2,1,""],readrecord:[22,2,1,""],recordHandlingDecode:[22,2,1,""],remove:[22,2,1,""],searchBinaryEncapsulated:[22,2,1,""],searchBinaryPlain:[22,2,1,""],secondSFT:[22,2,1,""],select:[22,2,1,""],selectFile:[22,2,1,""],simpletlv_data:[22,2,1,""],updateBinaryEncapsulated:[22,2,1,""],updateBinaryPlain:[22,2,1,""],updateRecordEncapsulated:[22,2,1,""],updateRecordPlain:[22,2,1,""],updatebinary:[22,2,1,""],updaterecord:[22,2,1,""],writeBinaryEncapsulated:[22,2,1,""],writeBinaryPlain:[22,2,1,""],writeRecord:[22,2,1,""],writebinary:[22,2,1,""],writerecord:[22,2,1,""]},"virtualsmartcard.cards.cryptoflex.CryptoflexOS":{SAM:[22,2,1,""],execute:[22,2,1,""],formatResult:[22,2,1,""],getATR:[22,2,1,""],getResponse:[22,2,1,""],makeATR:[22,2,1,""],makeThirdSoftwareFunctionTable:[22,2,1,""],mf:[22,2,1,""],powerDown:[22,2,1,""],powerUp:[22,2,1,""],reset:[22,2,1,""],seekable:[22,2,1,""]},"virtualsmartcard.cards.cryptoflex.CryptoflexSAM":{FSdecrypt:[22,2,1,""],FSencrypt:[22,2,1,""],_get_referenced_key:[22,2,1,""],change_reference_data:[22,2,1,""],erase_SE:[22,2,1,""],external_authenticate:[22,2,1,""],generate_public_key_pair:[22,2,1,""],get_card_number:[22,2,1,""],get_challenge:[22,2,1,""],internal_authenticate:[22,2,1,""],manage_security_environment:[22,2,1,""],mutual_authenticate:[22,2,1,""],parse_SM_CAPDU:[22,2,1,""],perform_security_operation:[22,2,1,""],pezorform_security_operation:[22,2,1,""],protect_result:[22,2,1,""],restore_SE:[22,2,1,""],set_MF:[22,2,1,""],set_asym_algorithm:[22,2,1,""],store_SE:[22,2,1,""],verify:[22,2,1,""]},"virtualsmartcard.cards.cryptoflex.CryptoflexSE":{_set_SE:[22,2,1,""],compute_cryptographic_checksum:[22,2,1,""],compute_digital_signature:[22,2,1,""],decipher:[22,2,1,""],encipher:[22,2,1,""],generate_public_key_pair:[22,2,1,""],hash:[22,2,1,""],manage_security_environment:[22,2,1,""],parse_SM_CAPDU:[22,2,1,""],perform_security_operation:[22,2,1,""],protect_response:[22,2,1,""],verify_certificate:[22,2,1,""],verify_cryptographic_checksum:[22,2,1,""],verify_digital_signature:[22,2,1,""]},"virtualsmartcard.cards.ePass":{PassportSAM:[23,1,1,""],ePass_SE:[23,1,1,""]},"virtualsmartcard.cards.ePass.PassportSAM":{FSdecrypt:[23,2,1,""],FSencrypt:[23,2,1,""],__computeKeys:[23,2,1,""],_get_referenced_key:[23,2,1,""],change_reference_data:[23,2,1,""],derive_key:[23,2,1,""],erase_SE:[23,2,1,""],external_authenticate:[23,2,1,""],generate_public_key_pair:[23,2,1,""],get_card_number:[23,2,1,""],get_challenge:[23,2,1,""],internal_authenticate:[23,2,1,""],manage_security_environment:[23,2,1,""],mutual_authenticate:[23,2,1,""],parse_SM_CAPDU:[23,2,1,""],perform_security_operation:[23,2,1,""],protect_result:[23,2,1,""],restore_SE:[23,2,1,""],set_MF:[23,2,1,""],set_asym_algorithm:[23,2,1,""],store_SE:[23,2,1,""],verify:[23,2,1,""]},"virtualsmartcard.cards.ePass.ePass_SE":{_set_SE:[23,2,1,""],compute_cryptographic_checksum:[23,2,1,""],compute_digital_signature:[23,2,1,""],decipher:[23,2,1,""],encipher:[23,2,1,""],generate_public_key_pair:[23,2,1,""],hash:[23,2,1,""],manage_security_environment:[23,2,1,""],parse_SM_CAPDU:[23,2,1,""],perform_security_operation:[23,2,1,""],protect_response:[23,2,1,""],verify_certificate:[23,2,1,""],verify_cryptographic_checksum:[23,2,1,""],verify_digital_signature:[23,2,1,""]},"virtualsmartcard.tests":{CardGenerator_test:[26,0,0,"-"],CryptoUtils_test:[27,0,0,"-"],SmartcardSAM_test:[28,0,0,"-"],utils_test:[29,0,0,"-"]},"virtualsmartcard.tests.CardGenerator_test":{CryptoflexGeneratorTest:[26,1,1,""],ISO7816GeneratorTest:[26,1,1,""],TestNPACardGenerator:[26,1,1,""]},"virtualsmartcard.tests.CardGenerator_test.CryptoflexGeneratorTest":{_addExpectedFailure:[26,2,1,""],_addSkip:[26,2,1,""],_addUnexpectedSuccess:[26,2,1,""],_baseAssertEqual:[26,2,1,""],_callCleanup:[26,2,1,""],_callSetUp:[26,2,1,""],_callTearDown:[26,2,1,""],_callTestMethod:[26,2,1,""],_classSetupFailed:[26,5,1,""],_class_cleanups:[26,5,1,""],_deprecate:[26,2,1,""],_diffThreshold:[26,5,1,""],_feedErrorsToResult:[26,2,1,""],_formatMessage:[26,2,1,""],_getAssertEqualityFunc:[26,2,1,""],_truncateMessage:[26,2,1,""],addClassCleanup:[26,2,1,""],addCleanup:[26,2,1,""],addTypeEqualityFunc:[26,2,1,""],assertAlmostEqual:[26,2,1,""],assertAlmostEquals:[26,2,1,""],assertCountEqual:[26,2,1,""],assertDictContainsSubset:[26,2,1,""],assertDictEqual:[26,2,1,""],assertEqual:[26,2,1,""],assertEquals:[26,2,1,""],assertFalse:[26,2,1,""],assertGreater:[26,2,1,""],assertGreaterEqual:[26,2,1,""],assertIn:[26,2,1,""],assertIs:[26,2,1,""],assertIsInstance:[26,2,1,""],assertIsNone:[26,2,1,""],assertIsNot:[26,2,1,""],assertIsNotNone:[26,2,1,""],assertLess:[26,2,1,""],assertLessEqual:[26,2,1,""],assertListEqual:[26,2,1,""],assertLogs:[26,2,1,""],assertMultiLineEqual:[26,2,1,""],assertNotAlmostEqual:[26,2,1,""],assertNotAlmostEquals:[26,2,1,""],assertNotEqual:[26,2,1,""],assertNotEquals:[26,2,1,""],assertNotIn:[26,2,1,""],assertNotIsInstance:[26,2,1,""],assertNotRegex:[26,2,1,""],assertNotRegexpMatches:[26,2,1,""],assertRaises:[26,2,1,""],assertRaisesRegex:[26,2,1,""],assertRaisesRegexp:[26,2,1,""],assertRegex:[26,2,1,""],assertRegexpMatches:[26,2,1,""],assertSequenceEqual:[26,2,1,""],assertSetEqual:[26,2,1,""],assertTrue:[26,2,1,""],assertTupleEqual:[26,2,1,""],assertWarns:[26,2,1,""],assertWarnsRegex:[26,2,1,""],assert_:[26,2,1,""],card_type:[26,5,1,""],countTestCases:[26,2,1,""],debug:[26,2,1,""],defaultTestResult:[26,2,1,""],doClassCleanups:[26,2,1,""],doCleanups:[26,2,1,""],fail:[26,2,1,""],failIf:[26,2,1,""],failIfAlmostEqual:[26,2,1,""],failIfEqual:[26,2,1,""],failUnless:[26,2,1,""],failUnlessAlmostEqual:[26,2,1,""],failUnlessEqual:[26,2,1,""],failUnlessRaises:[26,2,1,""],failureException:[26,5,1,""],id:[26,2,1,""],longMessage:[26,5,1,""],maxDiff:[26,5,1,""],run:[26,2,1,""],setUp:[26,2,1,""],setUpClass:[26,2,1,""],shortDescription:[26,2,1,""],skipTest:[26,2,1,""],subTest:[26,2,1,""],tearDown:[26,2,1,""],tearDownClass:[26,2,1,""],test_card_creation:[26,2,1,""],test_get_and_set_card:[26,2,1,""]},"virtualsmartcard.tests.CardGenerator_test.ISO7816GeneratorTest":{_addExpectedFailure:[26,2,1,""],_addSkip:[26,2,1,""],_addUnexpectedSuccess:[26,2,1,""],_baseAssertEqual:[26,2,1,""],_callCleanup:[26,2,1,""],_callSetUp:[26,2,1,""],_callTearDown:[26,2,1,""],_callTestMethod:[26,2,1,""],_classSetupFailed:[26,5,1,""],_class_cleanups:[26,5,1,""],_deprecate:[26,2,1,""],_diffThreshold:[26,5,1,""],_feedErrorsToResult:[26,2,1,""],_formatMessage:[26,2,1,""],_getAssertEqualityFunc:[26,2,1,""],_truncateMessage:[26,2,1,""],addClassCleanup:[26,2,1,""],addCleanup:[26,2,1,""],addTypeEqualityFunc:[26,2,1,""],assertAlmostEqual:[26,2,1,""],assertAlmostEquals:[26,2,1,""],assertCountEqual:[26,2,1,""],assertDictContainsSubset:[26,2,1,""],assertDictEqual:[26,2,1,""],assertEqual:[26,2,1,""],assertEquals:[26,2,1,""],assertFalse:[26,2,1,""],assertGreater:[26,2,1,""],assertGreaterEqual:[26,2,1,""],assertIn:[26,2,1,""],assertIs:[26,2,1,""],assertIsInstance:[26,2,1,""],assertIsNone:[26,2,1,""],assertIsNot:[26,2,1,""],assertIsNotNone:[26,2,1,""],assertLess:[26,2,1,""],assertLessEqual:[26,2,1,""],assertListEqual:[26,2,1,""],assertLogs:[26,2,1,""],assertMultiLineEqual:[26,2,1,""],assertNotAlmostEqual:[26,2,1,""],assertNotAlmostEquals:[26,2,1,""],assertNotEqual:[26,2,1,""],assertNotEquals:[26,2,1,""],assertNotIn:[26,2,1,""],assertNotIsInstance:[26,2,1,""],assertNotRegex:[26,2,1,""],assertNotRegexpMatches:[26,2,1,""],assertRaises:[26,2,1,""],assertRaisesRegex:[26,2,1,""],assertRaisesRegexp:[26,2,1,""],assertRegex:[26,2,1,""],assertRegexpMatches:[26,2,1,""],assertSequenceEqual:[26,2,1,""],assertSetEqual:[26,2,1,""],assertTrue:[26,2,1,""],assertTupleEqual:[26,2,1,""],assertWarns:[26,2,1,""],assertWarnsRegex:[26,2,1,""],assert_:[26,2,1,""],card_type:[26,5,1,""],countTestCases:[26,2,1,""],debug:[26,2,1,""],defaultTestResult:[26,2,1,""],doClassCleanups:[26,2,1,""],doCleanups:[26,2,1,""],fail:[26,2,1,""],failIf:[26,2,1,""],failIfAlmostEqual:[26,2,1,""],failIfEqual:[26,2,1,""],failUnless:[26,2,1,""],failUnlessAlmostEqual:[26,2,1,""],failUnlessEqual:[26,2,1,""],failUnlessRaises:[26,2,1,""],failureException:[26,5,1,""],id:[26,2,1,""],longMessage:[26,5,1,""],maxDiff:[26,5,1,""],run:[26,2,1,""],setUp:[26,2,1,""],setUpClass:[26,2,1,""],shortDescription:[26,2,1,""],skipTest:[26,2,1,""],subTest:[26,2,1,""],tearDown:[26,2,1,""],tearDownClass:[26,2,1,""],test_card_creation:[26,2,1,""],test_get_and_set_card:[26,2,1,""]},"virtualsmartcard.tests.CardGenerator_test.TestNPACardGenerator":{_addExpectedFailure:[26,2,1,""],_addSkip:[26,2,1,""],_addUnexpectedSuccess:[26,2,1,""],_baseAssertEqual:[26,2,1,""],_callCleanup:[26,2,1,""],_callSetUp:[26,2,1,""],_callTearDown:[26,2,1,""],_callTestMethod:[26,2,1,""],_classSetupFailed:[26,5,1,""],_class_cleanups:[26,5,1,""],_deprecate:[26,2,1,""],_diffThreshold:[26,5,1,""],_feedErrorsToResult:[26,2,1,""],_formatMessage:[26,2,1,""],_getAssertEqualityFunc:[26,2,1,""],_truncateMessage:[26,2,1,""],addClassCleanup:[26,2,1,""],addCleanup:[26,2,1,""],addTypeEqualityFunc:[26,2,1,""],assertAlmostEqual:[26,2,1,""],assertAlmostEquals:[26,2,1,""],assertCountEqual:[26,2,1,""],assertDictContainsSubset:[26,2,1,""],assertDictEqual:[26,2,1,""],assertEqual:[26,2,1,""],assertEquals:[26,2,1,""],assertFalse:[26,2,1,""],assertGreater:[26,2,1,""],assertGreaterEqual:[26,2,1,""],assertIn:[26,2,1,""],assertIs:[26,2,1,""],assertIsInstance:[26,2,1,""],assertIsNone:[26,2,1,""],assertIsNot:[26,2,1,""],assertIsNotNone:[26,2,1,""],assertLess:[26,2,1,""],assertLessEqual:[26,2,1,""],assertListEqual:[26,2,1,""],assertLogs:[26,2,1,""],assertMultiLineEqual:[26,2,1,""],assertNotAlmostEqual:[26,2,1,""],assertNotAlmostEquals:[26,2,1,""],assertNotEqual:[26,2,1,""],assertNotEquals:[26,2,1,""],assertNotIn:[26,2,1,""],assertNotIsInstance:[26,2,1,""],assertNotRegex:[26,2,1,""],assertNotRegexpMatches:[26,2,1,""],assertRaises:[26,2,1,""],assertRaisesRegex:[26,2,1,""],assertRaisesRegexp:[26,2,1,""],assertRegex:[26,2,1,""],assertRegexpMatches:[26,2,1,""],assertSequenceEqual:[26,2,1,""],assertSetEqual:[26,2,1,""],assertTrue:[26,2,1,""],assertTupleEqual:[26,2,1,""],assertWarns:[26,2,1,""],assertWarnsRegex:[26,2,1,""],assert_:[26,2,1,""],card_type:[26,5,1,""],countTestCases:[26,2,1,""],debug:[26,2,1,""],defaultTestResult:[26,2,1,""],doClassCleanups:[26,2,1,""],doCleanups:[26,2,1,""],fail:[26,2,1,""],failIf:[26,2,1,""],failIfAlmostEqual:[26,2,1,""],failIfEqual:[26,2,1,""],failUnless:[26,2,1,""],failUnlessAlmostEqual:[26,2,1,""],failUnlessEqual:[26,2,1,""],failUnlessRaises:[26,2,1,""],failureException:[26,5,1,""],id:[26,2,1,""],longMessage:[26,5,1,""],maxDiff:[26,5,1,""],run:[26,2,1,""],setUp:[26,2,1,""],setUpClass:[26,2,1,""],shortDescription:[26,2,1,""],skipTest:[26,2,1,""],subTest:[26,2,1,""],tearDown:[26,2,1,""],tearDownClass:[26,2,1,""],test_card_creation:[26,2,1,""],test_get_and_set_card:[26,2,1,""],test_readDatagroups:[26,2,1,""]},"virtualsmartcard.tests.CryptoUtils_test":{TestCryptoUtils:[27,1,1,""]},"virtualsmartcard.tests.CryptoUtils_test.TestCryptoUtils":{_addExpectedFailure:[27,2,1,""],_addSkip:[27,2,1,""],_addUnexpectedSuccess:[27,2,1,""],_baseAssertEqual:[27,2,1,""],_callCleanup:[27,2,1,""],_callSetUp:[27,2,1,""],_callTearDown:[27,2,1,""],_callTestMethod:[27,2,1,""],_classSetupFailed:[27,5,1,""],_class_cleanups:[27,5,1,""],_deprecate:[27,2,1,""],_diffThreshold:[27,5,1,""],_feedErrorsToResult:[27,2,1,""],_formatMessage:[27,2,1,""],_getAssertEqualityFunc:[27,2,1,""],_truncateMessage:[27,2,1,""],addClassCleanup:[27,2,1,""],addCleanup:[27,2,1,""],addTypeEqualityFunc:[27,2,1,""],assertAlmostEqual:[27,2,1,""],assertAlmostEquals:[27,2,1,""],assertCountEqual:[27,2,1,""],assertDictContainsSubset:[27,2,1,""],assertDictEqual:[27,2,1,""],assertEqual:[27,2,1,""],assertEquals:[27,2,1,""],assertFalse:[27,2,1,""],assertGreater:[27,2,1,""],assertGreaterEqual:[27,2,1,""],assertIn:[27,2,1,""],assertIs:[27,2,1,""],assertIsInstance:[27,2,1,""],assertIsNone:[27,2,1,""],assertIsNot:[27,2,1,""],assertIsNotNone:[27,2,1,""],assertLess:[27,2,1,""],assertLessEqual:[27,2,1,""],assertListEqual:[27,2,1,""],assertLogs:[27,2,1,""],assertMultiLineEqual:[27,2,1,""],assertNotAlmostEqual:[27,2,1,""],assertNotAlmostEquals:[27,2,1,""],assertNotEqual:[27,2,1,""],assertNotEquals:[27,2,1,""],assertNotIn:[27,2,1,""],assertNotIsInstance:[27,2,1,""],assertNotRegex:[27,2,1,""],assertNotRegexpMatches:[27,2,1,""],assertRaises:[27,2,1,""],assertRaisesRegex:[27,2,1,""],assertRaisesRegexp:[27,2,1,""],assertRegex:[27,2,1,""],assertRegexpMatches:[27,2,1,""],assertSequenceEqual:[27,2,1,""],assertSetEqual:[27,2,1,""],assertTrue:[27,2,1,""],assertTupleEqual:[27,2,1,""],assertWarns:[27,2,1,""],assertWarnsRegex:[27,2,1,""],assert_:[27,2,1,""],countTestCases:[27,2,1,""],debug:[27,2,1,""],defaultTestResult:[27,2,1,""],doClassCleanups:[27,2,1,""],doCleanups:[27,2,1,""],fail:[27,2,1,""],failIf:[27,2,1,""],failIfAlmostEqual:[27,2,1,""],failIfEqual:[27,2,1,""],failUnless:[27,2,1,""],failUnlessAlmostEqual:[27,2,1,""],failUnlessEqual:[27,2,1,""],failUnlessRaises:[27,2,1,""],failureException:[27,5,1,""],id:[27,2,1,""],longMessage:[27,5,1,""],maxDiff:[27,5,1,""],run:[27,2,1,""],setUp:[27,2,1,""],setUpClass:[27,2,1,""],shortDescription:[27,2,1,""],skipTest:[27,2,1,""],subTest:[27,2,1,""],tearDown:[27,2,1,""],tearDownClass:[27,2,1,""],test_padding:[27,2,1,""]},"virtualsmartcard.tests.SmartcardSAM_test":{TestSmartcardSAM:[28,1,1,""]},"virtualsmartcard.tests.SmartcardSAM_test.TestSmartcardSAM":{_addExpectedFailure:[28,2,1,""],_addSkip:[28,2,1,""],_addUnexpectedSuccess:[28,2,1,""],_baseAssertEqual:[28,2,1,""],_callCleanup:[28,2,1,""],_callSetUp:[28,2,1,""],_callTearDown:[28,2,1,""],_callTestMethod:[28,2,1,""],_classSetupFailed:[28,5,1,""],_class_cleanups:[28,5,1,""],_deprecate:[28,2,1,""],_diffThreshold:[28,5,1,""],_feedErrorsToResult:[28,2,1,""],_formatMessage:[28,2,1,""],_getAssertEqualityFunc:[28,2,1,""],_truncateMessage:[28,2,1,""],addClassCleanup:[28,2,1,""],addCleanup:[28,2,1,""],addTypeEqualityFunc:[28,2,1,""],assertAlmostEqual:[28,2,1,""],assertAlmostEquals:[28,2,1,""],assertCountEqual:[28,2,1,""],assertDictContainsSubset:[28,2,1,""],assertDictEqual:[28,2,1,""],assertEqual:[28,2,1,""],assertEquals:[28,2,1,""],assertFalse:[28,2,1,""],assertGreater:[28,2,1,""],assertGreaterEqual:[28,2,1,""],assertIn:[28,2,1,""],assertIs:[28,2,1,""],assertIsInstance:[28,2,1,""],assertIsNone:[28,2,1,""],assertIsNot:[28,2,1,""],assertIsNotNone:[28,2,1,""],assertLess:[28,2,1,""],assertLessEqual:[28,2,1,""],assertListEqual:[28,2,1,""],assertLogs:[28,2,1,""],assertMultiLineEqual:[28,2,1,""],assertNotAlmostEqual:[28,2,1,""],assertNotAlmostEquals:[28,2,1,""],assertNotEqual:[28,2,1,""],assertNotEquals:[28,2,1,""],assertNotIn:[28,2,1,""],assertNotIsInstance:[28,2,1,""],assertNotRegex:[28,2,1,""],assertNotRegexpMatches:[28,2,1,""],assertRaises:[28,2,1,""],assertRaisesRegex:[28,2,1,""],assertRaisesRegexp:[28,2,1,""],assertRegex:[28,2,1,""],assertRegexpMatches:[28,2,1,""],assertSequenceEqual:[28,2,1,""],assertSetEqual:[28,2,1,""],assertTrue:[28,2,1,""],assertTupleEqual:[28,2,1,""],assertWarns:[28,2,1,""],assertWarnsRegex:[28,2,1,""],assert_:[28,2,1,""],countTestCases:[28,2,1,""],debug:[28,2,1,""],defaultTestResult:[28,2,1,""],doClassCleanups:[28,2,1,""],doCleanups:[28,2,1,""],fail:[28,2,1,""],failIf:[28,2,1,""],failIfAlmostEqual:[28,2,1,""],failIfEqual:[28,2,1,""],failUnless:[28,2,1,""],failUnlessAlmostEqual:[28,2,1,""],failUnlessEqual:[28,2,1,""],failUnlessRaises:[28,2,1,""],failureException:[28,5,1,""],id:[28,2,1,""],longMessage:[28,5,1,""],maxDiff:[28,5,1,""],run:[28,2,1,""],setUp:[28,2,1,""],setUpClass:[28,2,1,""],shortDescription:[28,2,1,""],skipTest:[28,2,1,""],subTest:[28,2,1,""],tearDown:[28,2,1,""],tearDownClass:[28,2,1,""],test_counter_decrement:[28,2,1,""],test_external_authenticate:[28,2,1,""],test_incorrect_pin:[28,2,1,""],test_internal_authenticate:[28,2,1,""],test_security_environment:[28,2,1,""]},"virtualsmartcard.tests.utils_test":{TestUtils:[29,1,1,""]},"virtualsmartcard.tests.utils_test.TestUtils":{_addExpectedFailure:[29,2,1,""],_addSkip:[29,2,1,""],_addUnexpectedSuccess:[29,2,1,""],_baseAssertEqual:[29,2,1,""],_callCleanup:[29,2,1,""],_callSetUp:[29,2,1,""],_callTearDown:[29,2,1,""],_callTestMethod:[29,2,1,""],_classSetupFailed:[29,5,1,""],_class_cleanups:[29,5,1,""],_deprecate:[29,2,1,""],_diffThreshold:[29,5,1,""],_feedErrorsToResult:[29,2,1,""],_formatMessage:[29,2,1,""],_getAssertEqualityFunc:[29,2,1,""],_truncateMessage:[29,2,1,""],addClassCleanup:[29,2,1,""],addCleanup:[29,2,1,""],addTypeEqualityFunc:[29,2,1,""],assertAlmostEqual:[29,2,1,""],assertAlmostEquals:[29,2,1,""],assertCountEqual:[29,2,1,""],assertDictContainsSubset:[29,2,1,""],assertDictEqual:[29,2,1,""],assertEqual:[29,2,1,""],assertEquals:[29,2,1,""],assertFalse:[29,2,1,""],assertGreater:[29,2,1,""],assertGreaterEqual:[29,2,1,""],assertIn:[29,2,1,""],assertIs:[29,2,1,""],assertIsInstance:[29,2,1,""],assertIsNone:[29,2,1,""],assertIsNot:[29,2,1,""],assertIsNotNone:[29,2,1,""],assertLess:[29,2,1,""],assertLessEqual:[29,2,1,""],assertListEqual:[29,2,1,""],assertLogs:[29,2,1,""],assertMultiLineEqual:[29,2,1,""],assertNotAlmostEqual:[29,2,1,""],assertNotAlmostEquals:[29,2,1,""],assertNotEqual:[29,2,1,""],assertNotEquals:[29,2,1,""],assertNotIn:[29,2,1,""],assertNotIsInstance:[29,2,1,""],assertNotRegex:[29,2,1,""],assertNotRegexpMatches:[29,2,1,""],assertRaises:[29,2,1,""],assertRaisesRegex:[29,2,1,""],assertRaisesRegexp:[29,2,1,""],assertRegex:[29,2,1,""],assertRegexpMatches:[29,2,1,""],assertSequenceEqual:[29,2,1,""],assertSetEqual:[29,2,1,""],assertTrue:[29,2,1,""],assertTupleEqual:[29,2,1,""],assertWarns:[29,2,1,""],assertWarnsRegex:[29,2,1,""],assert_:[29,2,1,""],countTestCases:[29,2,1,""],debug:[29,2,1,""],defaultTestResult:[29,2,1,""],doClassCleanups:[29,2,1,""],doCleanups:[29,2,1,""],fail:[29,2,1,""],failIf:[29,2,1,""],failIfAlmostEqual:[29,2,1,""],failIfEqual:[29,2,1,""],failUnless:[29,2,1,""],failUnlessAlmostEqual:[29,2,1,""],failUnlessEqual:[29,2,1,""],failUnlessRaises:[29,2,1,""],failureException:[29,5,1,""],id:[29,2,1,""],longMessage:[29,5,1,""],maxDiff:[29,5,1,""],run:[29,2,1,""],setUp:[29,2,1,""],setUpClass:[29,2,1,""],shortDescription:[29,2,1,""],skipTest:[29,2,1,""],subTest:[29,2,1,""],tearDown:[29,2,1,""],tearDownClass:[29,2,1,""],test_CAPDU:[29,2,1,""],test_RAPDU:[29,2,1,""]},"virtualsmartcard.utils":{APDU:[30,1,1,""],C_APDU:[30,1,1,""],R_APDU:[30,1,1,""],_make_byte_property:[30,3,1,""],hexdump:[30,3,1,""],inttostring:[30,3,1,""],stringtoint:[30,3,1,""]},"virtualsmartcard.utils.APDU":{_deldata:[30,2,1,""],_format_parts:[30,2,1,""],_getdata:[30,2,1,""],_setbyte:[30,2,1,""],_setdata:[30,2,1,""],data:[30,2,1,""]},"virtualsmartcard.utils.C_APDU":{"case":[30,2,1,""],CLA:[30,2,1,""],INS:[30,2,1,""],Lc:[30,2,1,""],Le:[30,2,1,""],P1:[30,2,1,""],P2:[30,2,1,""],_deldata:[30,2,1,""],_format_fields:[30,2,1,""],_format_parts:[30,2,1,""],_getdata:[30,2,1,""],_setbyte:[30,2,1,""],_setdata:[30,2,1,""],cla:[30,2,1,""],data:[30,2,1,""],effective_Le:[30,2,1,""],ins:[30,2,1,""],lc:[30,2,1,""],le:[30,2,1,""],p1:[30,2,1,""],p2:[30,2,1,""],parse:[30,2,1,""],render:[30,2,1,""]},"virtualsmartcard.utils.R_APDU":{SW1:[30,2,1,""],SW2:[30,2,1,""],SW:[30,2,1,""],_deldata:[30,2,1,""],_format_fields:[30,2,1,""],_format_parts:[30,2,1,""],_getdata:[30,2,1,""],_getsw:[30,2,1,""],_setbyte:[30,2,1,""],_setdata:[30,2,1,""],_setsw:[30,2,1,""],data:[30,2,1,""],parse:[30,2,1,""],render:[30,2,1,""],sw1:[30,2,1,""],sw2:[30,2,1,""],sw:[30,2,1,""]},virtualsmartcard:{CardGenerator:[9,0,0,"-"],ConstantDefinitions:[10,0,0,"-"],CryptoUtils:[11,0,0,"-"],SEutils:[12,0,0,"-"],SWutils:[13,0,0,"-"],SmartcardFilesystem:[14,0,0,"-"],SmartcardSAM:[15,0,0,"-"],TLVutils:[16,0,0,"-"],VirtualSmartcard:[17,0,0,"-"],utils:[30,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"],"4":["py","exception","Python exception"],"5":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function","4":"py:exception","5":"py:attribute"},terms:{"0000":[12,23,30],"03119":2,"05_":3,"07_":3,"0x00":[7,12,23],"0x00000000":6,"0x00000001":6,"0x01":[2,7],"0x02":[2,7],"0x03":2,"0x04":[2,7],"0x0c":[14,22],"0x0d46":2,"0x0e":[14,22],"0x0f":[14,22],"0x10":2,"0x18d1":6,"0x3010":2,"0x40":22,"0x4ee1":6,"0x60":22,"0x80":[12,22,23],"0x8c7b":[6,7],"0x8e":[12,22,23],"0x9000":2,"0x9a":[2,12,22,23],"0x9e":[12,22,23],"0xa4":[7,14,22],"0xac":[12,22,23],"0xb0":[14,22],"0xb1":[14,22],"0xb2":[14,22],"0xb3":[14,22],"0xbc":[12,22,23],"0xca":[14,22],"0xcb":[14,22],"0xd0":[14,22],"0xd1":[14,22],"0xd2":[14,22],"0xd6":[14,22],"0xd7":[14,22],"0xda":[14,22],"0xdb":[14,22],"0xdc":[14,22],"0xdd":[14,22],"0xe0":[14,22],"0xe2":[14,22],"0xe4":[14,22],"0xff":[2,7,17,22],"0xxx":7,"1007":3,"1024":22,"107":3,"134010":6,"14443":4,"147":[26,27,28,29],"179":3,"188":3,"2010":3,"2011":3,"2012":3,"2015":6,"256":22,"27c3":3,"27th":3,"3083254":7,"3083586":7,"33392":3,"35963":[4,6],"35964":6,"3b80800101":4,"4297":3,"512":22,"640":[26,27,28,29],"642":3,"65535":14,"65536":[26,27,28,29],"7816":[0,6,12,17,22,23],"78166":7,"7_3":3,"7_win32":6,"978":3,"byte":[7,12,14,15,17,21,22,23,30],"case":[2,4,6,7,22,26,27,28,29,30],"class":[6,7,9,12,14,15,17,19,20,21,22,23,26,27,28,29,30],"default":[2,4,6,26,27,28,29],"enum":4,"f\u00fcr":3,"function":[3,7,11,14,15,17,22,23,26,27,28,29,30],"import":[1,7],"int":[2,4],"long":[4,7,14,22],"m\u00fcller":3,"new":[2,3,6,7,9,12,14,22,23],"null":6,"pl\u00f6tz":6,"public":[3,6,12,15,22,23],"return":[0,7,11,12,13,14,15,16,17,19,20,22,23,26,27,28,29,30],"short":[14,30],"static":[2,14,17,22,23],"switch":[2,6,12,22,23],"throw":7,"true":[14,22,26,27,28,29,30],"try":[3,7],"universit\u00e4t":3,"while":7,Bus:2,But:[6,7],DFs:[14,22],DGs:6,For:[5,6,14,22,26,27,28,29],INS:[2,30],Its:7,Near:1,One:[12,23],QES:6,SWs:7,The:[0,1,2,3,4,5,6,7,11,12,14,15,17,20,21,22,23,26,27,28,29,30],Then:6,There:[7,12],Use:[2,4,6,26,27,28,29],Used:22,Using:[1,4],Will:7,With:[0,4],__computekei:23,__generate_cryptoflex:9,__generate_epass:9,__generate_iso_card:9,__generate_npa:9,__getrecord:14,__getrecordsbyidentifi:14,__getrecordsbynumb:14,__init__:7,__output_from_l:19,__recvfromvpicc:17,__replace_tag:12,__repr__:30,__sendtovpicc:17,__set_algo:12,__set_iv:12,__set_kei:12,__str__:30,__traceback__:13,_addexpectedfailur:[26,27,28,29],_addskip:[26,27,28,29],_addunexpectedsuccess:[26,27,28,29],_baseassertequ:[26,27,28,29],_callcleanup:[26,27,28,29],_callsetup:[26,27,28,29],_callteardown:[26,27,28,29],_calltestmethod:[26,27,28,29],_class_cleanup:[26,27,28,29],_classsetupfail:[26,27,28,29],_deldata:30,_deprec:[26,27,28,29],_diffthreshold:[26,27,28,29],_feederrorstoresult:[26,27,28,29],_format_field:30,_format_part:30,_formatmessag:[26,27,28,29],_get_referenced_kei:[15,22,23],_getassertequalityfunc:[26,27,28,29],_getdata:30,_getsw:30,_make_byte_properti:30,_makesalt:11,_selectfil:[14,22],_set_s:[12,22,23],_setbyt:30,_setdata:30,_setsw:30,_truncatemessag:[26,27,28,29],a000000397425446590201:0,a000000527210101:0,abl:[1,6,9],about:[6,7,26,27,28,29],abov:6,academictitl:6,acardemul:[0,4],accept:[26,27,28,29],access:[0,2,4,5,6,12,15,17,22,23],accessori:1,accord:[7,12,14,17,22,23],accordingli:6,act:[6,7],activ:4,actual:[4,5,7,20],add:[2,4,7,12,26,27,28,29],add_data:7,addclasscleanup:[26,27,28,29],addcleanup:[26,27,28,29],added:[15,22,23,26,27,28,29],addit:[4,26,27,28,29],addition:[2,4,6],address:6,addtypeequalityfunc:[26,27,28,29],adjust:[12,23],adress:30,af_inet:7,after:[26,27,28,29],against:[4,5,6],agreement:[12,22,23],aid:4,aid_list:4,algo:11,algorithm:[11,12,15,22,23],alia:[26,27,28,29],all:[4,5,6,7,12,14,15,16,22,23,26,27,28,29],allow:[0,1,4,5,6,26,27,28,29],almost:[26,27,28,29],alreadi:12,also:[0,1,2,4,6,7,9,14,22,26,27,28,29],altern:[2,3,4,6],although:6,analyz:4,anchor:[6,12,22,23],andrea:3,android:[1,3,6,7],angriff:3,ani:[0,1,2,4,5,6,7,15,22,23],annex:23,anoth:2,answer:[17,22],anywai:[6,23],apart:3,apdu:[0,1,2,4,6,7,12,14,15,17,19,20,22,23,30],api:[6,7],app:[0,1,4,5,6,7],appear:2,append:[11,12,14,22],append_pad:11,appendrecord:[14,22],appl:6,applet:0,applic:[0,1,2,4,5,6,17],applicationidentifi:[14,22],appropri:[1,12,22,23],apt:2,architectur:6,arg:[7,13,14,17,22,26,27,28,29,30],argument:[6,26,27,28,29],argz:[14,22],around:4,arrai:6,articl:6,asctim:7,aspect:3,assert:[26,27,28,29],assert_:[26,27,28,29],assertalmostequ:[26,27,28,29],assertcountequ:[26,27,28,29],assertdictcontainssubset:[26,27,28,29],assertdictequ:[26,27,28,29],assertequ:[26,27,28,29],assertfals:[26,27,28,29],assertgreat:[26,27,28,29],assertgreaterequ:[26,27,28,29],asserti:[26,27,28,29],assertin:[26,27,28,29],assertionerror:[26,27,28,29],assertisinst:[26,27,28,29],assertisnon:[26,27,28,29],assertisnot:[26,27,28,29],assertisnotnon:[26,27,28,29],assertless:[26,27,28,29],assertlessequ:[26,27,28,29],assertlistequ:[26,27,28,29],assertlog:[26,27,28,29],assertmultilineequ:[26,27,28,29],assertnotalmostequ:[26,27,28,29],assertnotequ:[26,27,28,29],assertnotin:[26,27,28,29],assertnotisinst:[26,27,28,29],assertnotregex:[26,27,28,29],assertnotregexpmatch:[26,27,28,29],assertrais:[26,27,28,29],assertraisesregex:[26,27,28,29],assertraisesregexp:[26,27,28,29],assertregex:[26,27,28,29],assertregexpmatch:[26,27,28,29],assertsequenceequ:[26,27,28,29],assertsetequ:[26,27,28,29],asserttru:[26,27,28,29],asserttupleequ:[26,27,28,29],assertwarn:[26,27,28,29],assertwarnsregex:[26,27,28,29],assign:[14,30],assignlogicalchannel:[17,22],associ:[12,23],assum:7,asym:12,atexit:7,atr:[4,7,17,19,20,22],attach:[0,1,5],attack:[4,5,7,20],attempt:6,attribut:[14,22,26,27,28,29,30],auf:3,authent:[12,15,22,23],authenticate_head:[12,22,23],authentisierung:3,autodetect:[2,4],automat:[2,6,17,22,26,27,28,29],autoreconf:[2,4,6],autotool:6,auxiliari:[2,4,6],avail:[0,2,3,4,5,6,7,14,22],avoid:7,bac:6,back:[1,4,7,17,20],backend:4,bar:[5,26,27,28,29],base:[0,2,4,9,12,13,14,15,17,19,20,21,22,23,26,27,28,29,30],basi:[26,27,28,29],basic:[23,26,27,28,29],basicconfig:7,basiert:3,been:[7,26,27,28,29],befor:[7,26,27,28,29],begin:[14,22],being:6,below:[4,6],ber:[14,22],berlin:3,bertlv:16,bertlv_data:[14,22],bertlv_pack:16,bertlv_unpack:16,besitz:3,best:[4,7],better:7,between:[0,2,6,17,22,26,27,28,29],big:[7,12,22,23],bin:6,binari:[6,14,22,30],birthnam:6,bit:[11,14,22],bitmask:[12,22,23],bitstr:[17,22],bix:6,bixvread:6,bixvreaderinstal:6,bleed:[2,4,6],block:[7,11,15,22,23,26,27,28,29],blocklen:11,bndl:6,bool:[14,17,22],both:[2,26,27,28,29],box:2,bring:6,brows:[0,3,5],bsi:2,buffer:7,bug:[2,4,6,7],build:[0,1,2,4,5],building_gadget_usb_modul:2,built:[0,2,4,5,6],bund:2,bundl:6,bz2:2,c_apdu:30,ca_kei:[6,7,17],calcul:[4,11,17,22,23],calculate_mac:11,call:[7,14,21,26,27,28,29],callabl:[26,27,28,29],camera:[0,5],can:[0,2,3,4,5,6,7,14,20,22,26,27,28,29],capabl:[14,17,22],capdu:[12,15,17,22,23],card:[8,9,12,14,15,17,19,20,21,22,23],card_typ:[7,9,17,26],cardaccess:6,cardconnectionexcept:7,cardgener:[7,8],cardgenerator_test:[8,25],cardnumb:15,cardsecret:15,cardsecur:6,cardtyp:7,caught:[26,27,28,29],cbc:11,ccc:3,ccid:3,cct:12,cert:6,certif:[1,6,12,22,23],certifc:6,cfbundledevelopmentregion:6,cfbundleexecut:6,cfbundleinfodictionaryvers:6,cfbundlenam:6,cfbundlepackagetyp:6,cfbundlesignatur:6,cfbundlevers:6,challeng:[15,22,23],chang:[2,4,6,15,22,23],change_reference_data:[15,22,23],channelid:6,chao:3,charact:[17,19,20,22],check:[2,4,6,7,15,22,23,26,27,28,29],checksum:[11,12,22,23],children:[26,27,28,29],chip:6,chipkartenles:3,choic:5,choos:[0,1,4,5,6],chosen:6,chr:7,chv:[15,22,23],cipher:[11,15,22,23],cipherspec:11,citi:6,cla:[2,30],classmethod:[26,27,28,29],cleanup:[7,20,26,27,28,29],click:6,client:2,clone:[0,1,2,3,4,5,6],close:[7,20],cls:[26,27,28,29],club:3,code:[0,2,5,6,7,12,14,16,22,23,26,27,28,29,30],codeproject:6,collect:[26,27,28,29],com:[0,1,2,3,4,5,6,7],combin:[2,4,12],come:7,command:[0,1,2,4,6,7,12,14,15,17,19,20,22,23,30],commandchaing:[17,22],commun:[0,1,3,4,5,6,7,17],communityid:6,compar:[22,26,27,28,29],comparison:[26,27,28,29],compat:2,compil:[0,1,2,4,5,6],complet:[4,6,7,26,27,28,29],complex:7,comput:[0,3,5,6,11,12,22,23],compute_cryptographic_checksum:[12,22,23],compute_digital_signatur:[12,22,23],concern:[3,4,5],conf:[6,7],config:[2,4,5,6,12],configur:[0,2,4,5,7,12],congress:3,connect:[0,1,3,4,5,6,7,17,20],connector:[4,6],connecttoport:[7,17],consecut:30,consid:[26,27,28,29],constantdefinit:8,contact:[4,6],contactless:0,contain:[6,12,14,15,22,23,26,27,28,29],content:[7,9,12,14,22,30],context:[7,26,27,28,29],contribut:[0,1,2,4,5,6],control:[12,14,22,23],controlreferencetempl:12,convent:[17,22],copyright:6,core:2,correct:[7,14,15,22,23],correctli:[15,22],correspond:[7,15,26,27,28,29],counter:[11,15,22,23,26,27,28,29],counterpart:2,countri:6,counttestcas:[26,27,28,29],cover:[4,6],craft:2,creat:[2,3,6,14,22],createfil:[14,22],cross:4,crt:[12,23],crypt:11,crypto_checksum:11,cryptoflex:[6,7,8,9,18,26],cryptoflexgeneratortest:26,cryptoflexmf:[7,22],cryptoflexo:[7,22],cryptoflexs:22,cryptoflexsam:22,cryptograph:[11,12,22,23],cryptotokenkit:6,cryptoutil:[8,15],cryptoutils_test:[8,25],current:[0,3,4,6,9,11,12,14,15,22,23],currentdf:[14,22],currentef:[14,22],custom:2,custom_url:7,cvca:[6,7,17],cyanogenmod:[0,5],cyberflex:[6,11],cycl:[14,22],cyclic:14,d2760001240102000000000000010000:0,daemon:6,data:[0,2,4,5,6,7,11,12,14,15,16,17,22,23,26,27,28,29,30],datacod:14,datagroup:9,datagroupnam:6,datagroupvalu:6,datalist:[14,16],dataobjecthandlingdecodeencapsul:[14,22],dataobjecthandlingdecodeplain:[14,22],dataset:[6,7],datasetfil:[6,7,9,17],datatyp:[26,27,28,29],dataunitsdecodeencapsul:[14,22],dataunitsdecodeplain:[14,22],datefmt:7,dateofbirth:6,dateofexpiri:6,dcb:[14,22],debian:[2,4,6,19],debug:[4,6,26,27,28,29],decim:[26,27,28,29],deciph:[12,22,23],decipher:[12,22,23],decive_unit:6,decod:[14,22],decodediscretionarydataobject:16,decodeextendedheaderlist:16,decodeheaderlist:16,decodeoffsetdataobject:16,decodetaglist:16,deconstruct:[26,27,28,29],decor:14,decrement:[15,22,23],decrypt:[11,14,15,22,23],dedic:14,deem:[26,27,28,29],def:7,default_s:15,default_uid:2,defaulttestresult:[26,27,28,29],defin:[2,15,23],deleg:[0,1,6],deletefil:[14,22],delta:[26,27,28,29],den:3,depend:[0,2,4,5,6,11,14,22,23,26,27,28,29,30],deploi:[0,1,5],deriv:[7,21,23],derive_kei:23,des3:11,des:3,describ:6,descript:[26,27,28,29],descriptor:[14,22],design:7,despit:4,destroypacechannel:2,detail:[6,7,26,27,28,29],detect:5,determin:[26,27,28,29],dev:[2,6],develop:[0,1,4,5],devic:[0,1,2,6],devicenam:6,devices_compatibility_matrix:4,devmgmt:6,dfname:[14,22],dfselectionbyapplication_implicit:[14,22],dfselectionbyfid:[14,22],dfselectionbyfulldfnam:[14,22],dfselectionbypartialdfnam:[14,22],dfselectionbypath:[14,22],dg12:6,dg14:6,dg15:6,dg16:6,dg21:6,dialog:1,dict:6,dictionari:[12,26,27,28,29],die:3,die_gesamte_technik_ist_sich:3,diff:[26,27,28,29],differ:[3,6,7,9,11,12,23,26,27,28,29],digit:[12,22,23,26,27,28,29],direct:[17,22],directconvent:[17,22],directli:[4,6],directori:[2,6,7],disabl:6,disable_check:[7,17],disconnect:7,discuss:[4,5],disk:[7,9],dispatch:[15,17],distanc:4,distribut:4,dlitz:6,do_encrypt:11,do_someth:[26,27,28,29],doc:[6,14],doclasscleanup:[26,27,28,29],docleanup:[26,27,28,29],docstr:[14,26,27,28,29],doctyp:6,document:7,documenttyp:6,doe:[4,6,7,23],doi:3,dominik:[3,4],done:[4,7],doubl:6,down:[7,17,19,20,22],driver:[2,5,6,19],droid:[0,5],dsa:[15,22,23],dst:12,dtd:6,ducktyp:[26,27,28,29],dummy_hcd:2,dylib:6,eac:6,each:[14,21],earlier:6,echo:2,edg:[2,4,6],edit:7,editor:3,ef_cardaccess:[6,7,17],ef_cardsecur:[6,7,17],effect:[26,27,28,29],effective_l:30,efstructure_cyclic_nofurtherinfo:7,efstructure_linear_fixed_:7,efstructure_linear_variable_:7,efstructure_transpar:7,eid:3,einem:3,either:[0,12,14,22,23],electron:[0,6],element:[6,26,27,28,29],elementari:14,elif:7,els:7,email:6,emit:[26,27,28,29],emul:[3,7,17],enabl:[2,3,4,6],enciph:[12,22,23],encipher:[12,22,23],enclos:[26,27,28,29],encod:[6,7,12],encodebertlvdatalist:16,encodedataoffsetobject:16,encodediscretionarydataobject:16,encodefilecontrolparamet:[14,22],encrypt:[7,9,11,14,15,22,23],end:[12,14,22,23,26,27,28,29],endian:7,enforc:[26,27,28,29],engin:3,english:6,ensur:6,enter:[15,22,23],entir:7,entri:2,environ:[4,12,15,22,23],epass:[6,7,8,18],epass_s:23,epassport:23,equal:[14,15,22,23,26,27,28,29],eras:[12,14,15,22,23],erase_s:[15,22,23],erasebinari:[14,22],erasebinaryencapsul:[14,22],erasebinaryplain:[14,22],erasefrom:14,eraserecord:[14,22],eraseto:14,erik:0,eriknellessen:0,err_incorrectparamet:7,err_wronglength:7,error:[2,7,14,22,26,27,28,29],error_cod:[26,27,28,29],erweiterung:3,esign:6,esign_ca_cert:[6,7,17],esign_cert:[6,7,17],esign_kei:[7,17],especi:[4,5],establish:[5,6],establishpacechannel:2,establishpacechannelinput:2,establishpacechanneloutput:2,etc:[6,7],even:[7,14,22,26,27,28,29],everi:6,exactli:[26,27,28,29],exampl:[2,4,6,26,27,28,29,30],exc_info:[26,27,28,29],except:[7,13,26,27,28,29],exe:6,execut:[6,7,17,19,20,22,26,27,28,29],exercis:[26,27,28,29],exist:[0,4,7],exit:[2,4,6,7],expect:[7,26,27,28,29],expected_except:[26,27,28,29],expected_regex:[26,27,28,29],expected_warn:[26,27,28,29],explain:4,explicit:[26,27,28,29],explor:6,expon:22,expr1:[26,27,28,29],expr2:[26,27,28,29],expr:[26,27,28,29],express:[26,27,28,29],extend:[3,6,7],extended_length:17,extendedl:[17,22],extens:1,extern:[6,12,22,23],external_authent:[15,22,23],extra:[26,27,28,29],extra_fci_data:14,f276a288bcfba69d34f31001:0,fabio:6,fail:[7,26,27,28,29],failif:[26,27,28,29],failifalmostequ:[26,27,28,29],failifequ:[26,27,28,29],failunless:[26,27,28,29],failunlessalmostequ:[26,27,28,29],failunlessequ:[26,27,28,29],failunlessrais:[26,27,28,29],failur:[26,27,28,29],failureexcept:[26,27,28,29],fals:[6,7,14,16,17,22,26,27,28,29,30],familynam:6,far:6,fci:[14,22],fdb:7,fdid:[0,5],featur:3,feature_execute_pac:2,feature_modify_pin_direct:2,feature_verify_pin_direct:2,fed:21,feedback:[0,1,2,4,5,6],fetch:[0,1,5,7],ff557573:6,fid:[7,14,22],field:[1,12,22,23,30],file:[0,2,4,5,6,7,9,14,15,17,22],filedescriptor:[7,14,22],filenam:[2,26,27,28,29],filesystem:[9,15,22,23],fill:9,filter:[26,27,28,29],find:[2,4,6,7,16],firewal:7,first:[6,7,14,22,26,27,28,29],firstsft:[14,22],firstsoftwar:[14,22],fix:14,fixtur:[26,27,28,29],fmd:[14,22],focu:6,follow:[0,2,3,4,5,6,7,14,22],foo:[26,27,28,29],foreground:4,form:[4,9,11,15,22,23],format:[7,26,27,28,29],formatresult:[7,17,22],forwar:4,forward:[2,7,17,20],forwared:2,foss:3,found:[26,27,28,29],fragment:2,framework:6,frank:[2,3,4],frankmorgn:[0,1,2,3,4,5,6],fraunhof:3,freerunn:2,friendlynam:6,from:[0,1,2,3,4,5,6,7,9,12,14,15,17,20,21,22,23,26,27,28,29],fsdecrypt:[15,22,23],fsencrypt:[15,22,23],fukuchi:6,full:[4,5,30],further:[26,27,28,29],futur:[15,22,23],g_ether:2,gadget:2,gear:1,gener:[0,2,4,5,6,7,9,11,12,14,15,22,23,26,27,28,29,30],generate_public_key_pair:[12,15,22,23],generatecard:9,german:[0,2,4,5,6],gertrud:6,gesamt:3,get:[2,4,6,7,9,14,22,26,27,28,29],get_card_numb:[15,22,23],get_challeng:[15,22,23],get_ciph:11,get_cipher_blocklen:11,get_cipher_keylen:11,get_index:14,get_referenced_ciph:15,getatr:[7,17,19,20,22],getcard:[7,9],getdata:[14,22],getdataencapsul:[14,22],getdataplain:[14,22],getfile_byrefdataobj:14,getlogg:[26,27,28,29],getmf:[14,22],getpath:[14,22],getreaderpacecap:2,getrespons:[17,22],getsocknam:7,gg487509:2,gid:0,gidsapplet:0,giovanni:3,git:[0,1,2,3,4,5,6],github:[0,1,2,3,4,5,6],give:[6,7,26,27,28,29],given:[4,7,12,14,15,16,17,19,20,22,23,26,27,28,29],givennam:6,global:[12,15,22,23],gmail:2,gnu:[2,4,6],gpl:[0,1,2,4,5,6],group:[6,7],guess:6,guid:[1,3],guidelin:1,guidelines_on_connecting_gears2_device_using_wifi_151222:1,handi:3,handl:[3,7,14,22,26,27,28,29],handleinpdu:[7,21],handleoutpdu:[7,21],handler_test:[6,7,19],handlertest:[7,8,18],handlertesto:[7,19],hardwar:[0,2,4,5,6],has:[0,2,4,5,7,14,22,26,27,28,29],hasfixedrecords:14,hash:[11,12,22,23],hashmap:15,hashmethod:11,hassimpletlv:14,have:[0,1,2,3,4,5,6,7,26,27,28,29],hce:[0,1],header:[2,4,12,22,23],header_authent:[15,22,23],headless:1,heidelberg:3,help:[2,4,6],henryk:6,here:[2,3,4,6,7],hexdump:30,higher:[26,27,28,29],histchar:[17,22],histor:[14,17,22],hmac:11,holder:6,honor:14,honour:[26,27,28,29],hook:[7,26,27,28,29],host:[0,2,4,5,6,7,17],hostnam:[4,6,7],how:[2,4,7],html:[0,1,2,3,5,6],http:[0,1,2,3,4,5,6,7,19],human:[26,27,28,29],humboldt:3,icao:[9,11,23],icc:23,ident:[0,6],identifi:[0,4,14,15,22,23,26,27,28,29],identifier_first:14,identifier_last:14,identifier_next:14,identifier_previ:14,iec:4,ifd:6,ifdcap:6,ifdfriendlynam:6,ifdmanufacturerstr:6,ifdproductid:6,ifdproductstr:6,ifdprotocolsupport:6,ifdread:6,ifdvendorid:6,ifdversionnumb:6,imag:6,immedi:[26,27,28,29],impact:[4,5],implement:[0,2,6,12,19,20,21,22,23,26,27,28,29],implicitli:7,importerror:7,inact:6,includ:[0,1,3,4,6,7,12,15,22,23,26,27,28,29],include_fil:16,incom:[4,6],incomplet:6,indent:[14,30],index:[4,14,15,22,26,27,28,29],index_curr:[14,22],index_htm:2,indic:[12,22,23],info:[2,6,7,26,27,28,29],infoplist:6,inform:[3,12,14,15,22,23,26,27,28,29],informat:3,informatik:3,informationstechnologi:3,ini:6,init:[0,6],initi:[0,1,2,6,7,11,12,14,23],inpdu:21,inpterpret:7,input:11,ins2handl:[17,22],ins:[7,17,22,30],insert:4,insight:7,insmod:2,inspect:[6,26,27,28,29],instanc:[14,16],instead:[0,6,26,27,28,29,30],institut:3,instruct:[14,22],integ:[14,22],integr:6,interact:9,interfac:[0,2,5,6,17,22],intermediari:2,intern:[12,15,22,23],internal_authent:[15,22,23],internet:6,interrupt:2,inttostr:[7,30],invalid:[6,7,15,22,23],invers:[17,22],invok:[12,22,23,26,27,28,29],involv:14,ioanni:3,iscycl:14,isequ:14,isinst:[7,26,27,28,29],iso7816:[6,7,26],iso7816generatortest:26,iso7816o:[7,17,22],iso:[0,4,6,12,17,22,23,30],isoapplet:0,issimpletlv:[14,22],issu:[2,4,6],issuingst:6,ist:3,item:[14,26,27,28,29],iter:[26,27,28,29],its:[2,4,6,7,12,14,22,23,26,27,28,29],itself:7,java:0,jcardsim:0,jen:3,join:7,jump:6,just:[26,27,28,29],kdir:2,keep:[26,27,28,29],kei:[6,7,11,12,15,22,23],kernel:2,keycard:0,keytyp:[15,22,23],keyword:[26,27,28,29],killal:6,kind:[0,1,2,4,5,6,12,22,23],kit:6,kitkat:[0,5],know:[6,7],knowledg:7,krontiri:3,kwarg:[26,27,28,29,30],last:[11,14,22],lastcommandoffcut:7,lastcommandsw:7,later:[4,6,7,22],latest:[2,3,4,6],layer:6,lead:6,lectur:3,len:[7,17,22],len_extend:30,length:[7,11,12,14,16,22,26,27,28,29,30],less:[4,6,26,27,28,29],let:7,level:[7,26,27,28,29],levelnam:7,lian:3,lib:[2,4,6],libccid:2,libeac:6,libexec:6,libifdvpcd:6,libopensc:2,libpath:6,libpcsclit:6,libqrencod:6,librari:[3,6],libtool:[2,4,6],licens:[0,1,2,4,5,6],life:[14,22],lifecycl:[14,22],lifo:[26,27,28,29],like:[2,4,6,26,27,28,29],line:[2,6,26,27,28,29,30],linelen:30,lineno:[26,27,28,29],link:[2,6],linuxtag:3,list1:[26,27,28,29],list2:[26,27,28,29],list:[2,4,6,7,14,16,22,26,27,28,29],listen:4,listread:7,lite:[4,6,19],littl:7,load:[2,6,7],loadmitmfrompath:[7,17],local:[2,6],local_ip:7,localhost:6,locat:[3,4],log:[6,7,26,27,28,29],logger:[26,27,28,29],logger_nam:[26,27,28,29],logginglevel:[7,17],logic:14,logrecord:[26,27,28,29],longmessag:[26,27,28,29],look:[0,2,3,4,6,7,14],loop:17,lost:7,mac:[11,12,22,23],machin:[2,6,23],maco:6,magic:7,mai:[0,1,4,6,11,12,15,21,22,23],mail:6,main:[4,6,7,17],maintain:17,make:[2,4,6,30],make_properti:14,makeatr:[17,22],makefil:2,makefirstsoftwarefunctiont:[14,22],makesecondsoftwarefunctiont:[14,22],makethirdsoftwarefunctiont:[17,22],man:[6,21],manag:[6,7,26,27,28,29],manage_security_environ:[12,15,22,23],mani:16,manipul:[12,22,23],manual:[0,1,5],map:[7,22],mark:[26,27,28,29],mass:6,master:[3,14,15,17,22],match:[4,6,14,26,27,28,29],max:[11,17,22],maxdiff:[26,27,28,29],maximum:[14,15,22,23],maximumchannel:[17,22],maxl:[7,22],maxrecords:[7,14],maxsiz:14,mayb:2,mean:[6,7,11,12,15,17,22,23,26,27,28,29],measur:[26,27,28,29],mechan:[12,22,23],media:3,member:[26,27,28,29],memori:[15,22,23],messag:[6,7,11,12,15,17,22,23,26,27,28,29],meta:30,method:[9,12,15,21,22,23,26,27,28,29],methodnam:[26,27,28,29],microsoft:[2,4,6],middl:[6,21],middlewar:2,might:[7,15,21,22,23,26,27,28,29],min:7,mingw:4,miss:[2,4,6],mitm:[6,7,20],mitmpath:[7,17],mkdir:2,mmc:6,mmo11:3,mo10:3,mobil:[2,3],mobilen:3,mode:[2,4,5,6,7,11,12,15],modern:[2,4],modif:[2,7],modifi:[2,4,7,12,21],modprob:2,modul:[2,4,6,8,18,25],momr12:3,mor12:3,more:[0,1,2,4,5,6,7,12,23,26,27,28,29],morgner:[2,3,4],most:[2,4,7,16,26,27,28,29],mostli:7,mount:2,mous:6,mrtd:[6,23],mrz:9,msc:6,msdn:[2,6],mse:12,msg:[7,17,19,20,22,26,27,28,29],msi:6,multi:[26,27,28,29],multipl:[2,6,7],must:[2,4,5,6,7,9,11,12,14,22,23,26,27,28,29],mutual_authent:[15,22,23],mutual_challeng:[15,22,23],name:[4,6,14,22,30],named_df:[14,22],nation:6,nativ:[1,4],necessari:4,need:[0,1,2,4,5,6,7,15,22,23,26,27,28,29],neither:[14,22],nellesson:0,neo:2,net:[0,6],network:[5,7],neuen:3,new_fil:7,newer:[0,5],newli:14,newlist:14,newtlvlist:[14,22],newvalu:[14,16],next:[1,14,22],nfc:[0,1,3,4,5,6,7],nice:30,nicer:[26,27,28,29],nobodi:23,nofurtherinfo:7,none:[7,9,11,14,15,16,17,22,23,26,27,28,29,30],noop:21,nor:[14,22],normal:[7,22,26,27,28,29],normal_rest:7,note:[3,7,14,17,22,23,26,27,28,29],noth:[12,22,23],notif:2,now:[2,4,6,15,22,23],npa:[0,3,6,7,8,18,26],npao:7,num_id:14,num_result:16,number:[2,4,6,7,14,15,22,23,26,27,28,29],numread:6,oath:0,obj:[2,26,27,28,29],object:[7,9,12,14,15,17,20,21,22,23,26,27,28,29,30],occur:[14,22],odd:[14,22],oep10:3,oepen:[3,4],off:[2,7],offer:3,offset:[14,16,22,30],old:[3,14],older:[2,3,4,6],om11:3,omit:[17,22,26,27,28,29],one:[4,5,12,14,22,23,26,27,28,29,30],onetimewrit:14,onli:[2,4,7,11,14,22,23,26,27,28,29],open:[0,5,6,7,17],openmoko:[2,4,6],openpac:6,openpcd:4,openpgp:0,openpicc:4,openport:[7,17],opensc:[2,6],oper:[4,11,12,14,22,23,26,27,28,29],operation_on_str:11,optim:[26,27,28,29],option:[2,4,6,9,11,17,22,26,27,28,29],ord:7,order:[2,7,12,14,15,22,23,26,27,28,29],org:[0,1,2,4,5,6,19],other:[2,5,6,12,15,22,23,26,27,28,29],otherwis:[4,12,14,22,26,27,28,29],ottavi:6,our:[0,1,2,3,4,5,6,7,30],out:[2,7,26,27,28,29],outpdu:21,output:[6,26,27,28,29],over:[4,5,6,7],overview:[6,7],overwrit:[7,30],overwritten:21,own:[0,1,6,21,26,27,28,29],pace:[0,2,6],pacecap:2,pack:16,packag:21,pad:[11,12,22,23],padding_class:11,pair:[12,23],parallel:6,param:[14,26,27,28,29],paramet:[11,12,14,15,17,19,20,22,23,26,27,28,29],parent:[7,14,22],pariti:23,pars:[7,12,15,22,23,30],parse_se_config:12,parse_sm_capdu:[12,15,22,23],part:[3,6,14],partial:[14,22],pass:[7,17],passport:[0,6,9,11,23],passportsam:23,patch:2,path:[6,7,9,14,15,17,22],pattern:[26,27,28,29],pbkdf2:6,pc_to_rdr_secur:2,pc_to_rdr_xfrblock:2,pcd:[6,7,17],pcsc:[0,4,6],pcsc_scan:6,pcscd:[6,7],pcsclite:[4,6],pdf:[1,3],pdu:21,perform:[2,4,12,17,19,20,22,23],perform_security_oper:[12,15,22,23],period:6,permiss:[0,5],persist:9,personalauswei:3,peter:3,pezorform_security_oper:22,phone:[6,7],photo:9,php:4,physic:[7,20],piec:14,pil:6,pin:[0,2,15,22,23],pipe:[2,6],pkc:6,pkg:[2,4,6],pkg_config_path:4,pkgconfig:4,pki:23,place:[6,26,27,28,29],placeofbirth:6,plain:[12,15,22,23],platform:[0,1,2,4,5,6],pleas:[0,1,2,4,5,6],plist:6,plu:[26,27,28,29],plug:6,point:14,pointer:14,port:[4,6,7,17],portabl:2,posess:[15,22,23],posit:[26,27,28,29],possibl:[0,2,4,6],power:[7,17,19,20,22],powerdown:[7,17,19,20,22],powerup:[7,17,19,20,22],predic:6,prefix:4,prepend:[11,14,22],present:2,pretend:6,pretti:7,prettyprint_anyth:14,previou:[14,22],previous:[7,12,23],print:[2,4,5,6,7,26,27,28,29],print_ascii:7,privaci:3,privat:[6,12,15,22,23],probabl:[2,4,6],problem:6,process:[0,1,4],produc:[17,21],product:[2,6],program:[1,3,6,7],programmingguide_accessori:1,project:[0,1,2,3,4,5,6],prompt:9,prop:[14,30],properti:[14,17,22,30],propertylist:6,proprietari:[2,6,14],protect:[0,6,12,15,22,23],protect_respons:[12,22,23],protect_result:[15,22,23],protocol:[0,1,6,7,17,22,23],prove:[15,22,23],provid:[6,7,12,23,26,27,28,29],pseudo:2,pseudorandom:11,publikationen:2,publish:6,puk:[15,22,23],purpos:[4,26,27,28,29],put:[14,22],putdata:[14,22],putdataencapsul:[14,22],putdataplain:[14,22],pwd:2,pwendland:0,pycrypto:6,pypi:6,pyreadlin:6,pyscard:[6,7],python:[26,27,28,29],pythonwar:6,qrcode:7,qrencod:6,qrserver:7,quit:7,r_apdu:[7,30],rais:[7,14,22,26,27,28,29],random:[2,15,22,23],randomli:6,rapdu:[7,17],raw:[12,22,23],rdr_to_pc_datablock:2,read:[6,7,9,14,22,23],readabl:[23,26,27,28,29],readbinari:[14,22],readbinaryencapsul:[14,22],readbinaryplain:[14,22],readdatagroup:[7,9],reader0:6,reader1:6,reader2:6,reader:[0,1,3,4,6,7,19,20],readernum:[7,17,20],readlin:6,readrecord:[14,22],readrecordencapsul:[14,22],readrecordplain:[14,22],real:[2,4,6,7,20,21],reali:21,realiz:4,reason:[26,27,28,29],recalculate_length:16,receiv:[4,7,17,20],recent:2,recogn:7,reconnect:7,record:[7,14,22,26,27,28,29],recordhandlingdecod:[14,22],recordidentifiersupport:[14,22],recordnumbersupport:[14,22],recordpoint:14,recordstructureef:[7,14,22],recurs:[6,14],redlich:3,ref:14,refdataobj:14,refer:[12,14,15,22,23,26,27,28,29],referenc:[15,22,23],regard:[14,22,26,27,28,29],regex:[26,27,28,29],regexp:[26,27,28,29],regist:[1,4,6,7,26,27,28,29],regular:[26,27,28,29],rel:6,relai:[0,3,5,6,7,8,18,21],relaymiddleman:[7,8,18,20],relayo:[7,20],releas:[2,3,4,6],religiousartisticnam:6,remot:[0,3,4,6],remotesmartcardread:[0,5],remov:[12,14,22,23],render:[7,30],replac:[6,12,14,15,22,23],report:[2,4,6],repositori:[0,2,3,4,5,6],repres:30,represent:14,request:[3,6,7,14],requestedtl:[14,22],requir:[0,2,5,6,7,23],res:4,research:3,reset:[7,14,15,17,19,20,22,23],resetrecordpoint:14,residencepermit1:6,residencepermit2:6,resp_data:23,respect:7,respons:[0,1,2,4,6,7,9,12,14,15,17,19,20,22,23,30],respsons:17,ressourc:1,rest:7,restart:6,restor:[12,15,22,23],restore_s:[15,22,23],result:[7,12,14,16,17,22,23,26,27,28,29],resum:[26,27,28,29],retri:[15,22,23],retriev:[15,22,23],revers:[6,7],rfid:4,rfu:[15,22,23],right:[15,22,23],root:[6,26,27,28,29],round:[26,27,28,29],rousseau:19,routin:6,rpc_type:6,rsa:[15,22,23],rule:[26,27,28,29],run:[0,2,4,5,7,17,26,27,28,29],runtest:[26,27,28,29],runtim:0,russello:3,sai:6,said:7,salsa:19,salt:11,sam:[7,9,12,14,15,17,22,23],same:[6,7,26,27,28,29],samsung:1,saniti:4,sar:3,save:6,scan:[0,5,7],scanner:5,scardcontrol:2,scardtransmit:2,schmidt:3,scienc:3,script:6,sdk:[0,1,5],search:[14,22],searchbinaryencapsul:[14,22],searchbinaryplain:[14,22],second:[14,22,26,27,28,29],secondsft:[14,22],secondsoftwar:[14,22],secret:[11,15,22,23],section:4,secur:[2,3,6,7,12,15,17,22,23],security_environ:[12,15,22,23],see:[2,4,6,7,14,17,19,22],seed:23,seekabl:[7,17,22],seid:[12,15,22,23],select:[0,1,4,5,7,11,14,17,22],selectfil:[14,22],self:[7,13,26,27,28,29],send:[1,4,7,11,12,17,20,21,22,23],sendcommandapdu:7,sent:[4,7],seper:6,seq1:[26,27,28,29],seq2:[26,27,28,29],seq_typ:[26,27,28,29],sequenc:[11,23,26,27,28,29],sequenti:14,serial:[2,6],serv:21,server_sock:7,servic:[1,6],session:7,session_kei:11,set1:[26,27,28,29],set2:[26,27,28,29],set:[4,6,9,12,13,14,17,22,23,26,27,28,29],set_asym_algorithm:[15,22,23],set_mf:[15,22,23],setcard:9,setter:[15,22,23],settimeout:7,setup:[26,27,28,29],setupclass:[26,27,28,29],seutil:[8,15,22,23],sever:[2,4,6],sex:6,shall:[6,12,22,23],shell:6,shiguo:3,ship:[2,4,6],shortdescript:[26,27,28,29],shortfid:14,shortfidsupport:[14,22],should:[4,6,7,12,14,22,23,26,27,28,29],show:6,sicher:3,sicherheitsanalys:3,sigkil:6,sign:[6,12,22,23],signatur:[6,12,22,23],signific:[26,27,28,29],silenc:[26,27,28,29],similar:[7,26,27,28,29],similarli:[26,27,28,29],simpl:[0,7,14,22],simplest:21,simpletlv:16,simpletlv_data:[14,22],simpletlv_pack:16,simpletlv_unpack:16,simpli:[6,7],simul:[0,1],sinc:[2,6],sit:3,six:12,size:[11,14,22],skip:[26,27,28,29],skiptest:[26,27,28,29],sln:6,slot:6,sm_header:[12,22,23],smart:[17,19,20,21],smartcard:[3,5,6,7,14,17,20],smartcardfilesystem:[8,22],smartcardo:[7,17,19,20,22],smartcardsam:[8,22,23],smartcardsam_test:[8,25],smartcardservic:6,smartphon:[0,3,5],smartwatch:0,snapshot:2,social:3,sock:7,sock_dgram:7,socket:[0,6,7,17],softwar:[2,4,5,6,7,14,17,22],solut:6,some:[2,3,7],some_attribut:[26,27,28,29],someexcept:[26,27,28,29],someth:6,somewarn:[26,27,28,29],sourc:[0,1,2,5,7],sourceforg:[2,4,6,7],space:30,special:[2,5],specif:[7,15,22,23,26,27,28,29],specifi:[4,6,7,11,12,14,15,16,22,23,26,27,28,29],specifii:6,springer:3,spsmartcardsdatatyp:6,spusbdatatyp:6,src:[2,4],ssc:[11,23],stabl:6,stack:2,stai:4,standalon:6,standard:[2,4,6,7,23,26,27,28,29],standardmsg:[26,27,28,29],start:[2,4,6,14],startup:6,state:14,statu:[2,14,22,30],step:6,still:[2,3,4,6],stop:[6,7,17],storag:[6,9],store:[12,15,22,23],store_s:[15,22,23],str:[7,17],straight:7,street:6,string1:11,string2:11,string:[2,4,6,7,11,12,14,15,16,17,19,20,22,26,27,28,29,30],stringtoint:[7,30],strip:11,strip_pad:11,structur:[14,16],studio:[0,4,5,6],stuttgart:3,style:[26,27,28,29],subclass:[26,27,28,29],subdir:2,submodul:[0,1,6],subset:[2,26,27,28,29],subsystem:6,subtest:[26,27,28,29],success:[15,22,23,26,27,28,29],successful:7,successfulli:6,sudo:[2,6],suffer:[26,27,28,29],suggest:[0,1,2,4,5,6],suitabl:11,sun:4,superset:[26,27,28,29],support:[2,4,6,9,11,12,22,26,27,28,29],suppos:6,sure:[6,7],sw1:[2,7,30],sw2:[2,7,30],swerror:[7,13],swutil:8,sym:12,symmetri:[26,27,28,29],syntax:6,sys:7,sysconfdir:6,system:[2,3,4,5,6,7,15],system_profil:6,systemroot:6,szenario:3,t15:[17,22],tabl:[12,14,17,22,23],tag:[12,14,16,22,23],tagungsband:3,tai:[17,22],taj:[17,22],take:[14,15,22,23,26,27,28,29],taken:6,tar:2,tbi:[17,22],tbj:[17,22],tcardemul:1,tci:[17,22],tcj:[17,22],tck:[17,22],tcp:[6,14,22],tcp_port:6,tdi:[17,22],teardown:[26,27,28,29],teardownclass:[26,27,28,29],tech:1,techdoc:1,technik:3,technischerichtlinien:2,telecommun:3,templat:[7,12,14,22,23],term:6,termin:[0,4,12,15,21,22,23],test:[0,1,2,4,5,6,8,26,27,28,29],test_capdu:29,test_card_cr:26,test_cas:[26,27,28,29],test_counter_decr:28,test_external_authent:28,test_get_and_set_card:26,test_incorrect_pin:28,test_internal_authent:28,test_pad:27,test_rapdu:29,test_readdatagroup:26,test_security_environ:28,testcas:[26,27,28,29],testcryptoutil:27,tester:[6,19],testnpacardgener:26,testresult:[26,27,28,29],testsmartcardsam:28,testutil:29,text:[22,26,27,28,29],than:[0,1,2,4,5,6,26,27,28,29],the_except:[26,27,28,29],the_warn:[26,27,28,29],thehistor:[14,22],thei:[6,11,12,26,27,28,29],them:[0,17],themselv:3,therefor:9,thesi:3,thi:[2,4,5,6,7,9,11,12,14,15,17,19,20,21,22,23,26,27,28,29,30],thing:[7,14],third:[17,22],those:[7,26,27,28,29],through:[0,2,6],time:[2,4,6,7,26,27,28,29],tip:1,titl:4,tizen:[0,3],tlv:[12,14,16,22,23],tlv_data:16,tlv_find_tag:16,tlv_unpack:16,tlvutil:8,tmp:4,to_str:12,togeth:[0,4],tool:[1,2,4,6],toolset:6,tr03119:2,tracker:[0,1,2,4,5,6],tradit:[5,6],transmiss:[17,22],transmit:[0,2,4,7],transpar:14,transparentstructureef:[7,14,22],tri:6,trigger:[26,27,28,29],trust:[2,6,12,22,23],tupl:[14,16,22,26,27,28,29],tuple1:[26,27,28,29],tuple2:[26,27,28,29],two:[14,22,26,27,28,29],type:[3,6,9,11,12,15,22,23,26,27,28,29],typeobj:[26,27,28,29],ubuntu:[2,4,6],udc:2,ulrich:3,umbrella:3,umdf:6,umfeld:3,unam:2,und:3,under:[15,22,23],understood:15,unequ:[26,27,28,29],unexpect:[26,27,28,29],unexpected_regex:[26,27,28,29],unfamiliar:[2,4,6],unit:[14,22],unittest:[26,27,28,29],univers:2,unix:5,unknown:[7,14,22],unless:[26,27,28,29],unlik:[26,27,28,29],unpack:16,unplug:6,unprotect:[12,15,22,23],unprotected_result:[15,22,23],until:[15,22,23],unverifi:6,updat:[0,6,14,22],updatebinari:[14,22],updatebinaryencapsul:[14,22],updatebinaryplain:[14,22],updaterecord:[14,22],updaterecordencapsul:[14,22],updaterecordplain:[14,22],url:[3,6],usabl:[2,3],usag:6,usb:[3,6],use:[0,1,2,4,5,6,7,11,12,14,15,17,22,23,26,27,28,29],used:[0,2,4,5,6,7,9,11,12,14,15,19,20,22,23,26,27,28,29,30],useful:[1,26,27,28,29],user:[2,6,9,15,21,22,23],uses:[0,1,2,4,6,23,26,27,28,29],using:[0,1,2,3,4,5,6,7,12,14,15,22,23],usr:[2,6],usual:[2,6,7,14,26,27,28,29],utf:6,util:[6,8],utils_test:[8,25],valid:[6,7,15,22,23,26,27,28,29],valu:[4,6,12,14,15,17,22,23,26,27,28,29,30],variabl:14,variou:[2,3,11,12,22,23],vdpu:21,vector:11,vendor:[2,6],vendor_ifd_typ:6,vendor_nam:6,verbos:[2,4,6],verif:[0,2,12,22,23],verifi:[0,2,6,12,15,22,23],verify_certif:[12,22,23],verify_cryptographic_checksum:[12,22,23],verify_digital_signatur:[12,22,23],verlag:3,version:[0,1,2,4,5,6,15,22,23],via:[0,1,2,4,5,6,7,11,15,17,20],vicc:[4,6,7,17,21],virtual:[0,4,5,17],virtualicc:[7,17],virtualsmartcard:[6,7,9,11,12,13,14,15,16,19,20,21,22,23,26,27,28,29,30],visual:[4,6],vletoux:0,volum:3,vpcd:[4,5,7,17,20],vpicc:[7,17],vsmartcard:[0,1,2,3,4,5,6],w64:4,wai:6,wait:[4,6],waldmann:3,walk:14,want:[0,2,3,7],warm:[17,19,20,22],warn:[6,7,26,27,28,29],warn_noinfo63:22,warnclass:[26,27,28,29],wdk:6,web:3,welcom:[0,1,2,4,5,6],well:6,what:[4,7,12,14,22,23],whatev:30,when:[4,5,6,7,26,27,28,29,30],where:[2,4,5,6,7,14],wherea:2,whether:[12,15,17,22,23,26,27,28,29],which:[0,2,4,6,7,11,12,14,17,21,22,26,27,28,29,30],whose:[26,27,28,29],wiki:2,win32:6,window:[2,4,5],winscard:[4,6],wireless:1,wissen:3,with_mark:16,with_traceback:13,without:[0,6,11,26,27,28,29,30],wix:6,wixtoolset:6,wolf:3,word:30,work:[2,4,6,7],workaround:7,workshop:3,write:[14,22],writeand:14,writebinari:[14,22],writebinaryencapsul:[14,22],writebinaryplain:[14,22],writeor:14,writerecord:[14,22],written:[2,4],wudfhost:6,www:[0,2,4,6],x00:11,x01:7,x02:7,x03:7,x04:7,x38:7,x64:6,x82:6,xff:7,xjf:2,xml:[4,6],xor:14,xxx:7,yield:[6,26,27,28,29],ykneo:0,you:[0,1,2,3,4,5,6,7,14,22,26,27,28,29],your:[0,1,2,4,5,6,7],yourself:[3,7],yubico:0,zero:[15,22,23,26,27,28,29],zip:6,zone:23,zum:3,zur:3},titles:["Android Smart Card Emulator","Tizen Smart Card Emulator","USB CCID Emulator","Welcome to the Virtual Smart Card Architecture documentation!","PC/SC Relay","Remote Smart Card Reader","Virtual Smart Card","Creating a Virtual Smart Card","virtualsmartcard Package","CardGenerator Module","ConstantDefinitions Module","CryptoUtils Module","SEutils Module","SWutils Module","SmartcardFilesystem Module","SmartcardSAM Module","TLVutils Module","VirtualSmartcard Module","cards Package","HandlerTest Module","Relay Module","RelayMiddleman Module","cryptoflex Module","ePass Module","nPA Module","tests Package","CardGenerator_test Module","CryptoUtils_test Module","SmartcardSAM_test Module","utils_test Module","utils Module"],titleterms:{"7816":7,Use:[0,1,5],Using:6,android:[0,4,5],architectur:3,build:6,card:[0,1,2,3,4,5,6,7,18],cardgener:9,cardgenerator_test:26,ccid:2,compliant:2,configur:6,constantdefinit:10,contact:[0,1,5],contactless:4,creat:7,cryptoflex:22,cryptoutil:11,cryptoutils_test:27,document:3,download:[0,1,2,3,4,5,6],emul:[0,1,2,4,6],epass:23,exampl:7,gadgetf:2,handlertest:19,hint:[2,4],implement:7,instal:[0,1,2,4,5,6],interfac:4,iso:7,less:[0,1,5],libnfc:4,like:7,linux:[2,4,6],mac:6,middlewar:4,modul:[9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,26,27,28,29,30],note:[0,1,2,4,5,6],npa:24,other:7,packag:[8,18,25],phone:[0,5],python:6,question:[0,1,2,4,5,6],reader:[2,5],refer:[0,1,2,3,4,5,6],relai:[4,20],relaymiddleman:21,remot:5,run:6,seutil:12,similar:[2,4,6],smart:[0,1,2,3,4,5,6,7],smartcardfilesystem:14,smartcardsam:15,smartcardsam_test:28,smartwatch:1,swutil:13,test:25,tizen:1,tlvutil:16,type:7,unix:[2,4,6],usag:[2,4],usb:2,util:30,utils_test:29,virtual:[3,6,7],virtualsmartcard:[8,17],vpcd:6,vpicc:6,welcom:3,window:6,written:6}}) \ No newline at end of file +Search.setIndex({docnames:["ACardEmulator/README","TCardEmulator/README","ccid/README","index","pcsc-relay/README","remote-reader/README","virtualsmartcard/README","virtualsmartcard/api","virtualsmartcard/api/virtualsmartcard","virtualsmartcard/api/virtualsmartcard.CardGenerator","virtualsmartcard/api/virtualsmartcard.ConstantDefinitions","virtualsmartcard/api/virtualsmartcard.CryptoUtils","virtualsmartcard/api/virtualsmartcard.SEutils","virtualsmartcard/api/virtualsmartcard.SWutils","virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem","virtualsmartcard/api/virtualsmartcard.SmartcardSAM","virtualsmartcard/api/virtualsmartcard.TLVutils","virtualsmartcard/api/virtualsmartcard.VirtualSmartcard","virtualsmartcard/api/virtualsmartcard.cards","virtualsmartcard/api/virtualsmartcard.cards.cryptoflex","virtualsmartcard/api/virtualsmartcard.cards.ePass","virtualsmartcard/api/virtualsmartcard.cards.nPA","virtualsmartcard/api/virtualsmartcard.utils"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinxcontrib.bibtex":7,sphinx:56},filenames:["ACardEmulator/README.txt","TCardEmulator/README.txt","ccid/README.txt","index.txt","pcsc-relay/README.txt","remote-reader/README.txt","virtualsmartcard/README.txt","virtualsmartcard/api.txt","virtualsmartcard/api/virtualsmartcard.txt","virtualsmartcard/api/virtualsmartcard.CardGenerator.txt","virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.txt","virtualsmartcard/api/virtualsmartcard.CryptoUtils.txt","virtualsmartcard/api/virtualsmartcard.SEutils.txt","virtualsmartcard/api/virtualsmartcard.SWutils.txt","virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.txt","virtualsmartcard/api/virtualsmartcard.SmartcardSAM.txt","virtualsmartcard/api/virtualsmartcard.TLVutils.txt","virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.txt","virtualsmartcard/api/virtualsmartcard.cards.txt","virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.txt","virtualsmartcard/api/virtualsmartcard.cards.ePass.txt","virtualsmartcard/api/virtualsmartcard.cards.nPA.txt","virtualsmartcard/api/virtualsmartcard.utils.txt"],objects:{"virtualsmartcard.CardGenerator":{CardGenerator:[9,1,1,""]},"virtualsmartcard.CardGenerator.CardGenerator":{__generate_cryptoflex:[9,2,1,""],__generate_ePass:[9,2,1,""],__generate_iso_card:[9,2,1,""],__generate_nPA:[9,2,1,""],generateCard:[9,2,1,""],getCard:[9,2,1,""],readDatagroups:[9,2,1,""],setCard:[9,2,1,""]},"virtualsmartcard.CryptoUtils":{_makesalt:[11,3,1,""],append_padding:[11,3,1,""],calculate_MAC:[11,3,1,""],cipher:[11,3,1,""],crypto_checksum:[11,3,1,""],decrypt:[11,3,1,""],encrypt:[11,3,1,""],get_cipher:[11,3,1,""],get_cipher_blocklen:[11,3,1,""],get_cipher_keylen:[11,3,1,""],hash:[11,3,1,""],operation_on_string:[11,3,1,""],strip_padding:[11,3,1,""]},"virtualsmartcard.SEutils":{ControlReferenceTemplate:[12,1,1,""],Security_Environment:[12,1,1,""]},"virtualsmartcard.SEutils.ControlReferenceTemplate":{__replace_tag:[12,2,1,""],__set_algo:[12,2,1,""],__set_iv:[12,2,1,""],__set_key:[12,2,1,""],parse_SE_config:[12,2,1,""],to_string:[12,2,1,""]},"virtualsmartcard.SEutils.Security_Environment":{_set_SE:[12,2,1,""],compute_cryptographic_checksum:[12,2,1,""],compute_digital_signature:[12,2,1,""],decipher:[12,2,1,""],encipher:[12,2,1,""],generate_public_key_pair:[12,2,1,""],hash:[12,2,1,""],manage_security_environment:[12,2,1,""],parse_SM_CAPDU:[12,2,1,""],perform_security_operation:[12,2,1,""],protect_response:[12,2,1,""],verify_certificate:[12,2,1,""],verify_cryptographic_checksum:[12,2,1,""],verify_digital_signature:[12,2,1,""]},"virtualsmartcard.SWutils":{SwError:[13,4,1,""]},"virtualsmartcard.SWutils.SwError":{args:[13,5,1,""],with_traceback:[13,2,1,""]},"virtualsmartcard.SmartcardFilesystem":{DF:[14,1,1,""],EF:[14,1,1,""],File:[14,1,1,""],MF:[14,1,1,""],Record:[14,1,1,""],RecordStructureEF:[14,1,1,""],TransparentStructureEF:[14,1,1,""],get_indexes:[14,3,1,""],getfile_byrefdataobj:[14,3,1,""],isEqual:[14,3,1,""],make_property:[14,3,1,""],prettyprint_anything:[14,3,1,""],walk:[14,3,1,""],write:[14,3,1,""]},"virtualsmartcard.SmartcardFilesystem.DF":{append:[14,2,1,""],appendrecord:[14,2,1,""],bertlv_data:[14,2,1,""],content:[14,2,1,""],data:[14,2,1,""],decrypt:[14,2,1,""],dfname:[14,2,1,""],encrypt:[14,2,1,""],erasebinary:[14,2,1,""],fid:[14,2,1,""],filedescriptor:[14,2,1,""],getMF:[14,2,1,""],getdata:[14,2,1,""],getpath:[14,2,1,""],lifecycle:[14,2,1,""],parent:[14,2,1,""],putdata:[14,2,1,""],readbinary:[14,2,1,""],readrecord:[14,2,1,""],remove:[14,2,1,""],select:[14,2,1,""],simpletlv_data:[14,2,1,""],updatebinary:[14,2,1,""],updaterecord:[14,2,1,""],writebinary:[14,2,1,""],writerecord:[14,2,1,""]},"virtualsmartcard.SmartcardFilesystem.EF":{appendrecord:[14,2,1,""],bertlv_data:[14,2,1,""],datacoding:[14,2,1,""],decrypt:[14,2,1,""],encrypt:[14,2,1,""],erasebinary:[14,2,1,""],fid:[14,2,1,""],filedescriptor:[14,2,1,""],getMF:[14,2,1,""],getdata:[14,2,1,""],getpath:[14,2,1,""],lifecycle:[14,2,1,""],parent:[14,2,1,""],putdata:[14,2,1,""],readbinary:[14,2,1,""],readrecord:[14,2,1,""],select:[14,2,1,""],shortfid:[14,2,1,""],simpletlv_data:[14,2,1,""],updatebinary:[14,2,1,""],updaterecord:[14,2,1,""],writebinary:[14,2,1,""],writerecord:[14,2,1,""]},"virtualsmartcard.SmartcardFilesystem.File":{appendrecord:[14,2,1,""],bertlv_data:[14,2,1,""],decrypt:[14,2,1,""],encrypt:[14,2,1,""],erasebinary:[14,2,1,""],fid:[14,2,1,""],filedescriptor:[14,2,1,""],getMF:[14,2,1,""],getdata:[14,2,1,""],getpath:[14,2,1,""],lifecycle:[14,2,1,""],parent:[14,2,1,""],putdata:[14,2,1,""],readbinary:[14,2,1,""],readrecord:[14,2,1,""],select:[14,2,1,""],simpletlv_data:[14,2,1,""],updatebinary:[14,2,1,""],updaterecord:[14,2,1,""],writebinary:[14,2,1,""],writerecord:[14,2,1,""]},"virtualsmartcard.SmartcardFilesystem.MF":{_selectFile:[14,2,1,""],append:[14,2,1,""],appendRecord:[14,2,1,""],appendrecord:[14,2,1,""],bertlv_data:[14,2,1,""],content:[14,2,1,""],create:[14,2,1,""],createFile:[14,2,1,""],current:[14,2,1,""],currentDF:[14,2,1,""],currentEF:[14,2,1,""],data:[14,2,1,""],dataObjectHandlingDecodeEncapsulated:[14,2,1,""],dataObjectHandlingDecodePlain:[14,2,1,""],dataUnitsDecodeEncapsulated:[14,2,1,""],dataUnitsDecodePlain:[14,2,1,""],decrypt:[14,2,1,""],deleteFile:[14,2,1,""],dfname:[14,2,1,""],encodeFileControlParameter:[14,2,1,""],encrypt:[14,2,1,""],eraseBinaryEncapsulated:[14,2,1,""],eraseBinaryPlain:[14,2,1,""],eraseRecord:[14,2,1,""],erasebinary:[14,2,1,""],fid:[14,2,1,""],filedescriptor:[14,2,1,""],firstSFT:[14,2,1,""],getDataEncapsulated:[14,2,1,""],getDataPlain:[14,2,1,""],getMF:[14,2,1,""],getdata:[14,2,1,""],getpath:[14,2,1,""],lifecycle:[14,2,1,""],makeFirstSoftwareFunctionTable:[14,2,1,""],makeSecondSoftwareFunctionTable:[14,2,1,""],named_dfs:[14,2,1,""],parent:[14,2,1,""],putDataEncapsulated:[14,2,1,""],putDataPlain:[14,2,1,""],putdata:[14,2,1,""],readBinaryEncapsulated:[14,2,1,""],readBinaryPlain:[14,2,1,""],readRecordEncapsulated:[14,2,1,""],readRecordPlain:[14,2,1,""],readbinary:[14,2,1,""],readrecord:[14,2,1,""],recordHandlingDecode:[14,2,1,""],remove:[14,2,1,""],searchBinaryEncapsulated:[14,2,1,""],searchBinaryPlain:[14,2,1,""],secondSFT:[14,2,1,""],select:[14,2,1,""],selectFile:[14,2,1,""],simpletlv_data:[14,2,1,""],updateBinaryEncapsulated:[14,2,1,""],updateBinaryPlain:[14,2,1,""],updateRecordEncapsulated:[14,2,1,""],updateRecordPlain:[14,2,1,""],updatebinary:[14,2,1,""],updaterecord:[14,2,1,""],writeBinaryEncapsulated:[14,2,1,""],writeBinaryPlain:[14,2,1,""],writeRecord:[14,2,1,""],writebinary:[14,2,1,""],writerecord:[14,2,1,""]},"virtualsmartcard.SmartcardFilesystem.Record":{data:[14,2,1,""],identifier:[14,2,1,""]},"virtualsmartcard.SmartcardFilesystem.RecordStructureEF":{__getRecords:[14,2,1,""],__getRecordsByIdentifier:[14,2,1,""],__getRecordsByNumber:[14,2,1,""],appendrecord:[14,2,1,""],bertlv_data:[14,2,1,""],datacoding:[14,2,1,""],decrypt:[14,2,1,""],encrypt:[14,2,1,""],erasebinary:[14,2,1,""],eraserecord:[14,2,1,""],fid:[14,2,1,""],filedescriptor:[14,2,1,""],getMF:[14,2,1,""],getdata:[14,2,1,""],getpath:[14,2,1,""],hasFixedRecordSize:[14,2,1,""],hasSimpleTlv:[14,2,1,""],isCyclic:[14,2,1,""],lifecycle:[14,2,1,""],maxrecordsize:[14,2,1,""],parent:[14,2,1,""],putdata:[14,2,1,""],readbinary:[14,2,1,""],readrecord:[14,2,1,""],recordpointer:[14,2,1,""],records:[14,2,1,""],resetRecordPointer:[14,2,1,""],select:[14,2,1,""],shortfid:[14,2,1,""],simpletlv_data:[14,2,1,""],updatebinary:[14,2,1,""],updaterecord:[14,2,1,""],writebinary:[14,2,1,""],writerecord:[14,2,1,""]},"virtualsmartcard.SmartcardFilesystem.TransparentStructureEF":{appendrecord:[14,2,1,""],bertlv_data:[14,2,1,""],data:[14,2,1,""],datacoding:[14,2,1,""],decrypt:[14,2,1,""],encrypt:[14,2,1,""],erasebinary:[14,2,1,""],fid:[14,2,1,""],filedescriptor:[14,2,1,""],getMF:[14,2,1,""],getdata:[14,2,1,""],getpath:[14,2,1,""],lifecycle:[14,2,1,""],parent:[14,2,1,""],putdata:[14,2,1,""],readbinary:[14,2,1,""],readrecord:[14,2,1,""],select:[14,2,1,""],shortfid:[14,2,1,""],simpletlv_data:[14,2,1,""],updatebinary:[14,2,1,""],updaterecord:[14,2,1,""],writebinary:[14,2,1,""],writerecord:[14,2,1,""]},"virtualsmartcard.SmartcardSAM":{SAM:[15,1,1,""],get_referenced_cipher:[15,3,1,""]},"virtualsmartcard.SmartcardSAM.SAM":{FSdecrypt:[15,2,1,""],FSencrypt:[15,2,1,""],_get_referenced_key:[15,2,1,""],change_reference_data:[15,2,1,""],erase_SE:[15,2,1,""],external_authenticate:[15,2,1,""],generate_public_key_pair:[15,2,1,""],get_card_number:[15,2,1,""],get_challenge:[15,2,1,""],internal_authenticate:[15,2,1,""],manage_security_environment:[15,2,1,""],mutual_authenticate:[15,2,1,""],parse_SM_CAPDU:[15,2,1,""],perform_security_operation:[15,2,1,""],protect_result:[15,2,1,""],restore_SE:[15,2,1,""],set_MF:[15,2,1,""],set_asym_algorithm:[15,2,1,""],store_SE:[15,2,1,""],verify:[15,2,1,""]},"virtualsmartcard.TLVutils":{bertlv_pack:[16,3,1,""],bertlv_unpack:[16,3,1,""],decodeDiscretionaryDataObjects:[16,3,1,""],decodeExtendedHeaderList:[16,3,1,""],decodeHeaderList:[16,3,1,""],decodeOffsetDataObjects:[16,3,1,""],decodeTagList:[16,3,1,""],encodeDataOffsetObjects:[16,3,1,""],encodeDiscretionaryDataObjects:[16,3,1,""],encodebertlvDatalist:[16,3,1,""],pack:[16,3,1,""],simpletlv_pack:[16,3,1,""],simpletlv_unpack:[16,3,1,""],tlv_find_tag:[16,3,1,""],tlv_find_tags:[16,3,1,""],tlv_unpack:[16,3,1,""],unpack:[16,3,1,""]},"virtualsmartcard.VirtualSmartcard":{Iso7816OS:[17,1,1,""],SmartcardOS:[17,1,1,""],VirtualICC:[17,1,1,""],loadMitMFromPath:[17,3,1,""]},"virtualsmartcard.VirtualSmartcard.Iso7816OS":{SAM:[17,2,1,""],execute:[17,2,1,""],formatResult:[17,2,1,""],getATR:[17,2,1,""],getResponse:[17,2,1,""],makeATR:[17,2,1,""],makeThirdSoftwareFunctionTable:[17,2,1,""],mf:[17,2,1,""],powerDown:[17,2,1,""],powerUp:[17,2,1,""],reset:[17,2,1,""],seekable:[17,2,1,""]},"virtualsmartcard.VirtualSmartcard.SmartcardOS":{execute:[17,2,1,""],getATR:[17,2,1,""],powerDown:[17,2,1,""],powerUp:[17,2,1,""],reset:[17,2,1,""]},"virtualsmartcard.VirtualSmartcard.VirtualICC":{__recvFromVPICC:[17,2,1,""],__sendToVPICC:[17,2,1,""],connectToPort:[17,2,1,""],openPort:[17,2,1,""],run:[17,2,1,""],stop:[17,2,1,""]},"virtualsmartcard.cards":{cryptoflex:[19,0,0,"-"],ePass:[20,0,0,"-"]},"virtualsmartcard.cards.cryptoflex":{CryptoflexMF:[19,1,1,""],CryptoflexOS:[19,1,1,""],CryptoflexSAM:[19,1,1,""],CryptoflexSE:[19,1,1,""]},"virtualsmartcard.cards.cryptoflex.CryptoflexMF":{_selectFile:[19,2,1,""],append:[19,2,1,""],appendRecord:[19,2,1,""],appendrecord:[19,2,1,""],bertlv_data:[19,2,1,""],content:[19,2,1,""],create:[19,2,1,""],createFile:[19,2,1,""],current:[19,2,1,""],currentDF:[19,2,1,""],currentEF:[19,2,1,""],data:[19,2,1,""],dataObjectHandlingDecodeEncapsulated:[19,2,1,""],dataObjectHandlingDecodePlain:[19,2,1,""],dataUnitsDecodeEncapsulated:[19,2,1,""],dataUnitsDecodePlain:[19,2,1,""],decrypt:[19,2,1,""],deleteFile:[19,2,1,""],dfname:[19,2,1,""],encodeFileControlParameter:[19,2,1,""],encrypt:[19,2,1,""],eraseBinaryEncapsulated:[19,2,1,""],eraseBinaryPlain:[19,2,1,""],eraseRecord:[19,2,1,""],erasebinary:[19,2,1,""],fid:[19,2,1,""],filedescriptor:[19,2,1,""],firstSFT:[19,2,1,""],getDataEncapsulated:[19,2,1,""],getDataPlain:[19,2,1,""],getMF:[19,2,1,""],getdata:[19,2,1,""],getpath:[19,2,1,""],lifecycle:[19,2,1,""],makeFirstSoftwareFunctionTable:[19,2,1,""],makeSecondSoftwareFunctionTable:[19,2,1,""],named_dfs:[19,2,1,""],parent:[19,2,1,""],putDataEncapsulated:[19,2,1,""],putDataPlain:[19,2,1,""],putdata:[19,2,1,""],readBinaryEncapsulated:[19,2,1,""],readBinaryPlain:[19,2,1,""],readRecordEncapsulated:[19,2,1,""],readRecordPlain:[19,2,1,""],readbinary:[19,2,1,""],readrecord:[19,2,1,""],recordHandlingDecode:[19,2,1,""],remove:[19,2,1,""],searchBinaryEncapsulated:[19,2,1,""],searchBinaryPlain:[19,2,1,""],secondSFT:[19,2,1,""],select:[19,2,1,""],selectFile:[19,2,1,""],simpletlv_data:[19,2,1,""],updateBinaryEncapsulated:[19,2,1,""],updateBinaryPlain:[19,2,1,""],updateRecordEncapsulated:[19,2,1,""],updateRecordPlain:[19,2,1,""],updatebinary:[19,2,1,""],updaterecord:[19,2,1,""],writeBinaryEncapsulated:[19,2,1,""],writeBinaryPlain:[19,2,1,""],writeRecord:[19,2,1,""],writebinary:[19,2,1,""],writerecord:[19,2,1,""]},"virtualsmartcard.cards.cryptoflex.CryptoflexOS":{SAM:[19,2,1,""],execute:[19,2,1,""],formatResult:[19,2,1,""],getATR:[19,2,1,""],getResponse:[19,2,1,""],makeATR:[19,2,1,""],makeThirdSoftwareFunctionTable:[19,2,1,""],mf:[19,2,1,""],powerDown:[19,2,1,""],powerUp:[19,2,1,""],reset:[19,2,1,""],seekable:[19,2,1,""]},"virtualsmartcard.cards.cryptoflex.CryptoflexSAM":{FSdecrypt:[19,2,1,""],FSencrypt:[19,2,1,""],_get_referenced_key:[19,2,1,""],change_reference_data:[19,2,1,""],erase_SE:[19,2,1,""],external_authenticate:[19,2,1,""],generate_public_key_pair:[19,2,1,""],get_card_number:[19,2,1,""],get_challenge:[19,2,1,""],internal_authenticate:[19,2,1,""],manage_security_environment:[19,2,1,""],mutual_authenticate:[19,2,1,""],parse_SM_CAPDU:[19,2,1,""],perform_security_operation:[19,2,1,""],pezorform_security_operation:[19,2,1,""],protect_result:[19,2,1,""],restore_SE:[19,2,1,""],set_MF:[19,2,1,""],set_asym_algorithm:[19,2,1,""],store_SE:[19,2,1,""],verify:[19,2,1,""]},"virtualsmartcard.cards.cryptoflex.CryptoflexSE":{_set_SE:[19,2,1,""],compute_cryptographic_checksum:[19,2,1,""],compute_digital_signature:[19,2,1,""],decipher:[19,2,1,""],encipher:[19,2,1,""],generate_public_key_pair:[19,2,1,""],hash:[19,2,1,""],manage_security_environment:[19,2,1,""],parse_SM_CAPDU:[19,2,1,""],perform_security_operation:[19,2,1,""],protect_response:[19,2,1,""],verify_certificate:[19,2,1,""],verify_cryptographic_checksum:[19,2,1,""],verify_digital_signature:[19,2,1,""]},"virtualsmartcard.cards.ePass":{PassportSAM:[20,1,1,""],ePass_SE:[20,1,1,""]},"virtualsmartcard.cards.ePass.PassportSAM":{FSdecrypt:[20,2,1,""],FSencrypt:[20,2,1,""],__computeKeys:[20,2,1,""],_get_referenced_key:[20,2,1,""],change_reference_data:[20,2,1,""],derive_key:[20,2,1,""],erase_SE:[20,2,1,""],external_authenticate:[20,2,1,""],generate_public_key_pair:[20,2,1,""],get_card_number:[20,2,1,""],get_challenge:[20,2,1,""],internal_authenticate:[20,2,1,""],manage_security_environment:[20,2,1,""],mutual_authenticate:[20,2,1,""],parse_SM_CAPDU:[20,2,1,""],perform_security_operation:[20,2,1,""],protect_result:[20,2,1,""],restore_SE:[20,2,1,""],set_MF:[20,2,1,""],set_asym_algorithm:[20,2,1,""],store_SE:[20,2,1,""],verify:[20,2,1,""]},"virtualsmartcard.cards.ePass.ePass_SE":{_set_SE:[20,2,1,""],compute_cryptographic_checksum:[20,2,1,""],compute_digital_signature:[20,2,1,""],decipher:[20,2,1,""],encipher:[20,2,1,""],generate_public_key_pair:[20,2,1,""],hash:[20,2,1,""],manage_security_environment:[20,2,1,""],parse_SM_CAPDU:[20,2,1,""],perform_security_operation:[20,2,1,""],protect_response:[20,2,1,""],verify_certificate:[20,2,1,""],verify_cryptographic_checksum:[20,2,1,""],verify_digital_signature:[20,2,1,""]},"virtualsmartcard.utils":{APDU:[22,1,1,""],C_APDU:[22,1,1,""],R_APDU:[22,1,1,""],_make_byte_property:[22,3,1,""],hexdump:[22,3,1,""],inttostring:[22,3,1,""],stringtoint:[22,3,1,""]},"virtualsmartcard.utils.APDU":{_deldata:[22,2,1,""],_format_parts:[22,2,1,""],_getdata:[22,2,1,""],_setbyte:[22,2,1,""],_setdata:[22,2,1,""],data:[22,2,1,""]},"virtualsmartcard.utils.C_APDU":{"case":[22,2,1,""],CLA:[22,2,1,""],INS:[22,2,1,""],Lc:[22,2,1,""],Le:[22,2,1,""],P1:[22,2,1,""],P2:[22,2,1,""],_deldata:[22,2,1,""],_format_fields:[22,2,1,""],_format_parts:[22,2,1,""],_getdata:[22,2,1,""],_setbyte:[22,2,1,""],_setdata:[22,2,1,""],cla:[22,2,1,""],data:[22,2,1,""],effective_Le:[22,2,1,""],ins:[22,2,1,""],lc:[22,2,1,""],le:[22,2,1,""],p1:[22,2,1,""],p2:[22,2,1,""],parse:[22,2,1,""],render:[22,2,1,""]},"virtualsmartcard.utils.R_APDU":{SW1:[22,2,1,""],SW2:[22,2,1,""],SW:[22,2,1,""],_deldata:[22,2,1,""],_format_fields:[22,2,1,""],_format_parts:[22,2,1,""],_getdata:[22,2,1,""],_getsw:[22,2,1,""],_setbyte:[22,2,1,""],_setdata:[22,2,1,""],_setsw:[22,2,1,""],data:[22,2,1,""],parse:[22,2,1,""],render:[22,2,1,""],sw1:[22,2,1,""],sw2:[22,2,1,""],sw:[22,2,1,""]},virtualsmartcard:{CardGenerator:[9,0,0,"-"],ConstantDefinitions:[10,0,0,"-"],CryptoUtils:[11,0,0,"-"],SEutils:[12,0,0,"-"],SWutils:[13,0,0,"-"],SmartcardFilesystem:[14,0,0,"-"],SmartcardSAM:[15,0,0,"-"],TLVutils:[16,0,0,"-"],VirtualSmartcard:[17,0,0,"-"],utils:[22,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"],"4":["py","exception","Python exception"],"5":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function","4":"py:exception","5":"py:attribute"},terms:{"0000":[12,20,22],"03119":2,"05_":3,"07_":3,"0x00":[7,12,20],"0x00000000":6,"0x00000001":6,"0x01":[2,7],"0x02":[2,7],"0x03":2,"0x04":[2,7],"0x0c":[14,19],"0x0d46":2,"0x0e":[14,19],"0x0f":[14,19],"0x10":2,"0x18d1":6,"0x3010":2,"0x40":19,"0x4ee1":6,"0x60":19,"0x80":[12,19,20],"0x8c7b":[6,7],"0x8e":[12,19,20],"0x9000":2,"0x9a":[2,12,19,20],"0x9e":[12,19,20],"0xa4":[7,14,19],"0xac":[12,19,20],"0xb0":[14,19],"0xb1":[14,19],"0xb2":[14,19],"0xb3":[14,19],"0xbc":[12,19,20],"0xca":[14,19],"0xcb":[14,19],"0xd0":[14,19],"0xd1":[14,19],"0xd2":[14,19],"0xd6":[14,19],"0xd7":[14,19],"0xda":[14,19],"0xdb":[14,19],"0xdc":[14,19],"0xdd":[14,19],"0xe0":[14,19],"0xe2":[14,19],"0xe4":[14,19],"0xff":[2,7,17,19],"0xxx":7,"1007":3,"1024":19,"107":3,"134010":6,"14443":4,"179":3,"188":3,"2010":3,"2011":3,"2012":3,"2019":6,"256":19,"27c3":3,"27th":3,"3083254":7,"3083586":7,"33392":3,"35963":[4,6],"35964":6,"3b80800101":4,"3uto6908061f9406236ze184226b":6,"4297":3,"512":19,"642":3,"65535":14,"7816":[0,6,12,17,19,20],"78166":7,"7_3":3,"978":3,"byte":[7,12,14,15,17,19,20,22],"case":[2,4,6,7,19,22],"class":[6,7,9,12,14,15,17,19,20,22],"default":[2,4,6],"enum":4,"f\u00fcr":3,"function":[3,7,11,14,15,17,19,20,22],"import":[1,6,7],"int":[2,4],"long":[4,7,14,19],"m\u00fcller":3,"new":[2,3,6,7,9,12,14,19,20],"null":6,"pl\u00f6tz":6,"public":[3,6,12,15,19,20],"return":[0,7,11,12,13,14,15,16,17,19,20,22],"short":[14,22],"static":[2,14,17,19,20],"switch":[2,6,12,19,20],"throw":7,"true":[14,19,22],"try":[3,7],"universit\u00e4t":3,"while":7,Bus:2,But:[6,7],DFs:[14,19],DGs:6,For:[5,6,14,19],INS:[2,22],Its:7,Near:1,One:[12,20],QES:6,SWs:7,The:[0,1,2,3,4,5,6,7,11,12,14,15,17,19,20,22],Then:6,There:[7,12],Use:[2,4,6],Used:19,Using:[1,4],Will:7,With:[0,4],__computekei:20,__generate_cryptoflex:9,__generate_epass:9,__generate_iso_card:9,__generate_npa:9,__getrecord:14,__getrecordsbyidentifi:14,__getrecordsbynumb:14,__init__:7,__recvfromvpicc:17,__replace_tag:12,__repr__:22,__sendtovpicc:17,__set_algo:12,__set_iv:12,__set_kei:12,__str__:22,__traceback__:13,_deldata:22,_format_field:22,_format_part:22,_get_referenced_kei:[15,19,20],_getdata:22,_getsw:22,_make_byte_properti:22,_makesalt:11,_selectfil:[14,19],_set_s:[12,19,20],_setbyt:22,_setdata:22,_setsw:22,a0000002471001:6,a000000397425446590201:0,a000000527210101:0,abl:[1,6,9],about:[6,7],abov:6,academictitl:6,acardemul:[0,4],access:[0,2,4,5,6,12,15,17,19,20],accessori:1,accord:[7,12,14,17,19,20],accordingli:6,act:[6,7],activ:4,actual:[4,5,7],add:[2,4,6,7,12],add_data:7,added:[15,19,20],addit:[4,6],addition:[2,4,6],address:6,adjust:[12,20],adress:22,af_inet:7,against:[4,5,6],agreement:[12,19,20],aid:4,aid_list:4,algo:11,algorithm:[11,12,15,19,20],all:[4,5,6,7,12,14,15,16,19,20],allow:[0,1,4,5,6],alreadi:12,also:[0,1,2,4,6,7,9,14,19],altern:[2,3,4,6],although:6,analyz:4,anchor:[6,12,19,20],andrea:3,android:[1,3,6,7],angriff:3,ani:[0,1,2,4,5,6,7,15,19,20],anna:6,annex:20,anoth:2,answer:[17,19],anywai:20,apart:3,apdu:[0,1,2,4,6,7,12,14,15,17,19,20,22],api:[6,7],app:[0,1,4,5,6,7],appear:[2,6],append:[11,12,14,19],append_pad:11,appendrecord:[14,19],appl:6,applet:0,applic:[0,1,2,4,5,6,17],applicationidentifi:[14,19],appropri:[1,12,19,20],apt:[2,6],architectur:6,arg:[7,13,14,17,19,22],argument:6,argz:[14,19],around:4,arrai:6,articl:6,asctim:7,aspect:3,assign:[14,22],assignlogicalchannel:[17,19],associ:[12,20],assum:7,asym:12,atexit:7,atr:[4,7,17,19],attach:[0,1,5],attack:[4,5,7],attempt:6,attribut:[14,19,22],auf:3,authent:[12,15,19,20],authenticate_head:[12,19,20],authentisierung:3,author:6,autodetect:[2,4],automat:[2,6,17,19],autoreconf:[2,4,6],autotool:6,auxiliari:[2,4,6],avail:[0,2,3,4,5,6,7,14,19],avoid:7,bac:6,back:[1,4,7,17],backend:4,bar:5,base:[0,2,4,9,12,13,14,15,17,19,20,22],basic:20,basicconfig:7,basiert:3,been:7,befor:7,begin:[14,19],being:6,below:[4,6],ber:[14,19],berlin:3,bertlv:16,bertlv_data:[14,19],bertlv_pack:16,bertlv_unpack:16,besitz:3,best:[4,7],better:7,between:[0,2,6,17,19],big:[7,12,19,20],bin:6,binari:[6,14,19,22],birthnam:6,bit:[11,14,19],bitmask:[12,19,20],bitstr:[17,19],bix:6,bixvread:6,bixvreaderinstal:6,bleed:[2,4,6],block:[7,11,15,19,20],blocklen:11,bndl:6,bool:[14,17,19],bootstrap:6,both:2,box:2,bring:6,brows:[0,3,5],bsi:2,buffer:7,bug:[2,4,6,7],build:[0,1,2,4,5],building_gadget_usb_modul:2,built:[0,2,4,5,6],bund:2,bundl:6,bz2:2,c_apdu:22,ca_kei:[6,7,17],calcul:[4,11,17,19,20],calculate_mac:11,call:[7,14],camera:[0,5],can:[0,2,3,4,5,6,7,14,19],capabl:[14,17,19],capdu:[12,15,17,19,20],card:[8,9,12,14,15,17,19,20],card_typ:[7,9,17],cardaccess:6,cardconnectionexcept:7,cardgener:[7,8],cardnumb:15,cardsecret:15,cardsecur:6,cardtyp:7,cbc:11,ccc:3,ccid:3,cct:12,cer:6,cert:6,certif:[1,6,12,19,20],certifc:6,certmgr:6,cfbundledevelopmentregion:6,cfbundleexecut:6,cfbundleinfodictionaryvers:6,cfbundlenam:6,cfbundlepackagetyp:6,cfbundlesignatur:6,cfbundlevers:6,challeng:[15,19,20],chang:[2,4,6,15,19,20],change_reference_data:[15,19,20],channelid:6,chao:3,charact:[17,19],check:[2,4,6,7,15,19,20],checksum:[11,12,19,20],chip:6,chipkartenles:3,choic:5,choos:[0,1,4,5,6],chosen:6,chr:7,chv:[15,19,20],cipher:[11,15,19,20],cipherspec:11,citi:6,cla:[2,22],cleanup:7,click:6,client:2,clone:[0,1,2,3,4,5,6],close:7,club:3,code:[0,2,5,6,7,12,14,16,19,20,22],codeproject:6,com:[0,1,2,3,4,5,6,7],combin:[2,4,12],come:7,command:[0,1,2,4,6,7,12,14,15,17,19,20,22],commandchaing:[17,19],commandlin:6,commun:[0,1,3,4,5,6,7,17],communityid:6,compar:19,compat:2,compil:[0,1,2,4,5,6],complet:[4,6,7],complex:7,comput:[0,3,5,6,11,12,19,20],compute_cryptographic_checksum:[12,19,20],compute_digital_signatur:[12,19,20],concern:[3,4,5],conf:[6,7],config:[2,4,5,6,12],configur:[0,2,4,5,7,12],congress:3,connect:[0,1,3,4,5,6,7,17],connector:[4,6],connecttoport:[7,17],consecut:22,constantdefinit:8,contact:[4,6],contactless:0,contain:[6,12,14,15,19,20],content:[7,9,12,14,19,22],context:7,contribut:[0,1,2,4,5,6],control:[12,14,19,20],controlreferencetempl:12,convent:[17,19],copyright:6,core:2,correct:[6,7,14,15,19,20],correctli:[15,19],correspond:[7,15],could:6,counter:[11,15,19,20],counterpart:2,countri:6,cover:[4,6],craft:2,creat:[2,3,6,14,19],createfil:[14,19],critic:7,cross:4,crt:[12,20],crypt:11,crypto_checksum:11,cryptoflex:[6,7,8,9,18],cryptoflexmf:[7,19],cryptoflexo:[7,19],cryptoflexs:19,cryptoflexsam:19,cryptograph:[11,12,19,20],cryptotokenkit:6,cryptoutil:[8,15],curl:6,current:[0,3,4,6,9,11,12,14,15,19,20],currentdf:[14,19],currentef:[14,19],custom:2,custom_url:7,cvca:[6,7,17],cyanogenmod:[0,5],cyberflex:[6,11],cycl:[14,19],cyclic:14,d2760001240102000000000000010000:0,daemon:6,data:[0,2,4,5,6,7,11,12,14,15,16,17,19,20,22],datacod:14,datagroup:9,datagroupnam:6,datagroupvalu:6,datalist:[14,16],dataobjecthandlingdecodeencapsul:[14,19],dataobjecthandlingdecodeplain:[14,19],dataset:[6,7],datasetfil:[6,7,9,17],dataunitsdecodeencapsul:[14,19],dataunitsdecodeplain:[14,19],datefmt:7,dateofbirth:6,dateofexpiri:6,dcb:[14,19],debian:[2,4,6],debug:[4,6],deciph:[12,19,20],decipher:[12,19,20],decive_unit:6,decod:[14,19],decodediscretionarydataobject:16,decodeextendedheaderlist:16,decodeheaderlist:16,decodeoffsetdataobject:16,decodetaglist:16,decor:14,decrement:[15,19,20],decrypt:[11,14,15,19,20],dedic:14,def:7,default_s:15,default_uid:2,defin:[2,15,20],deleg:[0,1,6],deletefil:[14,19],den:3,depend:[0,2,4,5,6,11,14,19,20,22],deploi:[0,1,5],deriv:[7,20],derive_kei:20,des3:11,des:3,describ:6,descriptor:[14,19],design:7,despit:4,destroypacechannel:2,detail:[6,7],detect:5,dev:[2,6],develop:[0,1,4,5],devic:[0,1,2,6],devicenam:6,devices_compatibility_matrix:4,devmgmt:6,dfname:[14,19],dfselectionbyapplication_implicit:[14,19],dfselectionbyfid:[14,19],dfselectionbyfulldfnam:[14,19],dfselectionbypartialdfnam:[14,19],dfselectionbypath:[14,19],dg12:6,dg14:6,dg15:6,dg16:6,dg21:6,dialog:1,dict:6,dictionari:12,die:3,die_gesamte_technik_ist_sich:3,differ:[3,6,7,9,11,12,20],digit:[12,19,20],direct:[17,19],directconvent:[17,19],directli:[4,6],directori:[2,6,7],disabl:6,disable_check:[7,17],disconnect:7,discuss:[4,5],disk:[7,9],dispatch:[15,17],distanc:4,distribut:4,dlitz:6,do_encrypt:11,doc:[6,14],docstr:14,doctyp:6,document:7,documenttyp:6,doe:[4,6,7,20],doi:3,dominik:[3,4],done:[4,7],doubl:6,down:[7,17,19],driver:[2,5,6],droid:[0,5],dsa:[15,19,20],dst:12,dtd:6,dummy_hcd:2,dylib:6,eac:6,each:14,earlier:6,echo:[2,6],edg:[2,4,6],edit:7,editor:3,ef_cardaccess:[6,7,17],ef_cardsecur:[6,7,17],effective_l:22,efstructure_cyclic_nofurtherinfo:7,efstructure_linear_fixed_:7,efstructure_linear_variable_:7,efstructure_transpar:7,eid:3,einem:3,either:[0,12,14,19,20],electron:[0,6],element:6,elementari:14,elif:7,els:7,email:6,emul:[3,7,17],enabl:[2,3,4,6],enciph:[12,19,20],encipher:[12,19,20],encod:[6,7,12],encodebertlvdatalist:16,encodedataoffsetobject:16,encodediscretionarydataobject:16,encodefilecontrolparamet:[14,19],encrypt:[7,9,11,14,15,19,20],end:[12,14,19,20],endian:7,engin:3,english:6,ensur:6,enter:[6,15,19,20],entir:7,entri:2,environ:[4,6,12,15,19,20],epass:[7,8,18],epass_s:20,epassport:20,equal:[14,15,19,20],eras:[12,14,15,19,20],erase_s:[15,19,20],erasebinari:[14,19],erasebinaryencapsul:[14,19],erasebinaryplain:[14,19],erasefrom:14,eraserecord:[14,19],eraseto:14,erik:0,eriknellessen:0,err_incorrectparamet:7,err_wronglength:7,error:[2,7,14,19],erweiterung:3,esign:6,esign_ca_cert:[6,7,17],esign_cert:[6,7,17],esign_kei:[7,17],especi:[4,5],establish:[5,6],establishpacechannel:2,establishpacechannelinput:2,establishpacechanneloutput:2,etc:[6,7],even:[7,14,19],everi:6,exampl:[2,4,6,22],except:[7,13],exe:6,execut:[6,7,17,19],exist:[0,4,7],exit:[2,4,6,7],expect:7,explain:4,explor:6,expon:19,extend:[3,6,7],extended_length:17,extendedl:[17,19],extens:1,extern:[6,12,19,20],external_authent:[15,19,20],extra_fci_data:14,f276a288bcfba69d34f31001:0,fabio:6,fail:7,fals:[6,7,14,16,17,19,22],familynam:6,far:6,fci:[14,19],fdb:7,fdid:[0,5],featur:3,feature_execute_pac:2,feature_modify_pin_direct:2,feature_verify_pin_direct:2,feedback:[0,1,2,4,5,6],feel:6,fetch:[0,1,5,7],fid:[7,14,19],field:[1,12,19,20,22],file:[0,2,4,5,6,7,9,14,15,17,19],filedescriptor:[7,14,19],filenam:2,filesystem:[9,15,19,20],fill:9,find:[2,4,6,7,16],firewal:7,first:[6,7,14,19],firstsft:[14,19],firstsoftwar:[14,19],fix:14,fmd:[14,19],focu:6,follow:[0,2,3,4,5,6,7,14,19],foreground:4,form:[4,9,11,15,19,20],format:7,formatresult:[7,17,19],forwar:4,forward:[2,7,17],forwared:2,foss:3,fragment:2,framework:6,frank:[2,3,4],frankmorgn:[0,1,2,3,4,5,6],fraunhof:3,free:6,freerunn:2,friendlynam:6,from:[0,1,2,3,4,5,6,7,9,12,14,15,17,19,20],fsdecrypt:[15,19,20],fsencrypt:[15,19,20],fukuchi:6,full:[4,5,22],futur:[15,19,20],g_ether:2,gadget:2,gear:1,gener:[0,2,4,5,6,7,9,11,12,14,15,19,20,22],generate_public_key_pair:[12,15,19,20],generatecard:9,german:[0,2,4,5,6],gertrud:6,gesamt:3,get:[2,4,6,7,9,14,19],get_card_numb:[15,19,20],get_challeng:[15,19,20],get_ciph:11,get_cipher_blocklen:11,get_cipher_keylen:11,get_index:14,get_referenced_ciph:15,getatr:[7,17,19],getcard:[7,9],getdata:[14,19],getdataencapsul:[14,19],getdataplain:[14,19],getfile_byrefdataobj:14,getmf:[14,19],getpath:[14,19],getreaderpacecap:2,getrespons:[17,19],getsocknam:7,gg487509:2,gid:0,gidsapplet:0,giovanni:3,git:[0,1,2,3,4,5,6],github:[0,1,2,3,4,5,6],give:[6,7],given:[4,7,12,14,15,16,17,19,20],givennam:6,global:[12,15,19,20],gmail:2,gnu:[2,4,6],gpl:[0,1,2,4,5,6],group:[6,7],guess:6,gui:6,guid:[1,3,6],guidelin:1,guidelines_on_connecting_gears2_device_using_wifi_151222:1,handi:3,handl:[3,7,14,19],handleinpdu:7,handleoutpdu:7,handler_test:[6,7],handlertest:7,handlertesto:7,hardwar:[0,2,4,5,6],has:[0,2,4,5,7,14,19],hasfixedrecords:14,hash:[11,12,19,20],hashmap:15,hashmethod:11,hassimpletlv:14,have:[0,1,2,3,4,5,6,7],hce:[0,1],header:[2,4,12,19,20],header_authent:[15,19,20],headless:1,heidelberg:3,help:[2,4,6],henryk:6,here:[2,3,4,6,7],hexdump:22,histchar:[17,19],histor:[14,17,19],hmac:11,holder:6,honor:14,hook:7,host:[0,2,4,5,6,7,17],hostnam:[4,6,7],how:[2,4,7],html:[0,1,2,3,5,6],http:[0,1,2,3,4,5,6,7],humboldt:3,icao:[9,11,20],icc:20,ident:[0,6],identifi:[0,4,14,15,19,20],identifier_first:14,identifier_last:14,identifier_next:14,identifier_previ:14,iec:4,ifd:6,ifdcap:6,ifdfriendlynam:6,ifdmanufacturerstr:6,ifdproductid:6,ifdproductstr:6,ifdprotocolsupport:6,ifdread:6,ifdvendorid:6,ifdversionnumb:6,imag:6,impact:[4,5],implement:[0,2,6,12,19,20],implicitli:7,importerror:7,inact:6,includ:[0,1,3,4,6,7,12,15,19,20],include_fil:16,incom:[4,6],incomplet:6,indent:[14,22],index:[4,14,15,19],index_curr:[14,19],index_htm:2,indic:[12,19,20],info:[2,6,7],infoplist:6,inform:[3,12,14,15,19,20],informat:3,informatik:3,informationstechnologi:3,ini:6,init:[0,2,4,6],initi:[0,1,2,6,7,11,12,14,20],inpterpret:7,input:11,ins2handl:[17,19],ins:[7,17,19,22],insert:4,insight:7,insmod:2,inspect:6,instanc:[14,16],instead:[0,6,22],institut:3,instruct:[14,19],integ:[14,19],integr:6,interact:[6,9],interfac:[0,2,5,6,17,19],intermediari:2,intern:[12,15,19,20],internal_authent:[15,19,20],internet:6,interrupt:2,inttostr:[7,22],invalid:[6,7,15,19,20],invers:[17,19],invok:[12,19,20],involv:14,ioanni:3,iscycl:14,isequ:14,isinst:7,iso7816:[6,7],iso7816o:[7,17,19],iso:[0,4,6,12,17,19,20,22],isoapplet:0,issimpletlv:[14,19],issu:[2,4,6],issuingst:6,ist:3,item:14,its:[2,4,6,7,12,14,19,20],itself:7,java:0,jcardsim:0,jen:3,join:7,jump:6,kdir:2,kei:[6,7,11,12,15,19,20],kernel:2,keycard:0,keytyp:[15,19,20],killal:6,kind:[0,1,2,4,5,6,12,19,20],kitkat:[0,5],know:[6,7],knowledg:7,krontiri:3,kwarg:22,l898902c:6,last:[11,14,19],lastcommandoffcut:7,lastcommandsw:7,later:[2,4,6,7,19],latest:[2,3,4,6],layer:6,lead:6,learn:6,least:6,lectur:3,len:[7,17,19],len_extend:22,length:[7,11,12,14,16,19,22],less:[4,6],let:7,level:7,levelnam:7,lian:3,lib:[2,4,6],libccid:2,libeac:6,libexec:6,libifdvpcd:6,libopensc:2,libpath:6,libpcsclit:6,libqrencod:6,librari:[3,6],libtool:[2,4,6],licens:[0,1,2,4,5,6],life:[14,19],lifecycl:[14,19],like:[2,4,6],line:[2,6,22],linelen:22,link:[2,6],linuxtag:3,list:[2,4,6,7,14,16,19],listen:4,listread:7,lite:[4,6],littl:7,load:[2,6,7],loadmitmfrompath:[7,17],local:[2,6],local_ip:7,localhost:6,localmachin:6,locat:[3,4],log:[6,7],logginglevel:[7,17],logic:14,look:[0,2,3,4,6,7,14],loop:17,lost:7,mac:[11,12,19,20],machin:[2,6,20],maco:6,magic:7,mai:[0,1,4,6,11,12,15,19,20],mail:6,main:[4,6,7,17],maintain:17,make:[2,4,6,22],make_properti:14,makeatr:[17,19],makefil:2,makefirstsoftwarefunctiont:[14,19],makesecondsoftwarefunctiont:[14,19],makethirdsoftwarefunctiont:[17,19],man:6,manag:[6,7],manage_security_environ:[12,15,19,20],mani:16,manipul:[12,19,20],manual:[0,1,5],map:[7,19],marix:6,mass:6,master:[3,14,15,17,19],match:[4,6,14],max:[11,17,19],maximum:[14,15,19,20],maximumchannel:[17,19],maxl:[7,19],maxrecords:[7,14],maxsiz:14,mayb:2,mean:[6,7,11,12,15,17,19,20],mechan:[12,19,20],media:3,memori:[15,19,20],messag:[6,7,11,12,15,17,19,20],meta:22,method:[9,12,15,19,20],microsoft:[2,4,6],middl:6,middlewar:2,might:[7,15,19,20],min:7,mingw:4,miss:[2,4,6],mitm:[6,7],mitmpath:[7,17],mkdir:2,mmc:6,mmo11:3,mo10:3,mobil:[2,3],mobilen:3,mode:[2,4,5,6,7,11,12,15],modern:[2,4],modif:[2,7],modifi:[2,4,7,12],modprob:2,modul:[2,4,6,8,18],momr12:3,mor12:3,more:[0,1,2,4,5,6,7,12,20],morgner:[2,3,4],most:[2,4,7,16],mostli:7,mount:2,mous:6,mrtd:[6,20],mrz:[6,9],msc:6,msdn:2,mse:12,msg:[7,17,19],msi:6,multipl:[2,6,7],must:[2,4,5,6,7,9,11,12,14,19,20],mutual_authent:[15,19,20],mutual_challeng:[15,19,20],name:[4,6,14,19,22],named_df:[14,19],nation:6,nativ:[1,4],necessari:4,need:[0,1,2,4,5,6,7,15,19,20],neither:[14,19],nellesson:0,neo:2,net:[0,6],network:[5,7],neuen:3,new_fil:7,newer:[0,5],newli:14,newlist:14,newtlvlist:[14,19],newvalu:[14,16],next:[1,14,19],nfc:[0,1,3,4,5,6,7],nice:22,nobodi:20,nofurtherinfo:7,none:[7,9,11,14,15,16,17,19,20,22],nor:[14,19],normal:[7,19],normal_rest:7,note:[3,7,14,17,19,20],noth:[12,19,20],notif:2,now:[2,4,6,15,19,20],npa:[0,3,6,7,8,18],npao:7,num_id:14,num_result:16,number:[2,4,6,7,14,15,19,20],numread:6,oath:0,obj:2,object:[7,9,12,14,15,17,19,20,22],occur:[14,19],odd:[14,19],oep10:3,oepen:[3,4],off:[2,7],offer:3,offset:[14,16,19,22],old:[3,14],older:[2,3,4,6],om11:3,omit:[17,19],onc:6,one:[4,5,12,14,19,20,22],onetimewrit:14,onli:[2,4,7,11,14,19,20],open:[0,5,6,7,17],openmoko:[2,4,6],openpac:6,openpcd:4,openpgp:0,openpicc:4,openport:[7,17],opensc:[2,6],openssl:2,oper:[4,11,12,14,19,20],operation_on_str:11,option:[2,4,6,9,11,17,19],ord:7,order:[2,7,12,14,15,19,20],org:[0,1,2,4,5,6],other:[2,5,6,12,15,19,20],otherwis:[4,12,14,19],ottavi:6,our:[0,1,2,3,4,5,6,7,22],out:[2,7],output:6,over:[4,5,6,7],overview:[6,7],overwrit:[7,22],own:[0,1,6],pace:[0,2,6],pacecap:2,pack:16,pad:[11,12,19,20],padding_class:11,pair:[12,20],parallel:6,param:14,paramet:[11,12,14,15,17,19,20],parent:[7,14,19],pariti:20,pars:[7,12,15,19,20,22],parse_se_config:12,parse_sm_capdu:[12,15,19,20],part:[3,6,14],partial:[14,19],pass:[7,17],passport:[0,6,9,11,20],passportsam:20,patch:2,path:[6,7,9,14,15,17,19],pbkdf2:6,pc_to_rdr_secur:2,pc_to_rdr_xfrblock:2,pcd:[6,7,17],pcsc:[0,4,6],pcsc_scan:6,pcscd:[6,7],pcsclite:[4,6],pdf:[1,3],perform:[2,4,6,12,17,19,20],perform_bac:6,perform_security_oper:[12,15,19,20],period:6,permiss:[0,5],persist:9,personalauswei:3,peter:3,pezorform_security_oper:19,phone:[6,7],photo:9,php:4,physic:7,piec:14,pil:6,pin:[0,2,15,19,20],pip:6,pipe:[2,6],pkc:6,pkg:[2,4,6],pkg_config_path:4,pkgconfig:4,pki:20,place:6,placeofbirth:6,plain:[12,15,19,20],platform:[0,1,2,4,5,6],pleas:[0,1,2,4,5,6],plist:6,plug:6,point:14,pointer:14,port:[4,6,7,17],portabl:2,posess:[15,19,20],possibl:[0,2,4,6],power:[7,17,19],powerdown:[7,17,19],powerup:[7,17,19],predic:6,prefix:4,prepend:[11,14,19],present:2,pretend:6,pretti:7,prettyprint_anyth:14,previou:[14,19],previous:[7,12,20],print:[2,4,5,6,7],print_ascii:7,privaci:3,privat:[6,12,15,19,20],probabl:[2,4,6],problem:6,process:[0,1,4],produc:17,product:[2,6],program:[1,3,6,7],programmingguide_accessori:1,project:[0,1,2,3,4,5,6],prompt:9,prop:[14,22],properti:[14,17,19,22],propertylist:6,proprietari:[2,6,14],protect:[0,6,12,15,19,20],protect_respons:[12,19,20],protect_result:[15,19,20],protocol:[0,1,6,7,17,19,20],prove:[15,19,20],provid:[6,7,12,20],pseudo:2,pseudorandom:11,publikationen:2,publish:6,puk:[15,19,20],purpos:4,put:[14,19],putdata:[14,19],putdataencapsul:[14,19],putdataplain:[14,19],pwd:2,pwendland:0,pycryptodom:6,pycryptodomex:6,pypa:6,pypi:6,pyreadlin:6,pyscard:[6,7],python2:6,pythonwar:6,qrcode:7,qrencod:6,qrserver:7,quickli:6,quit:7,r_apdu:[7,22],rais:[7,14,19],random:[2,15,19,20],randomli:6,rapdu:[7,17],raw:[12,19,20],rdr_to_pc_datablock:2,read:[6,7,9,14,19,20],readabl:20,readbinari:[14,19],readbinaryencapsul:[14,19],readbinaryplain:[14,19],readdatagroup:[7,9],reader0:6,reader1:6,reader2:6,reader:[0,1,3,4,6,7],readernum:[7,17],readlin:6,readpass:6,readrecord:[14,19],readrecordencapsul:[14,19],readrecordplain:[14,19],real:[2,4,6,7],realiz:4,recalculate_length:16,receiv:[4,7,17],recent:2,recogn:7,reconnect:7,record:[7,14,19],recordhandlingdecod:[7,14,19],recordidentifiersupport:[14,19],recordnumbersupport:[14,19],recordpoint:14,recordstructureef:[7,14,19],recurs:[0,2,4,6,14],redlich:3,ref:14,refdataobj:14,refer:[12,14,15,19,20],referenc:[15,19,20],regard:[14,19],regist:[1,4,6,7],rel:6,relai:[0,3,5,6,7],relaymiddleman:7,relayo:7,releas:[2,3,4,6],religiousartisticnam:6,remot:[0,3,4,6],remotesmartcardread:[0,5],remov:[6,12,14,19,20],render:[7,22],replac:[6,12,14,15,19,20],report:[2,4,6],repositori:[0,2,3,4,5,6],repres:22,represent:14,request:[3,6,7,14],requestedtl:[14,19],requir:[0,2,5,6,7,20],requiremet:6,res:4,research:3,reset:[7,14,15,17,19,20],resetrecordpoint:14,residencepermit1:6,residencepermit2:6,resp_data:20,respect:7,respons:[0,1,2,4,6,7,9,12,14,15,17,19,20,22],respsons:17,ressourc:1,rest:7,restart:6,restor:[12,15,19,20],restore_s:[15,19,20],result:[7,12,14,16,17,19,20],retri:[15,19,20],retriev:[15,19,20],revers:[6,7],rfid:4,rfu:[15,19,20],right:[15,19,20],root:6,routin:6,rpc_type:6,rsa:[15,19,20],run:[0,2,4,5,7,17],runtim:0,russello:3,sai:6,said:7,salt:11,sam:[7,9,12,14,15,17,19,20],same:[6,7],samsung:1,saniti:4,sar:3,save:6,scan:[0,5,7],scanner:5,scardcontrol:2,scardtransmit:2,schmidt:3,scienc:3,script:6,sdk:[0,1,5,6],search:[14,19],searchbinaryencapsul:[14,19],searchbinaryplain:[14,19],second:[14,19],secondsft:[14,19],secondsoftwar:[14,19],secret:[11,15,19,20],section:4,secur:[2,3,6,7,12,15,17,19,20],security_environ:[12,15,19,20],see:[2,4,6,7,14,17,19],seed:20,seekabl:[7,17,19],seid:[12,15,19,20],select:[0,1,4,5,7,11,14,17,19],select_appl:6,selectfil:[14,19],self:[7,13],send:[1,4,7,11,12,17,19,20],sendcommandapdu:7,sent:[4,7],seper:6,sequenc:[11,20],sequenti:14,serial:[2,6],server_sock:7,servic:[1,6],session:7,session_kei:11,set:[4,6,9,12,13,14,17,19,20],set_asym_algorithm:[15,19,20],set_mf:[15,19,20],setcard:9,setter:[15,19,20],settimeout:7,seutil:[8,15,19,20],sever:[2,4,6],sex:6,shall:[6,12,19,20],shell:6,shiguo:3,ship:[2,4,6],shortfid:14,shortfidsupport:[14,19],should:[4,6,7,12,14,19,20],show:6,sicher:3,sicherheitsanalys:3,sigkil:6,sign:[6,12,19,20],signatur:[6,12,19,20],similar:7,simpl:[0,6,7,14,19],simpletlv:16,simpletlv_data:[14,19],simpletlv_pack:16,simpletlv_unpack:16,simpli:[6,7],simul:[0,1],sinc:2,sit:3,six:12,size:[11,14,19],sln:6,slot:6,sm_header:[12,19,20],small:6,smart:17,smartcard:[3,5,6,7,14,17],smartcardfilesystem:[8,19],smartcardo:[7,17,19],smartcardsam:[8,19,20],smartcardservic:6,smartphon:[0,3,5],smartwatch:0,snapshot:2,social:3,sock:7,sock_dgram:7,socket:[0,6,7,17],softwar:[2,4,5,6,7,14,17,19],solut:6,some:[2,3,7],someth:6,sourc:[0,1,2,5,7],sourceforg:[2,4,6,7],space:22,special:[2,5],specif:[7,15,19,20],specifi:[4,6,7,11,12,14,15,16,19,20],specifii:6,springer:3,spsmartcardsdatatyp:6,spusbdatatyp:6,src:[2,4],ssc:[11,20],stabl:6,stack:2,stai:4,standalon:6,standard:[2,4,6,7,20],start:[2,4,6,14],startup:6,state:14,statu:[2,14,19,22],step:6,still:[2,3,4,6],stop:[6,7,17],storag:[6,9],store:[6,12,15,19,20],store_s:[15,19,20],str:7,straight:7,street:6,string1:11,string2:11,string:[2,4,6,7,11,12,14,15,16,17,19,22],stringtoint:[7,22],strip:11,strip_pad:11,structur:[14,16],studio:[0,4,5,6],stuttgart:3,subdir:2,submodul:[0,1,2,4,6],subset:2,subsystem:6,success:[15,19,20],successful:7,successfulli:6,sudo:[2,6],suggest:[0,1,2,4,5,6],suitabl:11,sun:4,support:[2,4,6,9,11,12,19],suppos:6,sure:[6,7],sw1:[2,7,22],sw2:[2,7,22],swerror:[7,13],swutil:8,sym:12,syntax:6,sys:7,sysconfdir:6,system:[2,3,4,5,6,7,15],system_profil:6,systemroot:6,szenario:3,t15:[17,19],tabl:[12,14,17,19,20],tag:[6,12,14,16,19,20],tagungsband:3,tai:[17,19],taj:[17,19],take:[14,15,19,20],taken:6,tar:2,target:6,tbi:[17,19],tbj:[17,19],tcardemul:1,tci:[17,19],tcj:[17,19],tck:[17,19],tcp:[6,14,19],tcp_port:6,tdi:[17,19],tech:1,techdoc:1,technik:3,technischerichtlinien:2,telecommun:3,templat:[7,12,14,19,20],term:6,termin:[0,4,12,15,19,20],test:[0,1,2,4,5],tester:6,text:19,than:[0,1,2,4,5,6],thehistor:[14,19],thei:[6,11,12],them:[0,17],themselv:3,therefor:9,thesi:3,thi:[2,4,5,6,7,9,11,12,14,15,17,19,20,22],thing:[7,14],third:[17,19],those:7,through:[0,2,6],time:[2,4,6,7],tip:1,titl:4,tizen:[0,3],tlv:[12,14,16,19,20],tlv_data:16,tlv_find_tag:16,tlv_unpack:16,tlvutil:8,tmp:4,to_str:12,togeth:[0,4],tool:[1,2,4,6],toolset:6,tr03119:2,tracker:[0,1,2,4,5,6],tradit:[5,6],transmiss:[17,19],transmit:[0,2,4,7],transpar:14,transparentstructureef:[7,14,19],tri:6,trust:[2,6,12,19,20],trustedpublish:6,tupl:[14,16,19],two:[14,19],txt:6,type:[3,6,9,11,12,15,19,20],ubuntu:[2,4,6],udc:2,ulrich:3,umbrella:3,umdf:6,umfeld:3,unam:2,und:3,under:[15,19,20],understood:15,unfamiliar:[2,4,6],unit:[14,19],univers:2,unix:5,unknown:[7,14,19],unpack:16,unplug:6,unprotect:[12,15,19,20],unprotected_result:[15,19,20],until:[15,19,20],updat:[0,2,4,6,14,19],updatebinari:[14,19],updatebinaryencapsul:[14,19],updatebinaryplain:[14,19],updaterecord:[14,19],updaterecordencapsul:[14,19],updaterecordplain:[14,19],url:[3,6],usabl:[2,3],usag:6,usb:[3,6],use:[0,1,2,4,5,6,7,11,12,14,15,17,19,20],used:[0,2,4,5,6,7,9,11,12,14,15,19,20,22],useful:1,user:[2,6,9,15,19,20],uses:[0,1,2,4,6,20],using:[0,1,2,3,4,5,6,7,12,14,15,19,20],usr:[2,6],usual:[2,6,7,14],utf:6,util:[6,8],utoeriksson:6,valid:[6,7,15,19,20],valu:[4,6,12,14,15,17,19,20,22],variabl:14,variou:[2,3,11,12,19,20],vector:11,vendor:[2,6],vendor_ifd_typ:6,vendor_nam:6,verbos:[2,4,6],verif:[0,2,12,19,20],verifi:[0,2,6,12,15,19,20],verify_certif:[12,19,20],verify_cryptographic_checksum:[12,19,20],verify_digital_signatur:[12,19,20],verlag:3,version:[0,1,2,4,5,6,15,19,20],via:[0,1,2,4,5,6,7,11,15,17],vicc:[4,6,7,17],virtual:[0,4,5,17],virtualicc:[7,17],virtualsmartcard:[6,7,9,11,12,13,14,15,16,19,20,22],visual:[4,6],vletoux:0,volum:3,vpcd:[4,5,7,17],vpicc:[7,17],vsmartcard:[0,1,2,3,4,5,6],w64:4,wai:6,wait:[4,6],waldmann:3,walk:14,want:[0,2,3,7],warm:[17,19],warn:7,warn_noinfo63:19,wdk:6,web:3,welcom:[0,1,2,4,5,6],well:6,what:[4,7,12,14,19,20],whatev:22,when:[4,5,6,7,22],where:[2,4,5,6,7,14],wherea:2,whether:[12,15,17,19,20],which:[0,2,4,6,7,11,12,14,17,19,22],wiki:2,win32:6,window:[2,4,5],winscard:[4,6],wireless:1,wissen:3,with_mark:16,with_traceback:13,without:[0,6,11,22],wix:6,wixtoolset:6,wolf:3,word:22,work:[2,4,6,7],workaround:7,workshop:3,write:[14,19],writeand:14,writebinari:[14,19],writebinaryencapsul:[14,19],writebinaryplain:[14,19],writeor:14,writerecord:[14,19],written:[2,4],wudfhost:6,www:[0,2,4,6],x00:11,x01:7,x02:7,x03:7,x04:7,x38:7,x64:6,x82:6,xff:7,xjf:2,xml:[4,6],xor:14,xxx:7,ykneo:0,you:[0,1,2,3,4,5,6,7,14,19],your:[0,1,2,4,5,6,7],yourself:[3,7],yubico:0,zero:[15,19,20],zip:6,zone:20,zum:3,zur:3},titles:["Android Smart Card Emulator","Tizen Smart Card Emulator","USB CCID Emulator","Welcome to the Virtual Smart Card Architecture documentation!","PC/SC Relay","Remote Smart Card Reader","Virtual Smart Card","Creating a Virtual Smart Card","virtualsmartcard Package","CardGenerator Module","ConstantDefinitions Module","CryptoUtils Module","SEutils Module","SWutils Module","SmartcardFilesystem Module","SmartcardSAM Module","TLVutils Module","VirtualSmartcard Module","cards Package","cryptoflex Module","ePass Module","nPA Module","utils Module"],titleterms:{"7816":7,Use:[0,1,5],Using:6,android:[0,4,5],architectur:3,build:6,card:[0,1,2,3,4,5,6,7,18],cardgener:9,ccid:2,compliant:2,configur:6,constantdefinit:10,contact:[0,1,5],contactless:4,creat:7,cryptoflex:19,cryptoutil:11,document:3,download:[0,1,2,3,4,5,6],emul:[0,1,2,4,6],epass:[6,20],exampl:7,gadgetf:2,hint:[2,4],implement:7,instal:[0,1,2,4,5,6],interfac:4,iso:7,less:[0,1,5],libnfc:4,like:7,linux:[2,4,6],mac:6,middlewar:4,modul:[9,10,11,12,13,14,15,16,17,19,20,21,22],note:[0,1,2,4,5,6],npa:21,other:7,packag:[8,18],phone:[0,5],python:6,question:[0,1,2,4,5,6],reader:[2,5],refer:[0,1,2,3,4,5,6],relai:4,remot:5,run:6,seutil:12,similar:[2,4,6],smart:[0,1,2,3,4,5,6,7],smartcardfilesystem:14,smartcardsam:15,smartwatch:1,swutil:13,test:6,tizen:1,tlvutil:16,type:7,unix:[2,4,6],usag:[2,4],usb:2,util:22,virtual:[3,6,7],virtualsmartcard:[8,17],vpcd:6,vpicc:6,welcom:3,window:6,written:6}}) \ No newline at end of file diff --git a/docs/virtualsmartcard/README.html b/docs/virtualsmartcard/README.html index 19091db..ad8f464 100644 --- a/docs/virtualsmartcard/README.html +++ b/docs/virtualsmartcard/README.html @@ -4,7 +4,7 @@ - Virtual Smart Card — vsmartcard 2021-04-28 documentation + Virtual Smart Card — vsmartcard 2023-09-27 documentation @@ -12,10 +12,6 @@ - - - - @@ -24,6 +20,10 @@ + + + + @@ -103,7 +103,10 @@
  • Configuring vpcd on Unix
  • Configuring vpcd on Mac OS X
  • Configuring vpcd on Windows
  • -
  • Running vpicc
  • +
  • Running vpicc +
  • Question
  • @@ -151,7 +154,7 @@
    -
    +

    Virtual Smart Card

    @@ -189,8 +192,25 @@ internet for example.

    PC/SC Relay to make it accessible to an external contact-less smart card reader.

    The file utils.py was taken from Henryk Plötz’s cyberflex-shell 1.

    -
    -

    Figure made with TikZ

    +
    +

    System Message: WARNING/2 (\input{$wd/bilder/tikzstyles.tex} + \node (pcsclite) +[klein, aktivbox, inner xsep=.7cm, text width=3cm] + {PC/SC Framework\\\ +(\texttt{pcscd} or \texttt{SCardSvr}) + }; +\node (sca) [aktivbox, klein, left=of pcsclite] {Smart Card\\Application}; +\node (vpcd) [box, at=(pcsclite.east), xshift=-.3cm] {\texttt{vpcd}}; + \node (vicc) [aktivbox, right=2cm of pcsclite] {\texttt{vicc}}; + +\begin{pgfonlayer}{background} + \path[linie] + (sca) edge (pcsclite) + (vpcd) edge node {\includegraphics[width=1.2cm]{$wd/bilder/simplecloud.pdf}} (vicc) + ; +\end{pgfonlayer})

    +

    !pdf2svg command cannot be run

    +

    Virtual Smart Card used with PCSC-Lite or WinSCard

    New in version 0.7: The Virtual Smart Card optionally brings its own standalone implementation of @@ -198,8 +218,24 @@ PC/SC. This allows accessing vpicc witho implementation acts as replacement for libpcsclite which can lead to problems when used in parallel with PCSC-Lite.

    -
    -

    Figure made with TikZ

    +
    +

    System Message: WARNING/2 (\input{$wd/bilder/tikzstyles.tex} + \node (pcsclite) +[klein, box, text width=4cm] + {Virtual Smart Card's\\ +PC/SC Framework + }; +\node (sca) [aktivbox, klein, left=of pcsclite] {Smart Card\\Application}; + \node (vicc) [aktivbox, right=2cm of pcsclite] {\texttt{vicc}}; + +\begin{pgfonlayer}{background} + \path[linie] + (sca) edge (pcsclite) + (pcsclite) edge node {\includegraphics[width=1.5cm]{$wd/bilder/simplecloud.pdf}} (vicc) + ; +\end{pgfonlayer})

    +

    !pdf2svg command cannot be run

    +

    Virtual Smart Card used with its own PC/SC implementation

    On Android, where a traditional PC/SC framework is not available, you can use our framework to make your real contact-less smart accessible through PKCS#11. @@ -211,10 +247,10 @@ responses via NFC to a contact-less smart card that signs the mail.

    @@ -223,6 +259,8 @@ URL will be printed if libqrencode is not available)

    still available on Sourceforge.

    Alternatively, you can clone our git repository:

    git clone https://github.com/frankmorgner/vsmartcard.git
    +cd vsmartcard
    +git submodule update --init --recursive
     
    @@ -269,10 +307,13 @@ make install PC/SC.

    For the Windows integration we extended Fabio Ottavi’s UMDF Driver for a -Virtual Smart Card Reader 12 with a vpcd interface. To build vpcd for -Windows we use Windows Driver Kit 10 and Visual Studio 2015 13. The vpcd -installer requires the WiX Toolset 3.10 14. If you choose -to download the Windows binaries 15, you may directly jump to step 4.

    +Virtual Smart Card Reader 11 with a vpcd interface. If you choose +to download the Windows binaries 14, you may directly jump to step 4.

    +

    In the CI environment, we’re building vpcd for Windows with Visual Studio +Community 2019 with SDK/WDK for Windows 11. (The WDK version needs to match +at least your targeted version of Windows, see this guide for installing VS +with WDK 12) The vpcd installer additionally +requires the WiX Toolset 3.10 13 to be installed.

    1. Clone the git repository and make sure it is initialized with all submodules:

      @@ -289,14 +330,23 @@ configuration manager, that the project is built for your platform (i.e.
    2. If you can successfully Build the solution, you can find the installer (BixVReaderInstaller.msi) in virtualsmartcard\win32\BixVReaderInstaller\bin\*Release

    3. -
    4. To install vpcd, double click BixVReaderInstaller.msi. Since we -are currently not signing the Installer, this will yield a warning about an -unverified driver software publisher on Windows 8 and later. Click -Install this driver software anyway.

    5. +
    6. To import the installer’s test signing certificate, double click +BixVReader.cer and add it to the Trusted Root Certification +Authority and the Trusted Publishers at the Local Computer” (not the +*Current User).

      +

      On the commandline, you could do this as follows:

      +
      CertMgr.exe /add BixVReader.cer /s /r localMachine root /all
      +CertMgr.exe /add BixVReader.cer /s /r localMachine trustedpublisher
      +
      +
      +

      Feel free to remove the certificate from the certificate stores once the +device is installed.

      +
    7. +
    8. To install vpcd, double click BixVReaderInstaller.msi.

    For debugging vpcd and building the driver with an older version of Visual Studio or WDK please see Fabio Ottavi’s UMDF Driver for a Virtual Smart Card -Reader 12 for details.

    +Reader 11 for details.

    All of Fabio’s card connectors are still available, but inactive by default (see Configuring vpcd on Windows below).

    @@ -454,7 +504,7 @@ to open should be specified in

    Running vpicc

    -

    The compiled Windows binaries 15 of vpicc include OpenPACE. The other +

    The compiled Windows binaries 14 of vpicc include OpenPACE. The other dependencies listed above need to be installed seperately. You can start the vpicc via python.exe vicc.py. On all other systems an executable script vicc is installed using the autotools.

    @@ -538,8 +588,38 @@ chosen accordingly (–hostname and –port)

    When vpcd and vpicc are connected you should be able to access the card through the PC/SC API. You can use the opensc-explorer or pcsc_scan for testing. In Virtual Smart Card’s root directory we also -provide scripts for testing with npa-tool 16 and PCSC-Lite’s smart card +provide scripts for testing with npa-tool 15 and PCSC-Lite’s smart card reader driver tester.

    +
    +

    Testing vpicc -t ePass

    +

    A simple tool to test BAC is available for Python 2.7. On Ubuntu, its +requiremets are installed as follows:

    +
    sudo apt-get install python2.7-dev
    +curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
    +python2.7 get-pip.py
    +python2.7 -m pip install pycryptodomex pyscard
    +python2.7 readpass.py --no-gui
    +git clone https://github.com/henryk/cyberflex-shell
    +cd cyberflex-shell
    +
    +
    +

    Now we can create and run a small script:

    +
    echo "select_application a0000002471001" > script.txt
    +echo "perform_bac L898902C<3UTO6908061F9406236ZE184226B<<<<<14" >> script.txt
    +python2.7 cyberflex-shell.py script.txt
    +
    +
    +

    The tool will wait for a (virtual) smart card to appear. Start vpicc and make +sure to configure it with the correct MRZ, i.e. +P<UTOERIKSSON<<ANNA<MARIX<<<<<<<<<<<<<<<<<<<L898902C<3UTO6908061F9406236ZE184226B<<<<<14 +in this case:

    +
    vicc -t ePass
    +
    +
    +

    Once the card is connected, cyberflex-shell will quickly perform BAC and +exit. Running the tool without arguments allows entering in interactive mode +to run additional tests.

    +
    @@ -563,39 +643,36 @@ more than welcome! Please use our http://pyscard.sourceforge.net/

    5
    -

    https://www.pycryptodome.org/

    -
    -
    6

    https://www.dlitz.net/software/python-pbkdf2/

    -
    7
    +
    6

    https://docs.python.org/3.3/library/readline.html

    -
    8
    +
    7

    https://pypi.python.org/pypi/pyreadline

    -
    9
    +
    8

    http://www.pythonware.com/products/pil/

    -
    10
    +
    9

    https://github.com/frankmorgner/openpace

    -
    11
    +
    10

    https://fukuchi.org/works/qrencode/

    -
    12(1,2)
    +
    11(1,2)

    http://www.codeproject.com/Articles/134010/An-UMDF-Driver-for-a-Virtual-Smart-Card-Reader

    -
    13
    -

    https://msdn.microsoft.com/en-us/library/windows/hardware/ff557573

    +
    12
    +

    https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk

    -
    14
    +
    13

    https://wixtoolset.org/releases/v3.10/stable

    -
    15(1,2)
    -

    https://github.com/frankmorgner/vsmartcard/releases/download/virtualsmartcard-0.7/virtualsmartcard-0.7_win32.zip

    +
    14(1,2)
    +

    https://github.com/frankmorgner/vsmartcard/releases/tag/virtualsmartcard-0.8

    -
    16
    +
    15

    https://github.com/frankmorgner/OpenSC

    @@ -614,9 +691,9 @@ more than welcome! Please use our - Creating a Virtual Smart Card — vsmartcard 2021-04-28 documentation + Creating a Virtual Smart Card — vsmartcard 2023-09-27 documentation @@ -12,10 +12,6 @@ - - - - @@ -23,6 +19,10 @@ + + + + @@ -135,7 +135,7 @@
    -
    +

    Creating a Virtual Smart Card

    @@ -270,14 +270,14 @@ is only a buffer that is forwarded to the smart card OS. First we modify self.sock.settimeout(None) self.server_sock = None except socket.error as e: - logging.error("Failed to open socket: %s", str(e)) - logging.error("Is pcscd running at %s? Is vpcd loaded? Is a \ + logging.critical("Failed to open socket: %s", str(e)) + logging.critical("Is pcscd running at %s? Is vpcd loaded? Is a \ firewall blocking port %u?", host, port) sys.exit() else: # use reversed connection mode try: - local_ip = [(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1] + local_ip = [(s.connect(('9.9.9.9', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1] custom_url = 'vicc://%s:%d' % (local_ip, port) print('VICC hostname: %s' % local_ip) print('VICC port: %d' % port) @@ -292,8 +292,8 @@ is only a buffer that is forwarded to the smart card OS. First we modify (self.sock, self.server_sock, host) = self.openPort(port) self.sock.settimeout(None) except socket.error as e: - logging.error("Failed to open socket: %s", str(e)) - logging.error("Is pcscd running? Is vpcd loaded and in \ + logging.critical("Failed to open socket: %s", str(e)) + logging.critical("Is pcscd running? Is vpcd loaded and in \ reversed connection mode? Is a firewall \ blocking port %u?", port) sys.exit() @@ -339,9 +339,7 @@ completely different when creating a file on the smart card. So we derive CryptoflexMF from MF and modify create to our needs.

    -
        def create(p1, p2, data):
    -
    -        if data[0:2] != "\xff\xff":
    +
            if data[0:2] != b"\xff\xff":
                 raise SwError(SW["ERR_INCORRECTPARAMETERS"])
     
             args = {
    @@ -349,11 +347,11 @@ completely different when creating a file on the smart card. So we derive
                     "filedescriptor": 0,
                     "fid": stringtoint(data[4:6]),
                     }
    -        if data[6] == "\x01":
    +        if data[6] == b"\x01":
                 args["data"] = bytes(0)*stringtoint(data[2:4])
                 args["filedescriptor"] = FDB["EFSTRUCTURE_TRANSPARENT"]
                 new_file = TransparentStructureEF(**args)
    -        elif data[6] == "\x02":
    +        elif data[6] == b"\x02":
                 if len(data) > 16:
                     args["maxrecordsize"] = stringtoint(data[16])
                 elif p2:
    @@ -362,15 +360,15 @@ completely different when creating a file on the smart card. So we derive
                 args["filedescriptor"] = FDB["EFSTRUCTURE_LINEAR_FIXED_"
                                              "NOFURTHERINFO"]
                 new_file = RecordStructureEF(**args)
    -        elif data[6] == "\x03":
    +        elif data[6] == b"\x03":
                 args["filedescriptor"] = FDB["EFSTRUCTURE_LINEAR_VARIABLE_"
                                              "NOFURTHERINFO"]
                 new_file = RecordStructureEF(**args)
    -        elif data[6] == "\x04":
    +        elif data[6] == b"\x04":
                 args["filedescriptor"] = FDB["EFSTRUCTURE_CYCLIC_NOFURTHERINFO"]
                 new_file = RecordStructureEF(**args)
    -        elif data[6] == "\x38":
    -            if data[12] != "\x03":
    +        elif data[6] == b"\x38":
    +            if data[12] != b"\x03":
                     raise SwError(SW["ERR_INCORRECTPARAMETERS"])
                 new_file = DF(**args)
             else:
    @@ -378,6 +376,8 @@ completely different when creating a file on the smart card. So we derive
                 raise SwError(SW["ERR_INCORRECTPARAMETERS"])
     
             return [new_file]
    +
    +    def recordHandlingDecode(self, p1, p2):
     

    As you can see it is quite simple to extend the virtual smart card to your @@ -393,7 +393,7 @@ magic that is done while parsing a buffer (an vpcd.

    As before with the cryptoflex card, we let VirtualICC recognize the new type -"relay". RelayOS overwrites all +"relay". RelayOS overwrites all main functions from the template SmartcardOS. Its functions correspond to the commands sent by vpcd. If you know how to use @@ -415,7 +415,7 @@ forward, but see yourself…

    # See which readers are available readers = smartcard.System.listReaders() if len(readers) <= readernum: - logging.error("Invalid number of reader '%u' (only %u available)", + logging.critical("Invalid number of reader '%u' (only %u available)", readernum, len(readers)) sys.exit() @@ -427,7 +427,7 @@ forward, but see yourself…

    try: self.session = smartcard.Session(self.reader) except smartcard.Exceptions.CardConnectionException as e: - logging.error("Error connecting to card: %s", e.message) + logging.critical("Error connecting to card: %s", str(e)) sys.exit() logging.info("Connected to card in '%s'", self.reader) @@ -443,7 +443,7 @@ forward, but see yourself…

    try: self.session.close() except smartcard.Exceptions.CardConnectionException as e: - logging.warning("Error disconnecting from card: %s", e.message) + logging.warning("Error disconnecting from card: %s", str(e)) def getATR(self): # when powerDown has been called, fetching the ATR will throw an error. @@ -457,7 +457,7 @@ forward, but see yourself…

    self.session = smartcard.Session(self.reader) atr = self.session.getATR() except smartcard.Exceptions.CardConnectionException as e: - logging.error("Error getting ATR: %s", e.message) + logging.critical("Error getting ATR: %s", str(e)) sys.exit() return "".join([chr(b) for b in atr]) @@ -473,7 +473,7 @@ forward, but see yourself…

    try: self.session = smartcard.Session(self.reader) except smartcard.Exceptions.CardConnectionException as e: - logging.error("Error connecting to card: %s", e.message) + logging.critical("Error connecting to card: %s", str(e)) sys.exit() def powerDown(self): @@ -482,7 +482,7 @@ forward, but see yourself…

    try: self.session.close() except smartcard.Exceptions.CardConnectionException as e: - logging.error("Error disconnecting from card: %s", str(e)) + logging.critical("Error disconnecting from card: %s", str(e)) sys.exit() def reset(self): @@ -501,7 +501,7 @@ forward, but see yourself…

    try: rapdu, sw1, sw2 = self.session.sendCommandAPDU(apdu) except smartcard.Exceptions.CardConnectionException as e: - logging.error("Error transmitting APDU: %s", str(e)) + logging.critical("Error transmitting APDU: %s", str(e)) sys.exit() # XXX this is a workaround, see on sourceforge bug #3083586 @@ -534,7 +534,7 @@ forward, but see yourself…

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    + © Copyright 2009-2023 by Dominik Oepen and Frank Morgner.

    diff --git a/docs/virtualsmartcard/api/virtualsmartcard.CardGenerator.html b/docs/virtualsmartcard/api/virtualsmartcard.CardGenerator.html index 2b56800..bbb1325 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.CardGenerator.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.CardGenerator.html @@ -4,7 +4,7 @@ - CardGenerator Module — vsmartcard 2021-04-28 documentation + CardGenerator Module — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,7 +123,7 @@
    -
    +

    CardGenerator Module

    @@ -202,7 +202,7 @@ optionally for the path to a photo.

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    + © Copyright 2009-2023 by Dominik Oepen and Frank Morgner.

    diff --git a/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html b/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html index f73b02a..0722283 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html @@ -4,7 +4,7 @@ - ConstantDefinitions Module — vsmartcard 2021-04-28 documentation + ConstantDefinitions Module — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,7 +123,7 @@
    -
    +

    ConstantDefinitions Module

    @@ -141,7 +141,7 @@

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    + © Copyright 2009-2023 by Dominik Oepen and Frank Morgner.

    diff --git a/docs/virtualsmartcard/api/virtualsmartcard.CryptoUtils.html b/docs/virtualsmartcard/api/virtualsmartcard.CryptoUtils.html index bc467c5..39d6ddd 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.CryptoUtils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.CryptoUtils.html @@ -4,7 +4,7 @@ - CryptoUtils Module — vsmartcard 2021-04-28 documentation + CryptoUtils Module — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,7 +123,7 @@
    -
    +

    CryptoUtils Module

    @@ -232,7 +232,7 @@ Only used by the “CC” algorithm

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    + © Copyright 2009-2023 by Dominik Oepen and Frank Morgner.

    diff --git a/docs/virtualsmartcard/api/virtualsmartcard.SEutils.html b/docs/virtualsmartcard/api/virtualsmartcard.SEutils.html index b6f7509..555a54f 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.SEutils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.SEutils.html @@ -4,7 +4,7 @@ - SEutils Module — vsmartcard 2021-04-28 documentation + SEutils Module — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,7 +123,7 @@
    -
    +

    SEutils Module

    @@ -579,7 +579,7 @@ contain a data to sign (tag 0x9A, 0xAC or 0xBC) and a digital signature

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    + © Copyright 2009-2023 by Dominik Oepen and Frank Morgner.

    diff --git a/docs/virtualsmartcard/api/virtualsmartcard.SWutils.html b/docs/virtualsmartcard/api/virtualsmartcard.SWutils.html index 8ea2de8..fc9e042 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.SWutils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.SWutils.html @@ -4,7 +4,7 @@ - SWutils Module — vsmartcard 2021-04-28 documentation + SWutils Module — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,7 +123,7 @@
    -
    +

    SWutils Module

    @@ -162,7 +162,7 @@ set self.__traceback__ to tb and return self.

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    + © Copyright 2009-2023 by Dominik Oepen and Frank Morgner.

    diff --git a/docs/virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.html b/docs/virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.html index a13242e..b2fd247 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.html @@ -4,7 +4,7 @@ - SmartcardFilesystem Module — vsmartcard 2021-04-28 documentation + SmartcardFilesystem Module — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,7 +123,7 @@
    -
    +

    SmartcardFilesystem Module

    @@ -138,7 +138,7 @@
    -class virtualsmartcard.SmartcardFilesystem.DF(parent, fid, filedescriptor=56, lifecycle=5, simpletlv_data=None, bertlv_data=None, dfname=None, data='')
    +class virtualsmartcard.SmartcardFilesystem.DF(parent, fid, filedescriptor=56, lifecycle=5, simpletlv_data=None, bertlv_data=None, dfname=None, data=b'')

    Bases: virtualsmartcard.SmartcardFilesystem.File

    Class for a dedicated file

    @@ -1189,7 +1189,7 @@ data as binary string.

    -class virtualsmartcard.SmartcardFilesystem.Record(identifier=None, data='')
    +class virtualsmartcard.SmartcardFilesystem.Record(identifier=None, data=b'')

    Bases: object

    @@ -1455,7 +1455,7 @@ __getRecords).

    -class virtualsmartcard.SmartcardFilesystem.TransparentStructureEF(parent, fid, filedescriptor=1, lifecycle=5, simpletlv_data=None, bertlv_data=None, datacoding=0, shortfid=0, data='')
    +class virtualsmartcard.SmartcardFilesystem.TransparentStructureEF(parent, fid, filedescriptor=1, lifecycle=5, simpletlv_data=None, bertlv_data=None, datacoding=0, shortfid=0, data=b'')

    Bases: virtualsmartcard.SmartcardFilesystem.EF

    Class for an elementary file with transparent structure.

    @@ -1708,7 +1708,7 @@ DCB[“PROPRIETARY”] (logical xor)

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    + © Copyright 2009-2023 by Dominik Oepen and Frank Morgner.

    diff --git a/docs/virtualsmartcard/api/virtualsmartcard.SmartcardSAM.html b/docs/virtualsmartcard/api/virtualsmartcard.SmartcardSAM.html index 9cb7ada..467c564 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.SmartcardSAM.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.SmartcardSAM.html @@ -4,7 +4,7 @@ - SmartcardSAM Module — vsmartcard 2021-04-28 documentation + SmartcardSAM Module — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,7 +123,7 @@
    -
    +

    SmartcardSAM Module

    @@ -430,7 +430,7 @@ string that is understood by CryptoUtils.py functions

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    + © Copyright 2009-2023 by Dominik Oepen and Frank Morgner.

    diff --git a/docs/virtualsmartcard/api/virtualsmartcard.TLVutils.html b/docs/virtualsmartcard/api/virtualsmartcard.TLVutils.html index 2aaabc1..b1db19c 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.TLVutils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.TLVutils.html @@ -4,7 +4,7 @@ - TLVutils Module — vsmartcard 2021-04-28 documentation + TLVutils Module — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,7 +123,7 @@
    -
    +

    TLVutils Module

    @@ -238,7 +238,7 @@ results will be returned.

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    + © Copyright 2009-2023 by Dominik Oepen and Frank Morgner.

    diff --git a/docs/virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.html b/docs/virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.html index 662fe08..9e46f14 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.html @@ -4,7 +4,7 @@ - VirtualSmartcard Module — vsmartcard 2021-04-28 documentation + VirtualSmartcard Module — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,7 +123,7 @@
    -
    +

    VirtualSmartcard Module

    @@ -335,7 +335,7 @@ respsonse APDU back to the vpcd.

    -virtualsmartcard.VirtualSmartcard.loadMitMFromPath(path: str)
    +virtualsmartcard.VirtualSmartcard.loadMitMFromPath(path)
    @@ -352,7 +352,7 @@ respsonse APDU back to the vpcd.

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    + © Copyright 2009-2023 by Dominik Oepen and Frank Morgner.

    diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.HandlerTest.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.HandlerTest.html deleted file mode 100644 index 3b7253a..0000000 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.HandlerTest.html +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - HandlerTest Module — vsmartcard 2021-04-28 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -

    HandlerTest Module

    -
    Inheritance diagram of virtualsmartcard.cards.HandlerTest
    - - - -
    -
    -class virtualsmartcard.cards.HandlerTest.HandlerTestOS
    -

    Bases: virtualsmartcard.VirtualSmartcard.SmartcardOS

    -

    This class implements the commands used for the PC/SC-lite smart card -reader driver tester. See https://salsa.debian.org/rousseau/HandlerTest -and handler_test(1).

    -
    -
    -__output_from_le(msg)
    -
    - -
    -
    -execute(msg)
    -

    Returns response to the given APDU as string of characters

    -
    -
    Parameters
    -

    msg – the APDU as string of characters

    -
    -
    -
    - -
    -
    -getATR()
    -

    Returns the ATR of the card as string of characters

    -
    - -
    -
    -powerDown()
    -

    Powers down the card

    -
    - -
    -
    -powerUp()
    -

    Powers up the card

    -
    - -
    -
    -reset()
    -

    Performs a warm reset of the card (no power down)

    -
    - -
    - -
    - - -
    - -
    -
    -
    -
    -

    - Back to top - -

    -

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    -

    -
    -
    - - \ No newline at end of file diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.Relay.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.Relay.html deleted file mode 100644 index a471215..0000000 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.Relay.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - Relay Module — vsmartcard 2021-04-28 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -

    Relay Module

    -
    Inheritance diagram of virtualsmartcard.cards.Relay
    - - - -
    -
    -class virtualsmartcard.cards.Relay.RelayOS(readernum, mitm=<virtualsmartcard.cards.RelayMiddleman.RelayMiddleman object>)
    -

    Bases: virtualsmartcard.VirtualSmartcard.SmartcardOS

    -

    This class implements relaying of a (physical) smartcard. The RelayOS -forwards the command APDUs received from the vpcd to the real smartcard via -an actual smart card reader and sends the responses back to the vpcd. -This class can be used to implement relay or MitM attacks.

    -
    -
    -cleanup()
    -

    Close the connection to the physical card

    -
    - -
    -
    -execute(msg)
    -

    Returns response to the given APDU as string of characters

    -
    -
    Parameters
    -

    msg – the APDU as string of characters

    -
    -
    -
    - -
    -
    -getATR()
    -

    Returns the ATR of the card as string of characters

    -
    - -
    -
    -powerDown()
    -

    Powers down the card

    -
    - -
    -
    -powerUp()
    -

    Powers up the card

    -
    - -
    -
    -reset()
    -

    Performs a warm reset of the card (no power down)

    -
    - -
    - -
    - - -
    - -
    -
    -
    -
    -

    - Back to top - -

    -

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    -

    -
    -
    - - \ No newline at end of file diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.RelayMiddleman.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.RelayMiddleman.html deleted file mode 100644 index 81a07f8..0000000 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.RelayMiddleman.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - RelayMiddleman Module — vsmartcard 2021-04-28 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -

    RelayMiddleman Module

    -
    Inheritance diagram of virtualsmartcard.cards.RelayMiddleman
    - - -
    -
    -class virtualsmartcard.cards.RelayMiddleman.RelayMiddleman
    -

    Bases: object

    -

    The RelayMiddleman class serves as a base from which a user might derive -their own relay middle man class. This base class implements the simplest -Man-in-the-Middle: the NoOp.

    -
    -
    -handleInPDU(inPDU: bytes)
    -

    This method is called on each PDU that is fed into the realy (vdpu -> vicc). -It may be overwritten to modify the packages send from the terminal to the -real smart card.

    -
    - -
    -
    -handleOutPDU(outPDU: bytes)
    -

    This method is called on each PDU that is produced by the relay (vicc -> vdpu). -It may be overwritten to modify the packages send from the real smart card to the -terminal.

    -
    - -
    - -
    - - -
    - -
    -
    -
    -
    -

    - Back to top - -

    -

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    -

    -
    -
    - - \ No newline at end of file diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.html index ec6eed5..1d72789 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.html @@ -4,7 +4,7 @@ - cryptoflex Module — vsmartcard 2021-04-28 documentation + cryptoflex Module — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,7 +123,7 @@
    -
    +

    cryptoflex Module

    @@ -1519,7 +1519,7 @@ contain a data to sign (tag 0x9A, 0xAC or 0xBC) and a digital signature

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    + © Copyright 2009-2023 by Dominik Oepen and Frank Morgner.

    diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.ePass.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.ePass.html index 5f80281..e4beb4e 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.ePass.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.ePass.html @@ -4,7 +4,7 @@ - ePass Module — vsmartcard 2021-04-28 documentation + ePass Module — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,7 +123,7 @@
    -
    +

    ePass Module

    @@ -818,7 +818,7 @@ contain a data to sign (tag 0x9A, 0xAC or 0xBC) and a digital signature

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    + © Copyright 2009-2023 by Dominik Oepen and Frank Morgner.

    diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.html index b28d09d..2e22559 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.html @@ -4,7 +4,7 @@ - cards Package — vsmartcard 2021-04-28 documentation + cards Package — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,15 +123,12 @@
    -
    +

    cards Package

    diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.nPA.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.nPA.html index 6de91df..cc640fa 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.nPA.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.nPA.html @@ -4,7 +4,7 @@ - nPA Module — vsmartcard 2021-04-28 documentation + nPA Module — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,7 +123,7 @@
    -
    +

    nPA Module

    @@ -141,7 +141,7 @@

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    + © Copyright 2009-2023 by Dominik Oepen and Frank Morgner.

    diff --git a/docs/virtualsmartcard/api/virtualsmartcard.html b/docs/virtualsmartcard/api/virtualsmartcard.html index 5bfbcc4..ba88164 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.html @@ -4,7 +4,7 @@ - virtualsmartcard Package — vsmartcard 2021-04-28 documentation + virtualsmartcard Package — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,28 +123,18 @@
    -
    +

    virtualsmartcard Package

    diff --git a/docs/virtualsmartcard/api/virtualsmartcard.tests.CardGenerator_test.html b/docs/virtualsmartcard/api/virtualsmartcard.tests.CardGenerator_test.html deleted file mode 100644 index 897cbf9..0000000 --- a/docs/virtualsmartcard/api/virtualsmartcard.tests.CardGenerator_test.html +++ /dev/null @@ -1,2262 +0,0 @@ - - - - - - - CardGenerator_test Module — vsmartcard 2021-04-28 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -

    CardGenerator_test Module

    -
    Inheritance diagram of virtualsmartcard.tests.CardGenerator_test
    - - - - -
    -
    -class virtualsmartcard.tests.CardGenerator_test.CryptoflexGeneratorTest(methodName='runTest')
    -

    Bases: virtualsmartcard.tests.CardGenerator_test.ISO7816GeneratorTest

    -
    -
    -_addExpectedFailure(result, exc_info)
    -
    - -
    -
    -_addSkip(result, test_case, reason)
    -
    - -
    -
    -_addUnexpectedSuccess(result)
    -
    - -
    -
    -_baseAssertEqual(first, second, msg=None)
    -

    The default assertEqual implementation, not type specific.

    -
    - -
    -
    -_callCleanup(function, /, *args, **kwargs)
    -
    - -
    -
    -_callSetUp()
    -
    - -
    -
    -_callTearDown()
    -
    - -
    -
    -_callTestMethod(method)
    -
    - -
    -
    -_classSetupFailed = False
    -
    - -
    -
    -_class_cleanups = []
    -
    - -
    -
    -_deprecate()
    -
    - -
    -
    -_diffThreshold = 65536
    -
    - -
    -
    -_feedErrorsToResult(result, errors)
    -
    - -
    -
    -_formatMessage(msg, standardMsg)
    -

    Honour the longMessage attribute when generating failure messages. -If longMessage is False this means: -* Use only an explicit message if it is provided -* Otherwise use the standard message for the assert

    -

    If longMessage is True: -* Use the standard message -* If an explicit message is provided, plus ‘ : ‘ and the explicit message

    -
    - -
    -
    -_getAssertEqualityFunc(first, second)
    -

    Get a detailed comparison function for the types of the two args.

    -

    Returns: A callable accepting (first, second, msg=None) that will -raise a failure exception if first != second with a useful human -readable error message for those types.

    -
    - -
    -
    -_truncateMessage(message, diff)
    -
    - -
    -
    -classmethod addClassCleanup(function, /, *args, **kwargs)
    -

    Same as addCleanup, except the cleanup items are called even if -setUpClass fails (unlike tearDownClass).

    -
    - -
    -
    -addCleanup(function, /, *args, **kwargs)
    -

    Add a function, with arguments, to be called when the test is -completed. Functions added are called on a LIFO basis and are -called after tearDown on test failure or success.

    -

    Cleanup items are called even if setUp fails (unlike tearDown).

    -
    - -
    -
    -addTypeEqualityFunc(typeobj, function)
    -

    Add a type specific assertEqual style function to compare a type.

    -

    This method is for use by TestCase subclasses that need to register -their own type equality functions to provide nicer error messages.

    -
    -
    Args:
    -
    typeobj: The data type to call this function on when both values

    are of the same type in assertEqual().

    -
    -
    function: The callable taking two arguments and an optional

    msg= argument that raises self.failureException with a -useful error message when the two arguments are not equal.

    -
    -
    -
    -
    -
    - -
    -
    -assertAlmostEqual(first, second, places=None, msg=None, delta=None)
    -

    Fail if the two objects are unequal as determined by their -difference rounded to the given number of decimal places -(default 7) and comparing to zero, or by comparing that the -difference between the two objects is more than the given -delta.

    -

    Note that decimal places (from zero) are usually not the same -as significant digits (measured from the most significant digit).

    -

    If the two objects compare equal then they will automatically -compare almost equal.

    -
    - -
    -
    -assertAlmostEquals(**kwargs)
    -
    - -
    -
    -assertCountEqual(first, second, msg=None)
    -

    Asserts that two iterables have the same elements, the same number of -times, without regard to order.

    -
    -
    -
    -
    self.assertEqual(Counter(list(first)),

    Counter(list(second)))

    -
    -
    -
    -
    -
    Example:
      -
    • [0, 1, 1] and [1, 0, 1] compare equal.

    • -
    • [0, 0, 1] and [0, 1] compare unequal.

    • -
    -
    -
    -
    -
    - -
    -
    -assertDictContainsSubset(subset, dictionary, msg=None)
    -

    Checks whether dictionary is a superset of subset.

    -
    - -
    -
    -assertDictEqual(d1, d2, msg=None)
    -
    - -
    -
    -assertEqual(first, second, msg=None)
    -

    Fail if the two objects are unequal as determined by the ‘==’ -operator.

    -
    - -
    -
    -assertEquals(**kwargs)
    -
    - -
    -
    -assertFalse(expr, msg=None)
    -

    Check that the expression is false.

    -
    - -
    -
    -assertGreater(a, b, msg=None)
    -

    Just like self.assertTrue(a > b), but with a nicer default message.

    -
    - -
    -
    -assertGreaterEqual(a, b, msg=None)
    -

    Just like self.assertTrue(a >= b), but with a nicer default message.

    -
    - -
    -
    -assertIn(member, container, msg=None)
    -

    Just like self.assertTrue(a in b), but with a nicer default message.

    -
    - -
    -
    -assertIs(expr1, expr2, msg=None)
    -

    Just like self.assertTrue(a is b), but with a nicer default message.

    -
    - -
    -
    -assertIsInstance(obj, cls, msg=None)
    -

    Same as self.assertTrue(isinstance(obj, cls)), with a nicer -default message.

    -
    - -
    -
    -assertIsNone(obj, msg=None)
    -

    Same as self.assertTrue(obj is None), with a nicer default message.

    -
    - -
    -
    -assertIsNot(expr1, expr2, msg=None)
    -

    Just like self.assertTrue(a is not b), but with a nicer default message.

    -
    - -
    -
    -assertIsNotNone(obj, msg=None)
    -

    Included for symmetry with assertIsNone.

    -
    - -
    -
    -assertLess(a, b, msg=None)
    -

    Just like self.assertTrue(a < b), but with a nicer default message.

    -
    - -
    -
    -assertLessEqual(a, b, msg=None)
    -

    Just like self.assertTrue(a <= b), but with a nicer default message.

    -
    - -
    -
    -assertListEqual(list1, list2, msg=None)
    -

    A list-specific equality assertion.

    -
    -
    Args:

    list1: The first list to compare. -list2: The second list to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -
    - -
    -
    -assertLogs(logger=None, level=None)
    -

    Fail unless a log message of level level or higher is emitted -on logger_name or its children. If omitted, level defaults to -INFO and logger defaults to the root logger.

    -

    This method must be used as a context manager, and will yield -a recording object with two attributes: output and records. -At the end of the context manager, the output attribute will -be a list of the matching formatted log messages and the -records attribute will be a list of the corresponding LogRecord -objects.

    -

    Example:

    -
    with self.assertLogs('foo', level='INFO') as cm:
    -    logging.getLogger('foo').info('first message')
    -    logging.getLogger('foo.bar').error('second message')
    -self.assertEqual(cm.output, ['INFO:foo:first message',
    -                             'ERROR:foo.bar:second message'])
    -
    -
    -
    - -
    -
    -assertMultiLineEqual(first, second, msg=None)
    -

    Assert that two multi-line strings are equal.

    -
    - -
    -
    -assertNotAlmostEqual(first, second, places=None, msg=None, delta=None)
    -

    Fail if the two objects are equal as determined by their -difference rounded to the given number of decimal places -(default 7) and comparing to zero, or by comparing that the -difference between the two objects is less than the given delta.

    -

    Note that decimal places (from zero) are usually not the same -as significant digits (measured from the most significant digit).

    -

    Objects that are equal automatically fail.

    -
    - -
    -
    -assertNotAlmostEquals(**kwargs)
    -
    - -
    -
    -assertNotEqual(first, second, msg=None)
    -

    Fail if the two objects are equal as determined by the ‘!=’ -operator.

    -
    - -
    -
    -assertNotEquals(**kwargs)
    -
    - -
    -
    -assertNotIn(member, container, msg=None)
    -

    Just like self.assertTrue(a not in b), but with a nicer default message.

    -
    - -
    -
    -assertNotIsInstance(obj, cls, msg=None)
    -

    Included for symmetry with assertIsInstance.

    -
    - -
    -
    -assertNotRegex(text, unexpected_regex, msg=None)
    -

    Fail the test if the text matches the regular expression.

    -
    - -
    -
    -assertNotRegexpMatches(**kwargs)
    -
    - -
    -
    -assertRaises(expected_exception, *args, **kwargs)
    -

    Fail unless an exception of class expected_exception is raised -by the callable when invoked with specified positional and -keyword arguments. If a different type of exception is -raised, it will not be caught, and the test case will be -deemed to have suffered an error, exactly as for an -unexpected exception.

    -

    If called with the callable and arguments omitted, will return a -context object used like this:

    -
    with self.assertRaises(SomeException):
    -    do_something()
    -
    -
    -

    An optional keyword argument ‘msg’ can be provided when assertRaises -is used as a context object.

    -

    The context manager keeps a reference to the exception as -the ‘exception’ attribute. This allows you to inspect the -exception after the assertion:

    -
    with self.assertRaises(SomeException) as cm:
    -    do_something()
    -the_exception = cm.exception
    -self.assertEqual(the_exception.error_code, 3)
    -
    -
    -
    - -
    -
    -assertRaisesRegex(expected_exception, expected_regex, *args, **kwargs)
    -

    Asserts that the message in a raised exception matches a regex.

    -
    -
    Args:

    expected_exception: Exception class expected to be raised. -expected_regex: Regex (re.Pattern object or string) expected

    -
    -

    to be found in error message.

    -
    -

    args: Function to be called and extra positional args. -kwargs: Extra kwargs. -msg: Optional message used in case of failure. Can only be used

    -
    -

    when assertRaisesRegex is used as a context manager.

    -
    -
    -
    -
    - -
    -
    -assertRaisesRegexp(**kwargs)
    -
    - -
    -
    -assertRegex(text, expected_regex, msg=None)
    -

    Fail the test unless the text matches the regular expression.

    -
    - -
    -
    -assertRegexpMatches(**kwargs)
    -
    - -
    -
    -assertSequenceEqual(seq1, seq2, msg=None, seq_type=None)
    -

    An equality assertion for ordered sequences (like lists and tuples).

    -

    For the purposes of this function, a valid ordered sequence type is one -which can be indexed, has a length, and has an equality operator.

    -
    -
    Args:

    seq1: The first sequence to compare. -seq2: The second sequence to compare. -seq_type: The expected datatype of the sequences, or None if no

    -
    -

    datatype should be enforced.

    -
    -
    -
    msg: Optional message to use on failure instead of a list of

    differences.

    -
    -
    -
    -
    -
    - -
    -
    -assertSetEqual(set1, set2, msg=None)
    -

    A set-specific equality assertion.

    -
    -
    Args:

    set1: The first set to compare. -set2: The second set to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -

    assertSetEqual uses ducktyping to support different types of sets, and -is optimized for sets specifically (parameters must support a -difference method).

    -
    - -
    -
    -assertTrue(expr, msg=None)
    -

    Check that the expression is true.

    -
    - -
    -
    -assertTupleEqual(tuple1, tuple2, msg=None)
    -

    A tuple-specific equality assertion.

    -
    -
    Args:

    tuple1: The first tuple to compare. -tuple2: The second tuple to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -
    - -
    -
    -assertWarns(expected_warning, *args, **kwargs)
    -

    Fail unless a warning of class warnClass is triggered -by the callable when invoked with specified positional and -keyword arguments. If a different type of warning is -triggered, it will not be handled: depending on the other -warning filtering rules in effect, it might be silenced, printed -out, or raised as an exception.

    -

    If called with the callable and arguments omitted, will return a -context object used like this:

    -
    with self.assertWarns(SomeWarning):
    -    do_something()
    -
    -
    -

    An optional keyword argument ‘msg’ can be provided when assertWarns -is used as a context object.

    -

    The context manager keeps a reference to the first matching -warning as the ‘warning’ attribute; similarly, the ‘filename’ -and ‘lineno’ attributes give you information about the line -of Python code from which the warning was triggered. -This allows you to inspect the warning after the assertion:

    -
    with self.assertWarns(SomeWarning) as cm:
    -    do_something()
    -the_warning = cm.warning
    -self.assertEqual(the_warning.some_attribute, 147)
    -
    -
    -
    - -
    -
    -assertWarnsRegex(expected_warning, expected_regex, *args, **kwargs)
    -

    Asserts that the message in a triggered warning matches a regexp. -Basic functioning is similar to assertWarns() with the addition -that only warnings whose messages also match the regular expression -are considered successful matches.

    -
    -
    Args:

    expected_warning: Warning class expected to be triggered. -expected_regex: Regex (re.Pattern object or string) expected

    -
    -

    to be found in error message.

    -
    -

    args: Function to be called and extra positional args. -kwargs: Extra kwargs. -msg: Optional message used in case of failure. Can only be used

    -
    -

    when assertWarnsRegex is used as a context manager.

    -
    -
    -
    -
    - -
    -
    -assert_(**kwargs)
    -
    - -
    -
    -card_type = 'cryptoflex'
    -
    - -
    -
    -countTestCases()
    -
    - -
    -
    -debug()
    -

    Run the test without collecting errors in a TestResult

    -
    - -
    -
    -defaultTestResult()
    -
    - -
    -
    -classmethod doClassCleanups()
    -

    Execute all class cleanup functions. Normally called for you after -tearDownClass.

    -
    - -
    -
    -doCleanups()
    -

    Execute all cleanup functions. Normally called for you after -tearDown.

    -
    - -
    -
    -fail(msg=None)
    -

    Fail immediately, with the given message.

    -
    - -
    -
    -failIf(**kwargs)
    -
    - -
    -
    -failIfAlmostEqual(**kwargs)
    -
    - -
    -
    -failIfEqual(**kwargs)
    -
    - -
    -
    -failUnless(**kwargs)
    -
    - -
    -
    -failUnlessAlmostEqual(**kwargs)
    -
    - -
    -
    -failUnlessEqual(**kwargs)
    -
    - -
    -
    -failUnlessRaises(**kwargs)
    -
    - -
    -
    -failureException
    -

    alias of AssertionError

    -
    - -
    -
    -id()
    -
    - -
    -
    -longMessage = True
    -
    - -
    -
    -maxDiff = 640
    -
    - -
    -
    -run(result=None)
    -
    - -
    -
    -setUp()
    -

    Hook method for setting up the test fixture before exercising it.

    -
    - -
    -
    -classmethod setUpClass()
    -

    Hook method for setting up class fixture before running tests in the class.

    -
    - -
    -
    -shortDescription()
    -

    Returns a one-line description of the test, or None if no -description has been provided.

    -

    The default implementation of this method returns the first line of -the specified test method’s docstring.

    -
    - -
    -
    -skipTest(reason)
    -

    Skip this test.

    -
    - -
    -
    -subTest(msg=<object object>, **params)
    -

    Return a context manager that will return the enclosed block -of code in a subtest identified by the optional message and -keyword parameters. A failure in the subtest marks the test -case as failed but resumes execution at the end of the enclosed -block, allowing further test code to be executed.

    -
    - -
    -
    -tearDown()
    -

    Hook method for deconstructing the test fixture after testing it.

    -
    - -
    -
    -classmethod tearDownClass()
    -

    Hook method for deconstructing the class fixture after running all tests in the class.

    -
    - -
    -
    -test_card_creation()
    -
    - -
    -
    -test_get_and_set_card()
    -
    - -
    - -
    -
    -class virtualsmartcard.tests.CardGenerator_test.ISO7816GeneratorTest(methodName='runTest')
    -

    Bases: unittest.case.TestCase

    -
    -
    -_addExpectedFailure(result, exc_info)
    -
    - -
    -
    -_addSkip(result, test_case, reason)
    -
    - -
    -
    -_addUnexpectedSuccess(result)
    -
    - -
    -
    -_baseAssertEqual(first, second, msg=None)
    -

    The default assertEqual implementation, not type specific.

    -
    - -
    -
    -_callCleanup(function, /, *args, **kwargs)
    -
    - -
    -
    -_callSetUp()
    -
    - -
    -
    -_callTearDown()
    -
    - -
    -
    -_callTestMethod(method)
    -
    - -
    -
    -_classSetupFailed = False
    -
    - -
    -
    -_class_cleanups = []
    -
    - -
    -
    -_deprecate()
    -
    - -
    -
    -_diffThreshold = 65536
    -
    - -
    -
    -_feedErrorsToResult(result, errors)
    -
    - -
    -
    -_formatMessage(msg, standardMsg)
    -

    Honour the longMessage attribute when generating failure messages. -If longMessage is False this means: -* Use only an explicit message if it is provided -* Otherwise use the standard message for the assert

    -

    If longMessage is True: -* Use the standard message -* If an explicit message is provided, plus ‘ : ‘ and the explicit message

    -
    - -
    -
    -_getAssertEqualityFunc(first, second)
    -

    Get a detailed comparison function for the types of the two args.

    -

    Returns: A callable accepting (first, second, msg=None) that will -raise a failure exception if first != second with a useful human -readable error message for those types.

    -
    - -
    -
    -_truncateMessage(message, diff)
    -
    - -
    -
    -classmethod addClassCleanup(function, /, *args, **kwargs)
    -

    Same as addCleanup, except the cleanup items are called even if -setUpClass fails (unlike tearDownClass).

    -
    - -
    -
    -addCleanup(function, /, *args, **kwargs)
    -

    Add a function, with arguments, to be called when the test is -completed. Functions added are called on a LIFO basis and are -called after tearDown on test failure or success.

    -

    Cleanup items are called even if setUp fails (unlike tearDown).

    -
    - -
    -
    -addTypeEqualityFunc(typeobj, function)
    -

    Add a type specific assertEqual style function to compare a type.

    -

    This method is for use by TestCase subclasses that need to register -their own type equality functions to provide nicer error messages.

    -
    -
    Args:
    -
    typeobj: The data type to call this function on when both values

    are of the same type in assertEqual().

    -
    -
    function: The callable taking two arguments and an optional

    msg= argument that raises self.failureException with a -useful error message when the two arguments are not equal.

    -
    -
    -
    -
    -
    - -
    -
    -assertAlmostEqual(first, second, places=None, msg=None, delta=None)
    -

    Fail if the two objects are unequal as determined by their -difference rounded to the given number of decimal places -(default 7) and comparing to zero, or by comparing that the -difference between the two objects is more than the given -delta.

    -

    Note that decimal places (from zero) are usually not the same -as significant digits (measured from the most significant digit).

    -

    If the two objects compare equal then they will automatically -compare almost equal.

    -
    - -
    -
    -assertAlmostEquals(**kwargs)
    -
    - -
    -
    -assertCountEqual(first, second, msg=None)
    -

    Asserts that two iterables have the same elements, the same number of -times, without regard to order.

    -
    -
    -
    -
    self.assertEqual(Counter(list(first)),

    Counter(list(second)))

    -
    -
    -
    -
    -
    Example:
      -
    • [0, 1, 1] and [1, 0, 1] compare equal.

    • -
    • [0, 0, 1] and [0, 1] compare unequal.

    • -
    -
    -
    -
    -
    - -
    -
    -assertDictContainsSubset(subset, dictionary, msg=None)
    -

    Checks whether dictionary is a superset of subset.

    -
    - -
    -
    -assertDictEqual(d1, d2, msg=None)
    -
    - -
    -
    -assertEqual(first, second, msg=None)
    -

    Fail if the two objects are unequal as determined by the ‘==’ -operator.

    -
    - -
    -
    -assertEquals(**kwargs)
    -
    - -
    -
    -assertFalse(expr, msg=None)
    -

    Check that the expression is false.

    -
    - -
    -
    -assertGreater(a, b, msg=None)
    -

    Just like self.assertTrue(a > b), but with a nicer default message.

    -
    - -
    -
    -assertGreaterEqual(a, b, msg=None)
    -

    Just like self.assertTrue(a >= b), but with a nicer default message.

    -
    - -
    -
    -assertIn(member, container, msg=None)
    -

    Just like self.assertTrue(a in b), but with a nicer default message.

    -
    - -
    -
    -assertIs(expr1, expr2, msg=None)
    -

    Just like self.assertTrue(a is b), but with a nicer default message.

    -
    - -
    -
    -assertIsInstance(obj, cls, msg=None)
    -

    Same as self.assertTrue(isinstance(obj, cls)), with a nicer -default message.

    -
    - -
    -
    -assertIsNone(obj, msg=None)
    -

    Same as self.assertTrue(obj is None), with a nicer default message.

    -
    - -
    -
    -assertIsNot(expr1, expr2, msg=None)
    -

    Just like self.assertTrue(a is not b), but with a nicer default message.

    -
    - -
    -
    -assertIsNotNone(obj, msg=None)
    -

    Included for symmetry with assertIsNone.

    -
    - -
    -
    -assertLess(a, b, msg=None)
    -

    Just like self.assertTrue(a < b), but with a nicer default message.

    -
    - -
    -
    -assertLessEqual(a, b, msg=None)
    -

    Just like self.assertTrue(a <= b), but with a nicer default message.

    -
    - -
    -
    -assertListEqual(list1, list2, msg=None)
    -

    A list-specific equality assertion.

    -
    -
    Args:

    list1: The first list to compare. -list2: The second list to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -
    - -
    -
    -assertLogs(logger=None, level=None)
    -

    Fail unless a log message of level level or higher is emitted -on logger_name or its children. If omitted, level defaults to -INFO and logger defaults to the root logger.

    -

    This method must be used as a context manager, and will yield -a recording object with two attributes: output and records. -At the end of the context manager, the output attribute will -be a list of the matching formatted log messages and the -records attribute will be a list of the corresponding LogRecord -objects.

    -

    Example:

    -
    with self.assertLogs('foo', level='INFO') as cm:
    -    logging.getLogger('foo').info('first message')
    -    logging.getLogger('foo.bar').error('second message')
    -self.assertEqual(cm.output, ['INFO:foo:first message',
    -                             'ERROR:foo.bar:second message'])
    -
    -
    -
    - -
    -
    -assertMultiLineEqual(first, second, msg=None)
    -

    Assert that two multi-line strings are equal.

    -
    - -
    -
    -assertNotAlmostEqual(first, second, places=None, msg=None, delta=None)
    -

    Fail if the two objects are equal as determined by their -difference rounded to the given number of decimal places -(default 7) and comparing to zero, or by comparing that the -difference between the two objects is less than the given delta.

    -

    Note that decimal places (from zero) are usually not the same -as significant digits (measured from the most significant digit).

    -

    Objects that are equal automatically fail.

    -
    - -
    -
    -assertNotAlmostEquals(**kwargs)
    -
    - -
    -
    -assertNotEqual(first, second, msg=None)
    -

    Fail if the two objects are equal as determined by the ‘!=’ -operator.

    -
    - -
    -
    -assertNotEquals(**kwargs)
    -
    - -
    -
    -assertNotIn(member, container, msg=None)
    -

    Just like self.assertTrue(a not in b), but with a nicer default message.

    -
    - -
    -
    -assertNotIsInstance(obj, cls, msg=None)
    -

    Included for symmetry with assertIsInstance.

    -
    - -
    -
    -assertNotRegex(text, unexpected_regex, msg=None)
    -

    Fail the test if the text matches the regular expression.

    -
    - -
    -
    -assertNotRegexpMatches(**kwargs)
    -
    - -
    -
    -assertRaises(expected_exception, *args, **kwargs)
    -

    Fail unless an exception of class expected_exception is raised -by the callable when invoked with specified positional and -keyword arguments. If a different type of exception is -raised, it will not be caught, and the test case will be -deemed to have suffered an error, exactly as for an -unexpected exception.

    -

    If called with the callable and arguments omitted, will return a -context object used like this:

    -
    with self.assertRaises(SomeException):
    -    do_something()
    -
    -
    -

    An optional keyword argument ‘msg’ can be provided when assertRaises -is used as a context object.

    -

    The context manager keeps a reference to the exception as -the ‘exception’ attribute. This allows you to inspect the -exception after the assertion:

    -
    with self.assertRaises(SomeException) as cm:
    -    do_something()
    -the_exception = cm.exception
    -self.assertEqual(the_exception.error_code, 3)
    -
    -
    -
    - -
    -
    -assertRaisesRegex(expected_exception, expected_regex, *args, **kwargs)
    -

    Asserts that the message in a raised exception matches a regex.

    -
    -
    Args:

    expected_exception: Exception class expected to be raised. -expected_regex: Regex (re.Pattern object or string) expected

    -
    -

    to be found in error message.

    -
    -

    args: Function to be called and extra positional args. -kwargs: Extra kwargs. -msg: Optional message used in case of failure. Can only be used

    -
    -

    when assertRaisesRegex is used as a context manager.

    -
    -
    -
    -
    - -
    -
    -assertRaisesRegexp(**kwargs)
    -
    - -
    -
    -assertRegex(text, expected_regex, msg=None)
    -

    Fail the test unless the text matches the regular expression.

    -
    - -
    -
    -assertRegexpMatches(**kwargs)
    -
    - -
    -
    -assertSequenceEqual(seq1, seq2, msg=None, seq_type=None)
    -

    An equality assertion for ordered sequences (like lists and tuples).

    -

    For the purposes of this function, a valid ordered sequence type is one -which can be indexed, has a length, and has an equality operator.

    -
    -
    Args:

    seq1: The first sequence to compare. -seq2: The second sequence to compare. -seq_type: The expected datatype of the sequences, or None if no

    -
    -

    datatype should be enforced.

    -
    -
    -
    msg: Optional message to use on failure instead of a list of

    differences.

    -
    -
    -
    -
    -
    - -
    -
    -assertSetEqual(set1, set2, msg=None)
    -

    A set-specific equality assertion.

    -
    -
    Args:

    set1: The first set to compare. -set2: The second set to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -

    assertSetEqual uses ducktyping to support different types of sets, and -is optimized for sets specifically (parameters must support a -difference method).

    -
    - -
    -
    -assertTrue(expr, msg=None)
    -

    Check that the expression is true.

    -
    - -
    -
    -assertTupleEqual(tuple1, tuple2, msg=None)
    -

    A tuple-specific equality assertion.

    -
    -
    Args:

    tuple1: The first tuple to compare. -tuple2: The second tuple to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -
    - -
    -
    -assertWarns(expected_warning, *args, **kwargs)
    -

    Fail unless a warning of class warnClass is triggered -by the callable when invoked with specified positional and -keyword arguments. If a different type of warning is -triggered, it will not be handled: depending on the other -warning filtering rules in effect, it might be silenced, printed -out, or raised as an exception.

    -

    If called with the callable and arguments omitted, will return a -context object used like this:

    -
    with self.assertWarns(SomeWarning):
    -    do_something()
    -
    -
    -

    An optional keyword argument ‘msg’ can be provided when assertWarns -is used as a context object.

    -

    The context manager keeps a reference to the first matching -warning as the ‘warning’ attribute; similarly, the ‘filename’ -and ‘lineno’ attributes give you information about the line -of Python code from which the warning was triggered. -This allows you to inspect the warning after the assertion:

    -
    with self.assertWarns(SomeWarning) as cm:
    -    do_something()
    -the_warning = cm.warning
    -self.assertEqual(the_warning.some_attribute, 147)
    -
    -
    -
    - -
    -
    -assertWarnsRegex(expected_warning, expected_regex, *args, **kwargs)
    -

    Asserts that the message in a triggered warning matches a regexp. -Basic functioning is similar to assertWarns() with the addition -that only warnings whose messages also match the regular expression -are considered successful matches.

    -
    -
    Args:

    expected_warning: Warning class expected to be triggered. -expected_regex: Regex (re.Pattern object or string) expected

    -
    -

    to be found in error message.

    -
    -

    args: Function to be called and extra positional args. -kwargs: Extra kwargs. -msg: Optional message used in case of failure. Can only be used

    -
    -

    when assertWarnsRegex is used as a context manager.

    -
    -
    -
    -
    - -
    -
    -assert_(**kwargs)
    -
    - -
    -
    -card_type = 'iso7816'
    -
    - -
    -
    -countTestCases()
    -
    - -
    -
    -debug()
    -

    Run the test without collecting errors in a TestResult

    -
    - -
    -
    -defaultTestResult()
    -
    - -
    -
    -classmethod doClassCleanups()
    -

    Execute all class cleanup functions. Normally called for you after -tearDownClass.

    -
    - -
    -
    -doCleanups()
    -

    Execute all cleanup functions. Normally called for you after -tearDown.

    -
    - -
    -
    -fail(msg=None)
    -

    Fail immediately, with the given message.

    -
    - -
    -
    -failIf(**kwargs)
    -
    - -
    -
    -failIfAlmostEqual(**kwargs)
    -
    - -
    -
    -failIfEqual(**kwargs)
    -
    - -
    -
    -failUnless(**kwargs)
    -
    - -
    -
    -failUnlessAlmostEqual(**kwargs)
    -
    - -
    -
    -failUnlessEqual(**kwargs)
    -
    - -
    -
    -failUnlessRaises(**kwargs)
    -
    - -
    -
    -failureException
    -

    alias of AssertionError

    -
    - -
    -
    -id()
    -
    - -
    -
    -longMessage = True
    -
    - -
    -
    -maxDiff = 640
    -
    - -
    -
    -run(result=None)
    -
    - -
    -
    -setUp()
    -

    Hook method for setting up the test fixture before exercising it.

    -
    - -
    -
    -classmethod setUpClass()
    -

    Hook method for setting up class fixture before running tests in the class.

    -
    - -
    -
    -shortDescription()
    -

    Returns a one-line description of the test, or None if no -description has been provided.

    -

    The default implementation of this method returns the first line of -the specified test method’s docstring.

    -
    - -
    -
    -skipTest(reason)
    -

    Skip this test.

    -
    - -
    -
    -subTest(msg=<object object>, **params)
    -

    Return a context manager that will return the enclosed block -of code in a subtest identified by the optional message and -keyword parameters. A failure in the subtest marks the test -case as failed but resumes execution at the end of the enclosed -block, allowing further test code to be executed.

    -
    - -
    -
    -tearDown()
    -

    Hook method for deconstructing the test fixture after testing it.

    -
    - -
    -
    -classmethod tearDownClass()
    -

    Hook method for deconstructing the class fixture after running all tests in the class.

    -
    - -
    -
    -test_card_creation()
    -
    - -
    -
    -test_get_and_set_card()
    -
    - -
    - -
    -
    -class virtualsmartcard.tests.CardGenerator_test.TestNPACardGenerator(methodName='runTest')
    -

    Bases: virtualsmartcard.tests.CardGenerator_test.ISO7816GeneratorTest

    -
    -
    -_addExpectedFailure(result, exc_info)
    -
    - -
    -
    -_addSkip(result, test_case, reason)
    -
    - -
    -
    -_addUnexpectedSuccess(result)
    -
    - -
    -
    -_baseAssertEqual(first, second, msg=None)
    -

    The default assertEqual implementation, not type specific.

    -
    - -
    -
    -_callCleanup(function, /, *args, **kwargs)
    -
    - -
    -
    -_callSetUp()
    -
    - -
    -
    -_callTearDown()
    -
    - -
    -
    -_callTestMethod(method)
    -
    - -
    -
    -_classSetupFailed = False
    -
    - -
    -
    -_class_cleanups = []
    -
    - -
    -
    -_deprecate()
    -
    - -
    -
    -_diffThreshold = 65536
    -
    - -
    -
    -_feedErrorsToResult(result, errors)
    -
    - -
    -
    -_formatMessage(msg, standardMsg)
    -

    Honour the longMessage attribute when generating failure messages. -If longMessage is False this means: -* Use only an explicit message if it is provided -* Otherwise use the standard message for the assert

    -

    If longMessage is True: -* Use the standard message -* If an explicit message is provided, plus ‘ : ‘ and the explicit message

    -
    - -
    -
    -_getAssertEqualityFunc(first, second)
    -

    Get a detailed comparison function for the types of the two args.

    -

    Returns: A callable accepting (first, second, msg=None) that will -raise a failure exception if first != second with a useful human -readable error message for those types.

    -
    - -
    -
    -_truncateMessage(message, diff)
    -
    - -
    -
    -classmethod addClassCleanup(function, /, *args, **kwargs)
    -

    Same as addCleanup, except the cleanup items are called even if -setUpClass fails (unlike tearDownClass).

    -
    - -
    -
    -addCleanup(function, /, *args, **kwargs)
    -

    Add a function, with arguments, to be called when the test is -completed. Functions added are called on a LIFO basis and are -called after tearDown on test failure or success.

    -

    Cleanup items are called even if setUp fails (unlike tearDown).

    -
    - -
    -
    -addTypeEqualityFunc(typeobj, function)
    -

    Add a type specific assertEqual style function to compare a type.

    -

    This method is for use by TestCase subclasses that need to register -their own type equality functions to provide nicer error messages.

    -
    -
    Args:
    -
    typeobj: The data type to call this function on when both values

    are of the same type in assertEqual().

    -
    -
    function: The callable taking two arguments and an optional

    msg= argument that raises self.failureException with a -useful error message when the two arguments are not equal.

    -
    -
    -
    -
    -
    - -
    -
    -assertAlmostEqual(first, second, places=None, msg=None, delta=None)
    -

    Fail if the two objects are unequal as determined by their -difference rounded to the given number of decimal places -(default 7) and comparing to zero, or by comparing that the -difference between the two objects is more than the given -delta.

    -

    Note that decimal places (from zero) are usually not the same -as significant digits (measured from the most significant digit).

    -

    If the two objects compare equal then they will automatically -compare almost equal.

    -
    - -
    -
    -assertAlmostEquals(**kwargs)
    -
    - -
    -
    -assertCountEqual(first, second, msg=None)
    -

    Asserts that two iterables have the same elements, the same number of -times, without regard to order.

    -
    -
    -
    -
    self.assertEqual(Counter(list(first)),

    Counter(list(second)))

    -
    -
    -
    -
    -
    Example:
      -
    • [0, 1, 1] and [1, 0, 1] compare equal.

    • -
    • [0, 0, 1] and [0, 1] compare unequal.

    • -
    -
    -
    -
    -
    - -
    -
    -assertDictContainsSubset(subset, dictionary, msg=None)
    -

    Checks whether dictionary is a superset of subset.

    -
    - -
    -
    -assertDictEqual(d1, d2, msg=None)
    -
    - -
    -
    -assertEqual(first, second, msg=None)
    -

    Fail if the two objects are unequal as determined by the ‘==’ -operator.

    -
    - -
    -
    -assertEquals(**kwargs)
    -
    - -
    -
    -assertFalse(expr, msg=None)
    -

    Check that the expression is false.

    -
    - -
    -
    -assertGreater(a, b, msg=None)
    -

    Just like self.assertTrue(a > b), but with a nicer default message.

    -
    - -
    -
    -assertGreaterEqual(a, b, msg=None)
    -

    Just like self.assertTrue(a >= b), but with a nicer default message.

    -
    - -
    -
    -assertIn(member, container, msg=None)
    -

    Just like self.assertTrue(a in b), but with a nicer default message.

    -
    - -
    -
    -assertIs(expr1, expr2, msg=None)
    -

    Just like self.assertTrue(a is b), but with a nicer default message.

    -
    - -
    -
    -assertIsInstance(obj, cls, msg=None)
    -

    Same as self.assertTrue(isinstance(obj, cls)), with a nicer -default message.

    -
    - -
    -
    -assertIsNone(obj, msg=None)
    -

    Same as self.assertTrue(obj is None), with a nicer default message.

    -
    - -
    -
    -assertIsNot(expr1, expr2, msg=None)
    -

    Just like self.assertTrue(a is not b), but with a nicer default message.

    -
    - -
    -
    -assertIsNotNone(obj, msg=None)
    -

    Included for symmetry with assertIsNone.

    -
    - -
    -
    -assertLess(a, b, msg=None)
    -

    Just like self.assertTrue(a < b), but with a nicer default message.

    -
    - -
    -
    -assertLessEqual(a, b, msg=None)
    -

    Just like self.assertTrue(a <= b), but with a nicer default message.

    -
    - -
    -
    -assertListEqual(list1, list2, msg=None)
    -

    A list-specific equality assertion.

    -
    -
    Args:

    list1: The first list to compare. -list2: The second list to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -
    - -
    -
    -assertLogs(logger=None, level=None)
    -

    Fail unless a log message of level level or higher is emitted -on logger_name or its children. If omitted, level defaults to -INFO and logger defaults to the root logger.

    -

    This method must be used as a context manager, and will yield -a recording object with two attributes: output and records. -At the end of the context manager, the output attribute will -be a list of the matching formatted log messages and the -records attribute will be a list of the corresponding LogRecord -objects.

    -

    Example:

    -
    with self.assertLogs('foo', level='INFO') as cm:
    -    logging.getLogger('foo').info('first message')
    -    logging.getLogger('foo.bar').error('second message')
    -self.assertEqual(cm.output, ['INFO:foo:first message',
    -                             'ERROR:foo.bar:second message'])
    -
    -
    -
    - -
    -
    -assertMultiLineEqual(first, second, msg=None)
    -

    Assert that two multi-line strings are equal.

    -
    - -
    -
    -assertNotAlmostEqual(first, second, places=None, msg=None, delta=None)
    -

    Fail if the two objects are equal as determined by their -difference rounded to the given number of decimal places -(default 7) and comparing to zero, or by comparing that the -difference between the two objects is less than the given delta.

    -

    Note that decimal places (from zero) are usually not the same -as significant digits (measured from the most significant digit).

    -

    Objects that are equal automatically fail.

    -
    - -
    -
    -assertNotAlmostEquals(**kwargs)
    -
    - -
    -
    -assertNotEqual(first, second, msg=None)
    -

    Fail if the two objects are equal as determined by the ‘!=’ -operator.

    -
    - -
    -
    -assertNotEquals(**kwargs)
    -
    - -
    -
    -assertNotIn(member, container, msg=None)
    -

    Just like self.assertTrue(a not in b), but with a nicer default message.

    -
    - -
    -
    -assertNotIsInstance(obj, cls, msg=None)
    -

    Included for symmetry with assertIsInstance.

    -
    - -
    -
    -assertNotRegex(text, unexpected_regex, msg=None)
    -

    Fail the test if the text matches the regular expression.

    -
    - -
    -
    -assertNotRegexpMatches(**kwargs)
    -
    - -
    -
    -assertRaises(expected_exception, *args, **kwargs)
    -

    Fail unless an exception of class expected_exception is raised -by the callable when invoked with specified positional and -keyword arguments. If a different type of exception is -raised, it will not be caught, and the test case will be -deemed to have suffered an error, exactly as for an -unexpected exception.

    -

    If called with the callable and arguments omitted, will return a -context object used like this:

    -
    with self.assertRaises(SomeException):
    -    do_something()
    -
    -
    -

    An optional keyword argument ‘msg’ can be provided when assertRaises -is used as a context object.

    -

    The context manager keeps a reference to the exception as -the ‘exception’ attribute. This allows you to inspect the -exception after the assertion:

    -
    with self.assertRaises(SomeException) as cm:
    -    do_something()
    -the_exception = cm.exception
    -self.assertEqual(the_exception.error_code, 3)
    -
    -
    -
    - -
    -
    -assertRaisesRegex(expected_exception, expected_regex, *args, **kwargs)
    -

    Asserts that the message in a raised exception matches a regex.

    -
    -
    Args:

    expected_exception: Exception class expected to be raised. -expected_regex: Regex (re.Pattern object or string) expected

    -
    -

    to be found in error message.

    -
    -

    args: Function to be called and extra positional args. -kwargs: Extra kwargs. -msg: Optional message used in case of failure. Can only be used

    -
    -

    when assertRaisesRegex is used as a context manager.

    -
    -
    -
    -
    - -
    -
    -assertRaisesRegexp(**kwargs)
    -
    - -
    -
    -assertRegex(text, expected_regex, msg=None)
    -

    Fail the test unless the text matches the regular expression.

    -
    - -
    -
    -assertRegexpMatches(**kwargs)
    -
    - -
    -
    -assertSequenceEqual(seq1, seq2, msg=None, seq_type=None)
    -

    An equality assertion for ordered sequences (like lists and tuples).

    -

    For the purposes of this function, a valid ordered sequence type is one -which can be indexed, has a length, and has an equality operator.

    -
    -
    Args:

    seq1: The first sequence to compare. -seq2: The second sequence to compare. -seq_type: The expected datatype of the sequences, or None if no

    -
    -

    datatype should be enforced.

    -
    -
    -
    msg: Optional message to use on failure instead of a list of

    differences.

    -
    -
    -
    -
    -
    - -
    -
    -assertSetEqual(set1, set2, msg=None)
    -

    A set-specific equality assertion.

    -
    -
    Args:

    set1: The first set to compare. -set2: The second set to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -

    assertSetEqual uses ducktyping to support different types of sets, and -is optimized for sets specifically (parameters must support a -difference method).

    -
    - -
    -
    -assertTrue(expr, msg=None)
    -

    Check that the expression is true.

    -
    - -
    -
    -assertTupleEqual(tuple1, tuple2, msg=None)
    -

    A tuple-specific equality assertion.

    -
    -
    Args:

    tuple1: The first tuple to compare. -tuple2: The second tuple to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -
    - -
    -
    -assertWarns(expected_warning, *args, **kwargs)
    -

    Fail unless a warning of class warnClass is triggered -by the callable when invoked with specified positional and -keyword arguments. If a different type of warning is -triggered, it will not be handled: depending on the other -warning filtering rules in effect, it might be silenced, printed -out, or raised as an exception.

    -

    If called with the callable and arguments omitted, will return a -context object used like this:

    -
    with self.assertWarns(SomeWarning):
    -    do_something()
    -
    -
    -

    An optional keyword argument ‘msg’ can be provided when assertWarns -is used as a context object.

    -

    The context manager keeps a reference to the first matching -warning as the ‘warning’ attribute; similarly, the ‘filename’ -and ‘lineno’ attributes give you information about the line -of Python code from which the warning was triggered. -This allows you to inspect the warning after the assertion:

    -
    with self.assertWarns(SomeWarning) as cm:
    -    do_something()
    -the_warning = cm.warning
    -self.assertEqual(the_warning.some_attribute, 147)
    -
    -
    -
    - -
    -
    -assertWarnsRegex(expected_warning, expected_regex, *args, **kwargs)
    -

    Asserts that the message in a triggered warning matches a regexp. -Basic functioning is similar to assertWarns() with the addition -that only warnings whose messages also match the regular expression -are considered successful matches.

    -
    -
    Args:

    expected_warning: Warning class expected to be triggered. -expected_regex: Regex (re.Pattern object or string) expected

    -
    -

    to be found in error message.

    -
    -

    args: Function to be called and extra positional args. -kwargs: Extra kwargs. -msg: Optional message used in case of failure. Can only be used

    -
    -

    when assertWarnsRegex is used as a context manager.

    -
    -
    -
    -
    - -
    -
    -assert_(**kwargs)
    -
    - -
    -
    -card_type = 'nPA'
    -
    - -
    -
    -countTestCases()
    -
    - -
    -
    -debug()
    -

    Run the test without collecting errors in a TestResult

    -
    - -
    -
    -defaultTestResult()
    -
    - -
    -
    -classmethod doClassCleanups()
    -

    Execute all class cleanup functions. Normally called for you after -tearDownClass.

    -
    - -
    -
    -doCleanups()
    -

    Execute all cleanup functions. Normally called for you after -tearDown.

    -
    - -
    -
    -fail(msg=None)
    -

    Fail immediately, with the given message.

    -
    - -
    -
    -failIf(**kwargs)
    -
    - -
    -
    -failIfAlmostEqual(**kwargs)
    -
    - -
    -
    -failIfEqual(**kwargs)
    -
    - -
    -
    -failUnless(**kwargs)
    -
    - -
    -
    -failUnlessAlmostEqual(**kwargs)
    -
    - -
    -
    -failUnlessEqual(**kwargs)
    -
    - -
    -
    -failUnlessRaises(**kwargs)
    -
    - -
    -
    -failureException
    -

    alias of AssertionError

    -
    - -
    -
    -id()
    -
    - -
    -
    -longMessage = True
    -
    - -
    -
    -maxDiff = 640
    -
    - -
    -
    -run(result=None)
    -
    - -
    -
    -setUp()
    -

    Hook method for setting up the test fixture before exercising it.

    -
    - -
    -
    -classmethod setUpClass()
    -

    Hook method for setting up class fixture before running tests in the class.

    -
    - -
    -
    -shortDescription()
    -

    Returns a one-line description of the test, or None if no -description has been provided.

    -

    The default implementation of this method returns the first line of -the specified test method’s docstring.

    -
    - -
    -
    -skipTest(reason)
    -

    Skip this test.

    -
    - -
    -
    -subTest(msg=<object object>, **params)
    -

    Return a context manager that will return the enclosed block -of code in a subtest identified by the optional message and -keyword parameters. A failure in the subtest marks the test -case as failed but resumes execution at the end of the enclosed -block, allowing further test code to be executed.

    -
    - -
    -
    -tearDown()
    -

    Hook method for deconstructing the test fixture after testing it.

    -
    - -
    -
    -classmethod tearDownClass()
    -

    Hook method for deconstructing the class fixture after running all tests in the class.

    -
    - -
    -
    -test_card_creation()
    -
    - -
    -
    -test_get_and_set_card()
    -
    - -
    -
    -test_readDatagroups()
    -
    - -
    - -
    - - -
    - -
    -
    -
    -
    -

    - Back to top - -

    -

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    -

    -
    -
    - - \ No newline at end of file diff --git a/docs/virtualsmartcard/api/virtualsmartcard.tests.CryptoUtils_test.html b/docs/virtualsmartcard/api/virtualsmartcard.tests.CryptoUtils_test.html deleted file mode 100644 index 8d55bfe..0000000 --- a/docs/virtualsmartcard/api/virtualsmartcard.tests.CryptoUtils_test.html +++ /dev/null @@ -1,843 +0,0 @@ - - - - - - - CryptoUtils_test Module — vsmartcard 2021-04-28 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -

    CryptoUtils_test Module

    -
    Inheritance diagram of virtualsmartcard.tests.CryptoUtils_test
    - - -
    -
    -class virtualsmartcard.tests.CryptoUtils_test.TestCryptoUtils(methodName='runTest')
    -

    Bases: unittest.case.TestCase

    -
    -
    -_addExpectedFailure(result, exc_info)
    -
    - -
    -
    -_addSkip(result, test_case, reason)
    -
    - -
    -
    -_addUnexpectedSuccess(result)
    -
    - -
    -
    -_baseAssertEqual(first, second, msg=None)
    -

    The default assertEqual implementation, not type specific.

    -
    - -
    -
    -_callCleanup(function, /, *args, **kwargs)
    -
    - -
    -
    -_callSetUp()
    -
    - -
    -
    -_callTearDown()
    -
    - -
    -
    -_callTestMethod(method)
    -
    - -
    -
    -_classSetupFailed = False
    -
    - -
    -
    -_class_cleanups = []
    -
    - -
    -
    -_deprecate()
    -
    - -
    -
    -_diffThreshold = 65536
    -
    - -
    -
    -_feedErrorsToResult(result, errors)
    -
    - -
    -
    -_formatMessage(msg, standardMsg)
    -

    Honour the longMessage attribute when generating failure messages. -If longMessage is False this means: -* Use only an explicit message if it is provided -* Otherwise use the standard message for the assert

    -

    If longMessage is True: -* Use the standard message -* If an explicit message is provided, plus ‘ : ‘ and the explicit message

    -
    - -
    -
    -_getAssertEqualityFunc(first, second)
    -

    Get a detailed comparison function for the types of the two args.

    -

    Returns: A callable accepting (first, second, msg=None) that will -raise a failure exception if first != second with a useful human -readable error message for those types.

    -
    - -
    -
    -_truncateMessage(message, diff)
    -
    - -
    -
    -classmethod addClassCleanup(function, /, *args, **kwargs)
    -

    Same as addCleanup, except the cleanup items are called even if -setUpClass fails (unlike tearDownClass).

    -
    - -
    -
    -addCleanup(function, /, *args, **kwargs)
    -

    Add a function, with arguments, to be called when the test is -completed. Functions added are called on a LIFO basis and are -called after tearDown on test failure or success.

    -

    Cleanup items are called even if setUp fails (unlike tearDown).

    -
    - -
    -
    -addTypeEqualityFunc(typeobj, function)
    -

    Add a type specific assertEqual style function to compare a type.

    -

    This method is for use by TestCase subclasses that need to register -their own type equality functions to provide nicer error messages.

    -
    -
    Args:
    -
    typeobj: The data type to call this function on when both values

    are of the same type in assertEqual().

    -
    -
    function: The callable taking two arguments and an optional

    msg= argument that raises self.failureException with a -useful error message when the two arguments are not equal.

    -
    -
    -
    -
    -
    - -
    -
    -assertAlmostEqual(first, second, places=None, msg=None, delta=None)
    -

    Fail if the two objects are unequal as determined by their -difference rounded to the given number of decimal places -(default 7) and comparing to zero, or by comparing that the -difference between the two objects is more than the given -delta.

    -

    Note that decimal places (from zero) are usually not the same -as significant digits (measured from the most significant digit).

    -

    If the two objects compare equal then they will automatically -compare almost equal.

    -
    - -
    -
    -assertAlmostEquals(**kwargs)
    -
    - -
    -
    -assertCountEqual(first, second, msg=None)
    -

    Asserts that two iterables have the same elements, the same number of -times, without regard to order.

    -
    -
    -
    -
    self.assertEqual(Counter(list(first)),

    Counter(list(second)))

    -
    -
    -
    -
    -
    Example:
      -
    • [0, 1, 1] and [1, 0, 1] compare equal.

    • -
    • [0, 0, 1] and [0, 1] compare unequal.

    • -
    -
    -
    -
    -
    - -
    -
    -assertDictContainsSubset(subset, dictionary, msg=None)
    -

    Checks whether dictionary is a superset of subset.

    -
    - -
    -
    -assertDictEqual(d1, d2, msg=None)
    -
    - -
    -
    -assertEqual(first, second, msg=None)
    -

    Fail if the two objects are unequal as determined by the ‘==’ -operator.

    -
    - -
    -
    -assertEquals(**kwargs)
    -
    - -
    -
    -assertFalse(expr, msg=None)
    -

    Check that the expression is false.

    -
    - -
    -
    -assertGreater(a, b, msg=None)
    -

    Just like self.assertTrue(a > b), but with a nicer default message.

    -
    - -
    -
    -assertGreaterEqual(a, b, msg=None)
    -

    Just like self.assertTrue(a >= b), but with a nicer default message.

    -
    - -
    -
    -assertIn(member, container, msg=None)
    -

    Just like self.assertTrue(a in b), but with a nicer default message.

    -
    - -
    -
    -assertIs(expr1, expr2, msg=None)
    -

    Just like self.assertTrue(a is b), but with a nicer default message.

    -
    - -
    -
    -assertIsInstance(obj, cls, msg=None)
    -

    Same as self.assertTrue(isinstance(obj, cls)), with a nicer -default message.

    -
    - -
    -
    -assertIsNone(obj, msg=None)
    -

    Same as self.assertTrue(obj is None), with a nicer default message.

    -
    - -
    -
    -assertIsNot(expr1, expr2, msg=None)
    -

    Just like self.assertTrue(a is not b), but with a nicer default message.

    -
    - -
    -
    -assertIsNotNone(obj, msg=None)
    -

    Included for symmetry with assertIsNone.

    -
    - -
    -
    -assertLess(a, b, msg=None)
    -

    Just like self.assertTrue(a < b), but with a nicer default message.

    -
    - -
    -
    -assertLessEqual(a, b, msg=None)
    -

    Just like self.assertTrue(a <= b), but with a nicer default message.

    -
    - -
    -
    -assertListEqual(list1, list2, msg=None)
    -

    A list-specific equality assertion.

    -
    -
    Args:

    list1: The first list to compare. -list2: The second list to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -
    - -
    -
    -assertLogs(logger=None, level=None)
    -

    Fail unless a log message of level level or higher is emitted -on logger_name or its children. If omitted, level defaults to -INFO and logger defaults to the root logger.

    -

    This method must be used as a context manager, and will yield -a recording object with two attributes: output and records. -At the end of the context manager, the output attribute will -be a list of the matching formatted log messages and the -records attribute will be a list of the corresponding LogRecord -objects.

    -

    Example:

    -
    with self.assertLogs('foo', level='INFO') as cm:
    -    logging.getLogger('foo').info('first message')
    -    logging.getLogger('foo.bar').error('second message')
    -self.assertEqual(cm.output, ['INFO:foo:first message',
    -                             'ERROR:foo.bar:second message'])
    -
    -
    -
    - -
    -
    -assertMultiLineEqual(first, second, msg=None)
    -

    Assert that two multi-line strings are equal.

    -
    - -
    -
    -assertNotAlmostEqual(first, second, places=None, msg=None, delta=None)
    -

    Fail if the two objects are equal as determined by their -difference rounded to the given number of decimal places -(default 7) and comparing to zero, or by comparing that the -difference between the two objects is less than the given delta.

    -

    Note that decimal places (from zero) are usually not the same -as significant digits (measured from the most significant digit).

    -

    Objects that are equal automatically fail.

    -
    - -
    -
    -assertNotAlmostEquals(**kwargs)
    -
    - -
    -
    -assertNotEqual(first, second, msg=None)
    -

    Fail if the two objects are equal as determined by the ‘!=’ -operator.

    -
    - -
    -
    -assertNotEquals(**kwargs)
    -
    - -
    -
    -assertNotIn(member, container, msg=None)
    -

    Just like self.assertTrue(a not in b), but with a nicer default message.

    -
    - -
    -
    -assertNotIsInstance(obj, cls, msg=None)
    -

    Included for symmetry with assertIsInstance.

    -
    - -
    -
    -assertNotRegex(text, unexpected_regex, msg=None)
    -

    Fail the test if the text matches the regular expression.

    -
    - -
    -
    -assertNotRegexpMatches(**kwargs)
    -
    - -
    -
    -assertRaises(expected_exception, *args, **kwargs)
    -

    Fail unless an exception of class expected_exception is raised -by the callable when invoked with specified positional and -keyword arguments. If a different type of exception is -raised, it will not be caught, and the test case will be -deemed to have suffered an error, exactly as for an -unexpected exception.

    -

    If called with the callable and arguments omitted, will return a -context object used like this:

    -
    with self.assertRaises(SomeException):
    -    do_something()
    -
    -
    -

    An optional keyword argument ‘msg’ can be provided when assertRaises -is used as a context object.

    -

    The context manager keeps a reference to the exception as -the ‘exception’ attribute. This allows you to inspect the -exception after the assertion:

    -
    with self.assertRaises(SomeException) as cm:
    -    do_something()
    -the_exception = cm.exception
    -self.assertEqual(the_exception.error_code, 3)
    -
    -
    -
    - -
    -
    -assertRaisesRegex(expected_exception, expected_regex, *args, **kwargs)
    -

    Asserts that the message in a raised exception matches a regex.

    -
    -
    Args:

    expected_exception: Exception class expected to be raised. -expected_regex: Regex (re.Pattern object or string) expected

    -
    -

    to be found in error message.

    -
    -

    args: Function to be called and extra positional args. -kwargs: Extra kwargs. -msg: Optional message used in case of failure. Can only be used

    -
    -

    when assertRaisesRegex is used as a context manager.

    -
    -
    -
    -
    - -
    -
    -assertRaisesRegexp(**kwargs)
    -
    - -
    -
    -assertRegex(text, expected_regex, msg=None)
    -

    Fail the test unless the text matches the regular expression.

    -
    - -
    -
    -assertRegexpMatches(**kwargs)
    -
    - -
    -
    -assertSequenceEqual(seq1, seq2, msg=None, seq_type=None)
    -

    An equality assertion for ordered sequences (like lists and tuples).

    -

    For the purposes of this function, a valid ordered sequence type is one -which can be indexed, has a length, and has an equality operator.

    -
    -
    Args:

    seq1: The first sequence to compare. -seq2: The second sequence to compare. -seq_type: The expected datatype of the sequences, or None if no

    -
    -

    datatype should be enforced.

    -
    -
    -
    msg: Optional message to use on failure instead of a list of

    differences.

    -
    -
    -
    -
    -
    - -
    -
    -assertSetEqual(set1, set2, msg=None)
    -

    A set-specific equality assertion.

    -
    -
    Args:

    set1: The first set to compare. -set2: The second set to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -

    assertSetEqual uses ducktyping to support different types of sets, and -is optimized for sets specifically (parameters must support a -difference method).

    -
    - -
    -
    -assertTrue(expr, msg=None)
    -

    Check that the expression is true.

    -
    - -
    -
    -assertTupleEqual(tuple1, tuple2, msg=None)
    -

    A tuple-specific equality assertion.

    -
    -
    Args:

    tuple1: The first tuple to compare. -tuple2: The second tuple to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -
    - -
    -
    -assertWarns(expected_warning, *args, **kwargs)
    -

    Fail unless a warning of class warnClass is triggered -by the callable when invoked with specified positional and -keyword arguments. If a different type of warning is -triggered, it will not be handled: depending on the other -warning filtering rules in effect, it might be silenced, printed -out, or raised as an exception.

    -

    If called with the callable and arguments omitted, will return a -context object used like this:

    -
    with self.assertWarns(SomeWarning):
    -    do_something()
    -
    -
    -

    An optional keyword argument ‘msg’ can be provided when assertWarns -is used as a context object.

    -

    The context manager keeps a reference to the first matching -warning as the ‘warning’ attribute; similarly, the ‘filename’ -and ‘lineno’ attributes give you information about the line -of Python code from which the warning was triggered. -This allows you to inspect the warning after the assertion:

    -
    with self.assertWarns(SomeWarning) as cm:
    -    do_something()
    -the_warning = cm.warning
    -self.assertEqual(the_warning.some_attribute, 147)
    -
    -
    -
    - -
    -
    -assertWarnsRegex(expected_warning, expected_regex, *args, **kwargs)
    -

    Asserts that the message in a triggered warning matches a regexp. -Basic functioning is similar to assertWarns() with the addition -that only warnings whose messages also match the regular expression -are considered successful matches.

    -
    -
    Args:

    expected_warning: Warning class expected to be triggered. -expected_regex: Regex (re.Pattern object or string) expected

    -
    -

    to be found in error message.

    -
    -

    args: Function to be called and extra positional args. -kwargs: Extra kwargs. -msg: Optional message used in case of failure. Can only be used

    -
    -

    when assertWarnsRegex is used as a context manager.

    -
    -
    -
    -
    - -
    -
    -assert_(**kwargs)
    -
    - -
    -
    -countTestCases()
    -
    - -
    -
    -debug()
    -

    Run the test without collecting errors in a TestResult

    -
    - -
    -
    -defaultTestResult()
    -
    - -
    -
    -classmethod doClassCleanups()
    -

    Execute all class cleanup functions. Normally called for you after -tearDownClass.

    -
    - -
    -
    -doCleanups()
    -

    Execute all cleanup functions. Normally called for you after -tearDown.

    -
    - -
    -
    -fail(msg=None)
    -

    Fail immediately, with the given message.

    -
    - -
    -
    -failIf(**kwargs)
    -
    - -
    -
    -failIfAlmostEqual(**kwargs)
    -
    - -
    -
    -failIfEqual(**kwargs)
    -
    - -
    -
    -failUnless(**kwargs)
    -
    - -
    -
    -failUnlessAlmostEqual(**kwargs)
    -
    - -
    -
    -failUnlessEqual(**kwargs)
    -
    - -
    -
    -failUnlessRaises(**kwargs)
    -
    - -
    -
    -failureException
    -

    alias of AssertionError

    -
    - -
    -
    -id()
    -
    - -
    -
    -longMessage = True
    -
    - -
    -
    -maxDiff = 640
    -
    - -
    -
    -run(result=None)
    -
    - -
    -
    -setUp()
    -

    Hook method for setting up the test fixture before exercising it.

    -
    - -
    -
    -classmethod setUpClass()
    -

    Hook method for setting up class fixture before running tests in the class.

    -
    - -
    -
    -shortDescription()
    -

    Returns a one-line description of the test, or None if no -description has been provided.

    -

    The default implementation of this method returns the first line of -the specified test method’s docstring.

    -
    - -
    -
    -skipTest(reason)
    -

    Skip this test.

    -
    - -
    -
    -subTest(msg=<object object>, **params)
    -

    Return a context manager that will return the enclosed block -of code in a subtest identified by the optional message and -keyword parameters. A failure in the subtest marks the test -case as failed but resumes execution at the end of the enclosed -block, allowing further test code to be executed.

    -
    - -
    -
    -tearDown()
    -

    Hook method for deconstructing the test fixture after testing it.

    -
    - -
    -
    -classmethod tearDownClass()
    -

    Hook method for deconstructing the class fixture after running all tests in the class.

    -
    - -
    -
    -test_padding()
    -
    - -
    - -
    - - -
    - -
    -
    -
    -
    -

    - Back to top - -

    -

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    -

    -
    -
    - - \ No newline at end of file diff --git a/docs/virtualsmartcard/api/virtualsmartcard.tests.SmartcardSAM_test.html b/docs/virtualsmartcard/api/virtualsmartcard.tests.SmartcardSAM_test.html deleted file mode 100644 index d29f332..0000000 --- a/docs/virtualsmartcard/api/virtualsmartcard.tests.SmartcardSAM_test.html +++ /dev/null @@ -1,863 +0,0 @@ - - - - - - - SmartcardSAM_test Module — vsmartcard 2021-04-28 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -

    SmartcardSAM_test Module

    -
    Inheritance diagram of virtualsmartcard.tests.SmartcardSAM_test
    - - -
    -
    -class virtualsmartcard.tests.SmartcardSAM_test.TestSmartcardSAM(methodName='runTest')
    -

    Bases: unittest.case.TestCase

    -
    -
    -_addExpectedFailure(result, exc_info)
    -
    - -
    -
    -_addSkip(result, test_case, reason)
    -
    - -
    -
    -_addUnexpectedSuccess(result)
    -
    - -
    -
    -_baseAssertEqual(first, second, msg=None)
    -

    The default assertEqual implementation, not type specific.

    -
    - -
    -
    -_callCleanup(function, /, *args, **kwargs)
    -
    - -
    -
    -_callSetUp()
    -
    - -
    -
    -_callTearDown()
    -
    - -
    -
    -_callTestMethod(method)
    -
    - -
    -
    -_classSetupFailed = False
    -
    - -
    -
    -_class_cleanups = []
    -
    - -
    -
    -_deprecate()
    -
    - -
    -
    -_diffThreshold = 65536
    -
    - -
    -
    -_feedErrorsToResult(result, errors)
    -
    - -
    -
    -_formatMessage(msg, standardMsg)
    -

    Honour the longMessage attribute when generating failure messages. -If longMessage is False this means: -* Use only an explicit message if it is provided -* Otherwise use the standard message for the assert

    -

    If longMessage is True: -* Use the standard message -* If an explicit message is provided, plus ‘ : ‘ and the explicit message

    -
    - -
    -
    -_getAssertEqualityFunc(first, second)
    -

    Get a detailed comparison function for the types of the two args.

    -

    Returns: A callable accepting (first, second, msg=None) that will -raise a failure exception if first != second with a useful human -readable error message for those types.

    -
    - -
    -
    -_truncateMessage(message, diff)
    -
    - -
    -
    -classmethod addClassCleanup(function, /, *args, **kwargs)
    -

    Same as addCleanup, except the cleanup items are called even if -setUpClass fails (unlike tearDownClass).

    -
    - -
    -
    -addCleanup(function, /, *args, **kwargs)
    -

    Add a function, with arguments, to be called when the test is -completed. Functions added are called on a LIFO basis and are -called after tearDown on test failure or success.

    -

    Cleanup items are called even if setUp fails (unlike tearDown).

    -
    - -
    -
    -addTypeEqualityFunc(typeobj, function)
    -

    Add a type specific assertEqual style function to compare a type.

    -

    This method is for use by TestCase subclasses that need to register -their own type equality functions to provide nicer error messages.

    -
    -
    Args:
    -
    typeobj: The data type to call this function on when both values

    are of the same type in assertEqual().

    -
    -
    function: The callable taking two arguments and an optional

    msg= argument that raises self.failureException with a -useful error message when the two arguments are not equal.

    -
    -
    -
    -
    -
    - -
    -
    -assertAlmostEqual(first, second, places=None, msg=None, delta=None)
    -

    Fail if the two objects are unequal as determined by their -difference rounded to the given number of decimal places -(default 7) and comparing to zero, or by comparing that the -difference between the two objects is more than the given -delta.

    -

    Note that decimal places (from zero) are usually not the same -as significant digits (measured from the most significant digit).

    -

    If the two objects compare equal then they will automatically -compare almost equal.

    -
    - -
    -
    -assertAlmostEquals(**kwargs)
    -
    - -
    -
    -assertCountEqual(first, second, msg=None)
    -

    Asserts that two iterables have the same elements, the same number of -times, without regard to order.

    -
    -
    -
    -
    self.assertEqual(Counter(list(first)),

    Counter(list(second)))

    -
    -
    -
    -
    -
    Example:
      -
    • [0, 1, 1] and [1, 0, 1] compare equal.

    • -
    • [0, 0, 1] and [0, 1] compare unequal.

    • -
    -
    -
    -
    -
    - -
    -
    -assertDictContainsSubset(subset, dictionary, msg=None)
    -

    Checks whether dictionary is a superset of subset.

    -
    - -
    -
    -assertDictEqual(d1, d2, msg=None)
    -
    - -
    -
    -assertEqual(first, second, msg=None)
    -

    Fail if the two objects are unequal as determined by the ‘==’ -operator.

    -
    - -
    -
    -assertEquals(**kwargs)
    -
    - -
    -
    -assertFalse(expr, msg=None)
    -

    Check that the expression is false.

    -
    - -
    -
    -assertGreater(a, b, msg=None)
    -

    Just like self.assertTrue(a > b), but with a nicer default message.

    -
    - -
    -
    -assertGreaterEqual(a, b, msg=None)
    -

    Just like self.assertTrue(a >= b), but with a nicer default message.

    -
    - -
    -
    -assertIn(member, container, msg=None)
    -

    Just like self.assertTrue(a in b), but with a nicer default message.

    -
    - -
    -
    -assertIs(expr1, expr2, msg=None)
    -

    Just like self.assertTrue(a is b), but with a nicer default message.

    -
    - -
    -
    -assertIsInstance(obj, cls, msg=None)
    -

    Same as self.assertTrue(isinstance(obj, cls)), with a nicer -default message.

    -
    - -
    -
    -assertIsNone(obj, msg=None)
    -

    Same as self.assertTrue(obj is None), with a nicer default message.

    -
    - -
    -
    -assertIsNot(expr1, expr2, msg=None)
    -

    Just like self.assertTrue(a is not b), but with a nicer default message.

    -
    - -
    -
    -assertIsNotNone(obj, msg=None)
    -

    Included for symmetry with assertIsNone.

    -
    - -
    -
    -assertLess(a, b, msg=None)
    -

    Just like self.assertTrue(a < b), but with a nicer default message.

    -
    - -
    -
    -assertLessEqual(a, b, msg=None)
    -

    Just like self.assertTrue(a <= b), but with a nicer default message.

    -
    - -
    -
    -assertListEqual(list1, list2, msg=None)
    -

    A list-specific equality assertion.

    -
    -
    Args:

    list1: The first list to compare. -list2: The second list to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -
    - -
    -
    -assertLogs(logger=None, level=None)
    -

    Fail unless a log message of level level or higher is emitted -on logger_name or its children. If omitted, level defaults to -INFO and logger defaults to the root logger.

    -

    This method must be used as a context manager, and will yield -a recording object with two attributes: output and records. -At the end of the context manager, the output attribute will -be a list of the matching formatted log messages and the -records attribute will be a list of the corresponding LogRecord -objects.

    -

    Example:

    -
    with self.assertLogs('foo', level='INFO') as cm:
    -    logging.getLogger('foo').info('first message')
    -    logging.getLogger('foo.bar').error('second message')
    -self.assertEqual(cm.output, ['INFO:foo:first message',
    -                             'ERROR:foo.bar:second message'])
    -
    -
    -
    - -
    -
    -assertMultiLineEqual(first, second, msg=None)
    -

    Assert that two multi-line strings are equal.

    -
    - -
    -
    -assertNotAlmostEqual(first, second, places=None, msg=None, delta=None)
    -

    Fail if the two objects are equal as determined by their -difference rounded to the given number of decimal places -(default 7) and comparing to zero, or by comparing that the -difference between the two objects is less than the given delta.

    -

    Note that decimal places (from zero) are usually not the same -as significant digits (measured from the most significant digit).

    -

    Objects that are equal automatically fail.

    -
    - -
    -
    -assertNotAlmostEquals(**kwargs)
    -
    - -
    -
    -assertNotEqual(first, second, msg=None)
    -

    Fail if the two objects are equal as determined by the ‘!=’ -operator.

    -
    - -
    -
    -assertNotEquals(**kwargs)
    -
    - -
    -
    -assertNotIn(member, container, msg=None)
    -

    Just like self.assertTrue(a not in b), but with a nicer default message.

    -
    - -
    -
    -assertNotIsInstance(obj, cls, msg=None)
    -

    Included for symmetry with assertIsInstance.

    -
    - -
    -
    -assertNotRegex(text, unexpected_regex, msg=None)
    -

    Fail the test if the text matches the regular expression.

    -
    - -
    -
    -assertNotRegexpMatches(**kwargs)
    -
    - -
    -
    -assertRaises(expected_exception, *args, **kwargs)
    -

    Fail unless an exception of class expected_exception is raised -by the callable when invoked with specified positional and -keyword arguments. If a different type of exception is -raised, it will not be caught, and the test case will be -deemed to have suffered an error, exactly as for an -unexpected exception.

    -

    If called with the callable and arguments omitted, will return a -context object used like this:

    -
    with self.assertRaises(SomeException):
    -    do_something()
    -
    -
    -

    An optional keyword argument ‘msg’ can be provided when assertRaises -is used as a context object.

    -

    The context manager keeps a reference to the exception as -the ‘exception’ attribute. This allows you to inspect the -exception after the assertion:

    -
    with self.assertRaises(SomeException) as cm:
    -    do_something()
    -the_exception = cm.exception
    -self.assertEqual(the_exception.error_code, 3)
    -
    -
    -
    - -
    -
    -assertRaisesRegex(expected_exception, expected_regex, *args, **kwargs)
    -

    Asserts that the message in a raised exception matches a regex.

    -
    -
    Args:

    expected_exception: Exception class expected to be raised. -expected_regex: Regex (re.Pattern object or string) expected

    -
    -

    to be found in error message.

    -
    -

    args: Function to be called and extra positional args. -kwargs: Extra kwargs. -msg: Optional message used in case of failure. Can only be used

    -
    -

    when assertRaisesRegex is used as a context manager.

    -
    -
    -
    -
    - -
    -
    -assertRaisesRegexp(**kwargs)
    -
    - -
    -
    -assertRegex(text, expected_regex, msg=None)
    -

    Fail the test unless the text matches the regular expression.

    -
    - -
    -
    -assertRegexpMatches(**kwargs)
    -
    - -
    -
    -assertSequenceEqual(seq1, seq2, msg=None, seq_type=None)
    -

    An equality assertion for ordered sequences (like lists and tuples).

    -

    For the purposes of this function, a valid ordered sequence type is one -which can be indexed, has a length, and has an equality operator.

    -
    -
    Args:

    seq1: The first sequence to compare. -seq2: The second sequence to compare. -seq_type: The expected datatype of the sequences, or None if no

    -
    -

    datatype should be enforced.

    -
    -
    -
    msg: Optional message to use on failure instead of a list of

    differences.

    -
    -
    -
    -
    -
    - -
    -
    -assertSetEqual(set1, set2, msg=None)
    -

    A set-specific equality assertion.

    -
    -
    Args:

    set1: The first set to compare. -set2: The second set to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -

    assertSetEqual uses ducktyping to support different types of sets, and -is optimized for sets specifically (parameters must support a -difference method).

    -
    - -
    -
    -assertTrue(expr, msg=None)
    -

    Check that the expression is true.

    -
    - -
    -
    -assertTupleEqual(tuple1, tuple2, msg=None)
    -

    A tuple-specific equality assertion.

    -
    -
    Args:

    tuple1: The first tuple to compare. -tuple2: The second tuple to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -
    - -
    -
    -assertWarns(expected_warning, *args, **kwargs)
    -

    Fail unless a warning of class warnClass is triggered -by the callable when invoked with specified positional and -keyword arguments. If a different type of warning is -triggered, it will not be handled: depending on the other -warning filtering rules in effect, it might be silenced, printed -out, or raised as an exception.

    -

    If called with the callable and arguments omitted, will return a -context object used like this:

    -
    with self.assertWarns(SomeWarning):
    -    do_something()
    -
    -
    -

    An optional keyword argument ‘msg’ can be provided when assertWarns -is used as a context object.

    -

    The context manager keeps a reference to the first matching -warning as the ‘warning’ attribute; similarly, the ‘filename’ -and ‘lineno’ attributes give you information about the line -of Python code from which the warning was triggered. -This allows you to inspect the warning after the assertion:

    -
    with self.assertWarns(SomeWarning) as cm:
    -    do_something()
    -the_warning = cm.warning
    -self.assertEqual(the_warning.some_attribute, 147)
    -
    -
    -
    - -
    -
    -assertWarnsRegex(expected_warning, expected_regex, *args, **kwargs)
    -

    Asserts that the message in a triggered warning matches a regexp. -Basic functioning is similar to assertWarns() with the addition -that only warnings whose messages also match the regular expression -are considered successful matches.

    -
    -
    Args:

    expected_warning: Warning class expected to be triggered. -expected_regex: Regex (re.Pattern object or string) expected

    -
    -

    to be found in error message.

    -
    -

    args: Function to be called and extra positional args. -kwargs: Extra kwargs. -msg: Optional message used in case of failure. Can only be used

    -
    -

    when assertWarnsRegex is used as a context manager.

    -
    -
    -
    -
    - -
    -
    -assert_(**kwargs)
    -
    - -
    -
    -countTestCases()
    -
    - -
    -
    -debug()
    -

    Run the test without collecting errors in a TestResult

    -
    - -
    -
    -defaultTestResult()
    -
    - -
    -
    -classmethod doClassCleanups()
    -

    Execute all class cleanup functions. Normally called for you after -tearDownClass.

    -
    - -
    -
    -doCleanups()
    -

    Execute all cleanup functions. Normally called for you after -tearDown.

    -
    - -
    -
    -fail(msg=None)
    -

    Fail immediately, with the given message.

    -
    - -
    -
    -failIf(**kwargs)
    -
    - -
    -
    -failIfAlmostEqual(**kwargs)
    -
    - -
    -
    -failIfEqual(**kwargs)
    -
    - -
    -
    -failUnless(**kwargs)
    -
    - -
    -
    -failUnlessAlmostEqual(**kwargs)
    -
    - -
    -
    -failUnlessEqual(**kwargs)
    -
    - -
    -
    -failUnlessRaises(**kwargs)
    -
    - -
    -
    -failureException
    -

    alias of AssertionError

    -
    - -
    -
    -id()
    -
    - -
    -
    -longMessage = True
    -
    - -
    -
    -maxDiff = 640
    -
    - -
    -
    -run(result=None)
    -
    - -
    -
    -setUp()
    -

    Hook method for setting up the test fixture before exercising it.

    -
    - -
    -
    -classmethod setUpClass()
    -

    Hook method for setting up class fixture before running tests in the class.

    -
    - -
    -
    -shortDescription()
    -

    Returns a one-line description of the test, or None if no -description has been provided.

    -

    The default implementation of this method returns the first line of -the specified test method’s docstring.

    -
    - -
    -
    -skipTest(reason)
    -

    Skip this test.

    -
    - -
    -
    -subTest(msg=<object object>, **params)
    -

    Return a context manager that will return the enclosed block -of code in a subtest identified by the optional message and -keyword parameters. A failure in the subtest marks the test -case as failed but resumes execution at the end of the enclosed -block, allowing further test code to be executed.

    -
    - -
    -
    -tearDown()
    -

    Hook method for deconstructing the test fixture after testing it.

    -
    - -
    -
    -classmethod tearDownClass()
    -

    Hook method for deconstructing the class fixture after running all tests in the class.

    -
    - -
    -
    -test_counter_decrement()
    -
    - -
    -
    -test_external_authenticate()
    -
    - -
    -
    -test_incorrect_pin()
    -
    - -
    -
    -test_internal_authenticate()
    -
    - -
    -
    -test_security_environment()
    -
    - -
    - -
    - - -
    - -
    -
    -
    -
    -

    - Back to top - -

    -

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    -

    -
    -
    - - \ No newline at end of file diff --git a/docs/virtualsmartcard/api/virtualsmartcard.tests.html b/docs/virtualsmartcard/api/virtualsmartcard.tests.html deleted file mode 100644 index 6fa85e9..0000000 --- a/docs/virtualsmartcard/api/virtualsmartcard.tests.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - tests Package — vsmartcard 2021-04-28 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -

    - Back to top - -

    -

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    -

    -
    -
    - - \ No newline at end of file diff --git a/docs/virtualsmartcard/api/virtualsmartcard.tests.utils_test.html b/docs/virtualsmartcard/api/virtualsmartcard.tests.utils_test.html deleted file mode 100644 index d84f40d..0000000 --- a/docs/virtualsmartcard/api/virtualsmartcard.tests.utils_test.html +++ /dev/null @@ -1,848 +0,0 @@ - - - - - - - utils_test Module — vsmartcard 2021-04-28 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -

    utils_test Module

    -
    Inheritance diagram of virtualsmartcard.tests.utils_test
    - - -
    -
    -class virtualsmartcard.tests.utils_test.TestUtils(methodName='runTest')
    -

    Bases: unittest.case.TestCase

    -
    -
    -_addExpectedFailure(result, exc_info)
    -
    - -
    -
    -_addSkip(result, test_case, reason)
    -
    - -
    -
    -_addUnexpectedSuccess(result)
    -
    - -
    -
    -_baseAssertEqual(first, second, msg=None)
    -

    The default assertEqual implementation, not type specific.

    -
    - -
    -
    -_callCleanup(function, /, *args, **kwargs)
    -
    - -
    -
    -_callSetUp()
    -
    - -
    -
    -_callTearDown()
    -
    - -
    -
    -_callTestMethod(method)
    -
    - -
    -
    -_classSetupFailed = False
    -
    - -
    -
    -_class_cleanups = []
    -
    - -
    -
    -_deprecate()
    -
    - -
    -
    -_diffThreshold = 65536
    -
    - -
    -
    -_feedErrorsToResult(result, errors)
    -
    - -
    -
    -_formatMessage(msg, standardMsg)
    -

    Honour the longMessage attribute when generating failure messages. -If longMessage is False this means: -* Use only an explicit message if it is provided -* Otherwise use the standard message for the assert

    -

    If longMessage is True: -* Use the standard message -* If an explicit message is provided, plus ‘ : ‘ and the explicit message

    -
    - -
    -
    -_getAssertEqualityFunc(first, second)
    -

    Get a detailed comparison function for the types of the two args.

    -

    Returns: A callable accepting (first, second, msg=None) that will -raise a failure exception if first != second with a useful human -readable error message for those types.

    -
    - -
    -
    -_truncateMessage(message, diff)
    -
    - -
    -
    -classmethod addClassCleanup(function, /, *args, **kwargs)
    -

    Same as addCleanup, except the cleanup items are called even if -setUpClass fails (unlike tearDownClass).

    -
    - -
    -
    -addCleanup(function, /, *args, **kwargs)
    -

    Add a function, with arguments, to be called when the test is -completed. Functions added are called on a LIFO basis and are -called after tearDown on test failure or success.

    -

    Cleanup items are called even if setUp fails (unlike tearDown).

    -
    - -
    -
    -addTypeEqualityFunc(typeobj, function)
    -

    Add a type specific assertEqual style function to compare a type.

    -

    This method is for use by TestCase subclasses that need to register -their own type equality functions to provide nicer error messages.

    -
    -
    Args:
    -
    typeobj: The data type to call this function on when both values

    are of the same type in assertEqual().

    -
    -
    function: The callable taking two arguments and an optional

    msg= argument that raises self.failureException with a -useful error message when the two arguments are not equal.

    -
    -
    -
    -
    -
    - -
    -
    -assertAlmostEqual(first, second, places=None, msg=None, delta=None)
    -

    Fail if the two objects are unequal as determined by their -difference rounded to the given number of decimal places -(default 7) and comparing to zero, or by comparing that the -difference between the two objects is more than the given -delta.

    -

    Note that decimal places (from zero) are usually not the same -as significant digits (measured from the most significant digit).

    -

    If the two objects compare equal then they will automatically -compare almost equal.

    -
    - -
    -
    -assertAlmostEquals(**kwargs)
    -
    - -
    -
    -assertCountEqual(first, second, msg=None)
    -

    Asserts that two iterables have the same elements, the same number of -times, without regard to order.

    -
    -
    -
    -
    self.assertEqual(Counter(list(first)),

    Counter(list(second)))

    -
    -
    -
    -
    -
    Example:
      -
    • [0, 1, 1] and [1, 0, 1] compare equal.

    • -
    • [0, 0, 1] and [0, 1] compare unequal.

    • -
    -
    -
    -
    -
    - -
    -
    -assertDictContainsSubset(subset, dictionary, msg=None)
    -

    Checks whether dictionary is a superset of subset.

    -
    - -
    -
    -assertDictEqual(d1, d2, msg=None)
    -
    - -
    -
    -assertEqual(first, second, msg=None)
    -

    Fail if the two objects are unequal as determined by the ‘==’ -operator.

    -
    - -
    -
    -assertEquals(**kwargs)
    -
    - -
    -
    -assertFalse(expr, msg=None)
    -

    Check that the expression is false.

    -
    - -
    -
    -assertGreater(a, b, msg=None)
    -

    Just like self.assertTrue(a > b), but with a nicer default message.

    -
    - -
    -
    -assertGreaterEqual(a, b, msg=None)
    -

    Just like self.assertTrue(a >= b), but with a nicer default message.

    -
    - -
    -
    -assertIn(member, container, msg=None)
    -

    Just like self.assertTrue(a in b), but with a nicer default message.

    -
    - -
    -
    -assertIs(expr1, expr2, msg=None)
    -

    Just like self.assertTrue(a is b), but with a nicer default message.

    -
    - -
    -
    -assertIsInstance(obj, cls, msg=None)
    -

    Same as self.assertTrue(isinstance(obj, cls)), with a nicer -default message.

    -
    - -
    -
    -assertIsNone(obj, msg=None)
    -

    Same as self.assertTrue(obj is None), with a nicer default message.

    -
    - -
    -
    -assertIsNot(expr1, expr2, msg=None)
    -

    Just like self.assertTrue(a is not b), but with a nicer default message.

    -
    - -
    -
    -assertIsNotNone(obj, msg=None)
    -

    Included for symmetry with assertIsNone.

    -
    - -
    -
    -assertLess(a, b, msg=None)
    -

    Just like self.assertTrue(a < b), but with a nicer default message.

    -
    - -
    -
    -assertLessEqual(a, b, msg=None)
    -

    Just like self.assertTrue(a <= b), but with a nicer default message.

    -
    - -
    -
    -assertListEqual(list1, list2, msg=None)
    -

    A list-specific equality assertion.

    -
    -
    Args:

    list1: The first list to compare. -list2: The second list to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -
    - -
    -
    -assertLogs(logger=None, level=None)
    -

    Fail unless a log message of level level or higher is emitted -on logger_name or its children. If omitted, level defaults to -INFO and logger defaults to the root logger.

    -

    This method must be used as a context manager, and will yield -a recording object with two attributes: output and records. -At the end of the context manager, the output attribute will -be a list of the matching formatted log messages and the -records attribute will be a list of the corresponding LogRecord -objects.

    -

    Example:

    -
    with self.assertLogs('foo', level='INFO') as cm:
    -    logging.getLogger('foo').info('first message')
    -    logging.getLogger('foo.bar').error('second message')
    -self.assertEqual(cm.output, ['INFO:foo:first message',
    -                             'ERROR:foo.bar:second message'])
    -
    -
    -
    - -
    -
    -assertMultiLineEqual(first, second, msg=None)
    -

    Assert that two multi-line strings are equal.

    -
    - -
    -
    -assertNotAlmostEqual(first, second, places=None, msg=None, delta=None)
    -

    Fail if the two objects are equal as determined by their -difference rounded to the given number of decimal places -(default 7) and comparing to zero, or by comparing that the -difference between the two objects is less than the given delta.

    -

    Note that decimal places (from zero) are usually not the same -as significant digits (measured from the most significant digit).

    -

    Objects that are equal automatically fail.

    -
    - -
    -
    -assertNotAlmostEquals(**kwargs)
    -
    - -
    -
    -assertNotEqual(first, second, msg=None)
    -

    Fail if the two objects are equal as determined by the ‘!=’ -operator.

    -
    - -
    -
    -assertNotEquals(**kwargs)
    -
    - -
    -
    -assertNotIn(member, container, msg=None)
    -

    Just like self.assertTrue(a not in b), but with a nicer default message.

    -
    - -
    -
    -assertNotIsInstance(obj, cls, msg=None)
    -

    Included for symmetry with assertIsInstance.

    -
    - -
    -
    -assertNotRegex(text, unexpected_regex, msg=None)
    -

    Fail the test if the text matches the regular expression.

    -
    - -
    -
    -assertNotRegexpMatches(**kwargs)
    -
    - -
    -
    -assertRaises(expected_exception, *args, **kwargs)
    -

    Fail unless an exception of class expected_exception is raised -by the callable when invoked with specified positional and -keyword arguments. If a different type of exception is -raised, it will not be caught, and the test case will be -deemed to have suffered an error, exactly as for an -unexpected exception.

    -

    If called with the callable and arguments omitted, will return a -context object used like this:

    -
    with self.assertRaises(SomeException):
    -    do_something()
    -
    -
    -

    An optional keyword argument ‘msg’ can be provided when assertRaises -is used as a context object.

    -

    The context manager keeps a reference to the exception as -the ‘exception’ attribute. This allows you to inspect the -exception after the assertion:

    -
    with self.assertRaises(SomeException) as cm:
    -    do_something()
    -the_exception = cm.exception
    -self.assertEqual(the_exception.error_code, 3)
    -
    -
    -
    - -
    -
    -assertRaisesRegex(expected_exception, expected_regex, *args, **kwargs)
    -

    Asserts that the message in a raised exception matches a regex.

    -
    -
    Args:

    expected_exception: Exception class expected to be raised. -expected_regex: Regex (re.Pattern object or string) expected

    -
    -

    to be found in error message.

    -
    -

    args: Function to be called and extra positional args. -kwargs: Extra kwargs. -msg: Optional message used in case of failure. Can only be used

    -
    -

    when assertRaisesRegex is used as a context manager.

    -
    -
    -
    -
    - -
    -
    -assertRaisesRegexp(**kwargs)
    -
    - -
    -
    -assertRegex(text, expected_regex, msg=None)
    -

    Fail the test unless the text matches the regular expression.

    -
    - -
    -
    -assertRegexpMatches(**kwargs)
    -
    - -
    -
    -assertSequenceEqual(seq1, seq2, msg=None, seq_type=None)
    -

    An equality assertion for ordered sequences (like lists and tuples).

    -

    For the purposes of this function, a valid ordered sequence type is one -which can be indexed, has a length, and has an equality operator.

    -
    -
    Args:

    seq1: The first sequence to compare. -seq2: The second sequence to compare. -seq_type: The expected datatype of the sequences, or None if no

    -
    -

    datatype should be enforced.

    -
    -
    -
    msg: Optional message to use on failure instead of a list of

    differences.

    -
    -
    -
    -
    -
    - -
    -
    -assertSetEqual(set1, set2, msg=None)
    -

    A set-specific equality assertion.

    -
    -
    Args:

    set1: The first set to compare. -set2: The second set to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -

    assertSetEqual uses ducktyping to support different types of sets, and -is optimized for sets specifically (parameters must support a -difference method).

    -
    - -
    -
    -assertTrue(expr, msg=None)
    -

    Check that the expression is true.

    -
    - -
    -
    -assertTupleEqual(tuple1, tuple2, msg=None)
    -

    A tuple-specific equality assertion.

    -
    -
    Args:

    tuple1: The first tuple to compare. -tuple2: The second tuple to compare. -msg: Optional message to use on failure instead of a list of

    -
    -

    differences.

    -
    -
    -
    -
    - -
    -
    -assertWarns(expected_warning, *args, **kwargs)
    -

    Fail unless a warning of class warnClass is triggered -by the callable when invoked with specified positional and -keyword arguments. If a different type of warning is -triggered, it will not be handled: depending on the other -warning filtering rules in effect, it might be silenced, printed -out, or raised as an exception.

    -

    If called with the callable and arguments omitted, will return a -context object used like this:

    -
    with self.assertWarns(SomeWarning):
    -    do_something()
    -
    -
    -

    An optional keyword argument ‘msg’ can be provided when assertWarns -is used as a context object.

    -

    The context manager keeps a reference to the first matching -warning as the ‘warning’ attribute; similarly, the ‘filename’ -and ‘lineno’ attributes give you information about the line -of Python code from which the warning was triggered. -This allows you to inspect the warning after the assertion:

    -
    with self.assertWarns(SomeWarning) as cm:
    -    do_something()
    -the_warning = cm.warning
    -self.assertEqual(the_warning.some_attribute, 147)
    -
    -
    -
    - -
    -
    -assertWarnsRegex(expected_warning, expected_regex, *args, **kwargs)
    -

    Asserts that the message in a triggered warning matches a regexp. -Basic functioning is similar to assertWarns() with the addition -that only warnings whose messages also match the regular expression -are considered successful matches.

    -
    -
    Args:

    expected_warning: Warning class expected to be triggered. -expected_regex: Regex (re.Pattern object or string) expected

    -
    -

    to be found in error message.

    -
    -

    args: Function to be called and extra positional args. -kwargs: Extra kwargs. -msg: Optional message used in case of failure. Can only be used

    -
    -

    when assertWarnsRegex is used as a context manager.

    -
    -
    -
    -
    - -
    -
    -assert_(**kwargs)
    -
    - -
    -
    -countTestCases()
    -
    - -
    -
    -debug()
    -

    Run the test without collecting errors in a TestResult

    -
    - -
    -
    -defaultTestResult()
    -
    - -
    -
    -classmethod doClassCleanups()
    -

    Execute all class cleanup functions. Normally called for you after -tearDownClass.

    -
    - -
    -
    -doCleanups()
    -

    Execute all cleanup functions. Normally called for you after -tearDown.

    -
    - -
    -
    -fail(msg=None)
    -

    Fail immediately, with the given message.

    -
    - -
    -
    -failIf(**kwargs)
    -
    - -
    -
    -failIfAlmostEqual(**kwargs)
    -
    - -
    -
    -failIfEqual(**kwargs)
    -
    - -
    -
    -failUnless(**kwargs)
    -
    - -
    -
    -failUnlessAlmostEqual(**kwargs)
    -
    - -
    -
    -failUnlessEqual(**kwargs)
    -
    - -
    -
    -failUnlessRaises(**kwargs)
    -
    - -
    -
    -failureException
    -

    alias of AssertionError

    -
    - -
    -
    -id()
    -
    - -
    -
    -longMessage = True
    -
    - -
    -
    -maxDiff = 640
    -
    - -
    -
    -run(result=None)
    -
    - -
    -
    -setUp()
    -

    Hook method for setting up the test fixture before exercising it.

    -
    - -
    -
    -classmethod setUpClass()
    -

    Hook method for setting up class fixture before running tests in the class.

    -
    - -
    -
    -shortDescription()
    -

    Returns a one-line description of the test, or None if no -description has been provided.

    -

    The default implementation of this method returns the first line of -the specified test method’s docstring.

    -
    - -
    -
    -skipTest(reason)
    -

    Skip this test.

    -
    - -
    -
    -subTest(msg=<object object>, **params)
    -

    Return a context manager that will return the enclosed block -of code in a subtest identified by the optional message and -keyword parameters. A failure in the subtest marks the test -case as failed but resumes execution at the end of the enclosed -block, allowing further test code to be executed.

    -
    - -
    -
    -tearDown()
    -

    Hook method for deconstructing the test fixture after testing it.

    -
    - -
    -
    -classmethod tearDownClass()
    -

    Hook method for deconstructing the class fixture after running all tests in the class.

    -
    - -
    -
    -test_CAPDU()
    -
    - -
    -
    -test_RAPDU()
    -
    - -
    - -
    - - -
    - -
    -
    -
    -
    -

    - Back to top - -

    -

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    -

    -
    -
    - - \ No newline at end of file diff --git a/docs/virtualsmartcard/api/virtualsmartcard.utils.html b/docs/virtualsmartcard/api/virtualsmartcard.utils.html index 2a00e32..62b1abe 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.utils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.utils.html @@ -4,7 +4,7 @@ - utils Module — vsmartcard 2021-04-28 documentation + utils Module — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,7 +123,7 @@
    -
    +

    utils Module

    @@ -455,7 +455,7 @@ hexdump(b’A’, short=True) -> ‘00 41 (.A)’

    - © Copyright 2009-2021 by Dominik Oepen and Frank Morgner.
    + © Copyright 2009-2023 by Dominik Oepen and Frank Morgner.