From bb990a2995ab3fef1531c31b503ffe97dec42110 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Wed, 27 Sep 2023 02:53:47 +0200 Subject: [PATCH 01/10] virtualsmartcard: version bump --- virtualsmartcard/configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/virtualsmartcard/configure.ac b/virtualsmartcard/configure.ac index bff2e783..8e22ee56 100644 --- a/virtualsmartcard/configure.ac +++ b/virtualsmartcard/configure.ac @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ([2.64]) -AC_INIT([Virtual Smart Card], [0.9], [https://github.com/frankmorgner/vsmartcard/issues], [virtualsmartcard], [http://frankmorgner.github.io/vsmartcard/virtualsmartcard/README.html]) +AC_INIT([Virtual Smart Card], [0.10], [https://github.com/frankmorgner/vsmartcard/issues], [virtualsmartcard], [http://frankmorgner.github.io/vsmartcard/virtualsmartcard/README.html]) AC_CONFIG_SRCDIR([src/vpcd/vpcd.c]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) From 4a442fb3e236bed47db51b6849cd63c1b061e93e Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Wed, 27 Sep 2023 03:03:35 +0200 Subject: [PATCH 02/10] updated documentation --- docs/.buildinfo | 2 +- docs/ACardEmulator/README.html | 67 +- docs/TCardEmulator/README.html | 29 +- ...5e17a8f890c78c473daa9db430b4cda74f6cb7.png | Bin 3685 -> 0 bytes ...a8f890c78c473daa9db430b4cda74f6cb7.png.map | 4 - ...27e1a05433ba14df2d516741c83a340d46b696.png | Bin 3123 -> 0 bytes ...a05433ba14df2d516741c83a340d46b696.png.map | 4 - ...600c60a9fcc658bb9a017dd609c3bff8e456b3.png | Bin 3514 -> 0 bytes ...60a9fcc658bb9a017dd609c3bff8e456b3.png.map | 4 - ...149f9804291dbbbe502519b9ab8d95f3e28f93.png | Bin 2824 -> 0 bytes ...9804291dbbbe502519b9ab8d95f3e28f93.png.map | 3 - ...2efbd974214a247217ba79cf0775fb65c344af.png | Bin 3495 -> 0 bytes ...d974214a247217ba79cf0775fb65c344af.png.map | 4 - ...5de3c82405e783e52102c0d9ccbc16f7e48d7c.png | Bin 3661 -> 0 bytes ...c82405e783e52102c0d9ccbc16f7e48d7c.png.map | 4 - ...1eb1f410a57b99d3b85ed60b3f73a1a03a39de.png | Bin 7364 -> 0 bytes ...f410a57b99d3b85ed60b3f73a1a03a39de.png.map | 6 - ...05e52eb98193c32482e91a30737e1e9684bad0.svg | 841 -- ...5ce7f91e19ed28b7af35a9f18aa096148209ea.svg | 406 - ...81452b980f69540bc7520179e10f3ccc59fe36.svg | 7897 ----------------- ...ebc244e414ed09dc8909102139ca8f37bae82b.svg | 271 - ...c9c7049675e5b06e8364c63b0718d51986e380.svg | 3670 -------- ...402031da401947efbeae7481d47bd35196791d.svg | 633 -- ...71605956d62bb837a2533794c8c50348b2f87c.svg | 2269 ----- ...1e764f23cec8b5d67952bc6d8bbe66280e80d1.svg | 2139 ----- ...a668553fb9bf21fb5abcc4cae46289d11490d1.svg | 427 - ...7c5ab6092153f7f845370e9964b266e5d97f55.svg | 2024 ----- ...23bba45f9fcaa801dd4f6284c7efa1f320c9b1.svg | 345 - ...55fa00e38973c00fdf255926bb46304226f2dc.svg | 2481 ------ ...75fc9e85a93771428d0790db395907b3f662fe.svg | 5005 ----------- ...010fa8209b3752026a52619d57bbebb8fa2bcd.svg | 2016 ----- docs/_sources/ACardEmulator/README.txt | 4 +- docs/_sources/ccid/README.txt | 14 +- docs/_sources/index.txt | 10 +- docs/_sources/pcsc-relay/README.txt | 30 +- docs/_sources/virtualsmartcard/README.txt | 68 +- .../virtualsmartcard.cards.HandlerTest.txt | 10 - .../api/virtualsmartcard.cards.Relay.txt | 10 - .../virtualsmartcard.cards.RelayMiddleman.txt | 10 - ...tualsmartcard.tests.CardGenerator_test.txt | 10 - ...irtualsmartcard.tests.CryptoUtils_test.txt | 10 - ...rtualsmartcard.tests.SmartcardSAM_test.txt | 10 - .../api/virtualsmartcard.tests.txt | 10 - .../api/virtualsmartcard.tests.utils_test.txt | 10 - .../img/glyphicons-halflings-white.png | Bin 8768 -> 8777 bytes .../img/glyphicons-halflings.png | Bin 12764 -> 12799 bytes .../bootswatch-2.3.2/amelia/bootstrap.min.css | 1 + .../cerulean/bootstrap.min.css | 1 + .../bootswatch-2.3.2/cosmo/bootstrap.min.css | 1 + .../bootswatch-2.3.2/cyborg/bootstrap.min.css | 1 + .../bootswatch-2.3.2/flatly/bootstrap.min.css | 1 + .../img/glyphicons-halflings-white.png | Bin 8768 -> 8777 bytes .../img/glyphicons-halflings.png | Bin 12764 -> 12799 bytes .../journal/bootstrap.min.css | 1 + .../readable/bootstrap.min.css | 1 + .../simplex/bootstrap.min.css | 1 + .../spacelab/bootstrap.min.css | 1 + .../bootswatch-2.3.2/spruce/bootstrap.min.css | 1 + .../superhero/bootstrap.min.css | 1 + .../bootswatch-2.3.2/united/bootstrap.min.css | 1 + .../bootswatch-3.3.7/cosmo/bootstrap.min.css | 1 + .../bootswatch-3.3.7/cyborg/bootstrap.min.css | 1 + .../bootswatch-3.3.7/darkly/bootstrap.min.css | 1 + .../bootswatch-3.3.7/flatly/bootstrap.min.css | 1 + .../journal/bootstrap.min.css | 1 + .../bootswatch-3.3.7/lumen/bootstrap.min.css | 1 + .../bootswatch-3.3.7/paper/bootstrap.min.css | 1 + .../readable/bootstrap.min.css | 1 + .../sandstone/bootstrap.min.css | 1 + .../simplex/bootstrap.min.css | 1 + .../bootswatch-3.3.7/solar/bootstrap.min.css | 1 + .../spacelab/bootstrap.min.css | 1 + .../superhero/bootstrap.min.css | 1 + .../bootswatch-3.3.7/united/bootstrap.min.css | 1 + .../bootswatch-3.3.7/yeti/bootstrap.min.css | 1 + docs/_static/documentation_options.js | 2 +- docs/ccid/README.html | 233 +- docs/index.html | 49 +- docs/objects.inv | Bin 7264 -> 4234 bytes docs/pcsc-relay/README.html | 161 +- docs/remote-reader/README.html | 62 +- docs/search.html | 24 +- docs/searchindex.js | 2 +- docs/virtualsmartcard/README.html | 161 +- docs/virtualsmartcard/api.html | 58 +- .../api/virtualsmartcard.CardGenerator.html | 14 +- .../virtualsmartcard.ConstantDefinitions.html | 14 +- .../api/virtualsmartcard.CryptoUtils.html | 14 +- .../api/virtualsmartcard.SEutils.html | 14 +- .../api/virtualsmartcard.SWutils.html | 14 +- .../virtualsmartcard.SmartcardFilesystem.html | 20 +- .../api/virtualsmartcard.SmartcardSAM.html | 14 +- .../api/virtualsmartcard.TLVutils.html | 14 +- .../virtualsmartcard.VirtualSmartcard.html | 16 +- .../virtualsmartcard.cards.HandlerTest.html | 202 - .../api/virtualsmartcard.cards.Relay.html | 204 - ...virtualsmartcard.cards.RelayMiddleman.html | 177 - .../virtualsmartcard.cards.cryptoflex.html | 14 +- .../api/virtualsmartcard.cards.ePass.html | 14 +- .../api/virtualsmartcard.cards.html | 17 +- .../api/virtualsmartcard.cards.nPA.html | 14 +- .../api/virtualsmartcard.html | 24 +- ...ualsmartcard.tests.CardGenerator_test.html | 2262 ----- ...rtualsmartcard.tests.CryptoUtils_test.html | 843 -- ...tualsmartcard.tests.SmartcardSAM_test.html | 863 -- .../api/virtualsmartcard.tests.html | 157 - .../virtualsmartcard.tests.utils_test.html | 848 -- .../api/virtualsmartcard.utils.html | 14 +- 108 files changed, 909 insertions(+), 36414 deletions(-) delete mode 100644 docs/_images/inheritance-285e17a8f890c78c473daa9db430b4cda74f6cb7.png delete mode 100644 docs/_images/inheritance-285e17a8f890c78c473daa9db430b4cda74f6cb7.png.map delete mode 100644 docs/_images/inheritance-5827e1a05433ba14df2d516741c83a340d46b696.png delete mode 100644 docs/_images/inheritance-5827e1a05433ba14df2d516741c83a340d46b696.png.map delete mode 100644 docs/_images/inheritance-5c600c60a9fcc658bb9a017dd609c3bff8e456b3.png delete mode 100644 docs/_images/inheritance-5c600c60a9fcc658bb9a017dd609c3bff8e456b3.png.map delete mode 100644 docs/_images/inheritance-95149f9804291dbbbe502519b9ab8d95f3e28f93.png delete mode 100644 docs/_images/inheritance-95149f9804291dbbbe502519b9ab8d95f3e28f93.png.map delete mode 100644 docs/_images/inheritance-c92efbd974214a247217ba79cf0775fb65c344af.png delete mode 100644 docs/_images/inheritance-c92efbd974214a247217ba79cf0775fb65c344af.png.map delete mode 100644 docs/_images/inheritance-c95de3c82405e783e52102c0d9ccbc16f7e48d7c.png delete mode 100644 docs/_images/inheritance-c95de3c82405e783e52102c0d9ccbc16f7e48d7c.png.map delete mode 100644 docs/_images/inheritance-d51eb1f410a57b99d3b85ed60b3f73a1a03a39de.png delete mode 100644 docs/_images/inheritance-d51eb1f410a57b99d3b85ed60b3f73a1a03a39de.png.map delete mode 100644 docs/_images/tikz-0405e52eb98193c32482e91a30737e1e9684bad0.svg delete mode 100644 docs/_images/tikz-115ce7f91e19ed28b7af35a9f18aa096148209ea.svg delete mode 100644 docs/_images/tikz-1281452b980f69540bc7520179e10f3ccc59fe36.svg delete mode 100644 docs/_images/tikz-2debc244e414ed09dc8909102139ca8f37bae82b.svg delete mode 100644 docs/_images/tikz-30c9c7049675e5b06e8364c63b0718d51986e380.svg delete mode 100644 docs/_images/tikz-5b402031da401947efbeae7481d47bd35196791d.svg delete mode 100644 docs/_images/tikz-6e71605956d62bb837a2533794c8c50348b2f87c.svg delete mode 100644 docs/_images/tikz-ae1e764f23cec8b5d67952bc6d8bbe66280e80d1.svg delete mode 100644 docs/_images/tikz-b5a668553fb9bf21fb5abcc4cae46289d11490d1.svg delete mode 100644 docs/_images/tikz-b87c5ab6092153f7f845370e9964b266e5d97f55.svg delete mode 100644 docs/_images/tikz-c523bba45f9fcaa801dd4f6284c7efa1f320c9b1.svg delete mode 100644 docs/_images/tikz-ce55fa00e38973c00fdf255926bb46304226f2dc.svg delete mode 100644 docs/_images/tikz-f675fc9e85a93771428d0790db395907b3f662fe.svg delete mode 100644 docs/_images/tikz-f7010fa8209b3752026a52619d57bbebb8fa2bcd.svg delete mode 100644 docs/_sources/virtualsmartcard/api/virtualsmartcard.cards.HandlerTest.txt delete mode 100644 docs/_sources/virtualsmartcard/api/virtualsmartcard.cards.Relay.txt delete mode 100644 docs/_sources/virtualsmartcard/api/virtualsmartcard.cards.RelayMiddleman.txt delete mode 100644 docs/_sources/virtualsmartcard/api/virtualsmartcard.tests.CardGenerator_test.txt delete mode 100644 docs/_sources/virtualsmartcard/api/virtualsmartcard.tests.CryptoUtils_test.txt delete mode 100644 docs/_sources/virtualsmartcard/api/virtualsmartcard.tests.SmartcardSAM_test.txt delete mode 100644 docs/_sources/virtualsmartcard/api/virtualsmartcard.tests.txt delete mode 100644 docs/_sources/virtualsmartcard/api/virtualsmartcard.tests.utils_test.txt delete mode 100644 docs/virtualsmartcard/api/virtualsmartcard.cards.HandlerTest.html delete mode 100644 docs/virtualsmartcard/api/virtualsmartcard.cards.Relay.html delete mode 100644 docs/virtualsmartcard/api/virtualsmartcard.cards.RelayMiddleman.html delete mode 100644 docs/virtualsmartcard/api/virtualsmartcard.tests.CardGenerator_test.html delete mode 100644 docs/virtualsmartcard/api/virtualsmartcard.tests.CryptoUtils_test.html delete mode 100644 docs/virtualsmartcard/api/virtualsmartcard.tests.SmartcardSAM_test.html delete mode 100644 docs/virtualsmartcard/api/virtualsmartcard.tests.html delete mode 100644 docs/virtualsmartcard/api/virtualsmartcard.tests.utils_test.html diff --git a/docs/.buildinfo b/docs/.buildinfo index 6f1ab4cd..3adb7796 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 4489c363..4f858039 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 @@ (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:

diff --git a/docs/TCardEmulator/README.html b/docs/TCardEmulator/README.html index 6dd3386a..ad07a29e 100644 --- a/docs/TCardEmulator/README.html +++ b/docs/TCardEmulator/README.html @@ -4,7 +4,7 @@ - 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 @@ 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

diff --git a/docs/_images/inheritance-285e17a8f890c78c473daa9db430b4cda74f6cb7.png b/docs/_images/inheritance-285e17a8f890c78c473daa9db430b4cda74f6cb7.png deleted file mode 100644 index 2585a928d393a74850eaaf3156fcd52bdc665627..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3685 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 RF7S;IBYktdDxC*U{|gdkP_zI5 diff --git a/docs/_images/inheritance-285e17a8f890c78c473daa9db430b4cda74f6cb7.png.map b/docs/_images/inheritance-285e17a8f890c78c473daa9db430b4cda74f6cb7.png.map deleted file mode 100644 index a77f88b5..00000000 --- a/docs/_images/inheritance-285e17a8f890c78c473daa9db430b4cda74f6cb7.png.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/_images/inheritance-5827e1a05433ba14df2d516741c83a340d46b696.png b/docs/_images/inheritance-5827e1a05433ba14df2d516741c83a340d46b696.png deleted file mode 100644 index 9d843ca79f64c9f9938c56bcd01aab6bdfe31123..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3123 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 ScLi<%APZA#6Qc3GNB;$%|5x1r diff --git a/docs/_images/inheritance-5827e1a05433ba14df2d516741c83a340d46b696.png.map b/docs/_images/inheritance-5827e1a05433ba14df2d516741c83a340d46b696.png.map deleted file mode 100644 index e5e2cbde..00000000 --- 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 b6a07d7a1a8d27ae3b11e29fe21f8fa62d8e01fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3514 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 - - - diff --git a/docs/_images/inheritance-95149f9804291dbbbe502519b9ab8d95f3e28f93.png b/docs/_images/inheritance-95149f9804291dbbbe502519b9ab8d95f3e28f93.png deleted file mode 100644 index 53909d0fb156e6088fead179621861bf09d5c100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2824 zcmZ`*do+|=A0AGwC%0T1w?2^)Lb)@F5gHLm4&xR@lKV(*Lyi>2B=;sUD2ABhV5D)$ zbwWcE8jf4cxQ^>E84SL+@4xR`>sx!Tz4yEJ+Uxhe&-*;jexBd3vl0>n3xYr(AscI` zBM8Km53H5>d4aJWs=f|Pymw$$P|(q@R@_pa1p*1S*g&s1MZI2~MA{Cs6!|t54(RcZ z`8D6t4MLZ2m_LfORhTt%i+SW)y$N`P-qBLgM5Qi4%N3JG7=GT_z5LF$oPK6aO0+>n zT1tnn%i)?GoSrDgM_RPG7h5Krf6{!3#Yl$ zwR>cI{(HbkOE{wL)$Q&yH=7*6MV@N+jB6Y;c zYz;S%>r_CizIQj=vG7jUCWvnEcFOpupNmQYo^mB@roD`ejj=b*ZY&fb&lnFQmDZ4y zZTK_6g5yq)pHf7##e$#0oOAR-GVdUqR1#9i@?#i4znMm=^HoY)nc5I=~yf>U+ zJD6vVO>o3@9qde_-HDMid7kk$yZJggI$98jrqTS?Zn2YEGMM!7a2)|BC7)Z8O}|=t z#o1X(LaDm;!ANj0sY{qt~aJJFHfi{+^ah& zBqUU#m)Fme)~(c>K{%8K*U&n`sIp(M7Ab!PO&U3j)9K1O7cb645|~(rqFH?{{p*yX#d(Ek;942w>_io*(!%`W~Q#-Uzghzc2wS~ zDjr&Tk(HISyc|G5v~id)6XxgBUm2{k>grveK7lmh9}-Zq`W^n4I%Yz={Qa#zyn%C~ zn953WCQ+hQ&ei6wu3&Yk-__2a7taXY|M@U*x>eq&P#6GjaeY0ndInBHJMkI9@-!_0 z5SUEnMvrW8adov2R9Oy>!?nNCeE`(=sv8UW@hR~crVws->(;H$gM-qA>pT12m%w6s zGVg|#{_LMS;c>JzXjV~G)wwoFOxDAp%}dDk&8)0`vw{c2h6YIyGmcjJ)zfdHW(AH5 z3tyF2r8-Q-;%M%*IU#V&oQH>J zd(;O_x$POJQlFEZ%};x-5?^m(b@l4vYUA{~FJEjctEx&LP-`euPvmvQc(!+kwnzN# zT~}hHhI?~VCgg|{{ZO3^ET&}PpQ;rAUT_SIXO9*V}ViwV{J&Yu|U0mz`!y^ zBq#F~2GbkR@U1Li%kUGh>0OqXqcLs&YDd5t1h zT)G%N;xv5Qp;EOo4243OkH@UHNQX|%8@0ma%WO$nV3hAAumFgwIBx%^m>8w2>zIaX z{WC!KmIuoW#{IdzoR+%l>#{aCu+f zH3yUh%?eZGPqM&EKRE1l8CO7C8N~lw`D5%5PKqhb$W%ro;cz(YNY!m|F^5y4#oOBv z0YO1hDq-)SKnbMNggka=~Rso~|eH|TjaT)LGf_~X7om*l>3xI@#g|7`fY}VHFY_$a~ z?y(r=3?U&ZFU*1p9ku%BCKel$ij*qA1=1NtJ1O$!~t`pGh zUN1~*oTg5K$?Vw3urNn<{GB`8_GSl{a@GHMvbPrE758>f(mFp z7K^2YA%_?h0=*>s5*W2{uuV3>5xlfy!a4qrmsxwyNNZ<$zF;yhE@+Kx`rwkXbI#ws zLw=wex}iE-Qk(e0`w?<&BNE*@r-h51};P z%F4=*)pFo@f$52VZ~pHSo=cZ&xaxG`47>iFE<-3`L%)?JK82t+$=(`%gYP^-W;gg7Z6t(nQrWIExTDk>^I z0sbhQb1k`}!+hdH=x=dxac4C&P{vQ&y*|~r6F25D!FR^~zWX6=UoYUn1IvY|7LV-Q z+>-KgKHem6JDOFM#o}n$XrSKcYNXSxTUY`?N>WmCl=$cZcOr-oG?{w&6bMgE1AKD^ zSN`S%3)K*0S1xX8X?f$U1W+f3{CK)GE{ZjBJF}qRT#SeMmN@L--nXTQ&^g64DD|i9 ze^hNFwr&b|m|J5|=G9W{-Tqw4@No85g(ZdbVe-dUufTxsmN{1mfDjQ8UoAvTp+`*yo?tB? z^u2rnoR#shX_r0jlU`f)f|HW_|8id?sr`R*B5>r`fyk(Ga@b{qp&B6Cf^019pf%=R GPyP*MiKVju diff --git a/docs/_images/inheritance-95149f9804291dbbbe502519b9ab8d95f3e28f93.png.map b/docs/_images/inheritance-95149f9804291dbbbe502519b9ab8d95f3e28f93.png.map deleted file mode 100644 index 082f9c3c..00000000 --- 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 70b2792c8fef5d1944581846e20c8c86b54bedaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3495 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 - - - diff --git a/docs/_images/inheritance-c95de3c82405e783e52102c0d9ccbc16f7e48d7c.png b/docs/_images/inheritance-c95de3c82405e783e52102c0d9ccbc16f7e48d7c.png deleted file mode 100644 index 835d1a40ec1fe9f913605cdb9f947a5c8d663678..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3661 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 K8CDqFe)1n)%swCh diff --git a/docs/_images/inheritance-c95de3c82405e783e52102c0d9ccbc16f7e48d7c.png.map b/docs/_images/inheritance-c95de3c82405e783e52102c0d9ccbc16f7e48d7c.png.map deleted file mode 100644 index 99e13ee6..00000000 --- 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 06da744e65f19d6099a6eb2358f83c5312a34c50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7364 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 Xg*FpZ#KYR~KT@hFX(;B)oBsJfev`;` diff --git a/docs/_images/inheritance-d51eb1f410a57b99d3b85ed60b3f73a1a03a39de.png.map b/docs/_images/inheritance-d51eb1f410a57b99d3b85ed60b3f73a1a03a39de.png.map deleted file mode 100644 index b6ba07eb..00000000 --- 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 cd2ed0a9..00000000 --- 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 94204d39..00000000 --- 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 692fcdc2..00000000 --- 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 0a991888..00000000 --- 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 c0194a78..00000000 --- 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 16626dfa..00000000 --- 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 38cc7f87..00000000 --- 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 b0fe2976..00000000 --- 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 da74e3dc..00000000 --- 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 8b2fbb94..00000000 --- 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 bc17e733..00000000 --- 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 7a233b48..00000000 --- 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 a1d1e9f1..00000000 --- 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 48de5bf6..00000000 --- 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 66edc24d..5ff5b0ce 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 7cf142e9..4f3ed3c6 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 5c4df01a..bfb7294f 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 c81c0eb6..e7dd8ba3 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 cb2c29d6..95e766a2 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. +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 W`c(?wkNW@afaE?YNta6+1^gGSDR9sL delta 7805 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 XzF1VVP2Si8{R=I1U9}1o>-YZ)t-Yl0 diff --git a/docs/_static/bootstrap-2.3.2/img/glyphicons-halflings.png b/docs/_static/bootstrap-2.3.2/img/glyphicons-halflings.png index 8bc9e642b762a7c2f50a84e6c721af5d5f538929..a9969993201f9cee63cf9f49217646347297b643 100644 GIT binary patch literal 12799 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 literal 12764 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 diff --git a/docs/_static/bootswatch-2.3.2/amelia/bootstrap.min.css b/docs/_static/bootswatch-2.3.2/amelia/bootstrap.min.css index 0a0096b5..b8cea328 100644 --- a/docs/_static/bootswatch-2.3.2/amelia/bootstrap.min.css +++ b/docs/_static/bootswatch-2.3.2/amelia/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url('//fonts.googleapis.com/css?family=Lobster|Cabin:400,700');/*! * Bootstrap v2.3.2 * * Copyright 2012 Twitter, Inc diff --git a/docs/_static/bootswatch-2.3.2/cerulean/bootstrap.min.css b/docs/_static/bootswatch-2.3.2/cerulean/bootstrap.min.css index 2086b3c4..9740c15e 100644 --- a/docs/_static/bootswatch-2.3.2/cerulean/bootstrap.min.css +++ b/docs/_static/bootswatch-2.3.2/cerulean/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url(//fonts.googleapis.com/css?family=Telex);/*! * Bootstrap v2.3.2 * * Copyright 2012 Twitter, Inc diff --git a/docs/_static/bootswatch-2.3.2/cosmo/bootstrap.min.css b/docs/_static/bootswatch-2.3.2/cosmo/bootstrap.min.css index fbb41178..cae7e4f8 100644 --- a/docs/_static/bootswatch-2.3.2/cosmo/bootstrap.min.css +++ b/docs/_static/bootswatch-2.3.2/cosmo/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url('//fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700');/*! * Bootstrap v2.3.2 * * Copyright 2012 Twitter, Inc diff --git a/docs/_static/bootswatch-2.3.2/cyborg/bootstrap.min.css b/docs/_static/bootswatch-2.3.2/cyborg/bootstrap.min.css index f3727064..894f3aac 100644 --- a/docs/_static/bootswatch-2.3.2/cyborg/bootstrap.min.css +++ b/docs/_static/bootswatch-2.3.2/cyborg/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url('//fonts.googleapis.com/css?family=Droid+Sans:400,700');/*! * Bootstrap v2.3.2 * * Copyright 2012 Twitter, Inc diff --git a/docs/_static/bootswatch-2.3.2/flatly/bootstrap.min.css b/docs/_static/bootswatch-2.3.2/flatly/bootstrap.min.css index a462503e..a8ba3895 100644 --- a/docs/_static/bootswatch-2.3.2/flatly/bootstrap.min.css +++ b/docs/_static/bootswatch-2.3.2/flatly/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url("http://fonts.googleapis.com/css?family=Lato:400,700,900,400italic");/*! * Bootstrap v2.3.2 * * Copyright 2012 Twitter, Inc diff --git a/docs/_static/bootswatch-2.3.2/img/glyphicons-halflings-white.png b/docs/_static/bootswatch-2.3.2/img/glyphicons-halflings-white.png index c06afb588b01357f92ade8c041ece33b181f5a19..3bf6484a29d8da269f9bc874b25493a45fae3bae 100644 GIT binary patch delta 7814 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 W`c(?wkNW@afaE?YNta6+1^gGSDR9sL delta 7805 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 XzF1VVP2Si8{R=I1U9}1o>-YZ)t-Yl0 diff --git a/docs/_static/bootswatch-2.3.2/img/glyphicons-halflings.png b/docs/_static/bootswatch-2.3.2/img/glyphicons-halflings.png index 8bc9e642b762a7c2f50a84e6c721af5d5f538929..a9969993201f9cee63cf9f49217646347297b643 100644 GIT binary patch literal 12799 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 literal 12764 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 diff --git a/docs/_static/bootswatch-2.3.2/journal/bootstrap.min.css b/docs/_static/bootswatch-2.3.2/journal/bootstrap.min.css index 261963a0..f310a559 100644 --- a/docs/_static/bootswatch-2.3.2/journal/bootstrap.min.css +++ b/docs/_static/bootswatch-2.3.2/journal/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url('//fonts.googleapis.com/css?family=News+Cycle:400,700');/*! * Bootstrap v2.3.2 * * Copyright 2012 Twitter, Inc diff --git a/docs/_static/bootswatch-2.3.2/readable/bootstrap.min.css b/docs/_static/bootswatch-2.3.2/readable/bootstrap.min.css index 32f12a67..0efc48fb 100644 --- a/docs/_static/bootswatch-2.3.2/readable/bootstrap.min.css +++ b/docs/_static/bootswatch-2.3.2/readable/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url('//fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic');/*! * Bootstrap v2.3.2 * * Copyright 2012 Twitter, Inc diff --git a/docs/_static/bootswatch-2.3.2/simplex/bootstrap.min.css b/docs/_static/bootswatch-2.3.2/simplex/bootstrap.min.css index b0d924aa..a3e828f3 100644 --- a/docs/_static/bootswatch-2.3.2/simplex/bootstrap.min.css +++ b/docs/_static/bootswatch-2.3.2/simplex/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url('//fonts.googleapis.com/css?family=Josefin+Sans:300,400,700');/*! * Bootstrap v2.3.2 * * Copyright 2012 Twitter, Inc diff --git a/docs/_static/bootswatch-2.3.2/spacelab/bootstrap.min.css b/docs/_static/bootswatch-2.3.2/spacelab/bootstrap.min.css index d455dc0a..7b7b4bb4 100644 --- a/docs/_static/bootswatch-2.3.2/spacelab/bootstrap.min.css +++ b/docs/_static/bootswatch-2.3.2/spacelab/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url('//fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700');/*! * Bootstrap v2.3.2 * * Copyright 2012 Twitter, Inc diff --git a/docs/_static/bootswatch-2.3.2/spruce/bootstrap.min.css b/docs/_static/bootswatch-2.3.2/spruce/bootstrap.min.css index 3fb0775f..6d5279cb 100644 --- a/docs/_static/bootswatch-2.3.2/spruce/bootstrap.min.css +++ b/docs/_static/bootswatch-2.3.2/spruce/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url(//fonts.googleapis.com/css?family=Crete+Round);/*! * Bootstrap v2.3.2 * * Copyright 2012 Twitter, Inc diff --git a/docs/_static/bootswatch-2.3.2/superhero/bootstrap.min.css b/docs/_static/bootswatch-2.3.2/superhero/bootstrap.min.css index 3f416a9a..6635d7db 100644 --- a/docs/_static/bootswatch-2.3.2/superhero/bootstrap.min.css +++ b/docs/_static/bootswatch-2.3.2/superhero/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url('//fonts.googleapis.com/css?family=Oswald|Noticia+Text');/*! * Bootstrap v2.3.2 * * Copyright 2012 Twitter, Inc diff --git a/docs/_static/bootswatch-2.3.2/united/bootstrap.min.css b/docs/_static/bootswatch-2.3.2/united/bootstrap.min.css index e261220b..29cb6b61 100644 --- a/docs/_static/bootswatch-2.3.2/united/bootstrap.min.css +++ b/docs/_static/bootswatch-2.3.2/united/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url(//fonts.googleapis.com/css?family=Ubuntu);/*! * Bootstrap v2.3.2 * * Copyright 2012 Twitter, Inc diff --git a/docs/_static/bootswatch-3.3.7/cosmo/bootstrap.min.css b/docs/_static/bootswatch-3.3.7/cosmo/bootstrap.min.css index c8a7c433..5ddc0b41 100644 --- a/docs/_static/bootswatch-3.3.7/cosmo/bootstrap.min.css +++ b/docs/_static/bootswatch-3.3.7/cosmo/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url("https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700");/*! * bootswatch v3.3.7 * Homepage: http://bootswatch.com * Copyright 2012-2016 Thomas Park diff --git a/docs/_static/bootswatch-3.3.7/cyborg/bootstrap.min.css b/docs/_static/bootswatch-3.3.7/cyborg/bootstrap.min.css index f364f811..3b9a5261 100644 --- a/docs/_static/bootswatch-3.3.7/cyborg/bootstrap.min.css +++ b/docs/_static/bootswatch-3.3.7/cyborg/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url("https://fonts.googleapis.com/css?family=Roboto:400,700");/*! * bootswatch v3.3.7 * Homepage: http://bootswatch.com * Copyright 2012-2016 Thomas Park diff --git a/docs/_static/bootswatch-3.3.7/darkly/bootstrap.min.css b/docs/_static/bootswatch-3.3.7/darkly/bootstrap.min.css index ea052b6c..90f14a4e 100644 --- a/docs/_static/bootswatch-3.3.7/darkly/bootstrap.min.css +++ b/docs/_static/bootswatch-3.3.7/darkly/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url("https://fonts.googleapis.com/css?family=Lato:400,700,400italic");/*! * bootswatch v3.3.7 * Homepage: http://bootswatch.com * Copyright 2012-2016 Thomas Park diff --git a/docs/_static/bootswatch-3.3.7/flatly/bootstrap.min.css b/docs/_static/bootswatch-3.3.7/flatly/bootstrap.min.css index 129ae1d0..afeeb3bf 100644 --- a/docs/_static/bootswatch-3.3.7/flatly/bootstrap.min.css +++ b/docs/_static/bootswatch-3.3.7/flatly/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url("https://fonts.googleapis.com/css?family=Lato:400,700,400italic");/*! * bootswatch v3.3.7 * Homepage: http://bootswatch.com * Copyright 2012-2016 Thomas Park diff --git a/docs/_static/bootswatch-3.3.7/journal/bootstrap.min.css b/docs/_static/bootswatch-3.3.7/journal/bootstrap.min.css index 415a9101..de6209cd 100644 --- a/docs/_static/bootswatch-3.3.7/journal/bootstrap.min.css +++ b/docs/_static/bootswatch-3.3.7/journal/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url("https://fonts.googleapis.com/css?family=News+Cycle:400,700");/*! * bootswatch v3.3.7 * Homepage: http://bootswatch.com * Copyright 2012-2016 Thomas Park diff --git a/docs/_static/bootswatch-3.3.7/lumen/bootstrap.min.css b/docs/_static/bootswatch-3.3.7/lumen/bootstrap.min.css index cc4517fb..0bb7b1c9 100644 --- a/docs/_static/bootswatch-3.3.7/lumen/bootstrap.min.css +++ b/docs/_static/bootswatch-3.3.7/lumen/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url("https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,400italic");/*! * bootswatch v3.3.7 * Homepage: http://bootswatch.com * Copyright 2012-2016 Thomas Park diff --git a/docs/_static/bootswatch-3.3.7/paper/bootstrap.min.css b/docs/_static/bootswatch-3.3.7/paper/bootstrap.min.css index 2a6caf19..e8d6228a 100644 --- a/docs/_static/bootswatch-3.3.7/paper/bootstrap.min.css +++ b/docs/_static/bootswatch-3.3.7/paper/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700");/*! * bootswatch v3.3.7 * Homepage: http://bootswatch.com * Copyright 2012-2016 Thomas Park diff --git a/docs/_static/bootswatch-3.3.7/readable/bootstrap.min.css b/docs/_static/bootswatch-3.3.7/readable/bootstrap.min.css index 57ff0845..7b3cf733 100644 --- a/docs/_static/bootswatch-3.3.7/readable/bootstrap.min.css +++ b/docs/_static/bootswatch-3.3.7/readable/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url("https://fonts.googleapis.com/css?family=Raleway:400,700");/*! * bootswatch v3.3.7 * Homepage: http://bootswatch.com * Copyright 2012-2016 Thomas Park diff --git a/docs/_static/bootswatch-3.3.7/sandstone/bootstrap.min.css b/docs/_static/bootswatch-3.3.7/sandstone/bootstrap.min.css index b0416b4a..e2596a71 100644 --- a/docs/_static/bootswatch-3.3.7/sandstone/bootstrap.min.css +++ b/docs/_static/bootswatch-3.3.7/sandstone/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url("https://fonts.googleapis.com/css?family=Roboto:400,500,700");/*! * bootswatch v3.3.7 * Homepage: http://bootswatch.com * Copyright 2012-2016 Thomas Park diff --git a/docs/_static/bootswatch-3.3.7/simplex/bootstrap.min.css b/docs/_static/bootswatch-3.3.7/simplex/bootstrap.min.css index dd33ce27..b040e190 100644 --- a/docs/_static/bootswatch-3.3.7/simplex/bootstrap.min.css +++ b/docs/_static/bootswatch-3.3.7/simplex/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url("https://fonts.googleapis.com/css?family=Open+Sans:400,700");/*! * bootswatch v3.3.7 * Homepage: http://bootswatch.com * Copyright 2012-2016 Thomas Park diff --git a/docs/_static/bootswatch-3.3.7/solar/bootstrap.min.css b/docs/_static/bootswatch-3.3.7/solar/bootstrap.min.css index cb1e2383..42ab992f 100644 --- a/docs/_static/bootswatch-3.3.7/solar/bootstrap.min.css +++ b/docs/_static/bootswatch-3.3.7/solar/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url("https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700");/*! * bootswatch v3.3.7 * Homepage: http://bootswatch.com * Copyright 2012-2017 Thomas Park diff --git a/docs/_static/bootswatch-3.3.7/spacelab/bootstrap.min.css b/docs/_static/bootswatch-3.3.7/spacelab/bootstrap.min.css index f56202e8..1cd48571 100644 --- a/docs/_static/bootswatch-3.3.7/spacelab/bootstrap.min.css +++ b/docs/_static/bootswatch-3.3.7/spacelab/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url("https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700");/*! * bootswatch v3.3.7 * Homepage: http://bootswatch.com * Copyright 2012-2016 Thomas Park diff --git a/docs/_static/bootswatch-3.3.7/superhero/bootstrap.min.css b/docs/_static/bootswatch-3.3.7/superhero/bootstrap.min.css index 967e0dc4..ceac7d5c 100644 --- a/docs/_static/bootswatch-3.3.7/superhero/bootstrap.min.css +++ b/docs/_static/bootswatch-3.3.7/superhero/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url("https://fonts.googleapis.com/css?family=Lato:300,400,700");/*! * bootswatch v3.3.7 * Homepage: http://bootswatch.com * Copyright 2012-2016 Thomas Park diff --git a/docs/_static/bootswatch-3.3.7/united/bootstrap.min.css b/docs/_static/bootswatch-3.3.7/united/bootstrap.min.css index 3cf4fa95..e6a405aa 100644 --- a/docs/_static/bootswatch-3.3.7/united/bootstrap.min.css +++ b/docs/_static/bootswatch-3.3.7/united/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url("https://fonts.googleapis.com/css?family=Ubuntu:400,700");/*! * bootswatch v3.3.7 * Homepage: http://bootswatch.com * Copyright 2012-2016 Thomas Park diff --git a/docs/_static/bootswatch-3.3.7/yeti/bootstrap.min.css b/docs/_static/bootswatch-3.3.7/yeti/bootstrap.min.css index 8a3d742c..cda7d4a2 100644 --- a/docs/_static/bootswatch-3.3.7/yeti/bootstrap.min.css +++ b/docs/_static/bootswatch-3.3.7/yeti/bootstrap.min.css @@ -1,3 +1,4 @@ +@import url("https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,700italic,400,300,700");/*! * bootswatch v3.3.7 * Homepage: http://bootswatch.com * Copyright 2012-2016 Thomas Park diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js index b12dc866..8e02366d 100644 --- a/docs/_static/documentation_options.js +++ b/docs/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '2021-04-28', + VERSION: '2023-09-27', LANGUAGE: 'None', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/ccid/README.html b/docs/ccid/README.html index 05702a48..7924a13f 100644 --- a/docs/ccid/README.html +++ b/docs/ccid/README.html @@ -4,7 +4,7 @@ - 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 @@ 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 @@

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 @@

DownloadSourceforge.

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 @@

Installation on Linux, Unix and similarlibopensc, which is automatically -built from a snapshot of the OpenSC source code and then statically linked.

+built from a snapshot of the
OpenSC 2 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 @@ 

Hints on GadgetFS

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.

diff --git a/docs/index.html b/docs/index.html index e718b849..7ec95806 100644 --- a/docs/index.html +++ b/docs/index.html @@ -4,7 +4,7 @@ - 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 @@

Welcome to the Virtual Smart Card Architecture documentation!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 @@

References - 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 @@ 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 @@

    DownloadSourceforge.

    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 @@

Notes and References

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

diff --git a/docs/remote-reader/README.html b/docs/remote-reader/README.html index aaf25316..2bd5f9fb 100644 --- a/docs/remote-reader/README.html +++ b/docs/remote-reader/README.html @@ -4,7 +4,7 @@ - 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 @@

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

diff --git a/docs/search.html b/docs/search.html index 1d6b91fd..2994db5e 100644 --- a/docs/search.html +++ b/docs/search.html @@ -4,7 +4,7 @@ - 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 @@

Search

- - + +
@@ -164,7 +162,7 @@

Search

- © 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 4286fb32..5189e161 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 19091db6..ad8f464e 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 @@ 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 @@ 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 @@

    @@ -223,6 +259,8 @@

    DownloadSourceforge.

    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 @@

    Building and installing vpcd 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 @@

      Building and installing vpcd
    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 @@

    Configuring vpcd on Windows

    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 @@

    Running vpiccWhen 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.

    +

    - + \ No newline at end of file diff --git a/docs/virtualsmartcard/api.html b/docs/virtualsmartcard/api.html index 72bc90a6..86911a3b 100644 --- a/docs/virtualsmartcard/api.html +++ b/docs/virtualsmartcard/api.html @@ -4,7 +4,7 @@ - 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 @@

    Implementing a ISO 7816 like Smart Cardself.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 @@

    Implementing a ISO 7816 like Smart Card(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 @@

    Implementing a ISO 7816 like Smart CardCryptoflexMF from MF and modify create to our needs.

    -
        def create(p1, p2, data):
    -
    -        if data[0:2] != "\xff\xff":
    +
     

    As you can see it is quite simple to extend the virtual smart card to your @@ -393,7 +393,7 @@

    Implementing an Other Type of Cardvpcd.

    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 @@

    Implementing an Other Type of Card# 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 @@

    Implementing an Other Type of Cardtry: 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 @@

    Implementing an Other Type of Cardtry: 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 @@

    Implementing an Other Type of Cardself.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 @@

    Implementing an Other Type of Cardtry: 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 @@

    Implementing an Other Type of Cardtry: 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 @@

    Implementing an Other Type of Cardtry: 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 @@

    Implementing an Other Type of Card - CardGenerator Module — vsmartcard 2021-04-28 documentation + CardGenerator Module — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,7 +123,7 @@
    -
    +
    diff --git a/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html b/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html index f73b02a3..0722283f 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 @@

    ConstantDefinitions Module - 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 @@

    CryptoUtils Module - 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 @@

    SEutils Module - 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 @@

    SWutils Module - 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 @@

    SmartcardFilesystem Module
    -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 @@

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

    Bases: object

    @@ -1455,7 +1455,7 @@

    SmartcardFilesystem Module
    -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 @@

    SmartcardFilesystem Module - SmartcardSAM Module — vsmartcard 2021-04-28 documentation + SmartcardSAM Module — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,7 +123,7 @@

    @@ -352,7 +352,7 @@

    VirtualSmartcard Module

    - © 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 3b7253a2..00000000 --- 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 a471215a..00000000 --- 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 81a07f88..00000000 --- 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 ec6eed5d..1d727892 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 @@

    cryptoflex Module - 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 @@

    ePass Module - cards Package — vsmartcard 2021-04-28 documentation + cards Package — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,15 +123,12 @@
    -
    +

    cards Package

      -
    • HandlerTest Module
    • -
    • Relay Module
    • -
    • RelayMiddleman Module
    • cryptoflex Module
    • ePass Module
    • nPA Module
    • @@ -151,7 +148,7 @@

      cards Package - 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 @@

      nPA Module - virtualsmartcard Package — vsmartcard 2021-04-28 documentation + virtualsmartcard Package — vsmartcard 2023-09-27 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,28 +123,18 @@
      -
      +

      virtualsmartcard Package

      • cards Package
      • -
      • tests Package -
      • CardGenerator Module
      • ConstantDefinitions Module
      • CryptoUtils Module
      • @@ -171,7 +161,7 @@

        virtualsmartcard Package - - 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 8d55bfe7..00000000 --- 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 d29f3325..00000000 --- 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 6fa85e9b..00000000 --- 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 d84f40d5..00000000 --- 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 2a00e321..62b1abe4 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 @@

        utils Module - Android Smart Card Emulator — vsmartcard 2023-09-27 documentation + Android Smart Card Emulator — vsmartcard 2023-09-30 documentation @@ -180,51 +180,14 @@ (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.

        -
        -

        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

        -
        +
        +

        Figure made with TikZ

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

        -
        -

        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

        -
        +

        +

        The Android Smart Card Emulator has the following dependencies:

          diff --git a/docs/TCardEmulator/README.html b/docs/TCardEmulator/README.html index ad07a29e..059999da 100644 --- a/docs/TCardEmulator/README.html +++ b/docs/TCardEmulator/README.html @@ -4,7 +4,7 @@ - Tizen Smart Card Emulator — vsmartcard 2023-09-27 documentation + Tizen Smart Card Emulator — vsmartcard 2023-09-30 documentation @@ -161,19 +161,8 @@ Emulator.

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

          -
          -

          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

          -
          +
          +

          Figure made with TikZ

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

          Download and Install

          diff --git a/docs/_images/tikz-0405e52eb98193c32482e91a30737e1e9684bad0.svg b/docs/_images/tikz-0405e52eb98193c32482e91a30737e1e9684bad0.svg new file mode 100644 index 00000000..cd2ed0a9 --- /dev/null +++ b/docs/_images/tikz-0405e52eb98193c32482e91a30737e1e9684bad0.svg @@ -0,0 +1,841 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_images/tikz-115ce7f91e19ed28b7af35a9f18aa096148209ea.svg b/docs/_images/tikz-115ce7f91e19ed28b7af35a9f18aa096148209ea.svg new file mode 100644 index 00000000..94204d39 --- /dev/null +++ b/docs/_images/tikz-115ce7f91e19ed28b7af35a9f18aa096148209ea.svg @@ -0,0 +1,406 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_images/tikz-1281452b980f69540bc7520179e10f3ccc59fe36.svg b/docs/_images/tikz-1281452b980f69540bc7520179e10f3ccc59fe36.svg new file mode 100644 index 00000000..692fcdc2 --- /dev/null +++ b/docs/_images/tikz-1281452b980f69540bc7520179e10f3ccc59fe36.svg @@ -0,0 +1,7897 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_images/tikz-2debc244e414ed09dc8909102139ca8f37bae82b.svg b/docs/_images/tikz-2debc244e414ed09dc8909102139ca8f37bae82b.svg new file mode 100644 index 00000000..0a991888 --- /dev/null +++ b/docs/_images/tikz-2debc244e414ed09dc8909102139ca8f37bae82b.svg @@ -0,0 +1,271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_images/tikz-30c9c7049675e5b06e8364c63b0718d51986e380.svg b/docs/_images/tikz-30c9c7049675e5b06e8364c63b0718d51986e380.svg new file mode 100644 index 00000000..c0194a78 --- /dev/null +++ b/docs/_images/tikz-30c9c7049675e5b06e8364c63b0718d51986e380.svg @@ -0,0 +1,3670 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_images/tikz-5b402031da401947efbeae7481d47bd35196791d.svg b/docs/_images/tikz-5b402031da401947efbeae7481d47bd35196791d.svg new file mode 100644 index 00000000..16626dfa --- /dev/null +++ b/docs/_images/tikz-5b402031da401947efbeae7481d47bd35196791d.svg @@ -0,0 +1,633 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_images/tikz-6e71605956d62bb837a2533794c8c50348b2f87c.svg b/docs/_images/tikz-6e71605956d62bb837a2533794c8c50348b2f87c.svg new file mode 100644 index 00000000..38cc7f87 --- /dev/null +++ b/docs/_images/tikz-6e71605956d62bb837a2533794c8c50348b2f87c.svg @@ -0,0 +1,2269 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_images/tikz-ae1e764f23cec8b5d67952bc6d8bbe66280e80d1.svg b/docs/_images/tikz-ae1e764f23cec8b5d67952bc6d8bbe66280e80d1.svg new file mode 100644 index 00000000..b0fe2976 --- /dev/null +++ b/docs/_images/tikz-ae1e764f23cec8b5d67952bc6d8bbe66280e80d1.svg @@ -0,0 +1,2139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_images/tikz-b5a668553fb9bf21fb5abcc4cae46289d11490d1.svg b/docs/_images/tikz-b5a668553fb9bf21fb5abcc4cae46289d11490d1.svg new file mode 100644 index 00000000..da74e3dc --- /dev/null +++ b/docs/_images/tikz-b5a668553fb9bf21fb5abcc4cae46289d11490d1.svg @@ -0,0 +1,427 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_images/tikz-b87c5ab6092153f7f845370e9964b266e5d97f55.svg b/docs/_images/tikz-b87c5ab6092153f7f845370e9964b266e5d97f55.svg new file mode 100644 index 00000000..8b2fbb94 --- /dev/null +++ b/docs/_images/tikz-b87c5ab6092153f7f845370e9964b266e5d97f55.svg @@ -0,0 +1,2024 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_images/tikz-c523bba45f9fcaa801dd4f6284c7efa1f320c9b1.svg b/docs/_images/tikz-c523bba45f9fcaa801dd4f6284c7efa1f320c9b1.svg new file mode 100644 index 00000000..bc17e733 --- /dev/null +++ b/docs/_images/tikz-c523bba45f9fcaa801dd4f6284c7efa1f320c9b1.svg @@ -0,0 +1,345 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_images/tikz-ce55fa00e38973c00fdf255926bb46304226f2dc.svg b/docs/_images/tikz-ce55fa00e38973c00fdf255926bb46304226f2dc.svg new file mode 100644 index 00000000..7a233b48 --- /dev/null +++ b/docs/_images/tikz-ce55fa00e38973c00fdf255926bb46304226f2dc.svg @@ -0,0 +1,2481 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_images/tikz-f675fc9e85a93771428d0790db395907b3f662fe.svg b/docs/_images/tikz-f675fc9e85a93771428d0790db395907b3f662fe.svg new file mode 100644 index 00000000..a1d1e9f1 --- /dev/null +++ b/docs/_images/tikz-f675fc9e85a93771428d0790db395907b3f662fe.svg @@ -0,0 +1,5005 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_images/tikz-f7010fa8209b3752026a52619d57bbebb8fa2bcd.svg b/docs/_images/tikz-f7010fa8209b3752026a52619d57bbebb8fa2bcd.svg new file mode 100644 index 00000000..48de5bf6 --- /dev/null +++ b/docs/_images/tikz-f7010fa8209b3752026a52619d57bbebb8fa2bcd.svg @@ -0,0 +1,2016 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js index 8e02366d..fece22cb 100644 --- a/docs/_static/documentation_options.js +++ b/docs/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '2023-09-27', + VERSION: '2023-09-30', LANGUAGE: 'None', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/ccid/README.html b/docs/ccid/README.html index 7924a13f..ce7c5418 100644 --- a/docs/ccid/README.html +++ b/docs/ccid/README.html @@ -4,7 +4,7 @@ - USB CCID Emulator — vsmartcard 2023-09-27 documentation + USB CCID Emulator — vsmartcard 2023-09-30 documentation @@ -163,51 +163,8 @@ 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.

          -
          -

          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

          -
          +
          +

          Figure made with TikZ

          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 @@ -312,143 +269,14 @@

          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.

          -
          -

          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

          -
          +
          +

          Figure made with TikZ

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

          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.

          -
          -

          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

          -
          +
          +

          Figure made with TikZ

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

          +
          +

          Figure made with TikZ

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

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

          diff --git a/docs/pcsc-relay/README.html b/docs/pcsc-relay/README.html index 89e1f148..a9aa0be5 100644 --- a/docs/pcsc-relay/README.html +++ b/docs/pcsc-relay/README.html @@ -4,7 +4,7 @@ - PC/SC Relay — vsmartcard 2023-09-27 documentation + PC/SC Relay — vsmartcard 2023-09-30 documentation @@ -197,133 +197,14 @@ └────────┘ └──────────┘ └─────────┘

    -
    -

    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

    -
    +
    +

    Figure made with TikZ

    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.

    -
    -

    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

    -
    +
    +

    Figure made with TikZ

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

    PC/SC Relay has the following dependencies:

      diff --git a/docs/remote-reader/README.html b/docs/remote-reader/README.html index 2bd5f9fb..155216b0 100644 --- a/docs/remote-reader/README.html +++ b/docs/remote-reader/README.html @@ -4,7 +4,7 @@ - Remote Smart Card Reader — vsmartcard 2023-09-27 documentation + Remote Smart Card Reader — vsmartcard 2023-09-30 documentation @@ -157,26 +157,8 @@ 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.

      -
      -

      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

      -
      +
      +

      Figure made with TikZ

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

      The Remote Smart Card Reader has the following dependencies:

        @@ -189,30 +171,8 @@

      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:

      -
      -

      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

      -
      +
      +

      Figure made with TikZ

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

      Note

      diff --git a/docs/search.html b/docs/search.html index 2994db5e..54f06229 100644 --- a/docs/search.html +++ b/docs/search.html @@ -4,7 +4,7 @@ - Search — vsmartcard 2023-09-27 documentation + Search — vsmartcard 2023-09-30 documentation diff --git a/docs/virtualsmartcard/README.html b/docs/virtualsmartcard/README.html index ad8f464e..f5899675 100644 --- a/docs/virtualsmartcard/README.html +++ b/docs/virtualsmartcard/README.html @@ -4,7 +4,7 @@ - Virtual Smart Card — vsmartcard 2023-09-27 documentation + Virtual Smart Card — vsmartcard 2023-09-30 documentation @@ -192,25 +192,8 @@ 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.

      -
      -

      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

      -
      +
      +

      Figure made with TikZ

      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 @@ -218,24 +201,8 @@ implementation acts as replacement for libpcsclite which can lead to problems when used in parallel with PCSC-Lite.

      -
      -

      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

      -
      +
      +

      Figure made with TikZ

      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. diff --git a/docs/virtualsmartcard/api.html b/docs/virtualsmartcard/api.html index 86911a3b..cee06697 100644 --- a/docs/virtualsmartcard/api.html +++ b/docs/virtualsmartcard/api.html @@ -4,7 +4,7 @@ - Creating a Virtual Smart Card — vsmartcard 2023-09-27 documentation + Creating a Virtual Smart Card — vsmartcard 2023-09-30 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.CardGenerator.html b/docs/virtualsmartcard/api/virtualsmartcard.CardGenerator.html index bbb1325c..91df3c10 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.CardGenerator.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.CardGenerator.html @@ -4,7 +4,7 @@ - CardGenerator Module — vsmartcard 2023-09-27 documentation + CardGenerator Module — vsmartcard 2023-09-30 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html b/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html index 0722283f..798c9947 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html @@ -4,7 +4,7 @@ - ConstantDefinitions Module — vsmartcard 2023-09-27 documentation + ConstantDefinitions Module — vsmartcard 2023-09-30 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.CryptoUtils.html b/docs/virtualsmartcard/api/virtualsmartcard.CryptoUtils.html index 39d6ddda..7a9a7a48 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.CryptoUtils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.CryptoUtils.html @@ -4,7 +4,7 @@ - CryptoUtils Module — vsmartcard 2023-09-27 documentation + CryptoUtils Module — vsmartcard 2023-09-30 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.SEutils.html b/docs/virtualsmartcard/api/virtualsmartcard.SEutils.html index 555a54f5..56e19928 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.SEutils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.SEutils.html @@ -4,7 +4,7 @@ - SEutils Module — vsmartcard 2023-09-27 documentation + SEutils Module — vsmartcard 2023-09-30 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.SWutils.html b/docs/virtualsmartcard/api/virtualsmartcard.SWutils.html index fc9e042b..80de320b 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.SWutils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.SWutils.html @@ -4,7 +4,7 @@ - SWutils Module — vsmartcard 2023-09-27 documentation + SWutils Module — vsmartcard 2023-09-30 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.html b/docs/virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.html index b2fd2470..56dda2b2 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.html @@ -4,7 +4,7 @@ - SmartcardFilesystem Module — vsmartcard 2023-09-27 documentation + SmartcardFilesystem Module — vsmartcard 2023-09-30 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.SmartcardSAM.html b/docs/virtualsmartcard/api/virtualsmartcard.SmartcardSAM.html index 467c5649..23b0465f 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.SmartcardSAM.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.SmartcardSAM.html @@ -4,7 +4,7 @@ - SmartcardSAM Module — vsmartcard 2023-09-27 documentation + SmartcardSAM Module — vsmartcard 2023-09-30 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.TLVutils.html b/docs/virtualsmartcard/api/virtualsmartcard.TLVutils.html index b1db19c7..68117d86 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.TLVutils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.TLVutils.html @@ -4,7 +4,7 @@ - TLVutils Module — vsmartcard 2023-09-27 documentation + TLVutils Module — vsmartcard 2023-09-30 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.html b/docs/virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.html index 9e46f148..128e4f06 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.html @@ -4,7 +4,7 @@ - VirtualSmartcard Module — vsmartcard 2023-09-27 documentation + VirtualSmartcard Module — vsmartcard 2023-09-30 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.html index 1d727892..cae92c46 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.html @@ -4,7 +4,7 @@ - cryptoflex Module — vsmartcard 2023-09-27 documentation + cryptoflex Module — vsmartcard 2023-09-30 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.ePass.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.ePass.html index e4beb4e0..3df2ac88 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.ePass.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.ePass.html @@ -4,7 +4,7 @@ - ePass Module — vsmartcard 2023-09-27 documentation + ePass Module — vsmartcard 2023-09-30 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.html index 2e22559b..c5985e9a 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.html @@ -4,7 +4,7 @@ - cards Package — vsmartcard 2023-09-27 documentation + cards Package — vsmartcard 2023-09-30 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.nPA.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.nPA.html index cc640fac..d8299c06 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.nPA.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.nPA.html @@ -4,7 +4,7 @@ - nPA Module — vsmartcard 2023-09-27 documentation + nPA Module — vsmartcard 2023-09-30 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.html b/docs/virtualsmartcard/api/virtualsmartcard.html index ba881646..55bea585 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.html @@ -4,7 +4,7 @@ - virtualsmartcard Package — vsmartcard 2023-09-27 documentation + virtualsmartcard Package — vsmartcard 2023-09-30 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.utils.html b/docs/virtualsmartcard/api/virtualsmartcard.utils.html index 62b1abe4..ff48af6c 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.utils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.utils.html @@ -4,7 +4,7 @@ - utils Module — vsmartcard 2023-09-27 documentation + utils Module — vsmartcard 2023-09-30 documentation From 00f150856b3c824049f9183b38a656859dcefad4 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Sun, 1 Oct 2023 18:22:03 +0200 Subject: [PATCH 04/10] virtualsmartcard: distribute install instructions for Windows --- .appveyor.yml | 1 + docs/.buildinfo | 2 +- docs/ACardEmulator/README.html | 2 +- docs/TCardEmulator/README.html | 2 +- docs/_sources/virtualsmartcard/README.txt | 21 +++------------ docs/_static/documentation_options.js | 2 +- docs/ccid/README.html | 2 +- docs/index.html | 2 +- docs/objects.inv | Bin 4234 -> 4262 bytes docs/pcsc-relay/README.html | 2 +- docs/remote-reader/README.html | 2 +- docs/search.html | 2 +- docs/searchindex.js | 2 +- docs/virtualsmartcard/README.html | 24 +++++++++++------- docs/virtualsmartcard/api.html | 2 +- .../api/virtualsmartcard.CardGenerator.html | 2 +- .../virtualsmartcard.ConstantDefinitions.html | 2 +- .../api/virtualsmartcard.CryptoUtils.html | 2 +- .../api/virtualsmartcard.SEutils.html | 2 +- .../api/virtualsmartcard.SWutils.html | 2 +- .../virtualsmartcard.SmartcardFilesystem.html | 2 +- .../api/virtualsmartcard.SmartcardSAM.html | 2 +- .../api/virtualsmartcard.TLVutils.html | 2 +- .../virtualsmartcard.VirtualSmartcard.html | 2 +- .../virtualsmartcard.cards.cryptoflex.html | 2 +- .../api/virtualsmartcard.cards.ePass.html | 2 +- .../api/virtualsmartcard.cards.html | 2 +- .../api/virtualsmartcard.cards.nPA.html | 2 +- .../api/virtualsmartcard.html | 2 +- .../api/virtualsmartcard.utils.html | 2 +- virtualsmartcard/doc/README.txt.in | 21 +++------------ virtualsmartcard/doc/install.txt | 19 ++++++++++++++ 32 files changed, 69 insertions(+), 69 deletions(-) create mode 100644 virtualsmartcard/doc/install.txt diff --git a/.appveyor.yml b/.appveyor.yml index 445bb4f0..979cb63e 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -54,6 +54,7 @@ build_script: - msbuild virtualsmartcard\win32\BixVReader.sln /p:Configuration=Release;Platform=%MSBUILD_PLATFORM% - move virtualsmartcard\win32\BixVReaderInstaller\bin\%X64%Release\BixVReaderInstaller.msi %ARTIFACT% - move virtualsmartcard\win32\%X64%Release\*.cer %ARTIFACT% + - copy virtualsmartcard\doc\install.txt %ARTIFACT% - cl /Ivirtualsmartcard\src\vpcd virtualsmartcard\src\vpcd-config\vpcd-config.c /NODEFAULTLIB:MSVCRTD /NODEFAULTLIB:MSVCRT virtualsmartcard\src\vpcd-config\local-ip.c ws2_32.lib - move vpcd-config.exe %ARTIFACT% diff --git a/docs/.buildinfo b/docs/.buildinfo index 7f5e7a82..2b585fda 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: f2fa73baf7fec385947ac770039aeef0 +config: 970a58e8ea9411b84c5926de29b702fb tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/ACardEmulator/README.html b/docs/ACardEmulator/README.html index faf118e2..9e07517e 100644 --- a/docs/ACardEmulator/README.html +++ b/docs/ACardEmulator/README.html @@ -4,7 +4,7 @@ - Android Smart Card Emulator — vsmartcard 2023-09-30 documentation + Android Smart Card Emulator — vsmartcard 2023-10-01 documentation diff --git a/docs/TCardEmulator/README.html b/docs/TCardEmulator/README.html index 059999da..0fda39f2 100644 --- a/docs/TCardEmulator/README.html +++ b/docs/TCardEmulator/README.html @@ -4,7 +4,7 @@ - Tizen Smart Card Emulator — vsmartcard 2023-09-30 documentation + Tizen Smart Card Emulator — vsmartcard 2023-10-01 documentation diff --git a/docs/_sources/virtualsmartcard/README.txt b/docs/_sources/virtualsmartcard/README.txt index 95e766a2..d2e8e9f4 100644 --- a/docs/_sources/virtualsmartcard/README.txt +++ b/docs/_sources/virtualsmartcard/README.txt @@ -136,7 +136,7 @@ card reader with an :file:`Info.plist`:: make install ================================================================================ -Building and installing |vpcd| on Windows +Building |vpcd| on Windows ================================================================================ .. versionadded:: 0.7 @@ -170,22 +170,6 @@ requires the `WiX Toolset 3.10`_ to be installed. the installer (:file:`BixVReaderInstaller.msi`) in :file:`virtualsmartcard\\win32\\BixVReaderInstaller\\bin\\*Release` -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 Reader`_ for details. @@ -194,6 +178,9 @@ All of Fabio's card connectors are still available, but inactive by default (see `Configuring vpcd on Windows`_ below). +.. include:: install.txt + + ******************************************************************************** Using the Virtual Smart Card ******************************************************************************** diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js index fece22cb..9cab029b 100644 --- a/docs/_static/documentation_options.js +++ b/docs/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '2023-09-30', + VERSION: '2023-10-01', LANGUAGE: 'None', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/ccid/README.html b/docs/ccid/README.html index ce7c5418..a882daa1 100644 --- a/docs/ccid/README.html +++ b/docs/ccid/README.html @@ -4,7 +4,7 @@ - USB CCID Emulator — vsmartcard 2023-09-30 documentation + USB CCID Emulator — vsmartcard 2023-10-01 documentation diff --git a/docs/index.html b/docs/index.html index b0324ccd..badcc606 100644 --- a/docs/index.html +++ b/docs/index.html @@ -4,7 +4,7 @@ - Welcome to the Virtual Smart Card Architecture documentation! — vsmartcard 2023-09-30 documentation + Welcome to the Virtual Smart Card Architecture documentation! — vsmartcard 2023-10-01 documentation diff --git a/docs/objects.inv b/docs/objects.inv index 2fb98a8b0c827eea7e63394cdfeba741aa533aa5..6e3eb796bc6c1cf6b8bb73b4a9aac071e538e94b 100644 GIT binary patch delta 4018 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 Y>dJm$Jhb)NL{I8+f9d+_{~dg{e{NX%djJ3c delta 3990 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 diff --git a/docs/pcsc-relay/README.html b/docs/pcsc-relay/README.html index a9aa0be5..aecfe4cb 100644 --- a/docs/pcsc-relay/README.html +++ b/docs/pcsc-relay/README.html @@ -4,7 +4,7 @@ - PC/SC Relay — vsmartcard 2023-09-30 documentation + PC/SC Relay — vsmartcard 2023-10-01 documentation diff --git a/docs/remote-reader/README.html b/docs/remote-reader/README.html index 155216b0..2fb1da8f 100644 --- a/docs/remote-reader/README.html +++ b/docs/remote-reader/README.html @@ -4,7 +4,7 @@ - Remote Smart Card Reader — vsmartcard 2023-09-30 documentation + Remote Smart Card Reader — vsmartcard 2023-10-01 documentation diff --git a/docs/search.html b/docs/search.html index 54f06229..acceba31 100644 --- a/docs/search.html +++ b/docs/search.html @@ -4,7 +4,7 @@ - Search — vsmartcard 2023-09-30 documentation + Search — vsmartcard 2023-10-01 documentation diff --git a/docs/searchindex.js b/docs/searchindex.js index 5189e161..2a9de72e 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.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 +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","virtualsmartcard/install"],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","virtualsmartcard/install.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,23],"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,23],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,23],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,23],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,23],bixvreaderinstal:[6,23],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,23],cert:6,certif:[1,6,12,19,20,23],certifc:6,certmgr:[6,23],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,23],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,23],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,23],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,23],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,23],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,23],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,23],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,23],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,23],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,23],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,23],freerunn:2,friendlynam:6,from:[0,1,2,3,4,5,6,7,9,12,14,15,17,19,20,23],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,instal:23,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,23],local_ip:7,localhost:6,localmachin:[6,23],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,23],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,23],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,23],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,23],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,23],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,23],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,23],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,23],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,23],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,23],trustedpublish:[6,23],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,23],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,23],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","Istalling |vpcd| on Windows"],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,istal:[6,23],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,23],vpicc:6,welcom:3,window:[6,23],written:6}}) \ No newline at end of file diff --git a/docs/virtualsmartcard/README.html b/docs/virtualsmartcard/README.html index f5899675..d9929544 100644 --- a/docs/virtualsmartcard/README.html +++ b/docs/virtualsmartcard/README.html @@ -4,7 +4,7 @@ - Virtual Smart Card — vsmartcard 2023-09-30 documentation + Virtual Smart Card — vsmartcard 2023-10-01 documentation @@ -96,7 +96,8 @@

    • Installation
    • Using the Virtual Smart Card
        @@ -266,8 +267,8 @@

        Building and installing vpcd

    -
    -

    Building and installing vpcd on Windows

    +
    +

    Building vpcd on Windows

    New in version 0.7: We implemented vpcd as user mode device driver for Windows so that vpicc can directly be used in Windows’ smart card applications that use @@ -297,6 +298,16 @@

    Building and installing vpcd
  • If you can successfully Build the solution, you can find the installer (BixVReaderInstaller.msi) in virtualsmartcard\win32\BixVReaderInstaller\bin\*Release

  • + +

    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 11 for details.

    +

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

    +

    +
    +

    Istalling vpcd on Windows

    +
    1. 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 @@ -311,11 +322,6 @@

      Building and installing vpcd

    2. 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 11 for details.

    -

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

    diff --git a/docs/virtualsmartcard/api.html b/docs/virtualsmartcard/api.html index cee06697..a26dff4a 100644 --- a/docs/virtualsmartcard/api.html +++ b/docs/virtualsmartcard/api.html @@ -4,7 +4,7 @@ - Creating a Virtual Smart Card — vsmartcard 2023-09-30 documentation + Creating a Virtual Smart Card — vsmartcard 2023-10-01 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.CardGenerator.html b/docs/virtualsmartcard/api/virtualsmartcard.CardGenerator.html index 91df3c10..3c553520 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.CardGenerator.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.CardGenerator.html @@ -4,7 +4,7 @@ - CardGenerator Module — vsmartcard 2023-09-30 documentation + CardGenerator Module — vsmartcard 2023-10-01 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html b/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html index 798c9947..734d6afe 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html @@ -4,7 +4,7 @@ - ConstantDefinitions Module — vsmartcard 2023-09-30 documentation + ConstantDefinitions Module — vsmartcard 2023-10-01 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.CryptoUtils.html b/docs/virtualsmartcard/api/virtualsmartcard.CryptoUtils.html index 7a9a7a48..4d9b8ca1 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.CryptoUtils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.CryptoUtils.html @@ -4,7 +4,7 @@ - CryptoUtils Module — vsmartcard 2023-09-30 documentation + CryptoUtils Module — vsmartcard 2023-10-01 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.SEutils.html b/docs/virtualsmartcard/api/virtualsmartcard.SEutils.html index 56e19928..74dc7408 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.SEutils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.SEutils.html @@ -4,7 +4,7 @@ - SEutils Module — vsmartcard 2023-09-30 documentation + SEutils Module — vsmartcard 2023-10-01 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.SWutils.html b/docs/virtualsmartcard/api/virtualsmartcard.SWutils.html index 80de320b..f1499987 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.SWutils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.SWutils.html @@ -4,7 +4,7 @@ - SWutils Module — vsmartcard 2023-09-30 documentation + SWutils Module — vsmartcard 2023-10-01 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.html b/docs/virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.html index 56dda2b2..ed3f0a5f 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.html @@ -4,7 +4,7 @@ - SmartcardFilesystem Module — vsmartcard 2023-09-30 documentation + SmartcardFilesystem Module — vsmartcard 2023-10-01 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.SmartcardSAM.html b/docs/virtualsmartcard/api/virtualsmartcard.SmartcardSAM.html index 23b0465f..afb7ba1c 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.SmartcardSAM.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.SmartcardSAM.html @@ -4,7 +4,7 @@ - SmartcardSAM Module — vsmartcard 2023-09-30 documentation + SmartcardSAM Module — vsmartcard 2023-10-01 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.TLVutils.html b/docs/virtualsmartcard/api/virtualsmartcard.TLVutils.html index 68117d86..30ebb806 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.TLVutils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.TLVutils.html @@ -4,7 +4,7 @@ - TLVutils Module — vsmartcard 2023-09-30 documentation + TLVutils Module — vsmartcard 2023-10-01 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.html b/docs/virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.html index 128e4f06..0a217150 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.html @@ -4,7 +4,7 @@ - VirtualSmartcard Module — vsmartcard 2023-09-30 documentation + VirtualSmartcard Module — vsmartcard 2023-10-01 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.html index cae92c46..81054f7a 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.html @@ -4,7 +4,7 @@ - cryptoflex Module — vsmartcard 2023-09-30 documentation + cryptoflex Module — vsmartcard 2023-10-01 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.ePass.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.ePass.html index 3df2ac88..1d7ffcfd 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.ePass.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.ePass.html @@ -4,7 +4,7 @@ - ePass Module — vsmartcard 2023-09-30 documentation + ePass Module — vsmartcard 2023-10-01 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.html index c5985e9a..8043a497 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.html @@ -4,7 +4,7 @@ - cards Package — vsmartcard 2023-09-30 documentation + cards Package — vsmartcard 2023-10-01 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.nPA.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.nPA.html index d8299c06..31cd97d3 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.nPA.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.nPA.html @@ -4,7 +4,7 @@ - nPA Module — vsmartcard 2023-09-30 documentation + nPA Module — vsmartcard 2023-10-01 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.html b/docs/virtualsmartcard/api/virtualsmartcard.html index 55bea585..dc743116 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.html @@ -4,7 +4,7 @@ - virtualsmartcard Package — vsmartcard 2023-09-30 documentation + virtualsmartcard Package — vsmartcard 2023-10-01 documentation diff --git a/docs/virtualsmartcard/api/virtualsmartcard.utils.html b/docs/virtualsmartcard/api/virtualsmartcard.utils.html index ff48af6c..52c9fe41 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.utils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.utils.html @@ -4,7 +4,7 @@ - utils Module — vsmartcard 2023-09-30 documentation + utils Module — vsmartcard 2023-10-01 documentation diff --git a/virtualsmartcard/doc/README.txt.in b/virtualsmartcard/doc/README.txt.in index 546c43a1..1e2f9010 100644 --- a/virtualsmartcard/doc/README.txt.in +++ b/virtualsmartcard/doc/README.txt.in @@ -136,7 +136,7 @@ card reader with an :file:`Info.plist`:: make install ================================================================================ -Building and installing |vpcd| on Windows +Building |vpcd| on Windows ================================================================================ .. versionadded:: 0.7 @@ -170,22 +170,6 @@ requires the `WiX Toolset 3.10`_ to be installed. the installer (:file:`BixVReaderInstaller.msi`) in :file:`virtualsmartcard\\win32\\BixVReaderInstaller\\bin\\*Release` -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 Reader`_ for details. @@ -194,6 +178,9 @@ All of Fabio's card connectors are still available, but inactive by default (see `Configuring vpcd on Windows`_ below). +.. include:: install.txt + + ******************************************************************************** Using the @PACKAGE_NAME@ ******************************************************************************** diff --git a/virtualsmartcard/doc/install.txt b/virtualsmartcard/doc/install.txt new file mode 100644 index 00000000..0dbac95c --- /dev/null +++ b/virtualsmartcard/doc/install.txt @@ -0,0 +1,19 @@ +================================================================================ +Istalling |vpcd| on Windows +================================================================================ + +1. 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. + +2. To install |vpcd|, double click :file:`BixVReaderInstaller.msi`. From 1a395716cbd96515635e406de7e7a290824166b8 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Mon, 23 Oct 2023 18:57:40 +0200 Subject: [PATCH 05/10] ccid-emulator: added Raspberry Pi Zero OTG configuration (untested) source: https://github.com/polhenarejos/ccid-emulator/commit/ec3e2519eebfb68897a0b3adc99cef200b89b287 --- ccid/src/usb.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/ccid/src/usb.c b/ccid/src/usb.c index c344d76c..1cd2cea4 100644 --- a/ccid/src/usb.c +++ b/ccid/src/usb.c @@ -477,6 +477,27 @@ static int autoconfig () = USB_DIR_IN | 3; EP_STATUS_NAME = "ep3in-int"; + /* Raspberry Pi Zero, high/full speed */ + } else if (stat (DEVNAME = "20980000.usb", &statb) == 0) { + HIGHSPEED = 1; + device_desc.bcdDevice = __constant_cpu_to_le16 (0x0100); + + fs_source_desc.bEndpointAddress + = hs_source_desc.bEndpointAddress + = USB_DIR_IN | 1; + EP_IN_NAME = "ep1in"; + fs_sink_desc.bEndpointAddress + = hs_sink_desc.bEndpointAddress + = USB_DIR_OUT | 2; + EP_OUT_NAME = "ep2out"; + + source_sink_intf.bNumEndpoints = 3; + + fs_status_desc.bEndpointAddress + = hs_status_desc.bEndpointAddress + = USB_DIR_IN | 3; + EP_STATUS_NAME = "ep3in"; + } else { DEVNAME = 0; return -ENODEV; From 780cc7c4fae25f2abe060b5559f76f35ee51e720 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Tue, 27 Feb 2024 10:57:12 +0100 Subject: [PATCH 06/10] pcsc-relay: allow no-ops when sending/receiving --- pcsc-relay/src/lnfc.c | 28 ++++++++++++++++------------ pcsc-relay/src/opicc.c | 19 ++++++++++--------- pcsc-relay/src/vicc.c | 2 +- 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/pcsc-relay/src/lnfc.c b/pcsc-relay/src/lnfc.c index 14c1c7e9..10cfbfb0 100644 --- a/pcsc-relay/src/lnfc.c +++ b/pcsc-relay/src/lnfc.c @@ -207,13 +207,15 @@ static int lnfc_receive_capdu(driver_data_t *driver_data, } - p = realloc(*capdu, data->iCapduLen); - if (!p) { - RELAY_ERROR("Error allocating memory for C-APDU\n"); - return 0; + if (data->iCapduLen) { + p = realloc(*capdu, data->iCapduLen); + if (!p) { + RELAY_ERROR("Error allocating memory for C-APDU (%d bytes)\n", data->iCapduLen); + return 0; + } + memcpy(p, data->abtCapdu, data->iCapduLen); + *capdu = p; } - memcpy(p, data->abtCapdu, data->iCapduLen); - *capdu = p; *len = data->iCapduLen; @@ -230,13 +232,15 @@ static int lnfc_send_rapdu(driver_data_t *driver_data, return 0; - r = nfc_target_send_bytes(data->pndTarget, rapdu, len, -1); - if (r < 0) { - RELAY_ERROR ("nfc_target_send_bytes: %s\n", nfc_strerror(data->pndTarget)); - return 0; + if (len) { + r = nfc_target_send_bytes(data->pndTarget, rapdu, len, -1); + if (r < 0) { + RELAY_ERROR ("nfc_target_send_bytes: %s\n", nfc_strerror(data->pndTarget)); + return 0; + } + if (r < len) + INFO ("Transmitted %u less bytes than desired: %s\n", (unsigned int) len-r, nfc_strerror(data->pndTarget)); } - if (r < len) - INFO ("Transmitted %u less bytes than desired: %s\n", (unsigned int) len-r, nfc_strerror(data->pndTarget)); return 1; diff --git a/pcsc-relay/src/opicc.c b/pcsc-relay/src/opicc.c index d67f4acf..06a5b8af 100644 --- a/pcsc-relay/src/opicc.c +++ b/pcsc-relay/src/opicc.c @@ -208,15 +208,13 @@ static int picc_receive_capdu(driver_data_t *driver_data, /* read C-APDU */ linelen = getline(&data->line, &data->linemax, data->fd); - if (linelen <= 0) { - if (linelen < 0) { - RELAY_ERROR("Error reading from %s: %s\n", PICCDEV, strerror(errno)); - return 0; - } - if (linelen == 0) { - *len = 0; - return 1; - } + if (linelen < 0) { + RELAY_ERROR("Error reading from %s: %s\n", PICCDEV, strerror(errno)); + return 0; + } + if (linelen == 0) { + *len = 0; + return 1; } if (fflush(data->fd) != 0) RELAY_ERROR("Warning, fflush failed: %s\n", strerror(errno)); @@ -237,6 +235,9 @@ static int picc_send_rapdu(driver_data_t *driver_data, if (!data || !rapdu) return 0; + if (!len) + return 1; + /* encode R-APDU */ if (!picc_encode_rapdu(rapdu, len, &data->e_rapdu, &buflen)) diff --git a/pcsc-relay/src/vicc.c b/pcsc-relay/src/vicc.c index ea934482..a9f6df28 100644 --- a/pcsc-relay/src/vicc.c +++ b/pcsc-relay/src/vicc.c @@ -136,7 +136,7 @@ static int vicc_receive_capdu(driver_data_t *driver_data, goto err; } } else { - // finaly we got the capdu + // finally we got the C-APDU *len = size; r = 1; } From a985e84a04e5fb98ee43b6103c83aa3fcbe86627 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Tue, 12 Mar 2024 08:23:13 +0100 Subject: [PATCH 07/10] update python version fixes https://github.com/frankmorgner/vsmartcard/issues/269 --- virtualsmartcard/configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/virtualsmartcard/configure.ac b/virtualsmartcard/configure.ac index 8e22ee56..1bbbff71 100644 --- a/virtualsmartcard/configure.ac +++ b/virtualsmartcard/configure.ac @@ -43,7 +43,7 @@ AC_PROG_INSTALL AC_PROG_LIBTOOL AC_PROG_LN_S AC_PROG_SED -AM_PATH_PYTHON +AM_PATH_PYTHON([3.2]) AC_PROG_CXX AM_PROG_CC_C_O PKG_PROG_PKG_CONFIG From 29ccf47113f32162efe981bf67376391e772f7b0 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Tue, 12 Mar 2024 09:11:03 +0100 Subject: [PATCH 08/10] more compact view of macos' usb devices --- virtualsmartcard/doc/README.txt.in | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/virtualsmartcard/doc/README.txt.in b/virtualsmartcard/doc/README.txt.in index 1e2f9010..68b067ca 100644 --- a/virtualsmartcard/doc/README.txt.in +++ b/virtualsmartcard/doc/README.txt.in @@ -229,7 +229,13 @@ as USB device: 2. Run the following command to get the device's product and vendor ID:: - system_profiler SPUSBDataType + system_profiler SPUSBDataType \ + | awk ' + /Product ID:/{p=$3} + /Vendor ID:/{v=$3} + /Manufacturer:/{sub(/.*: /,""); m=$0} + /Location ID:/{sub(/.*: /,""); printf("%s:%s %s (%s)\n", v, p, $0, m);} + ' 3. Change :file:`/usr/local/libexec/SmartCardServices/drivers/ifd-vpcd.bundle/Info.plist` to match your product and vendor ID: From d2e607f4c68c5dc69ae1d73626d89df15e8c9eaf Mon Sep 17 00:00:00 2001 From: Maksim Ivanov Date: Tue, 16 Apr 2024 21:02:37 +0000 Subject: [PATCH 09/10] Missing newline in CCID error --- ccid/src/scutil.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccid/src/scutil.c b/ccid/src/scutil.c index 37304efa..75378b9d 100644 --- a/ccid/src/scutil.c +++ b/ccid/src/scutil.c @@ -36,7 +36,7 @@ int initialize(int reader_id, int verbose, int r = sc_establish_context(ctx, ""); if (r < 0 || !*ctx) { - fprintf(stderr, "Failed to create initial context: %s", sc_strerror(r)); + fprintf(stderr, "Failed to create initial context: %s\n", sc_strerror(r)); return r; } From 509a14b44b229c44c33ad7f096ad1ad2d2c48729 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Tue, 14 May 2024 01:38:56 +0200 Subject: [PATCH 10/10] vicc: updated install guide for MacOSX fixes https://github.com/frankmorgner/vsmartcard/issues/210 --- virtualsmartcard/doc/README.txt.in | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/virtualsmartcard/doc/README.txt.in b/virtualsmartcard/doc/README.txt.in index 68b067ca..eba8f39c 100644 --- a/virtualsmartcard/doc/README.txt.in +++ b/virtualsmartcard/doc/README.txt.in @@ -129,8 +129,15 @@ Mac OS X 10.10 (and later) ships with a proprietary implementation of the PC/SC layer instead of with PCSC-Lite. As far as we know, this means that smart card readers must be USB devices instead of directly allowing a more generic type of reader. To make |vpcd| work we simply configure it to pretend being a USB smart -card reader with an :file:`Info.plist`:: +card reader with an :file:`Info.plist`. Also, macOS 13 (and later) seem to be +incompatible with the distribution's :file:`configure` script which is +generated on Linux. As workaround, check out the source code from Github and +generate it by hand via autotools. The complete installation procedure looks +like this:: + git clone https://github.com/frankmorgner/vsmartcard.git + cd vsmartcard/virtualsmartcard + autoreconf -vis ./configure --enable-infoplist make make install