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/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; } 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; diff --git a/docs/.buildinfo b/docs/.buildinfo index 6f1ab4cd..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: b6c0a435aa7d2e7b87f7f3b438fbe297 +config: 970a58e8ea9411b84c5926de29b702fb tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/ACardEmulator/README.html b/docs/ACardEmulator/README.html index 4489c363..9e07517e 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-10-01 documentation @@ -12,10 +12,6 @@ - - - - @@ -24,6 +20,10 @@ + + + + @@ -138,7 +138,7 @@
-
+

Android Smart Card Emulator

@@ -211,9 +211,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 8 to build and deploy the application. Use @@ -268,7 +266,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/TCardEmulator/README.html b/docs/TCardEmulator/README.html index 6dd3386a..0fda39f2 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-10-01 documentation @@ -12,10 +12,6 @@ - - - - @@ -24,6 +20,10 @@ + + + + @@ -138,7 +138,7 @@
-
+
diff --git a/docs/_images/inheritance-285e17a8f890c78c473daa9db430b4cda74f6cb7.png b/docs/_images/inheritance-285e17a8f890c78c473daa9db430b4cda74f6cb7.png deleted file mode 100644 index 2585a928..00000000 Binary files a/docs/_images/inheritance-285e17a8f890c78c473daa9db430b4cda74f6cb7.png and /dev/null differ 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 9d843ca7..00000000 Binary files a/docs/_images/inheritance-5827e1a05433ba14df2d516741c83a340d46b696.png and /dev/null differ diff --git a/docs/_images/inheritance-5827e1a05433ba14df2d516741c83a340d46b696.png.map b/docs/_images/inheritance-5827e1a05433ba14df2d516741c83a340d46b696.png.map deleted file mode 100644 index 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 b6a07d7a..00000000 Binary files a/docs/_images/inheritance-5c600c60a9fcc658bb9a017dd609c3bff8e456b3.png and /dev/null differ diff --git a/docs/_images/inheritance-5c600c60a9fcc658bb9a017dd609c3bff8e456b3.png.map b/docs/_images/inheritance-5c600c60a9fcc658bb9a017dd609c3bff8e456b3.png.map deleted file mode 100644 index 938dc5ac..00000000 --- a/docs/_images/inheritance-5c600c60a9fcc658bb9a017dd609c3bff8e456b3.png.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/_images/inheritance-95149f9804291dbbbe502519b9ab8d95f3e28f93.png b/docs/_images/inheritance-95149f9804291dbbbe502519b9ab8d95f3e28f93.png deleted file mode 100644 index 53909d0f..00000000 Binary files a/docs/_images/inheritance-95149f9804291dbbbe502519b9ab8d95f3e28f93.png and /dev/null differ diff --git a/docs/_images/inheritance-95149f9804291dbbbe502519b9ab8d95f3e28f93.png.map b/docs/_images/inheritance-95149f9804291dbbbe502519b9ab8d95f3e28f93.png.map deleted file mode 100644 index 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 70b2792c..00000000 Binary files a/docs/_images/inheritance-c92efbd974214a247217ba79cf0775fb65c344af.png and /dev/null differ diff --git a/docs/_images/inheritance-c92efbd974214a247217ba79cf0775fb65c344af.png.map b/docs/_images/inheritance-c92efbd974214a247217ba79cf0775fb65c344af.png.map deleted file mode 100644 index d0bd8c2e..00000000 --- a/docs/_images/inheritance-c92efbd974214a247217ba79cf0775fb65c344af.png.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/_images/inheritance-c95de3c82405e783e52102c0d9ccbc16f7e48d7c.png b/docs/_images/inheritance-c95de3c82405e783e52102c0d9ccbc16f7e48d7c.png deleted file mode 100644 index 835d1a40..00000000 Binary files a/docs/_images/inheritance-c95de3c82405e783e52102c0d9ccbc16f7e48d7c.png and /dev/null differ diff --git a/docs/_images/inheritance-c95de3c82405e783e52102c0d9ccbc16f7e48d7c.png.map b/docs/_images/inheritance-c95de3c82405e783e52102c0d9ccbc16f7e48d7c.png.map deleted file mode 100644 index 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 06da744e..00000000 Binary files a/docs/_images/inheritance-d51eb1f410a57b99d3b85ed60b3f73a1a03a39de.png and /dev/null differ diff --git a/docs/_images/inheritance-d51eb1f410a57b99d3b85ed60b3f73a1a03a39de.png.map b/docs/_images/inheritance-d51eb1f410a57b99d3b85ed60b3f73a1a03a39de.png.map deleted file mode 100644 index b6ba07eb..00000000 --- a/docs/_images/inheritance-d51eb1f410a57b99d3b85ed60b3f73a1a03a39de.png.map +++ /dev/null @@ -1,6 +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..d2e8e9f4 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 @@ -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 @@ -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,11 +170,6 @@ 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`. - 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. @@ -179,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 ******************************************************************************** @@ -300,6 +302,38 @@ through the PC/SC API. You can use the :command:`opensc-explorer` or provide scripts for testing with npa-tool_ and PCSC-Lite's smart card reader driver tester. +-------------------------------------------------------------------------------- +Testing |vpicc| -t ePass +-------------------------------------------------------------------------------- + +A simple tool to test |BAC| is available for Python 2.7. On Ubuntu, its +requiremets are installed as follows:: + + sudo apt-get install python2.7-dev + curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py + python2.7 get-pip.py + python2.7 -m pip install pycryptodomex pyscard + python2.7 readpass.py --no-gui + git clone https://github.com/henryk/cyberflex-shell + cd cyberflex-shell + +Now we can create and run a small script:: + + echo "select_application a0000002471001" > script.txt + echo "perform_bac L898902C<3UTO6908061F9406236ZE184226B<<<<<14" >> script.txt + python2.7 cyberflex-shell.py script.txt + +The tool will wait for a (virtual) smart card to appear. Start |vpicc| and make +sure to configure it with the correct MRZ, i.e. +``P - USB CCID Emulator — vsmartcard 2021-04-28 documentation + USB CCID Emulator — vsmartcard 2023-10-01 documentation @@ -12,10 +12,6 @@ - - - - @@ -24,6 +20,10 @@ + + + + @@ -144,7 +144,7 @@
-
+

USB CCID Emulator

@@ -201,7 +201,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):

@@ -272,12 +272,7 @@

Figure made with TikZ

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.

@@ -289,6 +284,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 +309,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 +351,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..badcc606 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-10-01 documentation @@ -12,10 +12,6 @@ - - - - @@ -23,6 +19,10 @@ + + + + @@ -132,7 +132,7 @@
-
+

Welcome to the Virtual Smart Card Architecture documentation!

@@ -161,9 +161,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 +212,7 @@

References - PC/SC Relay — vsmartcard 2021-04-28 documentation + PC/SC Relay — vsmartcard 2023-10-01 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,6 +183,20 @@ smart card’s native interface is used and (despite its name) PC/SC Relay does not need to access PC/SC in this case.

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

Figure made with TikZ

Debug, Analyze and Emulate with PC/SC Relay

@@ -209,6 +223,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 +436,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..2fb1da8f 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-10-01 documentation @@ -12,10 +12,6 @@ - - - - @@ -24,6 +20,10 @@ + + + + @@ -138,7 +138,7 @@
-
+
diff --git a/docs/search.html b/docs/search.html index 1d6b91fd..acceba31 100644 --- a/docs/search.html +++ b/docs/search.html @@ -4,7 +4,7 @@ - Search — vsmartcard 2021-04-28 documentation + Search — vsmartcard 2023-10-01 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..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.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","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 19091db6..d9929544 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-10-01 documentation @@ -12,10 +12,6 @@ - - - - @@ -24,6 +20,10 @@ + + + + @@ -96,14 +96,18 @@
  • Installation
  • Using the Virtual Smart Card
  • Question
  • @@ -151,7 +155,7 @@
    -
    +

    Virtual Smart Card

    @@ -211,10 +215,10 @@
    @@ -223,6 +227,8 @@

    DownloadSourceforge.

    Alternatively, you can clone our git repository:

    git clone https://github.com/frankmorgner/vsmartcard.git
    +cd vsmartcard
    +git submodule update --init --recursive
     

    @@ -261,18 +267,21 @@

    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 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,17 +298,31 @@

      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.

    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).

    +
    +

    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 +*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.

      +
    2. +
    3. To install vpcd, double click BixVReaderInstaller.msi.

    4. +
    +

    Using the Virtual Smart Card

    @@ -454,7 +477,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 +561,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..a26dff4a 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-10-01 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-10-01 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..734d6afe 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-10-01 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-10-01 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-10-01 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-10-01 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-10-01 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-10-01 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..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 2021-04-28 documentation + cryptoflex Module — vsmartcard 2023-10-01 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-10-01 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-10-01 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-10-01 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-10-01 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..52c9fe41 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-10-01 documentation @@ -12,16 +12,16 @@ - - - - + + + + @@ -123,7 +123,7 @@
        -
        +

        utils Module

        @@ -455,7 +455,7 @@

        utils ModuleiCapduLen) { + 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; } diff --git a/virtualsmartcard/configure.ac b/virtualsmartcard/configure.ac index bff2e783..1bbbff71 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]) @@ -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 diff --git a/virtualsmartcard/doc/README.txt.in b/virtualsmartcard/doc/README.txt.in index 546c43a1..eba8f39c 100644 --- a/virtualsmartcard/doc/README.txt.in +++ b/virtualsmartcard/doc/README.txt.in @@ -129,14 +129,21 @@ 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 ================================================================================ -Building and installing |vpcd| on Windows +Building |vpcd| on Windows ================================================================================ .. versionadded:: 0.7 @@ -170,22 +177,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 +185,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@ ******************************************************************************** @@ -242,7 +236,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: 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`.