From df93f67299467342b18ee884975cdf85014a7ef8 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Sun, 8 Jan 2017 22:55:49 +0100 Subject: [PATCH] Updated documentation --- ACardEmulator/doc/README.txt | 25 +++++++++- README.md | 2 +- docs/.buildinfo | 2 +- docs/ACardEmulator/README.html | 27 ++++++++-- ...23a4f0b37e685e9d3fa97479f3e06798f21da2.png | Bin 0 -> 62395 bytes docs/_sources/ACardEmulator/README.txt | 25 +++++++++- docs/_sources/virtualsmartcard/api.txt | 2 +- docs/ccid/README.html | 6 +-- docs/index.html | 6 +-- docs/npa/README.html | 6 +-- docs/objects.inv | Bin 6936 -> 6939 bytes docs/pcsc-relay/README.html | 6 +-- docs/remote-reader/README.html | 6 +-- docs/search.html | 6 +-- docs/searchindex.js | 2 +- docs/virtualsmartcard/README.html | 6 +-- docs/virtualsmartcard/api.html | 47 ++++++++++++++++-- .../api/virtualsmartcard.CardGenerator.html | 6 +-- .../virtualsmartcard.ConstantDefinitions.html | 6 +-- .../api/virtualsmartcard.CryptoUtils.html | 6 +-- .../api/virtualsmartcard.SEutils.html | 6 +-- .../api/virtualsmartcard.SWutils.html | 6 +-- .../virtualsmartcard.SmartcardFilesystem.html | 6 +-- .../api/virtualsmartcard.SmartcardSAM.html | 6 +-- .../api/virtualsmartcard.TLVutils.html | 6 +-- .../virtualsmartcard.VirtualSmartcard.html | 6 +-- .../virtualsmartcard.cards.HandlerTest.html | 6 +-- .../api/virtualsmartcard.cards.Relay.html | 6 +-- .../virtualsmartcard.cards.cryptoflex.html | 6 +-- .../api/virtualsmartcard.cards.ePass.html | 6 +-- .../api/virtualsmartcard.cards.html | 6 +-- .../api/virtualsmartcard.cards.nPA.html | 6 +-- .../api/virtualsmartcard.html | 6 +-- ...ualsmartcard.tests.CardGenerator_test.html | 6 +-- ...rtualsmartcard.tests.CryptoUtils_test.html | 6 +-- ...tualsmartcard.tests.SmartcardSAM_test.html | 6 +-- .../api/virtualsmartcard.tests.html | 6 +-- .../virtualsmartcard.tests.utils_test.html | 6 +-- .../api/virtualsmartcard.utils.html | 6 +-- virtualsmartcard/doc/api.txt | 2 +- 40 files changed, 204 insertions(+), 104 deletions(-) create mode 100644 docs/_images/tikz-2623a4f0b37e685e9d3fa97479f3e06798f21da2.png diff --git a/ACardEmulator/doc/README.txt b/ACardEmulator/doc/README.txt index ea3b10a..d1f3e80 100644 --- a/ACardEmulator/doc/README.txt +++ b/ACardEmulator/doc/README.txt @@ -37,6 +37,10 @@ emulating the following cards: - German electronic identity card (nPA) - Electronic passport +The remote interface can also be used together with the :ref:`pcsc-relay`, +which allows emulating a contactless card from an existing contact-based card +(by relaying the commands from PC/SC to the phone). + You may also attach your own simulation to the remote interface by implementing a simple interface through a socket communication. @@ -70,6 +74,25 @@ a simple interface through a socket communication. \path[linie] (phone) edge node {\includegraphics[width=1.5cm]{%(wd)s/bilder/simplecloud.pdf}} (vicc) ; \end{pgfonlayer} +.. tikz:: Relaying a contact-based smart card with pcsc-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 + + \input{%(wd)s/bilder/tikzstyles.tex} + \node (reader) {\includegraphics[width=3cm]{%(wd)s/bilder/my_cardreader.pdf}}; + \node [below=0cm of reader, kleiner] {Contact-less Reader}; + \node (phone) [right=1cm of reader] {\includegraphics[width=3cm]{%(wd)s/bilder/smartphone.pdf}}; + \node (app) [at=(phone.center)] {\includegraphics[width=2.8cm, height=4.9cm]{%(wd)s/bilder/ACardEmulator.png}}; + \node (pcsc-relay) [aktivbox, right=2cm of phone, kleiner] {\texttt{pcsc-relay --emulator=vpcd}}; + \node (card) [below=.5cm of pcsc-relay)] {\includegraphics[width=0.8cm]{%(wd)s/bilder/smartcard.pdf}}; + \node (reader2) [below=1cm of pcsc-relay] {\includegraphics[width=1.3cm]{%(wd)s/bilder/my_cardreader.pdf}}; + + \begin{pgfonlayer}{background} + \draw [rfid] (reader.center) -- (phone.west) ; + \path[linie] (phone) edge node {\includegraphics[width=1.5cm]{%(wd)s/bilder/simplecloud.pdf}} (pcsc-relay) ; + \path[linie] (pcsc-relay) edge (reader2) ; + \end{pgfonlayer} + The Android Smart Card Emulator has the following dependencies: - NFC hardware built into the smartphone for |HCE| @@ -80,8 +103,6 @@ The Android Smart Card Emulator has the following dependencies: - Virtual Smart Card :ref:`installed on the host computer` for using the remote interface -For emulating a contact-less smart card with a desktop or notebook, have a look at :ref:`pcsc-relay`. - Please note that the currently emulated applets are verifying the PIN by transmitting it without any protection between card and terminal. You may want to have a look at `Erik Nellesson's diff --git a/README.md b/README.md index a33c8e3..d1e7165 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,9 @@ Currently the following projects are part of Virtual Smart Card Architecture: - [Virtual Smart Card](http://frankmorgner.github.io/vsmartcard/virtualsmartcard/README.html) - [Remote Smart Card Reader](http://frankmorgner.github.io/vsmartcard/remote-reader/README.html) +- [Android Smart Card Emulator](http://frankmorgner.github.io/vsmartcard/ACardEmulator/README.html) - [PC/SC Relay](http://frankmorgner.github.io/vsmartcard/pcsc-relay/README.html) - [USB CCID Emulator](http://frankmorgner.github.io/vsmartcard/ccid/README.html) -- [nPA Smart Card Library](http://frankmorgner.github.io/vsmartcard/npa/README.html) Please refer to [our project's website](http://frankmorgner.github.io/vsmartcard) for more information. diff --git a/docs/.buildinfo b/docs/.buildinfo index 9b19bcd..fa8f206 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: 7394ee3fd05fb0ab6b49e356cffbaf4b +config: e41957cb4064e6fc047d6ae872662714 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/ACardEmulator/README.html b/docs/ACardEmulator/README.html index 9b04b93..f8c3a6d 100644 --- a/docs/ACardEmulator/README.html +++ b/docs/ACardEmulator/README.html @@ -5,7 +5,7 @@ - Android Smart Card Emulator — vsmartcard 2017-01-05 documentation + Android Smart Card Emulator — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + @@ -189,6 +189,9 @@ emulating the following cards:

  • German electronic identity card (nPA)
  • Electronic passport
  • +

    The remote interface can also be used together with the PC/SC Relay, +which allows emulating a contactless card from an existing contact-based card +(by relaying the commands from PC/SC to the phone).

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

    @@ -213,7 +216,22 @@ a simple interface through a socket communication.

    \draw [rfid] (reader.center) -- (phone.west) ; \path[linie] (phone) edge node {\includegraphics[width=1.5cm]{%(wd)s/bilder/simplecloud.pdf}} (vicc) ; \end{pgfonlayer}" />

    -

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

    The Android Smart Card Emulator has the following dependencies:

    +

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

    +

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

    +

    Relaying a contact-based smart card with pcsc-relay

    The Android Smart Card Emulator has the following dependencies:

    -

    For emulating a contact-less smart card with a desktop or notebook, have a look at PC/SC Relay.

    Please note that the currently emulated applets are verifying the PIN by transmitting it without any protection between card and terminal. You may want to have a look at Erik Nellesson’s diff --git a/docs/_images/tikz-2623a4f0b37e685e9d3fa97479f3e06798f21da2.png b/docs/_images/tikz-2623a4f0b37e685e9d3fa97479f3e06798f21da2.png new file mode 100644 index 0000000000000000000000000000000000000000..423927e7c025812c5e24c2c5d820dba90b2161ff GIT binary patch literal 62395 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 literal 0 HcmV?d00001 diff --git a/docs/_sources/ACardEmulator/README.txt b/docs/_sources/ACardEmulator/README.txt index ea3b10a..d1f3e80 100644 --- a/docs/_sources/ACardEmulator/README.txt +++ b/docs/_sources/ACardEmulator/README.txt @@ -37,6 +37,10 @@ emulating the following cards: - German electronic identity card (nPA) - Electronic passport +The remote interface can also be used together with the :ref:`pcsc-relay`, +which allows emulating a contactless card from an existing contact-based card +(by relaying the commands from PC/SC to the phone). + You may also attach your own simulation to the remote interface by implementing a simple interface through a socket communication. @@ -70,6 +74,25 @@ a simple interface through a socket communication. \path[linie] (phone) edge node {\includegraphics[width=1.5cm]{%(wd)s/bilder/simplecloud.pdf}} (vicc) ; \end{pgfonlayer} +.. tikz:: Relaying a contact-based smart card with pcsc-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 + + \input{%(wd)s/bilder/tikzstyles.tex} + \node (reader) {\includegraphics[width=3cm]{%(wd)s/bilder/my_cardreader.pdf}}; + \node [below=0cm of reader, kleiner] {Contact-less Reader}; + \node (phone) [right=1cm of reader] {\includegraphics[width=3cm]{%(wd)s/bilder/smartphone.pdf}}; + \node (app) [at=(phone.center)] {\includegraphics[width=2.8cm, height=4.9cm]{%(wd)s/bilder/ACardEmulator.png}}; + \node (pcsc-relay) [aktivbox, right=2cm of phone, kleiner] {\texttt{pcsc-relay --emulator=vpcd}}; + \node (card) [below=.5cm of pcsc-relay)] {\includegraphics[width=0.8cm]{%(wd)s/bilder/smartcard.pdf}}; + \node (reader2) [below=1cm of pcsc-relay] {\includegraphics[width=1.3cm]{%(wd)s/bilder/my_cardreader.pdf}}; + + \begin{pgfonlayer}{background} + \draw [rfid] (reader.center) -- (phone.west) ; + \path[linie] (phone) edge node {\includegraphics[width=1.5cm]{%(wd)s/bilder/simplecloud.pdf}} (pcsc-relay) ; + \path[linie] (pcsc-relay) edge (reader2) ; + \end{pgfonlayer} + The Android Smart Card Emulator has the following dependencies: - NFC hardware built into the smartphone for |HCE| @@ -80,8 +103,6 @@ The Android Smart Card Emulator has the following dependencies: - Virtual Smart Card :ref:`installed on the host computer` for using the remote interface -For emulating a contact-less smart card with a desktop or notebook, have a look at :ref:`pcsc-relay`. - Please note that the currently emulated applets are verifying the PIN by transmitting it without any protection between card and terminal. You may want to have a look at `Erik Nellesson's diff --git a/docs/_sources/virtualsmartcard/api.txt b/docs/_sources/virtualsmartcard/api.txt index 1328fdc..d95d0dd 100644 --- a/docs/_sources/virtualsmartcard/api.txt +++ b/docs/_sources/virtualsmartcard/api.txt @@ -96,7 +96,7 @@ completely different when creating a file on the smart card. So we derive :class:`~virtualsmartcard.cards.cryptoflex.CryptoflexMF.create` to our needs. .. literalinclude:: virtualsmartcard/cards/cryptoflex.py - :pyobject: CryptoflexMF.create + :lines: 190-228 As you can see it is quite simple to extend the virtual smart card to your requirements. Simply overwrite those functions, that differ from ISO 78166. But diff --git a/docs/ccid/README.html b/docs/ccid/README.html index daf0d47..5f330ef 100644 --- a/docs/ccid/README.html +++ b/docs/ccid/README.html @@ -5,7 +5,7 @@ - USB CCID Emulator — vsmartcard 2017-01-05 documentation + USB CCID Emulator — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/index.html b/docs/index.html index 29147aa..de8c226 100644 --- a/docs/index.html +++ b/docs/index.html @@ -5,7 +5,7 @@ - Welcome to the Virtual Smart Card Architecture documentation! — vsmartcard 2017-01-05 documentation + Welcome to the Virtual Smart Card Architecture documentation! — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/npa/README.html b/docs/npa/README.html index 10a2e46..5295c40 100644 --- a/docs/npa/README.html +++ b/docs/npa/README.html @@ -6,7 +6,7 @@ - nPA Smart Card Library — vsmartcard 2017-01-05 documentation + nPA Smart Card Library — vsmartcard 2017-01-08 documentation @@ -16,7 +16,7 @@ - + diff --git a/docs/objects.inv b/docs/objects.inv index f30839ef7b4ea2351c70850ebc00a248a24f8044..bc483c822360a95b884952fc267c111aea5bdf27 100644 GIT binary patch delta 6859 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 UqfC1psu1n#!mcX+1Cu~C188$jd;kCd diff --git a/docs/pcsc-relay/README.html b/docs/pcsc-relay/README.html index 1bc5d67..c8e6f54 100644 --- a/docs/pcsc-relay/README.html +++ b/docs/pcsc-relay/README.html @@ -5,7 +5,7 @@ - PC/SC Relay — vsmartcard 2017-01-05 documentation + PC/SC Relay — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/remote-reader/README.html b/docs/remote-reader/README.html index edca8ab..297c986 100644 --- a/docs/remote-reader/README.html +++ b/docs/remote-reader/README.html @@ -5,7 +5,7 @@ - Remote Smart Card Reader — vsmartcard 2017-01-05 documentation + Remote Smart Card Reader — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/search.html b/docs/search.html index ef0eedb..80c1f49 100644 --- a/docs/search.html +++ b/docs/search.html @@ -5,7 +5,7 @@ - Search — vsmartcard 2017-01-05 documentation + Search — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/searchindex.js b/docs/searchindex.js index 155550b..82c5316 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:46,filenames:["ACardEmulator/README","ccid/README","index","npa/README","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.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"],objects:{"virtualsmartcard.CardGenerator":{CardGenerator:[9,2,1,""]},"virtualsmartcard.CardGenerator.CardGenerator":{"_CardGenerator__generate_cryptoflex":[9,1,1,""],"_CardGenerator__generate_ePass":[9,1,1,""],"_CardGenerator__generate_iso_card":[9,1,1,""],"_CardGenerator__generate_nPA":[9,1,1,""],generateCard:[9,1,1,""],getCard:[9,1,1,""],readDatagroups:[9,1,1,""],setCard:[9,1,1,""]},"virtualsmartcard.CryptoUtils":{"_makesalt":[11,5,1,""],append_padding:[11,5,1,""],calculate_MAC:[11,5,1,""],cipher:[11,5,1,""],crypto_checksum:[11,5,1,""],decrypt:[11,5,1,""],encrypt:[11,5,1,""],get_cipher:[11,5,1,""],get_cipher_blocklen:[11,5,1,""],get_cipher_keylen:[11,5,1,""],hash:[11,5,1,""],operation_on_string:[11,5,1,""],strip_padding:[11,5,1,""]},"virtualsmartcard.SEutils":{ControlReferenceTemplate:[12,2,1,""],Security_Environment:[12,2,1,""]},"virtualsmartcard.SEutils.ControlReferenceTemplate":{"_ControlReferenceTemplate__replace_tag":[12,1,1,""],"_ControlReferenceTemplate__set_algo":[12,1,1,""],"_ControlReferenceTemplate__set_iv":[12,1,1,""],"_ControlReferenceTemplate__set_key":[12,1,1,""],parse_SE_config:[12,1,1,""],to_string:[12,1,1,""]},"virtualsmartcard.SEutils.Security_Environment":{"_set_SE":[12,1,1,""],compute_cryptographic_checksum:[12,1,1,""],compute_digital_signature:[12,1,1,""],decipher:[12,1,1,""],encipher:[12,1,1,""],generate_public_key_pair:[12,1,1,""],hash:[12,1,1,""],manage_security_environment:[12,1,1,""],parse_SM_CAPDU:[12,1,1,""],perform_security_operation:[12,1,1,""],protect_response:[12,1,1,""],verify_certificate:[12,1,1,""],verify_cryptographic_checksum:[12,1,1,""],verify_digital_signature:[12,1,1,""]},"virtualsmartcard.SWutils":{SwError:[13,6,1,""]},"virtualsmartcard.SWutils.SwError":{args:[13,4,1,""],message:[13,4,1,""]},"virtualsmartcard.SmartcardFilesystem":{DF:[14,2,1,""],EF:[14,2,1,""],File:[14,2,1,""],MF:[14,2,1,""],Record:[14,2,1,""],RecordStructureEF:[14,2,1,""],TransparentStructureEF:[14,2,1,""],get_indexes:[14,5,1,""],getfile_byrefdataobj:[14,5,1,""],isEqual:[14,5,1,""],make_property:[14,5,1,""],prettyprint_anything:[14,5,1,""],walk:[14,5,1,""],write:[14,5,1,""]},"virtualsmartcard.SmartcardFilesystem.DF":{append:[14,1,1,""],appendrecord:[14,1,1,""],bertlv_data:[14,4,1,""],content:[14,4,1,""],data:[14,4,1,""],decrypt:[14,1,1,""],dfname:[14,4,1,""],encrypt:[14,1,1,""],erasebinary:[14,1,1,""],fid:[14,4,1,""],filedescriptor:[14,4,1,""],getdata:[14,1,1,""],getpath:[14,1,1,""],lifecycle:[14,4,1,""],parent:[14,4,1,""],putdata:[14,1,1,""],readbinary:[14,1,1,""],readrecord:[14,1,1,""],remove:[14,1,1,""],select:[14,1,1,""],simpletlv_data:[14,4,1,""],updatebinary:[14,1,1,""],updaterecord:[14,1,1,""],writebinary:[14,1,1,""],writerecord:[14,1,1,""]},"virtualsmartcard.SmartcardFilesystem.EF":{appendrecord:[14,1,1,""],bertlv_data:[14,4,1,""],datacoding:[14,4,1,""],decrypt:[14,1,1,""],encrypt:[14,1,1,""],erasebinary:[14,1,1,""],fid:[14,4,1,""],filedescriptor:[14,4,1,""],getdata:[14,1,1,""],getpath:[14,1,1,""],lifecycle:[14,4,1,""],parent:[14,4,1,""],putdata:[14,1,1,""],readbinary:[14,1,1,""],readrecord:[14,1,1,""],select:[14,1,1,""],shortfid:[14,4,1,""],simpletlv_data:[14,4,1,""],updatebinary:[14,1,1,""],updaterecord:[14,1,1,""],writebinary:[14,1,1,""],writerecord:[14,1,1,""]},"virtualsmartcard.SmartcardFilesystem.File":{appendrecord:[14,1,1,""],bertlv_data:[14,4,1,""],decrypt:[14,1,1,""],encrypt:[14,1,1,""],erasebinary:[14,1,1,""],fid:[14,4,1,""],filedescriptor:[14,4,1,""],getdata:[14,1,1,""],getpath:[14,1,1,""],lifecycle:[14,4,1,""],parent:[14,4,1,""],putdata:[14,1,1,""],readbinary:[14,1,1,""],readrecord:[14,1,1,""],select:[14,1,1,""],simpletlv_data:[14,4,1,""],updatebinary:[14,1,1,""],updaterecord:[14,1,1,""],writebinary:[14,1,1,""],writerecord:[14,1,1,""]},"virtualsmartcard.SmartcardFilesystem.MF":{"_selectFile":[14,1,1,""],append:[14,1,1,""],appendRecord:[14,1,1,""],appendrecord:[14,1,1,""],bertlv_data:[14,4,1,""],content:[14,4,1,""],create:[14,3,1,""],createFile:[14,1,1,""],current:[14,4,1,""],currentDF:[14,1,1,""],currentEF:[14,1,1,""],data:[14,4,1,""],dataObjectHandlingDecodeEncapsulated:[14,1,1,""],dataObjectHandlingDecodePlain:[14,1,1,""],dataUnitsDecodeEncapsulated:[14,1,1,""],dataUnitsDecodePlain:[14,1,1,""],decrypt:[14,1,1,""],deleteFile:[14,1,1,""],dfname:[14,4,1,""],encodeFileControlParameter:[14,3,1,""],encrypt:[14,1,1,""],eraseBinaryEncapsulated:[14,1,1,""],eraseBinaryPlain:[14,1,1,""],eraseRecord:[14,1,1,""],erasebinary:[14,1,1,""],fid:[14,4,1,""],filedescriptor:[14,4,1,""],firstSFT:[14,4,1,""],getDataEncapsulated:[14,1,1,""],getDataPlain:[14,1,1,""],getdata:[14,1,1,""],getpath:[14,1,1,""],lifecycle:[14,4,1,""],makeFirstSoftwareFunctionTable:[14,3,1,""],makeSecondSoftwareFunctionTable:[14,3,1,""],parent:[14,4,1,""],putDataEncapsulated:[14,1,1,""],putDataPlain:[14,1,1,""],putdata:[14,1,1,""],readBinaryEncapsulated:[14,1,1,""],readBinaryPlain:[14,1,1,""],readRecordEncapsulated:[14,1,1,""],readRecordPlain:[14,1,1,""],readbinary:[14,1,1,""],readrecord:[14,1,1,""],recordHandlingDecode:[14,1,1,""],remove:[14,1,1,""],searchBinaryEncapsulated:[14,1,1,""],searchBinaryPlain:[14,1,1,""],secondSFT:[14,4,1,""],select:[14,1,1,""],selectFile:[14,1,1,""],simpletlv_data:[14,4,1,""],updateBinaryEncapsulated:[14,1,1,""],updateBinaryPlain:[14,1,1,""],updateRecordEncapsulated:[14,1,1,""],updateRecordPlain:[14,1,1,""],updatebinary:[14,1,1,""],updaterecord:[14,1,1,""],writeBinaryEncapsulated:[14,1,1,""],writeBinaryPlain:[14,1,1,""],writeRecord:[14,1,1,""],writebinary:[14,1,1,""],writerecord:[14,1,1,""]},"virtualsmartcard.SmartcardFilesystem.Record":{data:[14,4,1,""],identifier:[14,4,1,""]},"virtualsmartcard.SmartcardFilesystem.RecordStructureEF":{"_RecordStructureEF__getRecords":[14,1,1,""],"_RecordStructureEF__getRecordsByIdentifier":[14,1,1,""],"_RecordStructureEF__getRecordsByNumber":[14,1,1,""],appendrecord:[14,1,1,""],bertlv_data:[14,4,1,""],datacoding:[14,4,1,""],decrypt:[14,1,1,""],encrypt:[14,1,1,""],erasebinary:[14,1,1,""],eraserecord:[14,1,1,""],fid:[14,4,1,""],filedescriptor:[14,4,1,""],getdata:[14,1,1,""],getpath:[14,1,1,""],hasFixedRecordSize:[14,1,1,""],hasSimpleTlv:[14,1,1,""],isCyclic:[14,1,1,""],lifecycle:[14,4,1,""],maxrecordsize:[14,4,1,""],parent:[14,4,1,""],putdata:[14,1,1,""],readbinary:[14,1,1,""],readrecord:[14,1,1,""],recordpointer:[14,4,1,""],records:[14,4,1,""],resetRecordPointer:[14,1,1,""],select:[14,1,1,""],shortfid:[14,4,1,""],simpletlv_data:[14,4,1,""],updatebinary:[14,1,1,""],updaterecord:[14,1,1,""],writebinary:[14,1,1,""],writerecord:[14,1,1,""]},"virtualsmartcard.SmartcardFilesystem.TransparentStructureEF":{appendrecord:[14,1,1,""],bertlv_data:[14,4,1,""],data:[14,4,1,""],datacoding:[14,4,1,""],decrypt:[14,1,1,""],encrypt:[14,1,1,""],erasebinary:[14,1,1,""],fid:[14,4,1,""],filedescriptor:[14,4,1,""],getdata:[14,1,1,""],getpath:[14,1,1,""],lifecycle:[14,4,1,""],parent:[14,4,1,""],putdata:[14,1,1,""],readbinary:[14,1,1,""],readrecord:[14,1,1,""],select:[14,1,1,""],shortfid:[14,4,1,""],simpletlv_data:[14,4,1,""],updatebinary:[14,1,1,""],updaterecord:[14,1,1,""],writebinary:[14,1,1,""],writerecord:[14,1,1,""]},"virtualsmartcard.SmartcardSAM":{SAM:[15,2,1,""],get_referenced_cipher:[15,5,1,""]},"virtualsmartcard.SmartcardSAM.SAM":{"_get_referenced_key":[15,1,1,""],FSdecrypt:[15,1,1,""],FSencrypt:[15,1,1,""],change_reference_data:[15,1,1,""],erase_SE:[15,1,1,""],external_authenticate:[15,1,1,""],generate_public_key_pair:[15,1,1,""],get_card_number:[15,1,1,""],get_challenge:[15,1,1,""],internal_authenticate:[15,1,1,""],manage_security_environment:[15,1,1,""],mutual_authenticate:[15,1,1,""],parse_SM_CAPDU:[15,1,1,""],perform_security_operation:[15,1,1,""],protect_result:[15,1,1,""],restore_SE:[15,1,1,""],set_MF:[15,1,1,""],set_asym_algorithm:[15,1,1,""],store_SE:[15,1,1,""],verify:[15,1,1,""]},"virtualsmartcard.TLVutils":{bertlv_pack:[16,5,1,""],bertlv_unpack:[16,5,1,""],decodeDiscretionaryDataObjects:[16,5,1,""],decodeExtendedHeaderList:[16,5,1,""],decodeHeaderList:[16,5,1,""],decodeOffsetDataObjects:[16,5,1,""],decodeTagList:[16,5,1,""],encodeDataOffsetObjects:[16,5,1,""],encodeDiscretionaryDataObjects:[16,5,1,""],encodebertlvDatalist:[16,5,1,""],pack:[16,5,1,""],simpletlv_pack:[16,5,1,""],simpletlv_unpack:[16,5,1,""],tlv_find_tag:[16,5,1,""],tlv_find_tags:[16,5,1,""],tlv_unpack:[16,5,1,""],unpack:[16,5,1,""]},"virtualsmartcard.VirtualSmartcard":{Iso7816OS:[17,2,1,""],SmartcardOS:[17,2,1,""],VirtualICC:[17,2,1,""]},"virtualsmartcard.VirtualSmartcard.Iso7816OS":{SAM:[17,4,1,""],execute:[17,1,1,""],formatResult:[17,1,1,""],getATR:[17,1,1,""],getResponse:[17,1,1,""],makeATR:[17,3,1,""],makeThirdSoftwareFunctionTable:[17,3,1,""],mf:[17,4,1,""],powerDown:[17,1,1,""],powerUp:[17,1,1,""],reset:[17,1,1,""],seekable:[17,3,1,""]},"virtualsmartcard.VirtualSmartcard.SmartcardOS":{execute:[17,1,1,""],getATR:[17,1,1,""],powerDown:[17,1,1,""],powerUp:[17,1,1,""],reset:[17,1,1,""]},"virtualsmartcard.VirtualSmartcard.VirtualICC":{"_VirtualICC__recvFromVPICC":[17,1,1,""],"_VirtualICC__sendToVPICC":[17,1,1,""],connectToPort:[17,3,1,""],openPort:[17,3,1,""],run:[17,1,1,""],signalHandler:[17,1,1,""],stop:[17,1,1,""]},"virtualsmartcard.cards":{HandlerTest:[19,0,0,"-"],Relay:[20,0,0,"-"],cryptoflex:[21,0,0,"-"],ePass:[22,0,0,"-"],nPA:[23,0,0,"-"]},"virtualsmartcard.cards.HandlerTest":{HandlerTestOS:[19,2,1,""]},"virtualsmartcard.cards.HandlerTest.HandlerTestOS":{"_HandlerTestOS__output_from_le":[19,1,1,""],execute:[19,1,1,""],getATR:[19,1,1,""],powerDown:[19,1,1,""],powerUp:[19,1,1,""],reset:[19,1,1,""]},"virtualsmartcard.cards.Relay":{RelayOS:[20,2,1,""]},"virtualsmartcard.cards.Relay.RelayOS":{cleanup:[20,1,1,""],execute:[20,1,1,""],getATR:[20,1,1,""],powerDown:[20,1,1,""],powerUp:[20,1,1,""],reset:[20,1,1,""]},"virtualsmartcard.cards.cryptoflex":{CryptoflexMF:[21,2,1,""],CryptoflexOS:[21,2,1,""],CryptoflexSAM:[21,2,1,""],CryptoflexSE:[21,2,1,""]},"virtualsmartcard.cards.cryptoflex.CryptoflexMF":{"_selectFile":[21,1,1,""],append:[21,1,1,""],appendRecord:[21,1,1,""],appendrecord:[21,1,1,""],bertlv_data:[21,4,1,""],content:[21,4,1,""],create:[21,3,1,""],createFile:[21,1,1,""],current:[21,4,1,""],currentDF:[21,1,1,""],currentEF:[21,1,1,""],data:[21,4,1,""],dataObjectHandlingDecodeEncapsulated:[21,1,1,""],dataObjectHandlingDecodePlain:[21,1,1,""],dataUnitsDecodeEncapsulated:[21,1,1,""],dataUnitsDecodePlain:[21,1,1,""],decrypt:[21,1,1,""],deleteFile:[21,1,1,""],dfname:[21,4,1,""],encodeFileControlParameter:[21,1,1,""],encrypt:[21,1,1,""],eraseBinaryEncapsulated:[21,1,1,""],eraseBinaryPlain:[21,1,1,""],eraseRecord:[21,1,1,""],erasebinary:[21,1,1,""],fid:[21,4,1,""],filedescriptor:[21,4,1,""],firstSFT:[21,4,1,""],getDataEncapsulated:[21,1,1,""],getDataPlain:[21,1,1,""],getdata:[21,1,1,""],getpath:[21,1,1,""],lifecycle:[21,4,1,""],makeFirstSoftwareFunctionTable:[21,1,1,""],makeSecondSoftwareFunctionTable:[21,1,1,""],parent:[21,4,1,""],putDataEncapsulated:[21,1,1,""],putDataPlain:[21,1,1,""],putdata:[21,1,1,""],readBinaryEncapsulated:[21,1,1,""],readBinaryPlain:[21,1,1,""],readRecordEncapsulated:[21,1,1,""],readRecordPlain:[21,1,1,""],readbinary:[21,1,1,""],readrecord:[21,1,1,""],recordHandlingDecode:[21,1,1,""],remove:[21,1,1,""],searchBinaryEncapsulated:[21,1,1,""],searchBinaryPlain:[21,1,1,""],secondSFT:[21,4,1,""],select:[21,1,1,""],selectFile:[21,1,1,""],simpletlv_data:[21,4,1,""],updateBinaryEncapsulated:[21,1,1,""],updateBinaryPlain:[21,1,1,""],updateRecordEncapsulated:[21,1,1,""],updateRecordPlain:[21,1,1,""],updatebinary:[21,1,1,""],updaterecord:[21,1,1,""],writeBinaryEncapsulated:[21,1,1,""],writeBinaryPlain:[21,1,1,""],writeRecord:[21,1,1,""],writebinary:[21,1,1,""],writerecord:[21,1,1,""]},"virtualsmartcard.cards.cryptoflex.CryptoflexOS":{SAM:[21,4,1,""],execute:[21,1,1,""],formatResult:[21,1,1,""],getATR:[21,1,1,""],getResponse:[21,1,1,""],makeATR:[21,1,1,""],makeThirdSoftwareFunctionTable:[21,1,1,""],mf:[21,4,1,""],powerDown:[21,1,1,""],powerUp:[21,1,1,""],reset:[21,1,1,""],seekable:[21,1,1,""]},"virtualsmartcard.cards.cryptoflex.CryptoflexSAM":{"_get_referenced_key":[21,1,1,""],FSdecrypt:[21,1,1,""],FSencrypt:[21,1,1,""],change_reference_data:[21,1,1,""],erase_SE:[21,1,1,""],external_authenticate:[21,1,1,""],generate_public_key_pair:[21,1,1,""],get_card_number:[21,1,1,""],get_challenge:[21,1,1,""],internal_authenticate:[21,1,1,""],manage_security_environment:[21,1,1,""],mutual_authenticate:[21,1,1,""],parse_SM_CAPDU:[21,1,1,""],perform_security_operation:[21,1,1,""],pezorform_security_operation:[21,1,1,""],protect_result:[21,1,1,""],restore_SE:[21,1,1,""],set_MF:[21,1,1,""],set_asym_algorithm:[21,1,1,""],store_SE:[21,1,1,""],verify:[21,1,1,""]},"virtualsmartcard.cards.cryptoflex.CryptoflexSE":{"_set_SE":[21,1,1,""],compute_cryptographic_checksum:[21,1,1,""],compute_digital_signature:[21,1,1,""],decipher:[21,1,1,""],encipher:[21,1,1,""],generate_public_key_pair:[21,1,1,""],hash:[21,1,1,""],manage_security_environment:[21,1,1,""],parse_SM_CAPDU:[21,1,1,""],perform_security_operation:[21,1,1,""],protect_response:[21,1,1,""],verify_certificate:[21,1,1,""],verify_cryptographic_checksum:[21,1,1,""],verify_digital_signature:[21,1,1,""]},"virtualsmartcard.cards.ePass":{PassportSAM:[22,2,1,""],ePass_SE:[22,2,1,""]},"virtualsmartcard.cards.ePass.PassportSAM":{"_PassportSAM__computeKeys":[22,1,1,""],"_get_referenced_key":[22,1,1,""],FSdecrypt:[22,1,1,""],FSencrypt:[22,1,1,""],change_reference_data:[22,1,1,""],derive_key:[22,3,1,""],erase_SE:[22,1,1,""],external_authenticate:[22,1,1,""],generate_public_key_pair:[22,1,1,""],get_card_number:[22,1,1,""],get_challenge:[22,1,1,""],internal_authenticate:[22,1,1,""],manage_security_environment:[22,1,1,""],mutual_authenticate:[22,1,1,""],parse_SM_CAPDU:[22,1,1,""],perform_security_operation:[22,1,1,""],protect_result:[22,1,1,""],restore_SE:[22,1,1,""],set_MF:[22,1,1,""],set_asym_algorithm:[22,1,1,""],store_SE:[22,1,1,""],verify:[22,1,1,""]},"virtualsmartcard.cards.ePass.ePass_SE":{"_set_SE":[22,1,1,""],compute_cryptographic_checksum:[22,1,1,""],compute_digital_signature:[22,1,1,""],decipher:[22,1,1,""],encipher:[22,1,1,""],generate_public_key_pair:[22,1,1,""],hash:[22,1,1,""],manage_security_environment:[22,1,1,""],parse_SM_CAPDU:[22,1,1,""],perform_security_operation:[22,1,1,""],protect_response:[22,1,1,""],verify_certificate:[22,1,1,""],verify_cryptographic_checksum:[22,1,1,""],verify_digital_signature:[22,1,1,""]},"virtualsmartcard.cards.nPA":{NPAOS:[23,2,1,""],nPA_AT_CRT:[23,2,1,""],nPA_SAM:[23,2,1,""],nPA_SE:[23,2,1,""]},"virtualsmartcard.cards.nPA.NPAOS":{SAM:[23,4,1,""],execute:[23,1,1,""],formatResult:[23,1,1,""],getATR:[23,1,1,""],getResponse:[23,1,1,""],makeATR:[23,1,1,""],makeThirdSoftwareFunctionTable:[23,1,1,""],mf:[23,4,1,""],powerDown:[23,1,1,""],powerUp:[23,1,1,""],reset:[23,1,1,""],seekable:[23,1,1,""]},"virtualsmartcard.cards.nPA.nPA_AT_CRT":{"_ControlReferenceTemplate__replace_tag":[23,1,1,""],"_ControlReferenceTemplate__set_algo":[23,1,1,""],"_ControlReferenceTemplate__set_iv":[23,1,1,""],"_ControlReferenceTemplate__set_key":[23,1,1,""],PACE_CAN:[23,4,1,""],PACE_MRZ:[23,4,1,""],PACE_PIN:[23,4,1,""],PACE_PUK:[23,4,1,""],keyref_is_can:[23,1,1,""],keyref_is_mrz:[23,1,1,""],keyref_is_pin:[23,1,1,""],keyref_is_puk:[23,1,1,""],parse_SE_config:[23,1,1,""],to_string:[23,1,1,""]},"virtualsmartcard.cards.nPA.nPA_SAM":{"_get_referenced_key":[23,1,1,""],FSdecrypt:[23,1,1,""],FSencrypt:[23,1,1,""],change_reference_data:[23,1,1,""],erase_SE:[23,1,1,""],external_authenticate:[23,1,1,""],general_authenticate:[23,1,1,""],generate_public_key_pair:[23,1,1,""],get_card_number:[23,1,1,""],get_challenge:[23,1,1,""],internal_authenticate:[23,1,1,""],manage_security_environment:[23,1,1,""],mutual_authenticate:[23,1,1,""],parse_SM_CAPDU:[23,1,1,""],perform_security_operation:[23,1,1,""],protect_result:[23,1,1,""],reset_retry_counter:[23,1,1,""],restore_SE:[23,1,1,""],set_MF:[23,1,1,""],set_asym_algorithm:[23,1,1,""],store_SE:[23,1,1,""],verify:[23,1,1,""]},"virtualsmartcard.cards.nPA.nPA_SE":{"_nPA_SE__eac_ca":[23,1,1,""],"_nPA_SE__eac_pace_step1":[23,1,1,""],"_nPA_SE__eac_pace_step2":[23,1,1,""],"_nPA_SE__eac_pace_step3":[23,1,1,""],"_nPA_SE__eac_pace_step4":[23,1,1,""],"_nPA_SE__pack_general_authenticate":[23,3,1,""],"_nPA_SE__unpack_general_authenticate":[23,3,1,""],"_set_SE":[23,1,1,""],compute_cryptographic_checksum:[23,1,1,""],compute_digital_signature:[23,1,1,""],decipher:[23,1,1,""],eac_step:[23,4,1,""],encipher:[23,1,1,""],external_authenticate:[23,1,1,""],general_authenticate:[23,1,1,""],generate_public_key_pair:[23,1,1,""],hash:[23,1,1,""],manage_security_environment:[23,1,1,""],parse_SM_CAPDU:[23,1,1,""],perform_security_operation:[23,1,1,""],protect_response:[23,1,1,""],verify_certificate:[23,1,1,""],verify_cryptographic_checksum:[23,1,1,""],verify_digital_signature:[23,1,1,""]},"virtualsmartcard.tests":{CardGenerator_test:[25,0,0,"-"],CryptoUtils_test:[26,0,0,"-"],SmartcardSAM_test:[27,0,0,"-"],utils_test:[28,0,0,"-"]},"virtualsmartcard.tests.CardGenerator_test":{CryptoflexGeneratorTest:[25,2,1,""],ISO7816GeneratorTest:[25,2,1,""],TestNPACardGenerator:[25,2,1,""]},"virtualsmartcard.tests.CardGenerator_test.CryptoflexGeneratorTest":{"_addSkip":[25,1,1,""],"_baseAssertEqual":[25,1,1,""],"_classSetupFailed":[25,4,1,""],"_deprecate":[25,1,1,""],"_diffThreshold":[25,4,1,""],"_formatMessage":[25,1,1,""],"_getAssertEqualityFunc":[25,1,1,""],"_truncateMessage":[25,1,1,""],addCleanup:[25,1,1,""],addTypeEqualityFunc:[25,1,1,""],assertAlmostEqual:[25,1,1,""],assertAlmostEquals:[25,1,1,""],assertDictContainsSubset:[25,1,1,""],assertDictEqual:[25,1,1,""],assertEqual:[25,1,1,""],assertEquals:[25,1,1,""],assertFalse:[25,1,1,""],assertGreater:[25,1,1,""],assertGreaterEqual:[25,1,1,""],assertIn:[25,1,1,""],assertIs:[25,1,1,""],assertIsInstance:[25,1,1,""],assertIsNone:[25,1,1,""],assertIsNot:[25,1,1,""],assertIsNotNone:[25,1,1,""],assertItemsEqual:[25,1,1,""],assertLess:[25,1,1,""],assertLessEqual:[25,1,1,""],assertListEqual:[25,1,1,""],assertMultiLineEqual:[25,1,1,""],assertNotAlmostEqual:[25,1,1,""],assertNotAlmostEquals:[25,1,1,""],assertNotEqual:[25,1,1,""],assertNotEquals:[25,1,1,""],assertNotIn:[25,1,1,""],assertNotIsInstance:[25,1,1,""],assertNotRegexpMatches:[25,1,1,""],assertRaises:[25,1,1,""],assertRaisesRegexp:[25,1,1,""],assertRegexpMatches:[25,1,1,""],assertSequenceEqual:[25,1,1,""],assertSetEqual:[25,1,1,""],assertTrue:[25,1,1,""],assertTupleEqual:[25,1,1,""],assert_:[25,1,1,""],card_type:[25,4,1,""],countTestCases:[25,1,1,""],debug:[25,1,1,""],defaultTestResult:[25,1,1,""],doCleanups:[25,1,1,""],fail:[25,1,1,""],failIf:[25,1,1,""],failIfAlmostEqual:[25,1,1,""],failIfEqual:[25,1,1,""],failUnless:[25,1,1,""],failUnlessAlmostEqual:[25,1,1,""],failUnlessEqual:[25,1,1,""],failUnlessRaises:[25,1,1,""],failureException:[25,4,1,""],id:[25,1,1,""],longMessage:[25,4,1,""],maxDiff:[25,4,1,""],run:[25,1,1,""],setUp:[25,1,1,""],setUpClass:[25,1,1,""],shortDescription:[25,1,1,""],skipTest:[25,1,1,""],tearDown:[25,1,1,""],tearDownClass:[25,1,1,""],test_card_creation:[25,1,1,""],test_get_and_set_card:[25,1,1,""]},"virtualsmartcard.tests.CardGenerator_test.ISO7816GeneratorTest":{"_addSkip":[25,1,1,""],"_baseAssertEqual":[25,1,1,""],"_classSetupFailed":[25,4,1,""],"_deprecate":[25,1,1,""],"_diffThreshold":[25,4,1,""],"_formatMessage":[25,1,1,""],"_getAssertEqualityFunc":[25,1,1,""],"_truncateMessage":[25,1,1,""],addCleanup:[25,1,1,""],addTypeEqualityFunc:[25,1,1,""],assertAlmostEqual:[25,1,1,""],assertAlmostEquals:[25,1,1,""],assertDictContainsSubset:[25,1,1,""],assertDictEqual:[25,1,1,""],assertEqual:[25,1,1,""],assertEquals:[25,1,1,""],assertFalse:[25,1,1,""],assertGreater:[25,1,1,""],assertGreaterEqual:[25,1,1,""],assertIn:[25,1,1,""],assertIs:[25,1,1,""],assertIsInstance:[25,1,1,""],assertIsNone:[25,1,1,""],assertIsNot:[25,1,1,""],assertIsNotNone:[25,1,1,""],assertItemsEqual:[25,1,1,""],assertLess:[25,1,1,""],assertLessEqual:[25,1,1,""],assertListEqual:[25,1,1,""],assertMultiLineEqual:[25,1,1,""],assertNotAlmostEqual:[25,1,1,""],assertNotAlmostEquals:[25,1,1,""],assertNotEqual:[25,1,1,""],assertNotEquals:[25,1,1,""],assertNotIn:[25,1,1,""],assertNotIsInstance:[25,1,1,""],assertNotRegexpMatches:[25,1,1,""],assertRaises:[25,1,1,""],assertRaisesRegexp:[25,1,1,""],assertRegexpMatches:[25,1,1,""],assertSequenceEqual:[25,1,1,""],assertSetEqual:[25,1,1,""],assertTrue:[25,1,1,""],assertTupleEqual:[25,1,1,""],assert_:[25,1,1,""],card_type:[25,4,1,""],countTestCases:[25,1,1,""],debug:[25,1,1,""],defaultTestResult:[25,1,1,""],doCleanups:[25,1,1,""],fail:[25,1,1,""],failIf:[25,1,1,""],failIfAlmostEqual:[25,1,1,""],failIfEqual:[25,1,1,""],failUnless:[25,1,1,""],failUnlessAlmostEqual:[25,1,1,""],failUnlessEqual:[25,1,1,""],failUnlessRaises:[25,1,1,""],failureException:[25,4,1,""],id:[25,1,1,""],longMessage:[25,4,1,""],maxDiff:[25,4,1,""],run:[25,1,1,""],setUp:[25,1,1,""],setUpClass:[25,1,1,""],shortDescription:[25,1,1,""],skipTest:[25,1,1,""],tearDown:[25,1,1,""],tearDownClass:[25,1,1,""],test_card_creation:[25,1,1,""],test_get_and_set_card:[25,1,1,""]},"virtualsmartcard.tests.CardGenerator_test.TestNPACardGenerator":{"_addSkip":[25,1,1,""],"_baseAssertEqual":[25,1,1,""],"_classSetupFailed":[25,4,1,""],"_deprecate":[25,1,1,""],"_diffThreshold":[25,4,1,""],"_formatMessage":[25,1,1,""],"_getAssertEqualityFunc":[25,1,1,""],"_truncateMessage":[25,1,1,""],addCleanup:[25,1,1,""],addTypeEqualityFunc:[25,1,1,""],assertAlmostEqual:[25,1,1,""],assertAlmostEquals:[25,1,1,""],assertDictContainsSubset:[25,1,1,""],assertDictEqual:[25,1,1,""],assertEqual:[25,1,1,""],assertEquals:[25,1,1,""],assertFalse:[25,1,1,""],assertGreater:[25,1,1,""],assertGreaterEqual:[25,1,1,""],assertIn:[25,1,1,""],assertIs:[25,1,1,""],assertIsInstance:[25,1,1,""],assertIsNone:[25,1,1,""],assertIsNot:[25,1,1,""],assertIsNotNone:[25,1,1,""],assertItemsEqual:[25,1,1,""],assertLess:[25,1,1,""],assertLessEqual:[25,1,1,""],assertListEqual:[25,1,1,""],assertMultiLineEqual:[25,1,1,""],assertNotAlmostEqual:[25,1,1,""],assertNotAlmostEquals:[25,1,1,""],assertNotEqual:[25,1,1,""],assertNotEquals:[25,1,1,""],assertNotIn:[25,1,1,""],assertNotIsInstance:[25,1,1,""],assertNotRegexpMatches:[25,1,1,""],assertRaises:[25,1,1,""],assertRaisesRegexp:[25,1,1,""],assertRegexpMatches:[25,1,1,""],assertSequenceEqual:[25,1,1,""],assertSetEqual:[25,1,1,""],assertTrue:[25,1,1,""],assertTupleEqual:[25,1,1,""],assert_:[25,1,1,""],card_type:[25,4,1,""],countTestCases:[25,1,1,""],debug:[25,1,1,""],defaultTestResult:[25,1,1,""],doCleanups:[25,1,1,""],fail:[25,1,1,""],failIf:[25,1,1,""],failIfAlmostEqual:[25,1,1,""],failIfEqual:[25,1,1,""],failUnless:[25,1,1,""],failUnlessAlmostEqual:[25,1,1,""],failUnlessEqual:[25,1,1,""],failUnlessRaises:[25,1,1,""],failureException:[25,4,1,""],id:[25,1,1,""],longMessage:[25,4,1,""],maxDiff:[25,4,1,""],run:[25,1,1,""],setUp:[25,1,1,""],setUpClass:[25,1,1,""],shortDescription:[25,1,1,""],skipTest:[25,1,1,""],tearDown:[25,1,1,""],tearDownClass:[25,1,1,""],test_card_creation:[25,1,1,""],test_get_and_set_card:[25,1,1,""],test_readDatagroups:[25,1,1,""]},"virtualsmartcard.tests.CryptoUtils_test":{TestCryptoUtils:[26,2,1,""]},"virtualsmartcard.tests.CryptoUtils_test.TestCryptoUtils":{"_addSkip":[26,1,1,""],"_baseAssertEqual":[26,1,1,""],"_classSetupFailed":[26,4,1,""],"_deprecate":[26,1,1,""],"_diffThreshold":[26,4,1,""],"_formatMessage":[26,1,1,""],"_getAssertEqualityFunc":[26,1,1,""],"_truncateMessage":[26,1,1,""],addCleanup:[26,1,1,""],addTypeEqualityFunc:[26,1,1,""],assertAlmostEqual:[26,1,1,""],assertAlmostEquals:[26,1,1,""],assertDictContainsSubset:[26,1,1,""],assertDictEqual:[26,1,1,""],assertEqual:[26,1,1,""],assertEquals:[26,1,1,""],assertFalse:[26,1,1,""],assertGreater:[26,1,1,""],assertGreaterEqual:[26,1,1,""],assertIn:[26,1,1,""],assertIs:[26,1,1,""],assertIsInstance:[26,1,1,""],assertIsNone:[26,1,1,""],assertIsNot:[26,1,1,""],assertIsNotNone:[26,1,1,""],assertItemsEqual:[26,1,1,""],assertLess:[26,1,1,""],assertLessEqual:[26,1,1,""],assertListEqual:[26,1,1,""],assertMultiLineEqual:[26,1,1,""],assertNotAlmostEqual:[26,1,1,""],assertNotAlmostEquals:[26,1,1,""],assertNotEqual:[26,1,1,""],assertNotEquals:[26,1,1,""],assertNotIn:[26,1,1,""],assertNotIsInstance:[26,1,1,""],assertNotRegexpMatches:[26,1,1,""],assertRaises:[26,1,1,""],assertRaisesRegexp:[26,1,1,""],assertRegexpMatches:[26,1,1,""],assertSequenceEqual:[26,1,1,""],assertSetEqual:[26,1,1,""],assertTrue:[26,1,1,""],assertTupleEqual:[26,1,1,""],assert_:[26,1,1,""],countTestCases:[26,1,1,""],debug:[26,1,1,""],defaultTestResult:[26,1,1,""],doCleanups:[26,1,1,""],fail:[26,1,1,""],failIf:[26,1,1,""],failIfAlmostEqual:[26,1,1,""],failIfEqual:[26,1,1,""],failUnless:[26,1,1,""],failUnlessAlmostEqual:[26,1,1,""],failUnlessEqual:[26,1,1,""],failUnlessRaises:[26,1,1,""],failureException:[26,4,1,""],id:[26,1,1,""],longMessage:[26,4,1,""],maxDiff:[26,4,1,""],run:[26,1,1,""],setUp:[26,1,1,""],setUpClass:[26,1,1,""],shortDescription:[26,1,1,""],skipTest:[26,1,1,""],tearDown:[26,1,1,""],tearDownClass:[26,1,1,""],test_padding:[26,1,1,""]},"virtualsmartcard.tests.SmartcardSAM_test":{TestSmartcardSAM:[27,2,1,""]},"virtualsmartcard.tests.SmartcardSAM_test.TestSmartcardSAM":{"_addSkip":[27,1,1,""],"_baseAssertEqual":[27,1,1,""],"_classSetupFailed":[27,4,1,""],"_deprecate":[27,1,1,""],"_diffThreshold":[27,4,1,""],"_formatMessage":[27,1,1,""],"_getAssertEqualityFunc":[27,1,1,""],"_truncateMessage":[27,1,1,""],addCleanup:[27,1,1,""],addTypeEqualityFunc:[27,1,1,""],assertAlmostEqual:[27,1,1,""],assertAlmostEquals:[27,1,1,""],assertDictContainsSubset:[27,1,1,""],assertDictEqual:[27,1,1,""],assertEqual:[27,1,1,""],assertEquals:[27,1,1,""],assertFalse:[27,1,1,""],assertGreater:[27,1,1,""],assertGreaterEqual:[27,1,1,""],assertIn:[27,1,1,""],assertIs:[27,1,1,""],assertIsInstance:[27,1,1,""],assertIsNone:[27,1,1,""],assertIsNot:[27,1,1,""],assertIsNotNone:[27,1,1,""],assertItemsEqual:[27,1,1,""],assertLess:[27,1,1,""],assertLessEqual:[27,1,1,""],assertListEqual:[27,1,1,""],assertMultiLineEqual:[27,1,1,""],assertNotAlmostEqual:[27,1,1,""],assertNotAlmostEquals:[27,1,1,""],assertNotEqual:[27,1,1,""],assertNotEquals:[27,1,1,""],assertNotIn:[27,1,1,""],assertNotIsInstance:[27,1,1,""],assertNotRegexpMatches:[27,1,1,""],assertRaises:[27,1,1,""],assertRaisesRegexp:[27,1,1,""],assertRegexpMatches:[27,1,1,""],assertSequenceEqual:[27,1,1,""],assertSetEqual:[27,1,1,""],assertTrue:[27,1,1,""],assertTupleEqual:[27,1,1,""],assert_:[27,1,1,""],countTestCases:[27,1,1,""],debug:[27,1,1,""],defaultTestResult:[27,1,1,""],doCleanups:[27,1,1,""],fail:[27,1,1,""],failIf:[27,1,1,""],failIfAlmostEqual:[27,1,1,""],failIfEqual:[27,1,1,""],failUnless:[27,1,1,""],failUnlessAlmostEqual:[27,1,1,""],failUnlessEqual:[27,1,1,""],failUnlessRaises:[27,1,1,""],failureException:[27,4,1,""],id:[27,1,1,""],longMessage:[27,4,1,""],maxDiff:[27,4,1,""],run:[27,1,1,""],setUp:[27,1,1,""],setUpClass:[27,1,1,""],shortDescription:[27,1,1,""],skipTest:[27,1,1,""],tearDown:[27,1,1,""],tearDownClass:[27,1,1,""],test_counter_decrement:[27,1,1,""],test_external_authenticate:[27,1,1,""],test_incorrect_pin:[27,1,1,""],test_internal_authenticate:[27,1,1,""],test_security_environment:[27,1,1,""]},"virtualsmartcard.tests.utils_test":{TestUtils:[28,2,1,""]},"virtualsmartcard.tests.utils_test.TestUtils":{"_addSkip":[28,1,1,""],"_baseAssertEqual":[28,1,1,""],"_classSetupFailed":[28,4,1,""],"_deprecate":[28,1,1,""],"_diffThreshold":[28,4,1,""],"_formatMessage":[28,1,1,""],"_getAssertEqualityFunc":[28,1,1,""],"_truncateMessage":[28,1,1,""],addCleanup:[28,1,1,""],addTypeEqualityFunc:[28,1,1,""],assertAlmostEqual:[28,1,1,""],assertAlmostEquals:[28,1,1,""],assertDictContainsSubset:[28,1,1,""],assertDictEqual:[28,1,1,""],assertEqual:[28,1,1,""],assertEquals:[28,1,1,""],assertFalse:[28,1,1,""],assertGreater:[28,1,1,""],assertGreaterEqual:[28,1,1,""],assertIn:[28,1,1,""],assertIs:[28,1,1,""],assertIsInstance:[28,1,1,""],assertIsNone:[28,1,1,""],assertIsNot:[28,1,1,""],assertIsNotNone:[28,1,1,""],assertItemsEqual:[28,1,1,""],assertLess:[28,1,1,""],assertLessEqual:[28,1,1,""],assertListEqual:[28,1,1,""],assertMultiLineEqual:[28,1,1,""],assertNotAlmostEqual:[28,1,1,""],assertNotAlmostEquals:[28,1,1,""],assertNotEqual:[28,1,1,""],assertNotEquals:[28,1,1,""],assertNotIn:[28,1,1,""],assertNotIsInstance:[28,1,1,""],assertNotRegexpMatches:[28,1,1,""],assertRaises:[28,1,1,""],assertRaisesRegexp:[28,1,1,""],assertRegexpMatches:[28,1,1,""],assertSequenceEqual:[28,1,1,""],assertSetEqual:[28,1,1,""],assertTrue:[28,1,1,""],assertTupleEqual:[28,1,1,""],assert_:[28,1,1,""],countTestCases:[28,1,1,""],debug:[28,1,1,""],defaultTestResult:[28,1,1,""],doCleanups:[28,1,1,""],fail:[28,1,1,""],failIf:[28,1,1,""],failIfAlmostEqual:[28,1,1,""],failIfEqual:[28,1,1,""],failUnless:[28,1,1,""],failUnlessAlmostEqual:[28,1,1,""],failUnlessEqual:[28,1,1,""],failUnlessRaises:[28,1,1,""],failureException:[28,4,1,""],id:[28,1,1,""],longMessage:[28,4,1,""],maxDiff:[28,4,1,""],run:[28,1,1,""],setUp:[28,1,1,""],setUpClass:[28,1,1,""],shortDescription:[28,1,1,""],skipTest:[28,1,1,""],tearDown:[28,1,1,""],tearDownClass:[28,1,1,""],test_CAPDU:[28,1,1,""],test_RAPDU:[28,1,1,""]},"virtualsmartcard.utils":{"_make_byte_property":[29,5,1,""],"_unformat_hexdump":[29,5,1,""],APDU:[29,2,1,""],C_APDU:[29,2,1,""],R_APDU:[29,2,1,""],hexdump:[29,5,1,""],inttostring:[29,5,1,""],parse_status:[29,5,1,""],stringtoint:[29,5,1,""]},"virtualsmartcard.utils.APDU":{"_deldata":[29,1,1,""],"_format_parts":[29,1,1,""],"_getdata":[29,1,1,""],"_setbyte":[29,1,1,""],"_setdata":[29,1,1,""],data:[29,4,1,""]},"virtualsmartcard.utils.C_APDU":{"_deldata":[29,1,1,""],"_format_fields":[29,1,1,""],"_format_parts":[29,1,1,""],"_getdata":[29,1,1,""],"_setbyte":[29,1,1,""],"_setdata":[29,1,1,""],"case":[29,1,1,""],CLA:[29,4,1,""],INS:[29,4,1,""],Lc:[29,4,1,""],Le:[29,4,1,""],P1:[29,4,1,""],P2:[29,4,1,""],cla:[29,4,1,""],data:[29,4,1,""],effective_Le:[29,4,1,""],ins:[29,4,1,""],lc:[29,4,1,""],le:[29,4,1,""],p1:[29,4,1,""],p2:[29,4,1,""],parse:[29,1,1,""],render:[29,1,1,""]},"virtualsmartcard.utils.R_APDU":{"_deldata":[29,1,1,""],"_format_fields":[29,1,1,""],"_format_parts":[29,1,1,""],"_getdata":[29,1,1,""],"_getsw":[29,1,1,""],"_setbyte":[29,1,1,""],"_setdata":[29,1,1,""],"_setsw":[29,1,1,""],SW1:[29,4,1,""],SW2:[29,4,1,""],SW:[29,4,1,""],data:[29,4,1,""],parse:[29,1,1,""],render:[29,1,1,""],sw1:[29,4,1,""],sw2:[29,4,1,""],sw:[29,4,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:[29,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","method","Python method"],"2":["py","class","Python class"],"3":["py","staticmethod","Python static method"],"4":["py","attribute","Python attribute"],"5":["py","function","Python function"],"6":["py","exception","Python exception"]},objtypes:{"0":"py:module","1":"py:method","2":"py:class","3":"py:staticmethod","4":"py:attribute","5":"py:function","6":"py:exception"},terms:{"05_":2,"07_":2,"0x00":[7,12,22,23],"0x00000000":6,"0x00000001":6,"0x01":[1,7],"0x02":[1,7],"0x03":1,"0x04":[1,7],"0x0c":[14,21],"0x0d46":1,"0x0e":[14,21],"0x0f":[14,21],"0x10":1,"0x18d1":6,"0x3010":1,"0x40":21,"0x4ee1":6,"0x60":21,"0x80":[12,21,22,23],"0x8c7b":[6,7],"0x8e":[12,21,22,23],"0x9000":1,"0x9a":[1,12,21,22,23],"0x9e":[12,21,22,23],"0xa4":[7,14,21],"0xac":[12,21,22,23],"0xb0":[14,21],"0xb1":[14,21],"0xb2":[14,21],"0xb3":[14,21],"0xbc":[12,21,22,23],"0xca":[14,21],"0xcb":[14,21],"0xd0":[14,21],"0xd1":[14,21],"0xd2":[14,21],"0xd6":[14,21],"0xd7":[14,21],"0xda":[14,21],"0xdb":[14,21],"0xdc":[14,21],"0xdd":[14,21],"0xe0":[14,21],"0xe2":[14,21],"0xe4":[14,21],"0xff":[1,7,17,21,23],"0xxx":7,"27c3":2,"27th":2,"7_3":2,"7_win32":6,"\u00ecnfo":6,"__getrecord":14,"__init__":7,"__repr__":29,"__str__":29,"_addskip":[25,26,27,28],"_baseassertequ":[25,26,27,28],"_cardgenerator__generate_cryptoflex":9,"_cardgenerator__generate_epass":9,"_cardgenerator__generate_iso_card":9,"_cardgenerator__generate_npa":9,"_classsetupfail":[25,26,27,28],"_controlreferencetemplate__replace_tag":[12,23],"_controlreferencetemplate__set_algo":[12,23],"_controlreferencetemplate__set_iv":[12,23],"_controlreferencetemplate__set_kei":[12,23],"_deldata":29,"_deprec":[25,26,27,28],"_diffthreshold":[25,26,27,28],"_format_field":29,"_format_part":29,"_formatmessag":[25,26,27,28],"_get_referenced_kei":[15,21,22,23],"_getassertequalityfunc":[25,26,27,28],"_getdata":29,"_getsw":29,"_handlertestos__output_from_l":19,"_make_byte_properti":29,"_makesalt":11,"_npa_se__eac_ca":23,"_npa_se__eac_pace_step1":23,"_npa_se__eac_pace_step2":23,"_npa_se__eac_pace_step3":23,"_npa_se__eac_pace_step4":23,"_npa_se__pack_general_authent":23,"_npa_se__unpack_general_authent":23,"_passportsam__computekei":22,"_recordstructureef__getrecord":14,"_recordstructureef__getrecordsbyidentifi":14,"_recordstructureef__getrecordsbynumb":14,"_selectfil":[14,21],"_set_s":[12,21,22,23],"_setbyt":29,"_setdata":29,"_setsw":29,"_truncatemessag":[25,26,27,28],"_unformat_hexdump":29,"_virtualicc__recvfromvpicc":17,"_virtualicc__sendtovpicc":17,"byte":[7,12,14,15,17,21,22,23,29],"case":[1,4,6,7,21,25,26,27,28,29],"class":[7,9,12,14,15,17,19,20,21,22,23,25,26,27,28,29],"default":[1,4,6,25,26,27,28],"enum":4,"f\u00fcr":2,"function":[2,3,7,11,14,15,17,21,22,23,25,26,27,28,29],"import":7,"int":[1,4],"long":[4,7,14,21],"m\u00fcller":2,"new":[1,2,3,6,7,9,12,14,21,22,23],"null":6,"pl\u00f6tz":6,"public":[2,6,12,15,21,22,23],"return":[0,7,11,12,14,15,16,17,21,22,23,25,26,27,28,29],"short":[14,29],"static":[14,17,21,22,23],"switch":[1,6,12,21,22,23],"throw":7,"true":[14,21,25,26,27,28,29],"try":[2,7],"universit\u00e4t":2,"while":7,a000000397425446590201:0,a000000527210101:0,abl:[6,9],about:[6,7],abov:6,academictitl:6,acardemul:[0,4],accept:[25,26,27,28],access:[0,1,3,4,5,6,12,15,17,21,22,23],accord:[7,12,14,17,21,22,23],accordingli:6,act:[6,7],activ:4,actual:[4,5,7,20,25,26,27,28],actual_seq:[25,26,27,28],add:[1,4,7,12,23,25,26,27,28],add_data:7,addcleanup:[25,26,27,28],addit:4,address:6,addtypeequalityfunc:[25,26,27,28],adjust:[12,22,23],adress:29,af_inet:7,after:[25,26,27,28],against:[4,5,6],agreement:[12,21,22,23],aid:4,aid_list:4,algo:11,algorithm:[11,12,15,21,22,23],alia:[25,26,27,28],alioth:[1,4,6,19],all:[4,5,6,7,12,14,15,16,21,22,23,25,26,27,28],allow:[0,4,5,6,25,26,27,28],almost:[25,26,27,28],alreadi:[12,23],also:[0,1,4,6,7,9,14,21],altern:[1,2,4,6],although:6,anchor:[6,12,21,22],andrea:2,angriff:2,ani:[0,1,4,5,6,7,15,21,22,23],annex:22,anoth:1,answer:[17,21,23],anywai:[6,22],apart:2,apdu:[0,1,4,7,12,14,15,17,20,21,22,23,29],api:[6,7],app:[0,4,5,6,7],appear:1,append:[11,12,14,21,23],append_pad:11,appendrecord:[14,21],appl:6,applet:0,applic:[0,1,4,5,6,17],applicationidentifi:[14,21],appropri:[12,21,22,23],apt:1,arg:[13,14,17,21,23,25,26,27,28,29],argument:[6,25,26,27,28],argz:[14,21],around:4,arrai:6,articl:6,asctim:7,assert:[25,26,27,28],assert_:[25,26,27,28],assertalmostequ:[25,26,27,28],assertdictcontainssubset:[25,26,27,28],assertdictequ:[25,26,27,28],assertequ:[25,26,27,28],assertfals:[25,26,27,28],assertgreat:[25,26,27,28],assertgreaterequ:[25,26,27,28],asserti:[25,26,27,28],assertin:[25,26,27,28],assertionerror:[25,26,27,28],assertisinst:[25,26,27,28],assertisnon:[25,26,27,28],assertisnot:[25,26,27,28],assertisnotnon:[25,26,27,28],assertitemsequ:[25,26,27,28],assertless:[25,26,27,28],assertlessequ:[25,26,27,28],assertlistequ:[25,26,27,28],assertmultilineequ:[25,26,27,28],assertnotalmostequ:[25,26,27,28],assertnotequ:[25,26,27,28],assertnotin:[25,26,27,28],assertnotisinst:[25,26,27,28],assertnotregexpmatch:[25,26,27,28],assertrais:[25,26,27,28],assertraisesregexp:[25,26,27,28],assertregexpmatch:[25,26,27,28],assertsequenceequ:[25,26,27,28],assertsetequ:[25,26,27,28],asserttru:[25,26,27,28],asserttupleequ:[25,26,27,28],assign:[14,29],assignlogicalchannel:[17,21,23],associ:[12,22,23],assum:7,asym:12,atexit:7,atr:[7,17,21,23],attach:[0,5],attack:[4,5,7,20],attempt:6,attribut:[14,21,25,26,27,28,29],auf:2,authent:[12,15,21,22,23],authenticate_head:[12,21,22,23],authentisierung:2,autodetect:[1,4],automat:[6,17,21,23,25,26,27,28],autoreconf:[1,4,6],autotool:6,auxiliari:[1,4,6],avail:[0,1,2,4,5,6,7,14,21],avoid:7,bac:6,back:[4,7,17,20],backend:4,bar:5,base:[1,4,9,12,13,14,15,17,19,20,21,22,23,25,26,27,28,29],basi:[25,26,27,28],basic:[17,22],basicconfig:7,basiert:2,been:[3,7,25,26,27,28],befor:[7,25,26,27,28],begin:[14,21],below:[4,6],ber:[14,21],berlin:2,bertlv:16,bertlv_data:[14,21],bertlv_pack:16,bertlv_unpack:16,besitz:2,best:[4,7],better:7,between:[0,1,6,17,21,23,25,26,27,28],big:[7,12,21,22,23],bin:6,binari:[6,14,21,29],birthnam:6,bit:[11,14,21],bitmask:[12,21,22,23],bitstr:[17,21,23],bix:6,bixvread:6,bixvreaderinstal:6,bleed:[1,4,6],blob:0,block:[7,11,15,21,22],blocklen:11,bndl:6,bool:[14,17,21,23],both:[1,25,26,27,28],box:1,bring:6,brows:[0,2,5],bsi:1,buffer:7,bug:[1,4,6,7],build:[0,1,4,5],building_gadget_usb_modul:1,built:[0,4,5,6],bund:1,bundl:6,bz2:1,c_apdu:29,ca_kei:[6,7,17,23],calcul:[4,11,17,21,22,23],calculate_mac:11,call:[7,14,25,26,27,28],callabl:[25,26,27,28],callable_obj:[25,26,27,28],callableobj:[25,26,27,28],camera:[0,5],can:[0,1,2,4,5,6,7,14,20,21,23,25,26,27,28],capabl:[14,17,21,23],capdu:[12,15,17,21,22,23],card_typ:[7,9,17,25],cardaccess:6,cardconnectionexcept:7,cardgener:[7,8],cardgenerator_test:[7,8,24],cardnumb:15,cardsecret:15,cardsecur:6,cardtyp:7,caught:[25,26,27,28],cbc:11,ccc:2,cct:12,cert:6,certif:[6,12,21,22],certifc:6,cfbundledevelopmentregion:6,cfbundleexecut:6,cfbundleinfodictionaryvers:6,cfbundlenam:6,cfbundlepackagetyp:6,cfbundlesignatur:6,cfbundlevers:6,challeng:[15,21,22,23],chang:[1,4,6,15,21,22,23],change_reference_data:[15,21,22,23],channelid:6,chao:2,charact:[17,21,23],check:[1,6,7,15,21,22,23,25,26,27,28],checksum:[11,12,21,22,23],chip:6,chipkartenles:2,choic:5,choos:[0,4,5,6],chosen:6,chr:7,chv:[15,21,22,23],cipher:[11,15,21,22,23],cipherspec:11,citi:6,cla:[1,29],cleanup:[7,20,25,26,27,28],click:6,client:1,clone:[0,1,2,4,5,6],close:[7,20],club:2,code:[0,1,4,5,6,7,12,14,16,21,22,23,29],codeproject:6,collect:[25,26,27,28],com:[0,1,2,3,4,5,6,7],combin:[1,4,12,23],come:7,command:[0,1,4,6,7,12,14,15,17,19,20,21,22,23,29],commandchaing:[17,21,23],commun:[0,2,4,5,6,7,17],communityid:6,compar:[21,25,26,27,28],comparison:[25,26,27,28],compat:1,compil:[0,1,4,5,6],complet:[4,6,7,25,26,27,28],complex:7,compon:1,comput:[0,2,5,6,11,12,21,22,23],compute_cryptographic_checksum:[12,21,22,23],compute_digital_signatur:[12,21,22,23],concern:[2,4,5],conf:[6,7],config:[4,5,6,12,23],configur:[0,1,4,5],congress:2,connect:[0,4,5,6,7,17,20],connector:[4,6],connecttoport:[7,17],consecut:29,constantdefinit:[7,8],contain:[6,12,14,15,21,22,23,25,26,27,28],content:[7,9,12,14,21,23,29],context:[7,25,26,27,28],continu:3,contribut:[0,1,4,5,6],control:[12,14,21,22,23],controlreferencetempl:[12,23],convent:[17,21,23],copyright:6,core:1,correct:[7,14,15,21,22],correctli:[15,21,23],correspond:[7,15],count:[25,26,27,28],counter:[11,15,21,22,25,26,27,28],counterpart:1,countri:6,counttestcas:[25,26,27,28],cover:[4,6],craft:1,creat:[1,2,6],createfil:[14,21],cross:4,crt:[12,22,23],crtl:17,crypt:11,crypto_checksum:11,cryptoflex:[6,7,8,9,18],cryptoflexgeneratortest:25,cryptoflexmf:[7,21],cryptoflexo:[7,21],cryptoflexs:21,cryptoflexsam:21,cryptograph:[11,12,21,22,23],cryptoutil:[7,8],cryptoutils_test:[7,8,24],current:[0,2,4,6,9,11,12,14,15,21,22,23],currentdf:[14,21],currentef:[14,21],custom:1,custom_url:7,cvca:[6,7,17,23],cyanogenmod:[0,5],cyberflex:[6,11],cycl:[14,21],cyclic:14,d2760001240102000000000000010000:0,daemon:6,data:[0,1,4,5,6,7,11,12,14,15,16,17,21,22,23,25,26,27,28,29],datacod:14,datagroup:9,datagroupnam:6,datagroupvalu:6,datalist:[14,16],dataobjecthandlingdecodeencapsul:[14,21],dataobjecthandlingdecodeplain:[14,21],dataset:[6,7],datasetfil:[6,7,9,17],datatyp:[25,26,27,28],dataunitsdecodeencapsul:[14,21],dataunitsdecodeplain:[14,21],datefmt:7,dateofbirth:6,dateofexpiri:6,dcb:[14,21],debian:[1,4,6,19],debug:[6,25,26,27,28],decim:[25,26,27,28],deciph:[12,21,22,23],decipher:[12,21,22,23],decive_unit:6,decod:[14,21],decodediscretionarydataobject:16,decodeextendedheaderlist:16,decodeheaderlist:16,decodeoffsetdataobject:16,decodetaglist:16,deconstruct:[25,26,27,28],decor:14,decrement:[15,21,22],decrypt:[11,14,15,21,22,23],dedic:14,deem:[25,26,27,28],def:7,default_s:[15,23],default_uid:1,defaulttestresult:[25,26,27,28],defin:[1,15,22],deleg:[0,6],deletefil:[14,21],delta:[25,26,27,28],den:2,depend:[0,1,4,5,6,11,14,21,22,29],deploi:[0,5],deriv:[7,22],derive_kei:22,des3:11,describ:6,descript:[25,26,27,28],descriptor:[14,21],design:7,desktop:0,despit:4,destroypacechannel:1,detail:[6,7,25,26,27,28],detect:5,determin:[25,26,27,28],dev:[1,6],develop:[0,3,4,5],devic:[1,6],devicenam:6,devices_compatibility_matrix:4,devmgmt:6,dfname:[14,21],dfselectionbyapplication_implicit:[14,21],dfselectionbyfid:[14,21],dfselectionbyfulldfnam:[14,21],dfselectionbypartialdfnam:[14,21],dfselectionbypath:[14,21],dg12:6,dg14:6,dg15:6,dg16:6,dg21:6,dict:6,dictionari:[12,23],die:2,die_gesamte_technik_ist_sich:2,diff:[25,26,27,28],differ:[2,6,7,9,11,12,22,23,25,26,27,28],digit:[12,21,22,23,25,26,27,28],direct:[17,21,23],directconvent:[17,21,23],directli:[4,6],directori:[1,6,7],disabl:6,disable_check:[7,17,23],disconnect:7,discuss:[4,5],disk:[7,9],dispatch:[15,17],distanc:4,distribut:4,dlitz:6,do_encrypt:11,do_someth:[25,26,27,28],doc:[6,14],docleanup:[25,26,27,28],docstr:[14,25,26,27,28],doctyp:6,documenttyp:6,doe:[4,6,7,22],doi:2,dominik:[2,4],done:[4,7],doubl:6,down:[7,17,19,21,23],driver:[1,5,6,19],droid:[0,5],dsa:[15,21,22,23],dst:12,dtd:6,ducktyp:[25,26,27,28],dummy_hcd:1,dump:29,dylib:6,eac:[6,23],eac_step:23,each:[14,25,26,27,28],earlier:6,echo:1,edg:[1,4,6],edit:7,editor:2,ef_cardaccess:[6,7,17,23],ef_cardsecur:[6,7,17,23],effective_l:29,eid:2,eid_pin:23,einem:2,either:[0,12,14,21,22,23],electron:[0,3,6],element:[6,25,26,27,28],elementari:14,elif:7,els:7,email:6,enabl:[1,2,4,6],enciph:[12,21,22,23],encipher:[12,21,22,23],encod:[6,7,12,23],encodebertlvdatalist:16,encodedataoffsetobject:16,encodediscretionarydataobject:16,encodefilecontrolparamet:[14,21],encrypt:[7,9,11,14,15,21,22,23],end:[12,14,21,22,23],endian:7,enforc:[25,26,27,28],engin:2,english:6,ensur:6,enter:[15,21,22],entir:7,entri:1,environ:[4,12,15,21,22,23],epass:[6,7,8,18],epass_s:22,epassport:22,equal:[14,15,21,22,25,26,27,28],equival:[25,26,27,28],eras:[12,14,15,21,22,23],erase_s:[15,21,22,23],erasebinari:[14,21],erasebinaryencapsul:[14,21],erasebinaryplain:[14,21],erasefrom:14,eraserecord:[14,21],eraseto:14,erik:0,eriknellessen:0,err_wronglength:7,error:[1,7,14,21,25,26,27,28],error_cod:[25,26,27,28],erweiterung:2,esign:6,esign_ca_cert:[6,7,17,23],esign_cert:[6,7,17,23],esign_kei:[7,17,23],especi:[1,4,5],establish:[5,6],establishpacechannel:1,establishpacechannelinput:1,establishpacechanneloutput:1,etc:[6,7],even:[7,14,21,25,26,27,28],everi:6,exactli:[25,26,27,28],exampl:[1,4,6],excclass:[25,26,27,28],except:[7,13,25,26,27,28],execut:[6,7,17,19,20,21,23,25,26,27,28],exercis:28,exist:[4,7],exit:[1,4,6,7],expect:[7,25,26,27,28],expected_except:[25,26,27,28],expected_regexp:[25,26,27,28],expected_seq:[25,26,27,28],explain:4,explicit:[25,26,27,28],explor:6,expon:21,expr1:[25,26,27,28],expr2:[25,26,27,28],expr:[25,26,27,28],express:[25,26,27,28],extend:[2,6,7],extended_length:17,extendedl:[17,21,23],extern:[6,12,21,22,23],external_authent:[15,21,22,23],extra:[25,26,27,28],extra_fci_data:14,f000000001:0,f276a288bcfba69d34f31001:0,fabio:6,fail:[7,25,26,27,28],failif:[25,26,27,28],failifalmostequ:[25,26,27,28],failifequ:[25,26,27,28],failunless:[25,26,27,28],failunlessalmostequ:[25,26,27,28],failunlessequ:[25,26,27,28],failunlessrais:[25,26,27,28],failur:[25,26,27,28],failureexcept:[25,26,27,28],fals:[6,7,14,16,17,21,23,25,26,27,28,29],familynam:6,far:6,fci:[14,21],fdid:[0,5],featur:2,feature_execute_pac:1,feature_modify_pin_direct:1,feature_verify_pin_direct:1,feedback:[0,1,4,5,6],fetch:[0,5,7],ff557573:6,fid:[14,21],field:[12,21,22,23,29],file:[0,1,4,5,6,7,9,14,15,17,21,23],filedescriptor:[14,21],filenam:1,filesystem:[9,15,21,22,23],fill:9,find:[1,4,6,7,16],firewal:7,first:[6,7,14,21,25,26,27,28],firstsft:[14,21],firstsoftwar:[14,21],fix:14,fixtur:[25,26,27,28],fmd:[14,21],focu:6,follow:[0,1,2,4,5,6,7,14,21],foreground:4,form:[4,9,11,15,21,22,23],format:7,formatresult:[7,17,21,23],forwar:4,forward:[1,7,17,20],forwared:1,foss:2,found:[7,25,26,27,28],fragment:1,frame:17,framework:6,frank:[1,2,4],frankmorgn:[0,1,2,3,4,5,6],fraunhof:2,friendlynam:6,from:[0,2,4,5,6,7,9,12,14,15,17,20,21,22,23,25,26,27,28],fsdecrypt:[15,21,22,23],fsencrypt:[15,21,22,23],fukuchi:6,full:[4,5,29],futur:[15,21,22,23],g_ether:1,gadget:1,gener:[0,4,5,6,7,9,11,12,14,15,21,22,23,25,26,27,28,29],general_authent:23,generate_public_key_pair:[12,15,21,22,23],generatecard:9,german:[0,3,4,5,6],gertrud:6,gesamt:2,get:[1,4,6,7,9,14,21,25,26,27,28],get_card_numb:[15,21,22,23],get_challeng:[15,21,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,21,23],getcard:[7,9],getdata:[14,21],getdataencapsul:[14,21],getdataplain:[14,21],getfile_byrefdataobj:14,getpath:[14,21],getreaderpacecap:1,getrespons:[17,21,23],getsocknam:7,getstatu:29,gg487509:1,gid:0,gidsapplet:0,giovanni:2,git:[0,1,2,4,5,6],github:[0,1,2,3,4,5,6],give:[6,7],given:[4,7,12,14,15,16,17,21,22,23,25,26,27,28],givennam:6,global:[12,15,21,22,23],gmail:1,gnu:[1,4,6],googl:4,gpl:[0,1,4,5,6],group:[6,7],guess:6,guid:2,handi:2,handl:[7,14,21],handler:17,handler_test:[6,7,19],handlertest:[7,8,18],handlertesto:[7,19],hardwar:[0,1,4,5,6],hasfixedrecords:14,hash:[11,12,21,22,23],hashmap:15,hashmethod:11,hassimpletlv:14,have:[0,1,2,4,5,6,7,25,26,27,28],hce:0,header:[1,4,12,21,22,23],header_authent:[15,21,22,23],heidelberg:2,hello:0,helloworldapplet:0,help:[1,4,6],henryk:6,here:[1,2,4,6,7],hexdump:29,histchar:[17,21,23],histor:[14,17,21,23],hmac:11,holder:6,home:3,honor:14,honour:[25,26,27,28],hook:[7,25,26,27,28],host:[0,1,4,5,6,7,17],hostnam:[4,6,7],how:[1,4,7],html:[0,1,2,5,6,19],http:[0,1,2,3,4,5,6,7,19],human:[25,26,27,28],humboldt:2,icao:[9,11,22],icc:22,ident:[0,3,6],identifi:[0,4,14,15,21,22,23],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:[25,26,27,28],impact:[4,5],implement:[0,1,6],implicitli:7,importerror:7,inact:6,includ:[0,2,4,6,7,12,15,21,22,23,25,26,27,28],include_fil:16,incom:[4,6],incomplet:6,indent:[14,29],index:[4,14,15,21,25,26,27,28],index_curr:[14,21],index_htm:1,indic:[12,21,22,23],info:[1,6,7],infoplist:6,inform:[2,12,14,15,21,22,23],informat:2,informatik:2,informationstechnologi:2,ini:6,init:[0,1,6],initi:[0,1,6,7,11,12,14,22,23],inpterpret:7,input:11,ins2handl:[17,21,23],insert:4,insight:7,insmod:1,inspect:[25,26,27,28],instanc:[14,16],instead:[6,25,26,27,28,29],institut:2,instruct:[14,21],integ:[14,21],integr:[3,6],interact:9,interfac:[0,1],intermediari:1,intern:[12,15,21,22,23],internal_authent:[15,21,22,23],internet:6,interrupt:1,inttostr:[7,29],invalid:[6,7,15,21,22],invers:[17,21,23],invok:[12,21,22,23,25,26,27,28],involv:14,ioanni:2,iscycl:14,isequ:14,isinst:[25,26,27,28],iso7816:[6,7,25],iso7816generatortest:25,iso7816o:[7,17,21,23],iso:[0,4,6],isoapplet:0,issimpletlv:[14,21],issu:[1,4,6],issuingst:6,ist:2,item:[14,25,26,27,28],iter:[25,26,27,28],itself:7,java:0,jcardsim:0,jen:2,join:7,jump:6,just:[17,25,26,27,28],kdir:1,keep:[25,26,27,28],kei:[6,7,11,12,15,21,22,23],kernel:1,keycard:0,keyref_is_can:23,keyref_is_mrz:23,keyref_is_pin:23,keyref_is_puk:23,keytyp:[15,21,22,23],keyword:[25,26,27,28],killal:6,kind:[0,1,4,5,6,12,21,22],kit:6,kitkat:[0,5],know:[6,7],knowledg:7,krontiri:2,kwarg:[25,26,27,28,29],last:[11,14,21],lastcommandoffcut:7,lastcommandsw:7,later:[4,6,7,21],latest:[1,2,4,6],layer:6,lead:6,lectur:2,len:[7,17,21,23],length:[7,11,12,14,16,21,23,25,26,27,28,29],let:7,level:7,levelnam:7,lian:2,lib:[1,4,6],libccid:1,libeac:6,libexec:6,libifdvpcd:6,libopensc:1,libpath:6,libpcsclit:6,libqrencod:6,librari:2,licel:0,licens:[0,1,4,5,6],life:[14,21],lifecycl:[14,21],lifo:[25,26,27,28],like:[1,4,6],line:[1,6,25,26,27,28,29],linelen:29,link:6,linuxtag:2,list1:[25,26,27,28],list2:[25,26,27,28],list:[1,4,6,7,14,16,21,25,26,27,28],listen:4,listread:7,lite:[4,6,19],littl:7,load:[1,6,7],local:[1,6],local_ip:7,localhost:6,locat:[1,2,4],log:7,logginglevel:[7,17],logic:14,longmessag:[25,26,27,28],look:[0,1,2,4,6,7,14],loop:17,lopensc:1,lost:7,machin:[1,6,22],maco:6,magic:7,mai:[0,4,6,11,12,15,21,22,23],mail:6,main:[0,4,6,7,17],maintain:17,make:[1,4,6,29],make_properti:14,makeatr:[17,21,23],makefil:1,makefirstsoftwarefunctiont:[14,21],makesecondsoftwarefunctiont:[14,21],makethirdsoftwarefunctiont:[17,21,23],manag:[6,7,25,26,27,28],manage_security_environ:[12,15,21,22,23],mani:16,manipul:[12,21,22,23],manual:[0,5],map:[7,21],mass:6,master:[0,2,14,15,17,21,23],match:[4,6,14,25,26,27,28],max:[11,17,21,23],maxdiff:[25,26,27,28],maximum:[14,15,21,22],maximumchannel:[17,21,23],maxl:[7,21,23],maxrecords:14,maxsiz:14,mayb:1,mean:[6,7,11,12,15,17,21,22,23,25,26,27,28],measur:[25,26,27,28],mechan:[12,21,22,23],media:2,member:[25,26,27,28],memori:[15,21,22,23],messag:[6,7,11,12,13,15,17,21,22,23,25,26,27,28],meta:29,method:[9,12,15,21,22,23,25,26,27,28],methodnam:[25,26,27,28],microsoft:[1,4,6],middlewar:1,might:[7,15,21,22,23],min:7,mingw:4,miss:[1,4,6],mitm:[7,20],mkdir:1,mmc:6,mmo11:2,mo10:2,mobil:2,mobilen:2,mode:[1,4,5,6,7,11,12,15],modern:[1,4],modif:[1,7],modifi:[1,4,7,12,23],modprob:1,modul:[1,4,6,7,8],momr12:2,mor12:2,more:[0,1,4,5,6,7,12,22,23,25,26,27,28],morgner:[1,2,4],most:[1,4,7,16,25,26,27,28],mostli:7,mount:1,mous:6,mrtd:[6,22],mrz:[9,23],msc:6,msdn:[1,6],mse:12,msg:[7,17,19,20,21,23,25,26,27,28],msi:6,multi:[25,26,27,28],multipl:[1,6,7],must:[1,4,5,6,7,9,11,12,14,21,22,23,25,26,27,28],mutual_authent:[15,21,22,23],mutual_challeng:[15,21,22,23],name:[4,6,14,21,29],nation:6,nativ:4,necessari:4,need:[0,1,4,5,6,7,15,21,22,23,25,26,27,28],neither:[14,21],nellesson:0,net:[0,6],network:[5,7],neuen:2,neuer:3,newer:[0,5],newli:14,newlist:14,newtlvlist:[14,21],newvalu:[14,16],next:[14,21,23],nfc:[0,2,4,5,6,7],nice:29,nicer:[25,26,27,28],nobodi:22,none:[7,9,11,14,15,16,17,21,22,23,25,26,27,28,29],nor:[14,21],normal:[7,21,25,26,27,28],normal_rest:7,notebook:0,noth:[12,21,22,23],notif:1,now:[1,4,6,15,21,22,23],npa:[0,2],npa_at_crt:23,npa_s:23,npa_sam:23,npao:[7,23],num_id:14,num_result:16,number:[1,4,6,7,14,15,21,22,23,25,26,27,28],numread:6,oath:0,obj:[1,25,26,27,28],object:[7,9,12,14,15,17,21,22,23,25,26,27,28,29],occur:[14,21],odd:[14,21],oep10:2,oepen:[2,4],off:[1,7],offer:2,offset:[14,16,21,29],old:[2,14],older:[1,2,4,6],om11:2,omit:[17,21,23,25,26,27,28],onetimewrit:14,onli:[1,4,7,11,14,21,22,25,26,27,28],open:[0,5,6,7,17],openmoko:[1,4,6],openpac:6,openpcd:4,openpgp:0,openpicc:4,openport:[7,17],opensc_lib:1,oper:[4,11,12,14,21,22,23,25,26,27,28],operation_on_str:11,optim:[25,26,27,28],option:[1,4,6,9,11,17,21,23,25,26,27,28],ord:7,order:[1,7,12,14,15,21,22,23,25,26,27,28],org:[0,1,4,5,6,19],original_func:[25,26,27,28],other:[1,5,6],otherwis:[4,12,14,21,23,25,26,27,28],ottavi:6,our:[0,1,2,3,4,5,6,7,29],out:[1,7],output:6,over:[4,5,6,7],overview:[6,7],overwrit:[7,29],own:[0,6,25,26,27,28],pace:[0,1,6],pace_can:23,pace_mrz:23,pace_pin:23,pace_puk:23,pacecap:1,pack:16,packag:7,pad:[11,12,21,22],padding_class:11,pair:[12,22,23],parallel:6,param:14,paramet:[11,12,14,15,17,21,22,23,25,26,27,28],parent:[14,21],pariti:22,pars:[7,12,15,21,22,23,29],parse_se_config:[12,23],parse_sm_capdu:[12,15,21,22,23],parse_statu:29,part:[2,6,14],partial:[14,21],pass:[7,17],passport:[0,6,9,11,22],passportsam:22,patch:1,path:[7,9,14,15,21],pattern:[25,26,27,28],pbkdf2:6,pc_to_rdr_secur:1,pc_to_rdr_xfrblock:1,pcd:[6,7,17],pcsc:[4,6],pcsc_scan:6,pcscd:[6,7],pcsclite:[1,4,6,19],pdf:2,perform:[1,12,17,19,21,22,23],perform_security_oper:[12,15,21,22,23],period:6,permiss:[0,5],persist:9,personalauswei:[2,3],peter:2,pezorform_security_oper:21,photo:9,php:4,physic:[7,20],piec:14,pil:6,pin:[0,1,15,21,22],pipe:[1,6],pkc:6,pkg:4,pkg_config_path:4,pkgconfig:4,pki:22,place:[6,25,26,27,28],placeofbirth:6,plain:[12,15,21,22,23],platform:[0,1,4,5,6],pleas:[0,1,4,5,6],plist:6,plu:[25,26,27,28],plug:6,point:14,pointer:14,port:[4,6,7,17],posess:[15,22,23],possibl:[1,4,6],power:[7,17,19,21,23],powerdown:[7,17,19,20,21,23],powerup:[7,17,19,20,21,23],prefix:[1,4,6],prepend:[11,14,21],present:1,press:17,pretend:6,pretti:7,prettyprint_anyth:14,previou:[14,21],previous:[7,12,22,23],print:[1,4,5,6,7,17],print_ascii:7,privaci:2,privat:[6,12,15,21,22,23],probabl:[1,4,6],problem:6,process:[0,4],produc:17,product:[1,6],program:[2,6,7],project:[0,1,2,4,5,6],prompt:9,prop:[14,29],properti:[14,29],propertylist:6,proprietari:[1,6,14],protect:[0,6,12,15,21,22,23],protect_respons:[12,21,22,23],protect_result:[15,21,22,23],protocol:[0,6,7,17,21,22,23],prove:[15,22,23],provid:[6,7,12,22,23,25,26,27,28],pseudo:1,pseudorandom:11,publikationen:1,publish:6,puk:[15,21,22,23],purpos:[4,25,26,27,28],put:[14,21],putdata:[14,21],putdataencapsul:[14,21],putdataplain:[14,21],pwd:1,pwendland:0,pycrypto:6,pypi:6,pyreadlin:6,pyscard:[6,7],pythonwar:6,qes_pin:23,qrcode:7,qrencod:6,qrserver:7,quit:7,r_apdu:[7,29],rais:[14,21,25,26,27,28],random:[1,15,21,22],randomli:6,rapdu:[7,17],raw:[12,21,22,23],rdr_to_pc_datablock:1,read:[6,7,9,14,21,22],readabl:[22,25,26,27,28],readbinari:[14,21],readbinaryencapsul:[14,21],readbinaryplain:[14,21],readdatagroup:[7,9],reader0:6,reader1:6,reader2:6,reader:0,readernum:[7,17,20],readlin:6,readrecord:[14,21],readrecordencapsul:[14,21],readrecordplain:[14,21],real:[1,4,6,7,20],realiz:4,reason:[25,26,27,28],recalculate_length:16,receiv:[4,7,17,20],recent:1,recogn:7,reconnect:7,record:14,recordhandlingdecod:[14,21],recordidentifiersupport:[14,21],recordnumbersupport:[14,21],recordpoint:14,recordstructureef:14,recurs:[6,14],redlich:2,ref:14,refdataobj:14,referenc:[15,21,22,23],regard:[14,21],regexp:[25,26,27,28],regist:[4,6,7,25,26,27,28],regular:[25,26,27,28],relai:[0,2],relayo:[7,20],releas:[1,2,4,6],religiousartisticnam:6,remot:[0,2,4],remotesmartcardread:[0,5],remov:[12,14,21,22],render:[7,29],replac:[6,12,14,15,21,22,23],report:[1,4,6],repositori:[0,1,2,4,5,6],repres:29,represent:14,request:[2,6,7,14],requestedtl:[14,21],requir:[0,1,5,6,7,22],research:2,reset:[7,14,15,17,19,20,21,22,23],reset_retry_count:23,resetrecordpoint:14,residencepermit1:6,residencepermit2:6,resp_data:22,respect:7,respons:[0,1,4,6,7,9,12,14,15,17,20,21,22,23,29],respsons:17,rest:7,restart:6,restor:[12,15,21,22,23],restore_s:[15,21,22,23],result:[7,12,14,16,17,21,22,23,25,26,27,28],retri:[15,21,22],retriev:[15,21,22,23],revers:[6,7],rfid:4,rfu:[15,21,22,23],right:[15,21,22,23],root:6,round:[25,26,27,28],routin:6,rpc_type:6,rsa:[15,21,22,23],run:[0,1,4,5],runtest:[25,26,27,28],runtim:0,russello:2,sai:6,said:7,salt:11,sam:[7,9,12,14,15,17,21,22,23],same:[6,7,25,26,27,28],sampl:0,sar:2,save:6,scan:[0,5,7],scanner:5,scardcontrol:1,scardtransmit:1,schmidt:2,scienc:2,script:6,sdk:[0,5],search:[14,21],searchbinaryencapsul:[14,21],searchbinaryplain:[14,21],second:[14,21,25,26,27,28],secondsft:[14,21],secondsoftwar:[14,21],secret:[11,15,21,22,23],section:[4,7],secur:[1,2,6,7,12,15,17,21,22,23],security_environ:[12,15,21,22,23],see:[1,4,6,7,14,17,19,21,23],seed:22,seekabl:[7,17,21,23],seid:[12,15,21,22,23],select:[0,4,5,7,11,14,17,21,23],selectfil:[14,21],self:[7,25,26,27,28],send:[4,7,11,12,17,20,21,22],sendcommandapdu:7,sent:[4,7],seper:6,seq1:[25,26,27,28],seq2:[25,26,27,28],seq_typ:[25,26,27,28],sequenc:[11,22,25,26,27,28],sequenti:14,serial:[1,6],server_sock:7,servic:6,session:7,session_kei:11,set1:[25,26,27,28],set2:[25,26,27,28],set:[4,6,9,12,14,17,21,22,23,25,26,27,28],set_asym_algorithm:[15,21,22,23],set_mf:[15,21,22,23],setcard:9,setter:[15,21,22,23],settimeout:7,setup:[25,26,27,28],setupclass:[25,26,27,28],seutil:[7,8],sever:[1,4,6],sex:6,shall:[6,12,21,22,23],shell:6,shiguo:2,ship:[1,4,6],shortdescript:[25,26,27,28],shortfid:14,shortfidsupport:[14,21],should:[1,4,6,7,12,14,21,22,23,25,26,27,28],show:6,sicher:2,sicherheitsanalys:2,sig:17,sigint:7,sigkil:6,sign:[6,12,21,22,23],signal:[7,17],signalhandl:[7,17],signatur:[6,12,21,22,23],signfic:[25,26,27,28],signific:[25,26,27,28],simpl:[0,7,14,21],simpletlv:16,simpletlv_data:[14,21],simpletlv_pack:16,simpletlv_unpack:16,simpli:[6,7],simul:0,sinc:[1,6],sit:2,six:12,size:[11,14,21],skip:[25,26,27,28],skiptest:[25,26,27,28],sln:6,slot:6,sm_header:[12,21,22,23],smartcard:[2,5,6,7,14,17,20],smartcardfilesystem:[7,8],smartcardo:[7,17,19,20,21,23],smartcardsam:[7,8],smartcardsam_test:[7,8,24],smartcardservic:6,smartphon:[0,2,5],social:2,sock:7,sock_dgram:7,socket:[0,6,7,17],softwar:[4,5,6,7,14,17,21,23],solut:6,some:[1,2,7],someexcept:[25,26,27,28],someth:6,sourc:[0,1,5,7],sourceforg:[1,4,6,7],space:29,special:[1,5],specif:[7,15,21,22,23,25,26,27,28],specifi:[4,6,7,11,12,14,15,16,21,22,23,25,26,27,28],specifii:6,springer:2,spusbdatatyp:6,src:[0,1,4],ssc:[11,22],stabl:6,stai:4,standalon:6,standard:[1,4,6,7,22,25,26,27,28],standardmsg:[25,26,27,28],start:[1,4,6,14],startup:6,state:14,statu:[1,14,21,29],step:[6,23],still:[1,2,4,6],stop:[6,7,17],storag:[6,9],store:[12,15,21,22,23],store_s:[15,21,22,23],str:[7,29],straight:7,street:6,string1:11,string2:11,string:[1,4,6,7,11,12,14,15,16,17,21,23,25,26,27,28,29],stringtoint:29,strip:11,strip_pad:11,structur:[14,16],studio:[0,4,5,6],stuttgart:2,style:[25,26,27,28],subclass:[25,26,27,28],subdir:1,submodul:[0,1,6],subset:1,success:[15,21,22,23,25,26,27,28],successful:7,successfulli:6,sudo:[1,6],suffer:[25,26,27,28],suggest:[0,1,4,5,6],suitabl:11,sun:4,superset:[25,26,27,28],support:[1,3,4,6,9,11,12,21,23,25,26,27,28],sure:[6,7],surpress:17,sw1:[1,7,29],sw2:[1,7,29],swerror:13,swutil:[7,8],sym:12,symmetri:[25,26,27,28],syntax:6,sysconfdir:6,system:[1,2,4,5,6,7,15],system_profil:6,systemroot:6,szenario:2,t15:[17,21,23],tabl:[12,14,17,21,22,23],tag:[12,14,16,21,22,23],tagungsband:2,tai:[17,21,23],taj:[17,21,23],take:[14,15,21,22,23,25,26,27,28],taken:6,tar:1,tbi:[17,21,23],tbj:[17,21,23],tci:[17,21,23],tcj:[17,21,23],tck:[17,21,23],tcp:[6,14,21],tcp_port:6,tdi:[17,21,23],teardown:[25,26,27,28],teardownclass:[25,26,27,28],technik:2,technischerichtlinien:1,telecommun:2,templat:[7,12,14,21,22,23],term:6,termin:[0,4,12,15,21,22,23],test:[0,1,4,5,6,7,8],test_capdu:28,test_card_cr:25,test_counter_decr:27,test_external_authent:27,test_get_and_set_card:25,test_incorrect_pin:27,test_internal_authent:27,test_pad:26,test_rapdu:28,test_readdatagroup:25,test_security_environ:27,testcas:[25,26,27,28],testcryptoutil:26,tester:[6,19],testnpacardgener:25,testresult:[25,26,27,28],testsmartcardsam:27,testutil:28,text:[21,25,26,27,28],than:[0,1,4,5,6,25,26,27,28],the_except:[25,26,27,28],thehistor:[14,21],thei:[6,11,12,25,26,27,28],them:[0,17],themselv:2,therefor:9,thesi:2,thi:[1,4,5,6,7,9,11,12,14,15,17,19,20,21,22,23,25,26,27,28,29],thing:[7,14],third:[17,21,23],those:[7,25,26,27,28],through:[0,1,6],time:[1,4,6,7],titl:4,tlv:[12,14,16,21,22,23],tlv_data:16,tlv_find_tag:16,tlv_unpack:16,tlvutil:[7,8],tmp:[1,4],to_str:[12,23],togeth:[0,4],tool:[1,4,6],toolset:6,tr03119:1,traceback:17,tracker:[0,1,4,5,6],tradit:[5,6],transmiss:[17,21,23],transmit:[0,1,4,7],transpar:14,transparentstructureef:[14,21],tri:6,trust:[1,6,12,21,22],tupl:[14,16,21,25,26,27,28],tuple1:[25,26,27,28],tuple2:[25,26,27,28],two:[14,21,25,26,27,28],type:[2,6],typeobj:[25,26,27,28],ubuntu:[1,4,6],udc:1,ulrich:2,umbrella:2,umdf:6,umfeld:2,unam:1,und:2,under:[15,21,22,23],understood:15,unequ:[25,26,27,28],unexpect:[25,26,27,28],unexpected_regexp:[25,26,27,28],unfamiliar:[1,4,6],unit:[14,21],unittest:[25,26,27,28],univers:1,unknown:[7,14,21],unless:[25,26,27,28],unlik:[25,26,27,28],unord:[25,26,27,28],unpack:16,unplug:6,unprotect:[12,15,21,22,23],unprotected_result:[15,21,22,23],until:[15,21,22],unverifi:6,updat:[0,1,6,14,21],updatebinari:[14,21],updatebinaryencapsul:[14,21],updatebinaryplain:[14,21],updaterecord:[14,21],updaterecordencapsul:[14,21],updaterecordplain:[14,21],url:[2,6],usabl:[1,2],user:[6,9,15,17,21,22],usr:[1,6],usual:[1,6,7,14,25,26,27,28],utf:6,util:[6,7,8],utils_test:[7,8,24],valid:[6,7,15,21,22,23,25,26,27,28],valu:[4,6,12,14,15,17,21,22,23,25,26,27,28,29],variabl:14,variou:[1,2,11,12,21,22,23],vector:11,vendor:[1,6],vendor_ifd_typ:6,vendor_nam:6,verbos:[1,4,6],verif:[0,1,12,21,22,23],verifi:[0,1,6,12,15,21,22,23],verify_certif:[12,21,22,23],verify_cryptographic_checksum:[12,21,22,23],verify_digital_signatur:[12,21,22,23],verlag:2,version:[0,1,4,5,6,15,21,22,23],via:[0,1,4,5,6,7,11,15,17,20],vicc:[4,6,7,17],virtual:0,virtualicc:[7,17],virtualsmartcard:[6,7],visual:[4,6],vletoux:0,volum:2,vpcd:[4,5],vsmartcard:[0,1,2,4,5,6],w64:4,wai:6,wait:[4,6],waldmann:2,walk:14,want:[0,1,2,7],warm:[17,19],warn:[6,7],warn_noinfo63:21,wdk:6,web:2,welcom:[0,1],well:6,what:[4,7,12,14,21,22],whatev:29,when:[4,5,6,7,17,25,26,27,28,29],where:[1,4,5,6,7,14],wherea:1,whether:[12,15,17,21,22,23,25,26,27,28],which:[0,4,6,7,11,12,14,17,21,25,26,27,28,29],wiki:1,win32:6,window:[1,4,5],winscard:4,wissen:2,with_mark:16,without:[0,1,6,11,25,26,27,28,29],wix:6,wixtoolset:6,wolf:2,word:29,work:[1,4,6,7],workaround:7,workshop:2,world:0,write:[14,21],writeand:14,writebinari:[14,21],writebinaryencapsul:[14,21],writebinaryplain:[14,21],writeor:14,writerecord:[14,21],written:[1,4],wudfhost:6,www:[0,1,4,6],x00:11,x64:6,x82:6,xjf:1,xml:[4,6],xor:14,xxx:7,yield:6,ykneo:0,you:[0,1,2,4,5,6,7,14,21,25,26,27,28],your:[0,1,4,5,6,7],yourself:[2,7],yubico:0,zero:[15,21,22,25,26,27,28],zip:6,zone:22,zum:2,zur:2},titles:["Android Smart Card Emulator","USB CCID Emulator","Welcome to the Virtual Smart Card Architecture documentation!","nPA Smart Card Library","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","cryptoflex Module","ePass Module","nPA Module","tests Package","CardGenerator_test Module","CryptoUtils_test Module","SmartcardSAM_test Module","utils_test Module","utils Module"],titleterms:{android:[0,4,5],architectur:2,build:6,card:[0,1,2,3,4,5,6,7,18],cardgener:9,cardgenerator_test:25,ccid:1,compliant:1,configur:6,constantdefinit:10,contact:[0,5],contactless:4,creat:7,cryptoflex:21,cryptoutil:11,cryptoutils_test:26,document:[2,7],download:[0,1,2,4,5,6],emul:[0,1,4,6],epass:22,exampl:7,gadgetf:1,handlertest:19,hint:[1,4],implement:7,instal:[0,1,4,5,6],interfac:4,iso:7,less:[0,5],libnfc:4,librari:3,like:7,linux:[1,4,6],mac:6,middlewar:4,modul:[9,10,11,12,13,14,15,16,17,19,20,21,22,23,25,26,27,28,29],note:[0,1,4,5,6],npa:[3,23],opensc:1,other:7,packag:[8,18,24],phone:[0,5],python:6,question:[0,1,4,5,6],reader:[1,5],refer:[0,1,2,4,5,6],relai:[4,20],remot:5,run:6,seutil:12,similar:[1,4,6],smart:[0,1,2,3,4,5,6,7],smartcardfilesystem:14,smartcardsam:15,smartcardsam_test:27,swutil:13,test:24,tlvutil:16,type:7,unix:[1,4,6],usag:[1,4],usb:1,util:29,utils_test:28,virtual:[2,6,7],virtualsmartcard:[8,17],vpcd:6,vpicc:6,welcom:2,window:6,written:6}}) \ No newline at end of file +Search.setIndex({envversion:46,filenames:["ACardEmulator/README","ccid/README","index","npa/README","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.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"],objects:{"virtualsmartcard.CardGenerator":{CardGenerator:[9,2,1,""]},"virtualsmartcard.CardGenerator.CardGenerator":{"_CardGenerator__generate_cryptoflex":[9,1,1,""],"_CardGenerator__generate_ePass":[9,1,1,""],"_CardGenerator__generate_iso_card":[9,1,1,""],"_CardGenerator__generate_nPA":[9,1,1,""],generateCard:[9,1,1,""],getCard:[9,1,1,""],readDatagroups:[9,1,1,""],setCard:[9,1,1,""]},"virtualsmartcard.CryptoUtils":{"_makesalt":[11,5,1,""],append_padding:[11,5,1,""],calculate_MAC:[11,5,1,""],cipher:[11,5,1,""],crypto_checksum:[11,5,1,""],decrypt:[11,5,1,""],encrypt:[11,5,1,""],get_cipher:[11,5,1,""],get_cipher_blocklen:[11,5,1,""],get_cipher_keylen:[11,5,1,""],hash:[11,5,1,""],operation_on_string:[11,5,1,""],strip_padding:[11,5,1,""]},"virtualsmartcard.SEutils":{ControlReferenceTemplate:[12,2,1,""],Security_Environment:[12,2,1,""]},"virtualsmartcard.SEutils.ControlReferenceTemplate":{"_ControlReferenceTemplate__replace_tag":[12,1,1,""],"_ControlReferenceTemplate__set_algo":[12,1,1,""],"_ControlReferenceTemplate__set_iv":[12,1,1,""],"_ControlReferenceTemplate__set_key":[12,1,1,""],parse_SE_config:[12,1,1,""],to_string:[12,1,1,""]},"virtualsmartcard.SEutils.Security_Environment":{"_set_SE":[12,1,1,""],compute_cryptographic_checksum:[12,1,1,""],compute_digital_signature:[12,1,1,""],decipher:[12,1,1,""],encipher:[12,1,1,""],generate_public_key_pair:[12,1,1,""],hash:[12,1,1,""],manage_security_environment:[12,1,1,""],parse_SM_CAPDU:[12,1,1,""],perform_security_operation:[12,1,1,""],protect_response:[12,1,1,""],verify_certificate:[12,1,1,""],verify_cryptographic_checksum:[12,1,1,""],verify_digital_signature:[12,1,1,""]},"virtualsmartcard.SWutils":{SwError:[13,6,1,""]},"virtualsmartcard.SWutils.SwError":{args:[13,4,1,""],message:[13,4,1,""]},"virtualsmartcard.SmartcardFilesystem":{DF:[14,2,1,""],EF:[14,2,1,""],File:[14,2,1,""],MF:[14,2,1,""],Record:[14,2,1,""],RecordStructureEF:[14,2,1,""],TransparentStructureEF:[14,2,1,""],get_indexes:[14,5,1,""],getfile_byrefdataobj:[14,5,1,""],isEqual:[14,5,1,""],make_property:[14,5,1,""],prettyprint_anything:[14,5,1,""],walk:[14,5,1,""],write:[14,5,1,""]},"virtualsmartcard.SmartcardFilesystem.DF":{append:[14,1,1,""],appendrecord:[14,1,1,""],bertlv_data:[14,4,1,""],content:[14,4,1,""],data:[14,4,1,""],decrypt:[14,1,1,""],dfname:[14,4,1,""],encrypt:[14,1,1,""],erasebinary:[14,1,1,""],fid:[14,4,1,""],filedescriptor:[14,4,1,""],getdata:[14,1,1,""],getpath:[14,1,1,""],lifecycle:[14,4,1,""],parent:[14,4,1,""],putdata:[14,1,1,""],readbinary:[14,1,1,""],readrecord:[14,1,1,""],remove:[14,1,1,""],select:[14,1,1,""],simpletlv_data:[14,4,1,""],updatebinary:[14,1,1,""],updaterecord:[14,1,1,""],writebinary:[14,1,1,""],writerecord:[14,1,1,""]},"virtualsmartcard.SmartcardFilesystem.EF":{appendrecord:[14,1,1,""],bertlv_data:[14,4,1,""],datacoding:[14,4,1,""],decrypt:[14,1,1,""],encrypt:[14,1,1,""],erasebinary:[14,1,1,""],fid:[14,4,1,""],filedescriptor:[14,4,1,""],getdata:[14,1,1,""],getpath:[14,1,1,""],lifecycle:[14,4,1,""],parent:[14,4,1,""],putdata:[14,1,1,""],readbinary:[14,1,1,""],readrecord:[14,1,1,""],select:[14,1,1,""],shortfid:[14,4,1,""],simpletlv_data:[14,4,1,""],updatebinary:[14,1,1,""],updaterecord:[14,1,1,""],writebinary:[14,1,1,""],writerecord:[14,1,1,""]},"virtualsmartcard.SmartcardFilesystem.File":{appendrecord:[14,1,1,""],bertlv_data:[14,4,1,""],decrypt:[14,1,1,""],encrypt:[14,1,1,""],erasebinary:[14,1,1,""],fid:[14,4,1,""],filedescriptor:[14,4,1,""],getdata:[14,1,1,""],getpath:[14,1,1,""],lifecycle:[14,4,1,""],parent:[14,4,1,""],putdata:[14,1,1,""],readbinary:[14,1,1,""],readrecord:[14,1,1,""],select:[14,1,1,""],simpletlv_data:[14,4,1,""],updatebinary:[14,1,1,""],updaterecord:[14,1,1,""],writebinary:[14,1,1,""],writerecord:[14,1,1,""]},"virtualsmartcard.SmartcardFilesystem.MF":{"_selectFile":[14,1,1,""],append:[14,1,1,""],appendRecord:[14,1,1,""],appendrecord:[14,1,1,""],bertlv_data:[14,4,1,""],content:[14,4,1,""],create:[14,3,1,""],createFile:[14,1,1,""],current:[14,4,1,""],currentDF:[14,1,1,""],currentEF:[14,1,1,""],data:[14,4,1,""],dataObjectHandlingDecodeEncapsulated:[14,1,1,""],dataObjectHandlingDecodePlain:[14,1,1,""],dataUnitsDecodeEncapsulated:[14,1,1,""],dataUnitsDecodePlain:[14,1,1,""],decrypt:[14,1,1,""],deleteFile:[14,1,1,""],dfname:[14,4,1,""],encodeFileControlParameter:[14,3,1,""],encrypt:[14,1,1,""],eraseBinaryEncapsulated:[14,1,1,""],eraseBinaryPlain:[14,1,1,""],eraseRecord:[14,1,1,""],erasebinary:[14,1,1,""],fid:[14,4,1,""],filedescriptor:[14,4,1,""],firstSFT:[14,4,1,""],getDataEncapsulated:[14,1,1,""],getDataPlain:[14,1,1,""],getdata:[14,1,1,""],getpath:[14,1,1,""],lifecycle:[14,4,1,""],makeFirstSoftwareFunctionTable:[14,3,1,""],makeSecondSoftwareFunctionTable:[14,3,1,""],parent:[14,4,1,""],putDataEncapsulated:[14,1,1,""],putDataPlain:[14,1,1,""],putdata:[14,1,1,""],readBinaryEncapsulated:[14,1,1,""],readBinaryPlain:[14,1,1,""],readRecordEncapsulated:[14,1,1,""],readRecordPlain:[14,1,1,""],readbinary:[14,1,1,""],readrecord:[14,1,1,""],recordHandlingDecode:[14,1,1,""],remove:[14,1,1,""],searchBinaryEncapsulated:[14,1,1,""],searchBinaryPlain:[14,1,1,""],secondSFT:[14,4,1,""],select:[14,1,1,""],selectFile:[14,1,1,""],simpletlv_data:[14,4,1,""],updateBinaryEncapsulated:[14,1,1,""],updateBinaryPlain:[14,1,1,""],updateRecordEncapsulated:[14,1,1,""],updateRecordPlain:[14,1,1,""],updatebinary:[14,1,1,""],updaterecord:[14,1,1,""],writeBinaryEncapsulated:[14,1,1,""],writeBinaryPlain:[14,1,1,""],writeRecord:[14,1,1,""],writebinary:[14,1,1,""],writerecord:[14,1,1,""]},"virtualsmartcard.SmartcardFilesystem.Record":{data:[14,4,1,""],identifier:[14,4,1,""]},"virtualsmartcard.SmartcardFilesystem.RecordStructureEF":{"_RecordStructureEF__getRecords":[14,1,1,""],"_RecordStructureEF__getRecordsByIdentifier":[14,1,1,""],"_RecordStructureEF__getRecordsByNumber":[14,1,1,""],appendrecord:[14,1,1,""],bertlv_data:[14,4,1,""],datacoding:[14,4,1,""],decrypt:[14,1,1,""],encrypt:[14,1,1,""],erasebinary:[14,1,1,""],eraserecord:[14,1,1,""],fid:[14,4,1,""],filedescriptor:[14,4,1,""],getdata:[14,1,1,""],getpath:[14,1,1,""],hasFixedRecordSize:[14,1,1,""],hasSimpleTlv:[14,1,1,""],isCyclic:[14,1,1,""],lifecycle:[14,4,1,""],maxrecordsize:[14,4,1,""],parent:[14,4,1,""],putdata:[14,1,1,""],readbinary:[14,1,1,""],readrecord:[14,1,1,""],recordpointer:[14,4,1,""],records:[14,4,1,""],resetRecordPointer:[14,1,1,""],select:[14,1,1,""],shortfid:[14,4,1,""],simpletlv_data:[14,4,1,""],updatebinary:[14,1,1,""],updaterecord:[14,1,1,""],writebinary:[14,1,1,""],writerecord:[14,1,1,""]},"virtualsmartcard.SmartcardFilesystem.TransparentStructureEF":{appendrecord:[14,1,1,""],bertlv_data:[14,4,1,""],data:[14,4,1,""],datacoding:[14,4,1,""],decrypt:[14,1,1,""],encrypt:[14,1,1,""],erasebinary:[14,1,1,""],fid:[14,4,1,""],filedescriptor:[14,4,1,""],getdata:[14,1,1,""],getpath:[14,1,1,""],lifecycle:[14,4,1,""],parent:[14,4,1,""],putdata:[14,1,1,""],readbinary:[14,1,1,""],readrecord:[14,1,1,""],select:[14,1,1,""],shortfid:[14,4,1,""],simpletlv_data:[14,4,1,""],updatebinary:[14,1,1,""],updaterecord:[14,1,1,""],writebinary:[14,1,1,""],writerecord:[14,1,1,""]},"virtualsmartcard.SmartcardSAM":{SAM:[15,2,1,""],get_referenced_cipher:[15,5,1,""]},"virtualsmartcard.SmartcardSAM.SAM":{"_get_referenced_key":[15,1,1,""],FSdecrypt:[15,1,1,""],FSencrypt:[15,1,1,""],change_reference_data:[15,1,1,""],erase_SE:[15,1,1,""],external_authenticate:[15,1,1,""],generate_public_key_pair:[15,1,1,""],get_card_number:[15,1,1,""],get_challenge:[15,1,1,""],internal_authenticate:[15,1,1,""],manage_security_environment:[15,1,1,""],mutual_authenticate:[15,1,1,""],parse_SM_CAPDU:[15,1,1,""],perform_security_operation:[15,1,1,""],protect_result:[15,1,1,""],restore_SE:[15,1,1,""],set_MF:[15,1,1,""],set_asym_algorithm:[15,1,1,""],store_SE:[15,1,1,""],verify:[15,1,1,""]},"virtualsmartcard.TLVutils":{bertlv_pack:[16,5,1,""],bertlv_unpack:[16,5,1,""],decodeDiscretionaryDataObjects:[16,5,1,""],decodeExtendedHeaderList:[16,5,1,""],decodeHeaderList:[16,5,1,""],decodeOffsetDataObjects:[16,5,1,""],decodeTagList:[16,5,1,""],encodeDataOffsetObjects:[16,5,1,""],encodeDiscretionaryDataObjects:[16,5,1,""],encodebertlvDatalist:[16,5,1,""],pack:[16,5,1,""],simpletlv_pack:[16,5,1,""],simpletlv_unpack:[16,5,1,""],tlv_find_tag:[16,5,1,""],tlv_find_tags:[16,5,1,""],tlv_unpack:[16,5,1,""],unpack:[16,5,1,""]},"virtualsmartcard.VirtualSmartcard":{Iso7816OS:[17,2,1,""],SmartcardOS:[17,2,1,""],VirtualICC:[17,2,1,""]},"virtualsmartcard.VirtualSmartcard.Iso7816OS":{SAM:[17,4,1,""],execute:[17,1,1,""],formatResult:[17,1,1,""],getATR:[17,1,1,""],getResponse:[17,1,1,""],makeATR:[17,3,1,""],makeThirdSoftwareFunctionTable:[17,3,1,""],mf:[17,4,1,""],powerDown:[17,1,1,""],powerUp:[17,1,1,""],reset:[17,1,1,""],seekable:[17,3,1,""]},"virtualsmartcard.VirtualSmartcard.SmartcardOS":{execute:[17,1,1,""],getATR:[17,1,1,""],powerDown:[17,1,1,""],powerUp:[17,1,1,""],reset:[17,1,1,""]},"virtualsmartcard.VirtualSmartcard.VirtualICC":{"_VirtualICC__recvFromVPICC":[17,1,1,""],"_VirtualICC__sendToVPICC":[17,1,1,""],connectToPort:[17,3,1,""],openPort:[17,3,1,""],run:[17,1,1,""],signalHandler:[17,1,1,""],stop:[17,1,1,""]},"virtualsmartcard.cards":{HandlerTest:[19,0,0,"-"],Relay:[20,0,0,"-"],cryptoflex:[21,0,0,"-"],ePass:[22,0,0,"-"],nPA:[23,0,0,"-"]},"virtualsmartcard.cards.HandlerTest":{HandlerTestOS:[19,2,1,""]},"virtualsmartcard.cards.HandlerTest.HandlerTestOS":{"_HandlerTestOS__output_from_le":[19,1,1,""],execute:[19,1,1,""],getATR:[19,1,1,""],powerDown:[19,1,1,""],powerUp:[19,1,1,""],reset:[19,1,1,""]},"virtualsmartcard.cards.Relay":{RelayOS:[20,2,1,""]},"virtualsmartcard.cards.Relay.RelayOS":{cleanup:[20,1,1,""],execute:[20,1,1,""],getATR:[20,1,1,""],powerDown:[20,1,1,""],powerUp:[20,1,1,""],reset:[20,1,1,""]},"virtualsmartcard.cards.cryptoflex":{CryptoflexMF:[21,2,1,""],CryptoflexOS:[21,2,1,""],CryptoflexSAM:[21,2,1,""],CryptoflexSE:[21,2,1,""]},"virtualsmartcard.cards.cryptoflex.CryptoflexMF":{"_selectFile":[21,1,1,""],append:[21,1,1,""],appendRecord:[21,1,1,""],appendrecord:[21,1,1,""],bertlv_data:[21,4,1,""],content:[21,4,1,""],create:[21,3,1,""],createFile:[21,1,1,""],current:[21,4,1,""],currentDF:[21,1,1,""],currentEF:[21,1,1,""],data:[21,4,1,""],dataObjectHandlingDecodeEncapsulated:[21,1,1,""],dataObjectHandlingDecodePlain:[21,1,1,""],dataUnitsDecodeEncapsulated:[21,1,1,""],dataUnitsDecodePlain:[21,1,1,""],decrypt:[21,1,1,""],deleteFile:[21,1,1,""],dfname:[21,4,1,""],encodeFileControlParameter:[21,1,1,""],encrypt:[21,1,1,""],eraseBinaryEncapsulated:[21,1,1,""],eraseBinaryPlain:[21,1,1,""],eraseRecord:[21,1,1,""],erasebinary:[21,1,1,""],fid:[21,4,1,""],filedescriptor:[21,4,1,""],firstSFT:[21,4,1,""],getDataEncapsulated:[21,1,1,""],getDataPlain:[21,1,1,""],getdata:[21,1,1,""],getpath:[21,1,1,""],lifecycle:[21,4,1,""],makeFirstSoftwareFunctionTable:[21,1,1,""],makeSecondSoftwareFunctionTable:[21,1,1,""],parent:[21,4,1,""],putDataEncapsulated:[21,1,1,""],putDataPlain:[21,1,1,""],putdata:[21,1,1,""],readBinaryEncapsulated:[21,1,1,""],readBinaryPlain:[21,1,1,""],readRecordEncapsulated:[21,1,1,""],readRecordPlain:[21,1,1,""],readbinary:[21,1,1,""],readrecord:[21,1,1,""],recordHandlingDecode:[21,1,1,""],remove:[21,1,1,""],searchBinaryEncapsulated:[21,1,1,""],searchBinaryPlain:[21,1,1,""],secondSFT:[21,4,1,""],select:[21,1,1,""],selectFile:[21,1,1,""],simpletlv_data:[21,4,1,""],updateBinaryEncapsulated:[21,1,1,""],updateBinaryPlain:[21,1,1,""],updateRecordEncapsulated:[21,1,1,""],updateRecordPlain:[21,1,1,""],updatebinary:[21,1,1,""],updaterecord:[21,1,1,""],writeBinaryEncapsulated:[21,1,1,""],writeBinaryPlain:[21,1,1,""],writeRecord:[21,1,1,""],writebinary:[21,1,1,""],writerecord:[21,1,1,""]},"virtualsmartcard.cards.cryptoflex.CryptoflexOS":{SAM:[21,4,1,""],execute:[21,1,1,""],formatResult:[21,1,1,""],getATR:[21,1,1,""],getResponse:[21,1,1,""],makeATR:[21,1,1,""],makeThirdSoftwareFunctionTable:[21,1,1,""],mf:[21,4,1,""],powerDown:[21,1,1,""],powerUp:[21,1,1,""],reset:[21,1,1,""],seekable:[21,1,1,""]},"virtualsmartcard.cards.cryptoflex.CryptoflexSAM":{"_get_referenced_key":[21,1,1,""],FSdecrypt:[21,1,1,""],FSencrypt:[21,1,1,""],change_reference_data:[21,1,1,""],erase_SE:[21,1,1,""],external_authenticate:[21,1,1,""],generate_public_key_pair:[21,1,1,""],get_card_number:[21,1,1,""],get_challenge:[21,1,1,""],internal_authenticate:[21,1,1,""],manage_security_environment:[21,1,1,""],mutual_authenticate:[21,1,1,""],parse_SM_CAPDU:[21,1,1,""],perform_security_operation:[21,1,1,""],pezorform_security_operation:[21,1,1,""],protect_result:[21,1,1,""],restore_SE:[21,1,1,""],set_MF:[21,1,1,""],set_asym_algorithm:[21,1,1,""],store_SE:[21,1,1,""],verify:[21,1,1,""]},"virtualsmartcard.cards.cryptoflex.CryptoflexSE":{"_set_SE":[21,1,1,""],compute_cryptographic_checksum:[21,1,1,""],compute_digital_signature:[21,1,1,""],decipher:[21,1,1,""],encipher:[21,1,1,""],generate_public_key_pair:[21,1,1,""],hash:[21,1,1,""],manage_security_environment:[21,1,1,""],parse_SM_CAPDU:[21,1,1,""],perform_security_operation:[21,1,1,""],protect_response:[21,1,1,""],verify_certificate:[21,1,1,""],verify_cryptographic_checksum:[21,1,1,""],verify_digital_signature:[21,1,1,""]},"virtualsmartcard.cards.ePass":{PassportSAM:[22,2,1,""],ePass_SE:[22,2,1,""]},"virtualsmartcard.cards.ePass.PassportSAM":{"_PassportSAM__computeKeys":[22,1,1,""],"_get_referenced_key":[22,1,1,""],FSdecrypt:[22,1,1,""],FSencrypt:[22,1,1,""],change_reference_data:[22,1,1,""],derive_key:[22,3,1,""],erase_SE:[22,1,1,""],external_authenticate:[22,1,1,""],generate_public_key_pair:[22,1,1,""],get_card_number:[22,1,1,""],get_challenge:[22,1,1,""],internal_authenticate:[22,1,1,""],manage_security_environment:[22,1,1,""],mutual_authenticate:[22,1,1,""],parse_SM_CAPDU:[22,1,1,""],perform_security_operation:[22,1,1,""],protect_result:[22,1,1,""],restore_SE:[22,1,1,""],set_MF:[22,1,1,""],set_asym_algorithm:[22,1,1,""],store_SE:[22,1,1,""],verify:[22,1,1,""]},"virtualsmartcard.cards.ePass.ePass_SE":{"_set_SE":[22,1,1,""],compute_cryptographic_checksum:[22,1,1,""],compute_digital_signature:[22,1,1,""],decipher:[22,1,1,""],encipher:[22,1,1,""],generate_public_key_pair:[22,1,1,""],hash:[22,1,1,""],manage_security_environment:[22,1,1,""],parse_SM_CAPDU:[22,1,1,""],perform_security_operation:[22,1,1,""],protect_response:[22,1,1,""],verify_certificate:[22,1,1,""],verify_cryptographic_checksum:[22,1,1,""],verify_digital_signature:[22,1,1,""]},"virtualsmartcard.cards.nPA":{NPAOS:[23,2,1,""],nPA_AT_CRT:[23,2,1,""],nPA_SAM:[23,2,1,""],nPA_SE:[23,2,1,""]},"virtualsmartcard.cards.nPA.NPAOS":{SAM:[23,4,1,""],execute:[23,1,1,""],formatResult:[23,1,1,""],getATR:[23,1,1,""],getResponse:[23,1,1,""],makeATR:[23,1,1,""],makeThirdSoftwareFunctionTable:[23,1,1,""],mf:[23,4,1,""],powerDown:[23,1,1,""],powerUp:[23,1,1,""],reset:[23,1,1,""],seekable:[23,1,1,""]},"virtualsmartcard.cards.nPA.nPA_AT_CRT":{"_ControlReferenceTemplate__replace_tag":[23,1,1,""],"_ControlReferenceTemplate__set_algo":[23,1,1,""],"_ControlReferenceTemplate__set_iv":[23,1,1,""],"_ControlReferenceTemplate__set_key":[23,1,1,""],PACE_CAN:[23,4,1,""],PACE_MRZ:[23,4,1,""],PACE_PIN:[23,4,1,""],PACE_PUK:[23,4,1,""],keyref_is_can:[23,1,1,""],keyref_is_mrz:[23,1,1,""],keyref_is_pin:[23,1,1,""],keyref_is_puk:[23,1,1,""],parse_SE_config:[23,1,1,""],to_string:[23,1,1,""]},"virtualsmartcard.cards.nPA.nPA_SAM":{"_get_referenced_key":[23,1,1,""],FSdecrypt:[23,1,1,""],FSencrypt:[23,1,1,""],change_reference_data:[23,1,1,""],erase_SE:[23,1,1,""],external_authenticate:[23,1,1,""],general_authenticate:[23,1,1,""],generate_public_key_pair:[23,1,1,""],get_card_number:[23,1,1,""],get_challenge:[23,1,1,""],internal_authenticate:[23,1,1,""],manage_security_environment:[23,1,1,""],mutual_authenticate:[23,1,1,""],parse_SM_CAPDU:[23,1,1,""],perform_security_operation:[23,1,1,""],protect_result:[23,1,1,""],reset_retry_counter:[23,1,1,""],restore_SE:[23,1,1,""],set_MF:[23,1,1,""],set_asym_algorithm:[23,1,1,""],store_SE:[23,1,1,""],verify:[23,1,1,""]},"virtualsmartcard.cards.nPA.nPA_SE":{"_nPA_SE__eac_ca":[23,1,1,""],"_nPA_SE__eac_pace_step1":[23,1,1,""],"_nPA_SE__eac_pace_step2":[23,1,1,""],"_nPA_SE__eac_pace_step3":[23,1,1,""],"_nPA_SE__eac_pace_step4":[23,1,1,""],"_nPA_SE__pack_general_authenticate":[23,3,1,""],"_nPA_SE__unpack_general_authenticate":[23,3,1,""],"_set_SE":[23,1,1,""],compute_cryptographic_checksum:[23,1,1,""],compute_digital_signature:[23,1,1,""],decipher:[23,1,1,""],eac_step:[23,4,1,""],encipher:[23,1,1,""],external_authenticate:[23,1,1,""],general_authenticate:[23,1,1,""],generate_public_key_pair:[23,1,1,""],hash:[23,1,1,""],manage_security_environment:[23,1,1,""],parse_SM_CAPDU:[23,1,1,""],perform_security_operation:[23,1,1,""],protect_response:[23,1,1,""],verify_certificate:[23,1,1,""],verify_cryptographic_checksum:[23,1,1,""],verify_digital_signature:[23,1,1,""]},"virtualsmartcard.tests":{CardGenerator_test:[25,0,0,"-"],CryptoUtils_test:[26,0,0,"-"],SmartcardSAM_test:[27,0,0,"-"],utils_test:[28,0,0,"-"]},"virtualsmartcard.tests.CardGenerator_test":{CryptoflexGeneratorTest:[25,2,1,""],ISO7816GeneratorTest:[25,2,1,""],TestNPACardGenerator:[25,2,1,""]},"virtualsmartcard.tests.CardGenerator_test.CryptoflexGeneratorTest":{"_addSkip":[25,1,1,""],"_baseAssertEqual":[25,1,1,""],"_classSetupFailed":[25,4,1,""],"_deprecate":[25,1,1,""],"_diffThreshold":[25,4,1,""],"_formatMessage":[25,1,1,""],"_getAssertEqualityFunc":[25,1,1,""],"_truncateMessage":[25,1,1,""],addCleanup:[25,1,1,""],addTypeEqualityFunc:[25,1,1,""],assertAlmostEqual:[25,1,1,""],assertAlmostEquals:[25,1,1,""],assertDictContainsSubset:[25,1,1,""],assertDictEqual:[25,1,1,""],assertEqual:[25,1,1,""],assertEquals:[25,1,1,""],assertFalse:[25,1,1,""],assertGreater:[25,1,1,""],assertGreaterEqual:[25,1,1,""],assertIn:[25,1,1,""],assertIs:[25,1,1,""],assertIsInstance:[25,1,1,""],assertIsNone:[25,1,1,""],assertIsNot:[25,1,1,""],assertIsNotNone:[25,1,1,""],assertItemsEqual:[25,1,1,""],assertLess:[25,1,1,""],assertLessEqual:[25,1,1,""],assertListEqual:[25,1,1,""],assertMultiLineEqual:[25,1,1,""],assertNotAlmostEqual:[25,1,1,""],assertNotAlmostEquals:[25,1,1,""],assertNotEqual:[25,1,1,""],assertNotEquals:[25,1,1,""],assertNotIn:[25,1,1,""],assertNotIsInstance:[25,1,1,""],assertNotRegexpMatches:[25,1,1,""],assertRaises:[25,1,1,""],assertRaisesRegexp:[25,1,1,""],assertRegexpMatches:[25,1,1,""],assertSequenceEqual:[25,1,1,""],assertSetEqual:[25,1,1,""],assertTrue:[25,1,1,""],assertTupleEqual:[25,1,1,""],assert_:[25,1,1,""],card_type:[25,4,1,""],countTestCases:[25,1,1,""],debug:[25,1,1,""],defaultTestResult:[25,1,1,""],doCleanups:[25,1,1,""],fail:[25,1,1,""],failIf:[25,1,1,""],failIfAlmostEqual:[25,1,1,""],failIfEqual:[25,1,1,""],failUnless:[25,1,1,""],failUnlessAlmostEqual:[25,1,1,""],failUnlessEqual:[25,1,1,""],failUnlessRaises:[25,1,1,""],failureException:[25,4,1,""],id:[25,1,1,""],longMessage:[25,4,1,""],maxDiff:[25,4,1,""],run:[25,1,1,""],setUp:[25,1,1,""],setUpClass:[25,1,1,""],shortDescription:[25,1,1,""],skipTest:[25,1,1,""],tearDown:[25,1,1,""],tearDownClass:[25,1,1,""],test_card_creation:[25,1,1,""],test_get_and_set_card:[25,1,1,""]},"virtualsmartcard.tests.CardGenerator_test.ISO7816GeneratorTest":{"_addSkip":[25,1,1,""],"_baseAssertEqual":[25,1,1,""],"_classSetupFailed":[25,4,1,""],"_deprecate":[25,1,1,""],"_diffThreshold":[25,4,1,""],"_formatMessage":[25,1,1,""],"_getAssertEqualityFunc":[25,1,1,""],"_truncateMessage":[25,1,1,""],addCleanup:[25,1,1,""],addTypeEqualityFunc:[25,1,1,""],assertAlmostEqual:[25,1,1,""],assertAlmostEquals:[25,1,1,""],assertDictContainsSubset:[25,1,1,""],assertDictEqual:[25,1,1,""],assertEqual:[25,1,1,""],assertEquals:[25,1,1,""],assertFalse:[25,1,1,""],assertGreater:[25,1,1,""],assertGreaterEqual:[25,1,1,""],assertIn:[25,1,1,""],assertIs:[25,1,1,""],assertIsInstance:[25,1,1,""],assertIsNone:[25,1,1,""],assertIsNot:[25,1,1,""],assertIsNotNone:[25,1,1,""],assertItemsEqual:[25,1,1,""],assertLess:[25,1,1,""],assertLessEqual:[25,1,1,""],assertListEqual:[25,1,1,""],assertMultiLineEqual:[25,1,1,""],assertNotAlmostEqual:[25,1,1,""],assertNotAlmostEquals:[25,1,1,""],assertNotEqual:[25,1,1,""],assertNotEquals:[25,1,1,""],assertNotIn:[25,1,1,""],assertNotIsInstance:[25,1,1,""],assertNotRegexpMatches:[25,1,1,""],assertRaises:[25,1,1,""],assertRaisesRegexp:[25,1,1,""],assertRegexpMatches:[25,1,1,""],assertSequenceEqual:[25,1,1,""],assertSetEqual:[25,1,1,""],assertTrue:[25,1,1,""],assertTupleEqual:[25,1,1,""],assert_:[25,1,1,""],card_type:[25,4,1,""],countTestCases:[25,1,1,""],debug:[25,1,1,""],defaultTestResult:[25,1,1,""],doCleanups:[25,1,1,""],fail:[25,1,1,""],failIf:[25,1,1,""],failIfAlmostEqual:[25,1,1,""],failIfEqual:[25,1,1,""],failUnless:[25,1,1,""],failUnlessAlmostEqual:[25,1,1,""],failUnlessEqual:[25,1,1,""],failUnlessRaises:[25,1,1,""],failureException:[25,4,1,""],id:[25,1,1,""],longMessage:[25,4,1,""],maxDiff:[25,4,1,""],run:[25,1,1,""],setUp:[25,1,1,""],setUpClass:[25,1,1,""],shortDescription:[25,1,1,""],skipTest:[25,1,1,""],tearDown:[25,1,1,""],tearDownClass:[25,1,1,""],test_card_creation:[25,1,1,""],test_get_and_set_card:[25,1,1,""]},"virtualsmartcard.tests.CardGenerator_test.TestNPACardGenerator":{"_addSkip":[25,1,1,""],"_baseAssertEqual":[25,1,1,""],"_classSetupFailed":[25,4,1,""],"_deprecate":[25,1,1,""],"_diffThreshold":[25,4,1,""],"_formatMessage":[25,1,1,""],"_getAssertEqualityFunc":[25,1,1,""],"_truncateMessage":[25,1,1,""],addCleanup:[25,1,1,""],addTypeEqualityFunc:[25,1,1,""],assertAlmostEqual:[25,1,1,""],assertAlmostEquals:[25,1,1,""],assertDictContainsSubset:[25,1,1,""],assertDictEqual:[25,1,1,""],assertEqual:[25,1,1,""],assertEquals:[25,1,1,""],assertFalse:[25,1,1,""],assertGreater:[25,1,1,""],assertGreaterEqual:[25,1,1,""],assertIn:[25,1,1,""],assertIs:[25,1,1,""],assertIsInstance:[25,1,1,""],assertIsNone:[25,1,1,""],assertIsNot:[25,1,1,""],assertIsNotNone:[25,1,1,""],assertItemsEqual:[25,1,1,""],assertLess:[25,1,1,""],assertLessEqual:[25,1,1,""],assertListEqual:[25,1,1,""],assertMultiLineEqual:[25,1,1,""],assertNotAlmostEqual:[25,1,1,""],assertNotAlmostEquals:[25,1,1,""],assertNotEqual:[25,1,1,""],assertNotEquals:[25,1,1,""],assertNotIn:[25,1,1,""],assertNotIsInstance:[25,1,1,""],assertNotRegexpMatches:[25,1,1,""],assertRaises:[25,1,1,""],assertRaisesRegexp:[25,1,1,""],assertRegexpMatches:[25,1,1,""],assertSequenceEqual:[25,1,1,""],assertSetEqual:[25,1,1,""],assertTrue:[25,1,1,""],assertTupleEqual:[25,1,1,""],assert_:[25,1,1,""],card_type:[25,4,1,""],countTestCases:[25,1,1,""],debug:[25,1,1,""],defaultTestResult:[25,1,1,""],doCleanups:[25,1,1,""],fail:[25,1,1,""],failIf:[25,1,1,""],failIfAlmostEqual:[25,1,1,""],failIfEqual:[25,1,1,""],failUnless:[25,1,1,""],failUnlessAlmostEqual:[25,1,1,""],failUnlessEqual:[25,1,1,""],failUnlessRaises:[25,1,1,""],failureException:[25,4,1,""],id:[25,1,1,""],longMessage:[25,4,1,""],maxDiff:[25,4,1,""],run:[25,1,1,""],setUp:[25,1,1,""],setUpClass:[25,1,1,""],shortDescription:[25,1,1,""],skipTest:[25,1,1,""],tearDown:[25,1,1,""],tearDownClass:[25,1,1,""],test_card_creation:[25,1,1,""],test_get_and_set_card:[25,1,1,""],test_readDatagroups:[25,1,1,""]},"virtualsmartcard.tests.CryptoUtils_test":{TestCryptoUtils:[26,2,1,""]},"virtualsmartcard.tests.CryptoUtils_test.TestCryptoUtils":{"_addSkip":[26,1,1,""],"_baseAssertEqual":[26,1,1,""],"_classSetupFailed":[26,4,1,""],"_deprecate":[26,1,1,""],"_diffThreshold":[26,4,1,""],"_formatMessage":[26,1,1,""],"_getAssertEqualityFunc":[26,1,1,""],"_truncateMessage":[26,1,1,""],addCleanup:[26,1,1,""],addTypeEqualityFunc:[26,1,1,""],assertAlmostEqual:[26,1,1,""],assertAlmostEquals:[26,1,1,""],assertDictContainsSubset:[26,1,1,""],assertDictEqual:[26,1,1,""],assertEqual:[26,1,1,""],assertEquals:[26,1,1,""],assertFalse:[26,1,1,""],assertGreater:[26,1,1,""],assertGreaterEqual:[26,1,1,""],assertIn:[26,1,1,""],assertIs:[26,1,1,""],assertIsInstance:[26,1,1,""],assertIsNone:[26,1,1,""],assertIsNot:[26,1,1,""],assertIsNotNone:[26,1,1,""],assertItemsEqual:[26,1,1,""],assertLess:[26,1,1,""],assertLessEqual:[26,1,1,""],assertListEqual:[26,1,1,""],assertMultiLineEqual:[26,1,1,""],assertNotAlmostEqual:[26,1,1,""],assertNotAlmostEquals:[26,1,1,""],assertNotEqual:[26,1,1,""],assertNotEquals:[26,1,1,""],assertNotIn:[26,1,1,""],assertNotIsInstance:[26,1,1,""],assertNotRegexpMatches:[26,1,1,""],assertRaises:[26,1,1,""],assertRaisesRegexp:[26,1,1,""],assertRegexpMatches:[26,1,1,""],assertSequenceEqual:[26,1,1,""],assertSetEqual:[26,1,1,""],assertTrue:[26,1,1,""],assertTupleEqual:[26,1,1,""],assert_:[26,1,1,""],countTestCases:[26,1,1,""],debug:[26,1,1,""],defaultTestResult:[26,1,1,""],doCleanups:[26,1,1,""],fail:[26,1,1,""],failIf:[26,1,1,""],failIfAlmostEqual:[26,1,1,""],failIfEqual:[26,1,1,""],failUnless:[26,1,1,""],failUnlessAlmostEqual:[26,1,1,""],failUnlessEqual:[26,1,1,""],failUnlessRaises:[26,1,1,""],failureException:[26,4,1,""],id:[26,1,1,""],longMessage:[26,4,1,""],maxDiff:[26,4,1,""],run:[26,1,1,""],setUp:[26,1,1,""],setUpClass:[26,1,1,""],shortDescription:[26,1,1,""],skipTest:[26,1,1,""],tearDown:[26,1,1,""],tearDownClass:[26,1,1,""],test_padding:[26,1,1,""]},"virtualsmartcard.tests.SmartcardSAM_test":{TestSmartcardSAM:[27,2,1,""]},"virtualsmartcard.tests.SmartcardSAM_test.TestSmartcardSAM":{"_addSkip":[27,1,1,""],"_baseAssertEqual":[27,1,1,""],"_classSetupFailed":[27,4,1,""],"_deprecate":[27,1,1,""],"_diffThreshold":[27,4,1,""],"_formatMessage":[27,1,1,""],"_getAssertEqualityFunc":[27,1,1,""],"_truncateMessage":[27,1,1,""],addCleanup:[27,1,1,""],addTypeEqualityFunc:[27,1,1,""],assertAlmostEqual:[27,1,1,""],assertAlmostEquals:[27,1,1,""],assertDictContainsSubset:[27,1,1,""],assertDictEqual:[27,1,1,""],assertEqual:[27,1,1,""],assertEquals:[27,1,1,""],assertFalse:[27,1,1,""],assertGreater:[27,1,1,""],assertGreaterEqual:[27,1,1,""],assertIn:[27,1,1,""],assertIs:[27,1,1,""],assertIsInstance:[27,1,1,""],assertIsNone:[27,1,1,""],assertIsNot:[27,1,1,""],assertIsNotNone:[27,1,1,""],assertItemsEqual:[27,1,1,""],assertLess:[27,1,1,""],assertLessEqual:[27,1,1,""],assertListEqual:[27,1,1,""],assertMultiLineEqual:[27,1,1,""],assertNotAlmostEqual:[27,1,1,""],assertNotAlmostEquals:[27,1,1,""],assertNotEqual:[27,1,1,""],assertNotEquals:[27,1,1,""],assertNotIn:[27,1,1,""],assertNotIsInstance:[27,1,1,""],assertNotRegexpMatches:[27,1,1,""],assertRaises:[27,1,1,""],assertRaisesRegexp:[27,1,1,""],assertRegexpMatches:[27,1,1,""],assertSequenceEqual:[27,1,1,""],assertSetEqual:[27,1,1,""],assertTrue:[27,1,1,""],assertTupleEqual:[27,1,1,""],assert_:[27,1,1,""],countTestCases:[27,1,1,""],debug:[27,1,1,""],defaultTestResult:[27,1,1,""],doCleanups:[27,1,1,""],fail:[27,1,1,""],failIf:[27,1,1,""],failIfAlmostEqual:[27,1,1,""],failIfEqual:[27,1,1,""],failUnless:[27,1,1,""],failUnlessAlmostEqual:[27,1,1,""],failUnlessEqual:[27,1,1,""],failUnlessRaises:[27,1,1,""],failureException:[27,4,1,""],id:[27,1,1,""],longMessage:[27,4,1,""],maxDiff:[27,4,1,""],run:[27,1,1,""],setUp:[27,1,1,""],setUpClass:[27,1,1,""],shortDescription:[27,1,1,""],skipTest:[27,1,1,""],tearDown:[27,1,1,""],tearDownClass:[27,1,1,""],test_counter_decrement:[27,1,1,""],test_external_authenticate:[27,1,1,""],test_incorrect_pin:[27,1,1,""],test_internal_authenticate:[27,1,1,""],test_security_environment:[27,1,1,""]},"virtualsmartcard.tests.utils_test":{TestUtils:[28,2,1,""]},"virtualsmartcard.tests.utils_test.TestUtils":{"_addSkip":[28,1,1,""],"_baseAssertEqual":[28,1,1,""],"_classSetupFailed":[28,4,1,""],"_deprecate":[28,1,1,""],"_diffThreshold":[28,4,1,""],"_formatMessage":[28,1,1,""],"_getAssertEqualityFunc":[28,1,1,""],"_truncateMessage":[28,1,1,""],addCleanup:[28,1,1,""],addTypeEqualityFunc:[28,1,1,""],assertAlmostEqual:[28,1,1,""],assertAlmostEquals:[28,1,1,""],assertDictContainsSubset:[28,1,1,""],assertDictEqual:[28,1,1,""],assertEqual:[28,1,1,""],assertEquals:[28,1,1,""],assertFalse:[28,1,1,""],assertGreater:[28,1,1,""],assertGreaterEqual:[28,1,1,""],assertIn:[28,1,1,""],assertIs:[28,1,1,""],assertIsInstance:[28,1,1,""],assertIsNone:[28,1,1,""],assertIsNot:[28,1,1,""],assertIsNotNone:[28,1,1,""],assertItemsEqual:[28,1,1,""],assertLess:[28,1,1,""],assertLessEqual:[28,1,1,""],assertListEqual:[28,1,1,""],assertMultiLineEqual:[28,1,1,""],assertNotAlmostEqual:[28,1,1,""],assertNotAlmostEquals:[28,1,1,""],assertNotEqual:[28,1,1,""],assertNotEquals:[28,1,1,""],assertNotIn:[28,1,1,""],assertNotIsInstance:[28,1,1,""],assertNotRegexpMatches:[28,1,1,""],assertRaises:[28,1,1,""],assertRaisesRegexp:[28,1,1,""],assertRegexpMatches:[28,1,1,""],assertSequenceEqual:[28,1,1,""],assertSetEqual:[28,1,1,""],assertTrue:[28,1,1,""],assertTupleEqual:[28,1,1,""],assert_:[28,1,1,""],countTestCases:[28,1,1,""],debug:[28,1,1,""],defaultTestResult:[28,1,1,""],doCleanups:[28,1,1,""],fail:[28,1,1,""],failIf:[28,1,1,""],failIfAlmostEqual:[28,1,1,""],failIfEqual:[28,1,1,""],failUnless:[28,1,1,""],failUnlessAlmostEqual:[28,1,1,""],failUnlessEqual:[28,1,1,""],failUnlessRaises:[28,1,1,""],failureException:[28,4,1,""],id:[28,1,1,""],longMessage:[28,4,1,""],maxDiff:[28,4,1,""],run:[28,1,1,""],setUp:[28,1,1,""],setUpClass:[28,1,1,""],shortDescription:[28,1,1,""],skipTest:[28,1,1,""],tearDown:[28,1,1,""],tearDownClass:[28,1,1,""],test_CAPDU:[28,1,1,""],test_RAPDU:[28,1,1,""]},"virtualsmartcard.utils":{"_make_byte_property":[29,5,1,""],"_unformat_hexdump":[29,5,1,""],APDU:[29,2,1,""],C_APDU:[29,2,1,""],R_APDU:[29,2,1,""],hexdump:[29,5,1,""],inttostring:[29,5,1,""],parse_status:[29,5,1,""],stringtoint:[29,5,1,""]},"virtualsmartcard.utils.APDU":{"_deldata":[29,1,1,""],"_format_parts":[29,1,1,""],"_getdata":[29,1,1,""],"_setbyte":[29,1,1,""],"_setdata":[29,1,1,""],data:[29,4,1,""]},"virtualsmartcard.utils.C_APDU":{"_deldata":[29,1,1,""],"_format_fields":[29,1,1,""],"_format_parts":[29,1,1,""],"_getdata":[29,1,1,""],"_setbyte":[29,1,1,""],"_setdata":[29,1,1,""],"case":[29,1,1,""],CLA:[29,4,1,""],INS:[29,4,1,""],Lc:[29,4,1,""],Le:[29,4,1,""],P1:[29,4,1,""],P2:[29,4,1,""],cla:[29,4,1,""],data:[29,4,1,""],effective_Le:[29,4,1,""],ins:[29,4,1,""],lc:[29,4,1,""],le:[29,4,1,""],p1:[29,4,1,""],p2:[29,4,1,""],parse:[29,1,1,""],render:[29,1,1,""]},"virtualsmartcard.utils.R_APDU":{"_deldata":[29,1,1,""],"_format_fields":[29,1,1,""],"_format_parts":[29,1,1,""],"_getdata":[29,1,1,""],"_getsw":[29,1,1,""],"_setbyte":[29,1,1,""],"_setdata":[29,1,1,""],"_setsw":[29,1,1,""],SW1:[29,4,1,""],SW2:[29,4,1,""],SW:[29,4,1,""],data:[29,4,1,""],parse:[29,1,1,""],render:[29,1,1,""],sw1:[29,4,1,""],sw2:[29,4,1,""],sw:[29,4,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:[29,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","method","Python method"],"2":["py","class","Python class"],"3":["py","staticmethod","Python static method"],"4":["py","attribute","Python attribute"],"5":["py","function","Python function"],"6":["py","exception","Python exception"]},objtypes:{"0":"py:module","1":"py:method","2":"py:class","3":"py:staticmethod","4":"py:attribute","5":"py:function","6":"py:exception"},terms:{"05_":2,"07_":2,"0x00":[7,12,22,23],"0x00000000":6,"0x00000001":6,"0x01":[1,7],"0x02":[1,7],"0x03":1,"0x04":[1,7],"0x0c":[14,21],"0x0d46":1,"0x0e":[14,21],"0x0f":[14,21],"0x10":1,"0x18d1":6,"0x3010":1,"0x40":21,"0x4ee1":6,"0x60":21,"0x80":[12,21,22,23],"0x8c7b":[6,7],"0x8e":[12,21,22,23],"0x9000":1,"0x9a":[1,12,21,22,23],"0x9e":[12,21,22,23],"0xa4":[7,14,21],"0xac":[12,21,22,23],"0xb0":[14,21],"0xb1":[14,21],"0xb2":[14,21],"0xb3":[14,21],"0xbc":[12,21,22,23],"0xca":[14,21],"0xcb":[14,21],"0xd0":[14,21],"0xd1":[14,21],"0xd2":[14,21],"0xd6":[14,21],"0xd7":[14,21],"0xda":[14,21],"0xdb":[14,21],"0xdc":[14,21],"0xdd":[14,21],"0xe0":[14,21],"0xe2":[14,21],"0xe4":[14,21],"0xff":[1,7,17,21,23],"0xxx":7,"27c3":2,"27th":2,"7_3":2,"7_win32":6,"\u00ecnfo":6,"__getrecord":14,"__init__":7,"__repr__":29,"__str__":29,"_addskip":[25,26,27,28],"_baseassertequ":[25,26,27,28],"_cardgenerator__generate_cryptoflex":9,"_cardgenerator__generate_epass":9,"_cardgenerator__generate_iso_card":9,"_cardgenerator__generate_npa":9,"_classsetupfail":[25,26,27,28],"_controlreferencetemplate__replace_tag":[12,23],"_controlreferencetemplate__set_algo":[12,23],"_controlreferencetemplate__set_iv":[12,23],"_controlreferencetemplate__set_kei":[12,23],"_deldata":29,"_deprec":[25,26,27,28],"_diffthreshold":[25,26,27,28],"_format_field":29,"_format_part":29,"_formatmessag":[25,26,27,28],"_get_referenced_kei":[15,21,22,23],"_getassertequalityfunc":[25,26,27,28],"_getdata":29,"_getsw":29,"_handlertestos__output_from_l":19,"_make_byte_properti":29,"_makesalt":11,"_npa_se__eac_ca":23,"_npa_se__eac_pace_step1":23,"_npa_se__eac_pace_step2":23,"_npa_se__eac_pace_step3":23,"_npa_se__eac_pace_step4":23,"_npa_se__pack_general_authent":23,"_npa_se__unpack_general_authent":23,"_passportsam__computekei":22,"_recordstructureef__getrecord":14,"_recordstructureef__getrecordsbyidentifi":14,"_recordstructureef__getrecordsbynumb":14,"_selectfil":[14,21],"_set_s":[12,21,22,23],"_setbyt":29,"_setdata":29,"_setsw":29,"_truncatemessag":[25,26,27,28],"_unformat_hexdump":29,"_virtualicc__recvfromvpicc":17,"_virtualicc__sendtovpicc":17,"byte":[7,12,14,15,17,21,22,23,29],"case":[1,4,6,7,21,25,26,27,28,29],"class":[7,9,12,14,15,17,19,20,21,22,23,25,26,27,28,29],"default":[1,4,6,25,26,27,28],"enum":4,"f\u00fcr":2,"function":[2,3,7,11,14,15,17,21,22,23,25,26,27,28,29],"import":7,"int":[1,4],"long":[4,7,14,21],"m\u00fcller":2,"new":[1,2,3,6,7,9,12,14,21,22,23],"null":6,"pl\u00f6tz":6,"public":[2,6,12,15,21,22,23],"return":[0,7,11,12,14,15,16,17,21,22,23,25,26,27,28,29],"short":[14,29],"static":[14,17,21,22,23],"switch":[1,6,12,21,22,23],"throw":7,"true":[14,21,25,26,27,28,29],"try":[2,7],"universit\u00e4t":2,"while":7,a000000397425446590201:0,a000000527210101:0,abl:[6,9],about:[6,7],abov:6,academictitl:6,acardemul:[0,4],accept:[25,26,27,28],access:[0,1,3,4,5,6,12,15,17,21,22,23],accord:[7,12,14,17,21,22,23],accordingli:6,act:[6,7],activ:4,actual:[4,5,7,20,25,26,27,28],actual_seq:[25,26,27,28],add:[1,4,7,12,23,25,26,27,28],add_data:7,addcleanup:[25,26,27,28],addit:4,address:6,addtypeequalityfunc:[25,26,27,28],adjust:[12,22,23],adress:29,af_inet:7,after:[25,26,27,28],against:[4,5,6],agreement:[12,21,22,23],aid:4,aid_list:4,algo:11,algorithm:[11,12,15,21,22,23],alia:[25,26,27,28],alioth:[1,4,6,19],all:[4,5,6,7,12,14,15,16,21,22,23,25,26,27,28],allow:[0,4,5,6,25,26,27,28],almost:[25,26,27,28],alreadi:[12,23],also:[0,1,4,6,7,9,14,21],altern:[1,2,4,6],although:6,anchor:[6,12,21,22],andrea:2,angriff:2,ani:[0,1,4,5,6,7,15,21,22,23],annex:22,anoth:1,answer:[17,21,23],anywai:[6,22],apart:2,apdu:[0,1,4,7,12,14,15,17,20,21,22,23,29],api:[6,7],app:[0,4,5,6,7],appear:1,append:[11,12,14,21,23],append_pad:11,appendrecord:[14,21],appl:6,applet:0,applic:[0,1,4,5,6,17],applicationidentifi:[14,21],appropri:[12,21,22,23],apt:1,arg:[7,13,14,17,21,23,25,26,27,28,29],argument:[6,25,26,27,28],argz:[14,21],around:4,arrai:6,articl:6,asctim:7,assert:[25,26,27,28],assert_:[25,26,27,28],assertalmostequ:[25,26,27,28],assertdictcontainssubset:[25,26,27,28],assertdictequ:[25,26,27,28],assertequ:[25,26,27,28],assertfals:[25,26,27,28],assertgreat:[25,26,27,28],assertgreaterequ:[25,26,27,28],asserti:[25,26,27,28],assertin:[25,26,27,28],assertionerror:[25,26,27,28],assertisinst:[25,26,27,28],assertisnon:[25,26,27,28],assertisnot:[25,26,27,28],assertisnotnon:[25,26,27,28],assertitemsequ:[25,26,27,28],assertless:[25,26,27,28],assertlessequ:[25,26,27,28],assertlistequ:[25,26,27,28],assertmultilineequ:[25,26,27,28],assertnotalmostequ:[25,26,27,28],assertnotequ:[25,26,27,28],assertnotin:[25,26,27,28],assertnotisinst:[25,26,27,28],assertnotregexpmatch:[25,26,27,28],assertrais:[25,26,27,28],assertraisesregexp:[25,26,27,28],assertregexpmatch:[25,26,27,28],assertsequenceequ:[25,26,27,28],assertsetequ:[25,26,27,28],asserttru:[25,26,27,28],asserttupleequ:[25,26,27,28],assign:[14,29],assignlogicalchannel:[17,21,23],associ:[12,22,23],assum:7,asym:12,atexit:7,atr:[7,17,21,23],attach:[0,5],attack:[4,5,7,20],attempt:6,attribut:[14,21,25,26,27,28,29],auf:2,authent:[12,15,21,22,23],authenticate_head:[12,21,22,23],authentisierung:2,autodetect:[1,4],automat:[6,17,21,23,25,26,27,28],autoreconf:[1,4,6],autotool:6,auxiliari:[1,4,6],avail:[0,1,2,4,5,6,7,14,21],avoid:7,bac:6,back:[4,7,17,20],backend:4,bar:5,base:[0,1,4,9,12,13,14,15,17,19,20,21,22,23,25,26,27,28,29],basi:[25,26,27,28],basic:[17,22],basicconfig:7,basiert:2,been:[3,7,25,26,27,28],befor:[7,25,26,27,28],begin:[14,21],below:[4,6],ber:[14,21],berlin:2,bertlv:16,bertlv_data:[14,21],bertlv_pack:16,bertlv_unpack:16,besitz:2,best:[4,7],better:7,between:[0,1,6,17,21,23,25,26,27,28],big:[7,12,21,22,23],bin:6,binari:[6,14,21,29],birthnam:6,bit:[11,14,21],bitmask:[12,21,22,23],bitstr:[17,21,23],bix:6,bixvread:6,bixvreaderinstal:6,bleed:[1,4,6],blob:0,block:[7,11,15,21,22],blocklen:11,bndl:6,bool:[14,17,21,23],both:[1,25,26,27,28],box:1,bring:6,brows:[0,2,5],bsi:1,buffer:7,bug:[1,4,6,7],build:[0,1,4,5],building_gadget_usb_modul:1,built:[0,4,5,6],bund:1,bundl:6,bz2:1,c_apdu:29,ca_kei:[6,7,17,23],calcul:[4,11,17,21,22,23],calculate_mac:11,call:[7,14,25,26,27,28],callabl:[25,26,27,28],callable_obj:[25,26,27,28],callableobj:[25,26,27,28],camera:[0,5],can:[0,1,2,4,5,6,7,14,20,21,23,25,26,27,28],capabl:[14,17,21,23],capdu:[12,15,17,21,22,23],card_typ:[7,9,17,25],cardaccess:6,cardconnectionexcept:7,cardgener:[7,8],cardgenerator_test:[7,8,24],cardnumb:15,cardsecret:15,cardsecur:6,cardtyp:7,caught:[25,26,27,28],cbc:11,ccc:2,cct:12,cert:6,certif:[6,12,21,22],certifc:6,cfbundledevelopmentregion:6,cfbundleexecut:6,cfbundleinfodictionaryvers:6,cfbundlenam:6,cfbundlepackagetyp:6,cfbundlesignatur:6,cfbundlevers:6,challeng:[15,21,22,23],chang:[1,4,6,15,21,22,23],change_reference_data:[15,21,22,23],channelid:6,chao:2,charact:[17,21,23],check:[1,6,7,15,21,22,23,25,26,27,28],checksum:[11,12,21,22,23],chip:6,chipkartenles:2,choic:5,choos:[0,4,5,6],chosen:6,chr:7,chv:[15,21,22,23],cipher:[11,15,21,22,23],cipherspec:11,citi:6,cla:[1,29],cleanup:[7,20,25,26,27,28],click:6,client:1,clone:[0,1,2,4,5,6],close:[7,20],club:2,code:[0,1,4,5,6,7,12,14,16,21,22,23,29],codeproject:6,collect:[25,26,27,28],com:[0,1,2,3,4,5,6,7],combin:[1,4,12,23],come:7,command:[0,1,4,6,7,12,14,15,17,19,20,21,22,23,29],commandchaing:[17,21,23],commun:[0,2,4,5,6,7,17],communityid:6,compar:[21,25,26,27,28],comparison:[25,26,27,28],compat:1,compil:[0,1,4,5,6],complet:[4,6,7,25,26,27,28],complex:7,compon:1,comput:[0,2,5,6,11,12,21,22,23],compute_cryptographic_checksum:[12,21,22,23],compute_digital_signatur:[12,21,22,23],concern:[2,4,5],conf:[6,7],config:[4,5,6,12,23],configur:[0,1,4,5],congress:2,connect:[0,4,5,6,7,17,20],connector:[4,6],connecttoport:[7,17],consecut:29,constantdefinit:[7,8],contactless:0,contain:[6,12,14,15,21,22,23,25,26,27,28],content:[7,9,12,14,21,23,29],context:[7,25,26,27,28],continu:3,contribut:[0,1,4,5,6],control:[12,14,21,22,23],controlreferencetempl:[12,23],convent:[17,21,23],copyright:6,core:1,correct:[7,14,15,21,22],correctli:[15,21,23],correspond:[7,15],count:[25,26,27,28],counter:[11,15,21,22,25,26,27,28],counterpart:1,countri:6,counttestcas:[25,26,27,28],cover:[4,6],craft:1,creat:[1,2,6],createfil:[14,21],cross:4,crt:[12,22,23],crtl:17,crypt:11,crypto_checksum:11,cryptoflex:[6,7,8,9,18],cryptoflexgeneratortest:25,cryptoflexmf:[7,21],cryptoflexo:[7,21],cryptoflexs:21,cryptoflexsam:21,cryptograph:[11,12,21,22,23],cryptoutil:[7,8],cryptoutils_test:[7,8,24],current:[0,2,4,6,9,11,12,14,15,21,22,23],currentdf:[14,21],currentef:[14,21],custom:1,custom_url:7,cvca:[6,7,17,23],cyanogenmod:[0,5],cyberflex:[6,11],cycl:[14,21],cyclic:14,d2760001240102000000000000010000:0,daemon:6,data:[0,1,4,5,6,7,11,12,14,15,16,17,21,22,23,25,26,27,28,29],datacod:14,datagroup:9,datagroupnam:6,datagroupvalu:6,datalist:[14,16],dataobjecthandlingdecodeencapsul:[14,21],dataobjecthandlingdecodeplain:[14,21],dataset:[6,7],datasetfil:[6,7,9,17],datatyp:[25,26,27,28],dataunitsdecodeencapsul:[14,21],dataunitsdecodeplain:[14,21],datefmt:7,dateofbirth:6,dateofexpiri:6,dcb:[14,21],debian:[1,4,6,19],debug:[6,25,26,27,28],decim:[25,26,27,28],deciph:[12,21,22,23],decipher:[12,21,22,23],decive_unit:6,decod:[14,21],decodediscretionarydataobject:16,decodeextendedheaderlist:16,decodeheaderlist:16,decodeoffsetdataobject:16,decodetaglist:16,deconstruct:[25,26,27,28],decor:14,decrement:[15,21,22],decrypt:[11,14,15,21,22,23],dedic:14,deem:[25,26,27,28],def:7,default_s:[15,23],default_uid:1,defaulttestresult:[25,26,27,28],defin:[1,15,22],deleg:[0,6],deletefil:[14,21],delta:[25,26,27,28],den:2,depend:[0,1,4,5,6,11,14,21,22,29],deploi:[0,5],deriv:[7,22],derive_kei:22,des3:11,describ:6,descript:[25,26,27,28],descriptor:[14,21],design:7,despit:4,destroypacechannel:1,detail:[6,7,25,26,27,28],detect:5,determin:[25,26,27,28],dev:[1,6],develop:[0,3,4,5],devic:[1,6],devicenam:6,devices_compatibility_matrix:4,devmgmt:6,dfname:[14,21],dfselectionbyapplication_implicit:[14,21],dfselectionbyfid:[14,21],dfselectionbyfulldfnam:[14,21],dfselectionbypartialdfnam:[14,21],dfselectionbypath:[14,21],dg12:6,dg14:6,dg15:6,dg16:6,dg21:6,dict:6,dictionari:[12,23],die:2,die_gesamte_technik_ist_sich:2,diff:[25,26,27,28],differ:[2,6,7,9,11,12,22,23,25,26,27,28],digit:[12,21,22,23,25,26,27,28],direct:[17,21,23],directconvent:[17,21,23],directli:[4,6],directori:[1,6,7],disabl:6,disable_check:[7,17,23],disconnect:7,discuss:[4,5],disk:[7,9],dispatch:[15,17],distanc:4,distribut:4,dlitz:6,do_encrypt:11,do_someth:[25,26,27,28],doc:[6,14],docleanup:[25,26,27,28],docstr:[14,25,26,27,28],doctyp:6,documenttyp:6,doe:[4,6,7,22],doi:2,dominik:[2,4],done:[4,7],doubl:6,down:[7,17,19,21,23],driver:[1,5,6,19],droid:[0,5],dsa:[15,21,22,23],dst:12,dtd:6,ducktyp:[25,26,27,28],dummy_hcd:1,dump:29,dylib:6,eac:[6,23],eac_step:23,each:[14,25,26,27,28],earlier:6,echo:1,edg:[1,4,6],edit:7,editor:2,ef_cardaccess:[6,7,17,23],ef_cardsecur:[6,7,17,23],effective_l:29,efstructure_cyclic_nofurtherinfo:7,efstructure_linear_fixed_:7,efstructure_linear_variable_:7,efstructure_transpar:7,eid:2,eid_pin:23,einem:2,either:[0,12,14,21,22,23],electron:[0,3,6],element:[6,25,26,27,28],elementari:14,elif:7,els:7,email:6,enabl:[1,2,4,6],enciph:[12,21,22,23],encipher:[12,21,22,23],encod:[6,7,12,23],encodebertlvdatalist:16,encodedataoffsetobject:16,encodediscretionarydataobject:16,encodefilecontrolparamet:[14,21],encrypt:[7,9,11,14,15,21,22,23],end:[12,14,21,22,23],endian:7,enforc:[25,26,27,28],engin:2,english:6,ensur:6,enter:[15,21,22],entir:7,entri:1,environ:[4,12,15,21,22,23],epass:[6,7,8,18],epass_s:22,epassport:22,equal:[14,15,21,22,25,26,27,28],equival:[25,26,27,28],eras:[12,14,15,21,22,23],erase_s:[15,21,22,23],erasebinari:[14,21],erasebinaryencapsul:[14,21],erasebinaryplain:[14,21],erasefrom:14,eraserecord:[14,21],eraseto:14,erik:0,eriknellessen:0,err_incorrectparamet:7,err_wronglength:7,error:[1,7,14,21,25,26,27,28],error_cod:[25,26,27,28],erweiterung:2,esign:6,esign_ca_cert:[6,7,17,23],esign_cert:[6,7,17,23],esign_kei:[7,17,23],especi:[1,4,5],establish:[5,6],establishpacechannel:1,establishpacechannelinput:1,establishpacechanneloutput:1,etc:[6,7],even:[7,14,21,25,26,27,28],everi:6,exactli:[25,26,27,28],exampl:[1,4,6],excclass:[25,26,27,28],except:[7,13,25,26,27,28],execut:[6,7,17,19,20,21,23,25,26,27,28],exercis:28,exist:[0,4,7],exit:[1,4,6,7],expect:[7,25,26,27,28],expected_except:[25,26,27,28],expected_regexp:[25,26,27,28],expected_seq:[25,26,27,28],explain:4,explicit:[25,26,27,28],explor:6,expon:21,expr1:[25,26,27,28],expr2:[25,26,27,28],expr:[25,26,27,28],express:[25,26,27,28],extend:[2,6,7],extended_length:17,extendedl:[17,21,23],extern:[6,12,21,22,23],external_authent:[15,21,22,23],extra:[25,26,27,28],extra_fci_data:14,f000000001:0,f276a288bcfba69d34f31001:0,fabio:6,fail:[7,25,26,27,28],failif:[25,26,27,28],failifalmostequ:[25,26,27,28],failifequ:[25,26,27,28],failunless:[25,26,27,28],failunlessalmostequ:[25,26,27,28],failunlessequ:[25,26,27,28],failunlessrais:[25,26,27,28],failur:[25,26,27,28],failureexcept:[25,26,27,28],fals:[6,7,14,16,17,21,23,25,26,27,28,29],familynam:6,far:6,fci:[14,21],fdb:7,fdid:[0,5],featur:2,feature_execute_pac:1,feature_modify_pin_direct:1,feature_verify_pin_direct:1,feedback:[0,1,4,5,6],fetch:[0,5,7],ff557573:6,fid:[7,14,21],field:[12,21,22,23,29],file:[0,1,4,5,6,7,9,14,15,17,21,23],filedescriptor:[7,14,21],filenam:1,filesystem:[9,15,21,22,23],fill:9,find:[1,4,6,7,16],firewal:7,first:[6,7,14,21,25,26,27,28],firstsft:[14,21],firstsoftwar:[14,21],fix:14,fixtur:[25,26,27,28],fmd:[14,21],focu:6,follow:[0,1,2,4,5,6,7,14,21],foreground:4,form:[4,9,11,15,21,22,23],format:7,formatresult:[7,17,21,23],forwar:4,forward:[1,7,17,20],forwared:1,foss:2,found:[7,25,26,27,28],fragment:1,frame:17,framework:6,frank:[1,2,4],frankmorgn:[0,1,2,3,4,5,6],fraunhof:2,friendlynam:6,from:[0,2,4,5,6,7,9,12,14,15,17,20,21,22,23,25,26,27,28],fsdecrypt:[15,21,22,23],fsencrypt:[15,21,22,23],fukuchi:6,full:[4,5,29],futur:[15,21,22,23],g_ether:1,gadget:1,gener:[0,4,5,6,7,9,11,12,14,15,21,22,23,25,26,27,28,29],general_authent:23,generate_public_key_pair:[12,15,21,22,23],generatecard:9,german:[0,3,4,5,6],gertrud:6,gesamt:2,get:[1,4,6,7,9,14,21,25,26,27,28],get_card_numb:[15,21,22,23],get_challeng:[15,21,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,21,23],getcard:[7,9],getdata:[14,21],getdataencapsul:[14,21],getdataplain:[14,21],getfile_byrefdataobj:14,getpath:[14,21],getreaderpacecap:1,getrespons:[17,21,23],getsocknam:7,getstatu:29,gg487509:1,gid:0,gidsapplet:0,giovanni:2,git:[0,1,2,4,5,6],github:[0,1,2,3,4,5,6],give:[6,7],given:[4,7,12,14,15,16,17,21,22,23,25,26,27,28],givennam:6,global:[12,15,21,22,23],gmail:1,gnu:[1,4,6],googl:4,gpl:[0,1,4,5,6],group:[6,7],guess:6,guid:2,handi:2,handl:[7,14,21],handler:17,handler_test:[6,7,19],handlertest:[7,8,18],handlertesto:[7,19],hardwar:[0,1,4,5,6],hasfixedrecords:14,hash:[11,12,21,22,23],hashmap:15,hashmethod:11,hassimpletlv:14,have:[0,1,2,4,5,6,7,25,26,27,28],hce:0,header:[1,4,12,21,22,23],header_authent:[15,21,22,23],heidelberg:2,hello:0,helloworldapplet:0,help:[1,4,6],henryk:6,here:[1,2,4,6,7],hexdump:29,histchar:[17,21,23],histor:[14,17,21,23],hmac:11,holder:6,home:3,honor:14,honour:[25,26,27,28],hook:[7,25,26,27,28],host:[0,1,4,5,6,7,17],hostnam:[4,6,7],how:[1,4,7],html:[0,1,2,5,6,19],http:[0,1,2,3,4,5,6,7,19],human:[25,26,27,28],humboldt:2,icao:[9,11,22],icc:22,ident:[0,3,6],identifi:[0,4,14,15,21,22,23],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:[25,26,27,28],impact:[4,5],implement:[0,1,6],implicitli:7,importerror:7,inact:6,includ:[0,2,4,6,7,12,15,21,22,23,25,26,27,28],include_fil:16,incom:[4,6],incomplet:6,indent:[14,29],index:[4,14,15,21,25,26,27,28],index_curr:[14,21],index_htm:1,indic:[12,21,22,23],info:[1,6,7],infoplist:6,inform:[2,12,14,15,21,22,23],informat:2,informatik:2,informationstechnologi:2,ini:6,init:[0,1,6],initi:[0,1,6,7,11,12,14,22,23],inpterpret:7,input:11,ins2handl:[17,21,23],insert:4,insight:7,insmod:1,inspect:[25,26,27,28],instanc:[14,16],instead:[6,25,26,27,28,29],institut:2,instruct:[14,21],integ:[14,21],integr:[3,6],interact:9,interfac:[0,1],intermediari:1,intern:[12,15,21,22,23],internal_authent:[15,21,22,23],internet:6,interrupt:1,inttostr:[7,29],invalid:[6,7,15,21,22],invers:[17,21,23],invok:[12,21,22,23,25,26,27,28],involv:14,ioanni:2,iscycl:14,isequ:14,isinst:[25,26,27,28],iso7816:[6,7,25],iso7816generatortest:25,iso7816o:[7,17,21,23],iso:[0,4,6],isoapplet:0,issimpletlv:[14,21],issu:[1,4,6],issuingst:6,ist:2,item:[14,25,26,27,28],iter:[25,26,27,28],itself:7,java:0,jcardsim:0,jen:2,join:7,jump:6,just:[17,25,26,27,28],kdir:1,keep:[25,26,27,28],kei:[6,7,11,12,15,21,22,23],kernel:1,keycard:0,keyref_is_can:23,keyref_is_mrz:23,keyref_is_pin:23,keyref_is_puk:23,keytyp:[15,21,22,23],keyword:[25,26,27,28],killal:6,kind:[0,1,4,5,6,12,21,22],kit:6,kitkat:[0,5],know:[6,7],knowledg:7,krontiri:2,kwarg:[25,26,27,28,29],last:[11,14,21],lastcommandoffcut:7,lastcommandsw:7,later:[4,6,7,21],latest:[1,2,4,6],layer:6,lead:6,lectur:2,len:[7,17,21,23],length:[7,11,12,14,16,21,23,25,26,27,28,29],let:7,level:7,levelnam:7,lian:2,lib:[1,4,6],libccid:1,libeac:6,libexec:6,libifdvpcd:6,libopensc:1,libpath:6,libpcsclit:6,libqrencod:6,librari:2,licel:0,licens:[0,1,4,5,6],life:[14,21],lifecycl:[14,21],lifo:[25,26,27,28],like:[1,4,6],line:[1,6,25,26,27,28,29],linelen:29,link:6,linuxtag:2,list1:[25,26,27,28],list2:[25,26,27,28],list:[1,4,6,7,14,16,21,25,26,27,28],listen:4,listread:7,lite:[4,6,19],littl:7,load:[1,6,7],local:[1,6],local_ip:7,localhost:6,locat:[1,2,4],log:7,logginglevel:[7,17],logic:14,longmessag:[25,26,27,28],look:[0,1,2,4,6,7,14],loop:17,lopensc:1,lost:7,machin:[1,6,22],maco:6,magic:7,mai:[0,4,6,11,12,15,21,22,23],mail:6,main:[0,4,6,7,17],maintain:17,make:[1,4,6,29],make_properti:14,makeatr:[17,21,23],makefil:1,makefirstsoftwarefunctiont:[14,21],makesecondsoftwarefunctiont:[14,21],makethirdsoftwarefunctiont:[17,21,23],manag:[6,7,25,26,27,28],manage_security_environ:[12,15,21,22,23],mani:16,manipul:[12,21,22,23],manual:[0,5],map:[7,21],mass:6,master:[0,2,14,15,17,21,23],match:[4,6,14,25,26,27,28],max:[11,17,21,23],maxdiff:[25,26,27,28],maximum:[14,15,21,22],maximumchannel:[17,21,23],maxl:[7,21,23],maxrecords:[7,14],maxsiz:14,mayb:1,mean:[6,7,11,12,15,17,21,22,23,25,26,27,28],measur:[25,26,27,28],mechan:[12,21,22,23],media:2,member:[25,26,27,28],memori:[15,21,22,23],messag:[6,7,11,12,13,15,17,21,22,23,25,26,27,28],meta:29,method:[9,12,15,21,22,23,25,26,27,28],methodnam:[25,26,27,28],microsoft:[1,4,6],middlewar:1,might:[7,15,21,22,23],min:7,mingw:4,miss:[1,4,6],mitm:[7,20],mkdir:1,mmc:6,mmo11:2,mo10:2,mobil:2,mobilen:2,mode:[1,4,5,6,7,11,12,15],modern:[1,4],modif:[1,7],modifi:[1,4,7,12,23],modprob:1,modul:[1,4,6,7,8],momr12:2,mor12:2,more:[0,1,4,5,6,7,12,22,23,25,26,27,28],morgner:[1,2,4],most:[1,4,7,16,25,26,27,28],mostli:7,mount:1,mous:6,mrtd:[6,22],mrz:[9,23],msc:6,msdn:[1,6],mse:12,msg:[7,17,19,20,21,23,25,26,27,28],msi:6,multi:[25,26,27,28],multipl:[1,6,7],must:[1,4,5,6,7,9,11,12,14,21,22,23,25,26,27,28],mutual_authent:[15,21,22,23],mutual_challeng:[15,21,22,23],name:[4,6,14,21,29],nation:6,nativ:4,necessari:4,need:[0,1,4,5,6,7,15,21,22,23,25,26,27,28],neither:[14,21],nellesson:0,net:[0,6],network:[5,7],neuen:2,neuer:3,new_fil:7,newer:[0,5],newli:14,newlist:14,newtlvlist:[14,21],newvalu:[14,16],next:[14,21,23],nfc:[0,2,4,5,6,7],nice:29,nicer:[25,26,27,28],nobodi:22,nofurtherinfo:7,none:[7,9,11,14,15,16,17,21,22,23,25,26,27,28,29],nor:[14,21],normal:[7,21,25,26,27,28],normal_rest:7,noth:[12,21,22,23],notif:1,now:[1,4,6,15,21,22,23],npa:[0,2],npa_at_crt:23,npa_s:23,npa_sam:23,npao:[7,23],num_id:14,num_result:16,number:[1,4,6,7,14,15,21,22,23,25,26,27,28],numread:6,oath:0,obj:[1,25,26,27,28],object:[7,9,12,14,15,17,21,22,23,25,26,27,28,29],occur:[14,21],odd:[14,21],oep10:2,oepen:[2,4],off:[1,7],offer:2,offset:[14,16,21,29],old:[2,14],older:[1,2,4,6],om11:2,omit:[17,21,23,25,26,27,28],onetimewrit:14,onli:[1,4,7,11,14,21,22,25,26,27,28],open:[0,5,6,7,17],openmoko:[1,4,6],openpac:6,openpcd:4,openpgp:0,openpicc:4,openport:[7,17],opensc_lib:1,oper:[4,11,12,14,21,22,23,25,26,27,28],operation_on_str:11,optim:[25,26,27,28],option:[1,4,6,9,11,17,21,23,25,26,27,28],ord:7,order:[1,7,12,14,15,21,22,23,25,26,27,28],org:[0,1,4,5,6,19],original_func:[25,26,27,28],other:[1,5,6],otherwis:[4,12,14,21,23,25,26,27,28],ottavi:6,our:[0,1,2,3,4,5,6,7,29],out:[1,7],output:6,over:[4,5,6,7],overview:[6,7],overwrit:[7,29],own:[0,6,25,26,27,28],pace:[0,1,6],pace_can:23,pace_mrz:23,pace_pin:23,pace_puk:23,pacecap:1,pack:16,packag:7,pad:[11,12,21,22],padding_class:11,pair:[12,22,23],parallel:6,param:14,paramet:[11,12,14,15,17,21,22,23,25,26,27,28],parent:[7,14,21],pariti:22,pars:[7,12,15,21,22,23,29],parse_se_config:[12,23],parse_sm_capdu:[12,15,21,22,23],parse_statu:29,part:[2,6,14],partial:[14,21],pass:[7,17],passport:[0,6,9,11,22],passportsam:22,patch:1,path:[7,9,14,15,21],pattern:[25,26,27,28],pbkdf2:6,pc_to_rdr_secur:1,pc_to_rdr_xfrblock:1,pcd:[6,7,17],pcsc:[4,6],pcsc_scan:6,pcscd:[6,7],pcsclite:[1,4,6,19],pdf:2,perform:[1,12,17,19,21,22,23],perform_security_oper:[12,15,21,22,23],period:6,permiss:[0,5],persist:9,personalauswei:[2,3],peter:2,pezorform_security_oper:21,photo:9,php:4,physic:[7,20],piec:14,pil:6,pin:[0,1,15,21,22],pipe:[1,6],pkc:6,pkg:4,pkg_config_path:4,pkgconfig:4,pki:22,place:[6,25,26,27,28],placeofbirth:6,plain:[12,15,21,22,23],platform:[0,1,4,5,6],pleas:[0,1,4,5,6],plist:6,plu:[25,26,27,28],plug:6,point:14,pointer:14,port:[4,6,7,17],posess:[15,22,23],possibl:[1,4,6],power:[7,17,19,21,23],powerdown:[7,17,19,20,21,23],powerup:[7,17,19,20,21,23],prefix:[1,4,6],prepend:[11,14,21],present:1,press:17,pretend:6,pretti:7,prettyprint_anyth:14,previou:[14,21],previous:[7,12,22,23],print:[1,4,5,6,7,17],print_ascii:7,privaci:2,privat:[6,12,15,21,22,23],probabl:[1,4,6],problem:6,process:[0,4],produc:17,product:[1,6],program:[2,6,7],project:[0,1,2,4,5,6],prompt:9,prop:[14,29],properti:[14,29],propertylist:6,proprietari:[1,6,14],protect:[0,6,12,15,21,22,23],protect_respons:[12,21,22,23],protect_result:[15,21,22,23],protocol:[0,6,7,17,21,22,23],prove:[15,22,23],provid:[6,7,12,22,23,25,26,27,28],pseudo:1,pseudorandom:11,publikationen:1,publish:6,puk:[15,21,22,23],purpos:[4,25,26,27,28],put:[14,21],putdata:[14,21],putdataencapsul:[14,21],putdataplain:[14,21],pwd:1,pwendland:0,pycrypto:6,pypi:6,pyreadlin:6,pyscard:[6,7],pythonwar:6,qes_pin:23,qrcode:7,qrencod:6,qrserver:7,quit:7,r_apdu:[7,29],rais:[7,14,21,25,26,27,28],random:[1,15,21,22],randomli:6,rapdu:[7,17],raw:[12,21,22,23],rdr_to_pc_datablock:1,read:[6,7,9,14,21,22],readabl:[22,25,26,27,28],readbinari:[14,21],readbinaryencapsul:[14,21],readbinaryplain:[14,21],readdatagroup:[7,9],reader0:6,reader1:6,reader2:6,reader:0,readernum:[7,17,20],readlin:6,readrecord:[14,21],readrecordencapsul:[14,21],readrecordplain:[14,21],real:[1,4,6,7,20],realiz:4,reason:[25,26,27,28],recalculate_length:16,receiv:[4,7,17,20],recent:1,recogn:7,reconnect:7,record:[7,14],recordhandlingdecod:[14,21],recordidentifiersupport:[14,21],recordnumbersupport:[14,21],recordpoint:14,recordstructureef:[7,14],recurs:[6,14],redlich:2,ref:14,refdataobj:14,referenc:[15,21,22,23],regard:[14,21],regexp:[25,26,27,28],regist:[4,6,7,25,26,27,28],regular:[25,26,27,28],relai:[0,2],relayo:[7,20],releas:[1,2,4,6],religiousartisticnam:6,remot:[0,2,4],remotesmartcardread:[0,5],remov:[12,14,21,22],render:[7,29],replac:[6,12,14,15,21,22,23],report:[1,4,6],repositori:[0,1,2,4,5,6],repres:29,represent:14,request:[2,6,7,14],requestedtl:[14,21],requir:[0,1,5,6,7,22],research:2,reset:[7,14,15,17,19,20,21,22,23],reset_retry_count:23,resetrecordpoint:14,residencepermit1:6,residencepermit2:6,resp_data:22,respect:7,respons:[0,1,4,6,7,9,12,14,15,17,20,21,22,23,29],respsons:17,rest:7,restart:6,restor:[12,15,21,22,23],restore_s:[15,21,22,23],result:[7,12,14,16,17,21,22,23,25,26,27,28],retri:[15,21,22],retriev:[15,21,22,23],revers:[6,7],rfid:4,rfu:[15,21,22,23],right:[15,21,22,23],root:6,round:[25,26,27,28],routin:6,rpc_type:6,rsa:[15,21,22,23],run:[0,1,4,5],runtest:[25,26,27,28],runtim:0,russello:2,sai:6,said:7,salt:11,sam:[7,9,12,14,15,17,21,22,23],same:[6,7,25,26,27,28],sampl:0,sar:2,save:6,scan:[0,5,7],scanner:5,scardcontrol:1,scardtransmit:1,schmidt:2,scienc:2,script:6,sdk:[0,5],search:[14,21],searchbinaryencapsul:[14,21],searchbinaryplain:[14,21],second:[14,21,25,26,27,28],secondsft:[14,21],secondsoftwar:[14,21],secret:[11,15,21,22,23],section:[4,7],secur:[1,2,6,7,12,15,17,21,22,23],security_environ:[12,15,21,22,23],see:[1,4,6,7,14,17,19,21,23],seed:22,seekabl:[7,17,21,23],seid:[12,15,21,22,23],select:[0,4,5,7,11,14,17,21,23],selectfil:[14,21],self:[7,25,26,27,28],send:[4,7,11,12,17,20,21,22],sendcommandapdu:7,sent:[4,7],seper:6,seq1:[25,26,27,28],seq2:[25,26,27,28],seq_typ:[25,26,27,28],sequenc:[11,22,25,26,27,28],sequenti:14,serial:[1,6],server_sock:7,servic:6,session:7,session_kei:11,set1:[25,26,27,28],set2:[25,26,27,28],set:[4,6,9,12,14,17,21,22,23,25,26,27,28],set_asym_algorithm:[15,21,22,23],set_mf:[15,21,22,23],setcard:9,setter:[15,21,22,23],settimeout:7,setup:[25,26,27,28],setupclass:[25,26,27,28],seutil:[7,8],sever:[1,4,6],sex:6,shall:[6,12,21,22,23],shell:6,shiguo:2,ship:[1,4,6],shortdescript:[25,26,27,28],shortfid:14,shortfidsupport:[14,21],should:[1,4,6,7,12,14,21,22,23,25,26,27,28],show:6,sicher:2,sicherheitsanalys:2,sig:17,sigint:7,sigkil:6,sign:[6,12,21,22,23],signal:[7,17],signalhandl:[7,17],signatur:[6,12,21,22,23],signfic:[25,26,27,28],signific:[25,26,27,28],simpl:[0,7,14,21],simpletlv:16,simpletlv_data:[14,21],simpletlv_pack:16,simpletlv_unpack:16,simpli:[6,7],simul:0,sinc:[1,6],sit:2,six:12,size:[11,14,21],skip:[25,26,27,28],skiptest:[25,26,27,28],sln:6,slot:6,sm_header:[12,21,22,23],smartcard:[2,5,6,7,14,17,20],smartcardfilesystem:[7,8],smartcardo:[7,17,19,20,21,23],smartcardsam:[7,8],smartcardsam_test:[7,8,24],smartcardservic:6,smartphon:[0,2,5],social:2,sock:7,sock_dgram:7,socket:[0,6,7,17],softwar:[4,5,6,7,14,17,21,23],solut:6,some:[1,2,7],someexcept:[25,26,27,28],someth:6,sourc:[0,1,5,7],sourceforg:[1,4,6,7],space:29,special:[1,5],specif:[7,15,21,22,23,25,26,27,28],specifi:[4,6,7,11,12,14,15,16,21,22,23,25,26,27,28],specifii:6,springer:2,spusbdatatyp:6,src:[0,1,4],ssc:[11,22],stabl:6,stai:4,standalon:6,standard:[1,4,6,7,22,25,26,27,28],standardmsg:[25,26,27,28],start:[1,4,6,14],startup:6,state:14,statu:[1,14,21,29],step:[6,23],still:[1,2,4,6],stop:[6,7,17],storag:[6,9],store:[12,15,21,22,23],store_s:[15,21,22,23],str:[7,29],straight:7,street:6,string1:11,string2:11,string:[1,4,6,7,11,12,14,15,16,17,21,23,25,26,27,28,29],stringtoint:[7,29],strip:11,strip_pad:11,structur:[14,16],studio:[0,4,5,6],stuttgart:2,style:[25,26,27,28],subclass:[25,26,27,28],subdir:1,submodul:[0,1,6],subset:1,success:[15,21,22,23,25,26,27,28],successful:7,successfulli:6,sudo:[1,6],suffer:[25,26,27,28],suggest:[0,1,4,5,6],suitabl:11,sun:4,superset:[25,26,27,28],support:[1,3,4,6,9,11,12,21,23,25,26,27,28],sure:[6,7],surpress:17,sw1:[1,7,29],sw2:[1,7,29],swerror:[7,13],swutil:[7,8],sym:12,symmetri:[25,26,27,28],syntax:6,sysconfdir:6,system:[1,2,4,5,6,7,15],system_profil:6,systemroot:6,szenario:2,t15:[17,21,23],tabl:[12,14,17,21,22,23],tag:[12,14,16,21,22,23],tagungsband:2,tai:[17,21,23],taj:[17,21,23],take:[14,15,21,22,23,25,26,27,28],taken:6,tar:1,tbi:[17,21,23],tbj:[17,21,23],tci:[17,21,23],tcj:[17,21,23],tck:[17,21,23],tcp:[6,14,21],tcp_port:6,tdi:[17,21,23],teardown:[25,26,27,28],teardownclass:[25,26,27,28],technik:2,technischerichtlinien:1,telecommun:2,templat:[7,12,14,21,22,23],term:6,termin:[0,4,12,15,21,22,23],test:[0,1,4,5,6,7,8],test_capdu:28,test_card_cr:25,test_counter_decr:27,test_external_authent:27,test_get_and_set_card:25,test_incorrect_pin:27,test_internal_authent:27,test_pad:26,test_rapdu:28,test_readdatagroup:25,test_security_environ:27,testcas:[25,26,27,28],testcryptoutil:26,tester:[6,19],testnpacardgener:25,testresult:[25,26,27,28],testsmartcardsam:27,testutil:28,text:[21,25,26,27,28],than:[0,1,4,5,6,25,26,27,28],the_except:[25,26,27,28],thehistor:[14,21],thei:[6,11,12,25,26,27,28],them:[0,17],themselv:2,therefor:9,thesi:2,thi:[1,4,5,6,7,9,11,12,14,15,17,19,20,21,22,23,25,26,27,28,29],thing:[7,14],third:[17,21,23],those:[7,25,26,27,28],through:[0,1,6],time:[1,4,6,7],titl:4,tlv:[12,14,16,21,22,23],tlv_data:16,tlv_find_tag:16,tlv_unpack:16,tlvutil:[7,8],tmp:[1,4],to_str:[12,23],togeth:[0,4],tool:[1,4,6],toolset:6,tr03119:1,traceback:17,tracker:[0,1,4,5,6],tradit:[5,6],transmiss:[17,21,23],transmit:[0,1,4,7],transpar:14,transparentstructureef:[7,14,21],tri:6,trust:[1,6,12,21,22],tupl:[14,16,21,25,26,27,28],tuple1:[25,26,27,28],tuple2:[25,26,27,28],two:[14,21,25,26,27,28],type:[2,6],typeobj:[25,26,27,28],ubuntu:[1,4,6],udc:1,ulrich:2,umbrella:2,umdf:6,umfeld:2,unam:1,und:2,under:[15,21,22,23],understood:15,unequ:[25,26,27,28],unexpect:[25,26,27,28],unexpected_regexp:[25,26,27,28],unfamiliar:[1,4,6],unit:[14,21],unittest:[25,26,27,28],univers:1,unknown:[7,14,21],unless:[25,26,27,28],unlik:[25,26,27,28],unord:[25,26,27,28],unpack:16,unplug:6,unprotect:[12,15,21,22,23],unprotected_result:[15,21,22,23],until:[15,21,22],unverifi:6,updat:[0,1,6,14,21],updatebinari:[14,21],updatebinaryencapsul:[14,21],updatebinaryplain:[14,21],updaterecord:[14,21],updaterecordencapsul:[14,21],updaterecordplain:[14,21],url:[2,6],usabl:[1,2],user:[6,9,15,17,21,22],usr:[1,6],usual:[1,6,7,14,25,26,27,28],utf:6,util:[6,7,8],utils_test:[7,8,24],valid:[6,7,15,21,22,23,25,26,27,28],valu:[4,6,12,14,15,17,21,22,23,25,26,27,28,29],variabl:14,variou:[1,2,11,12,21,22,23],vector:11,vendor:[1,6],vendor_ifd_typ:6,vendor_nam:6,verbos:[1,4,6],verif:[0,1,12,21,22,23],verifi:[0,1,6,12,15,21,22,23],verify_certif:[12,21,22,23],verify_cryptographic_checksum:[12,21,22,23],verify_digital_signatur:[12,21,22,23],verlag:2,version:[0,1,4,5,6,15,21,22,23],via:[0,1,4,5,6,7,11,15,17,20],vicc:[4,6,7,17],virtual:0,virtualicc:[7,17],virtualsmartcard:[6,7],visual:[4,6],vletoux:0,volum:2,vpcd:[4,5],vsmartcard:[0,1,2,4,5,6],w64:4,wai:6,wait:[4,6],waldmann:2,walk:14,want:[0,1,2,7],warm:[17,19],warn:[6,7],warn_noinfo63:21,wdk:6,web:2,welcom:[0,1],well:6,what:[4,7,12,14,21,22],whatev:29,when:[4,5,6,7,17,25,26,27,28,29],where:[1,4,5,6,7,14],wherea:1,whether:[12,15,17,21,22,23,25,26,27,28],which:[0,4,6,7,11,12,14,17,21,25,26,27,28,29],wiki:1,win32:6,window:[1,4,5],winscard:4,wissen:2,with_mark:16,without:[0,1,6,11,25,26,27,28,29],wix:6,wixtoolset:6,wolf:2,word:29,work:[1,4,6,7],workaround:7,workshop:2,world:0,write:[14,21],writeand:14,writebinari:[14,21],writebinaryencapsul:[14,21],writebinaryplain:[14,21],writeor:14,writerecord:[14,21],written:[1,4],wudfhost:6,www:[0,1,4,6],x00:11,x01:7,x02:7,x03:7,x04:7,x38:7,x64:6,x82:6,xff:7,xjf:1,xml:[4,6],xor:14,xxx:7,yield:6,ykneo:0,you:[0,1,2,4,5,6,7,14,21,25,26,27,28],your:[0,1,4,5,6,7],yourself:[2,7],yubico:0,zero:[15,21,22,25,26,27,28],zip:6,zone:22,zum:2,zur:2},titles:["Android Smart Card Emulator","USB CCID Emulator","Welcome to the Virtual Smart Card Architecture documentation!","nPA Smart Card Library","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","cryptoflex Module","ePass Module","nPA Module","tests Package","CardGenerator_test Module","CryptoUtils_test Module","SmartcardSAM_test Module","utils_test Module","utils Module"],titleterms:{android:[0,4,5],architectur:2,build:6,card:[0,1,2,3,4,5,6,7,18],cardgener:9,cardgenerator_test:25,ccid:1,compliant:1,configur:6,constantdefinit:10,contact:[0,5],contactless:4,creat:7,cryptoflex:21,cryptoutil:11,cryptoutils_test:26,document:[2,7],download:[0,1,2,4,5,6],emul:[0,1,4,6],epass:22,exampl:7,gadgetf:1,handlertest:19,hint:[1,4],implement:7,instal:[0,1,4,5,6],interfac:4,iso:7,less:[0,5],libnfc:4,librari:3,like:7,linux:[1,4,6],mac:6,middlewar:4,modul:[9,10,11,12,13,14,15,16,17,19,20,21,22,23,25,26,27,28,29],note:[0,1,4,5,6],npa:[3,23],opensc:1,other:7,packag:[8,18,24],phone:[0,5],python:6,question:[0,1,4,5,6],reader:[1,5],refer:[0,1,2,4,5,6],relai:[4,20],remot:5,run:6,seutil:12,similar:[1,4,6],smart:[0,1,2,3,4,5,6,7],smartcardfilesystem:14,smartcardsam:15,smartcardsam_test:27,swutil:13,test:24,tlvutil:16,type:7,unix:[1,4,6],usag:[1,4],usb:1,util:29,utils_test:28,virtual:[2,6,7],virtualsmartcard:[8,17],vpcd:6,vpicc:6,welcom:2,window:6,written:6}}) \ No newline at end of file diff --git a/docs/virtualsmartcard/README.html b/docs/virtualsmartcard/README.html index f107af0..00eb360 100644 --- a/docs/virtualsmartcard/README.html +++ b/docs/virtualsmartcard/README.html @@ -5,7 +5,7 @@ - Virtual Smart Card — vsmartcard 2017-01-05 documentation + Virtual Smart Card — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api.html b/docs/virtualsmartcard/api.html index 0bf79e4..2ae088a 100644 --- a/docs/virtualsmartcard/api.html +++ b/docs/virtualsmartcard/api.html @@ -5,7 +5,7 @@ - Creating a Virtual Smart Card — vsmartcard 2017-01-05 documentation + Creating a Virtual Smart Card — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + @@ -392,6 +392,47 @@ completely different when creating a file on the smart card. So we derive CryptoflexMF from MF and modify create to our needs.

    +
        def create(p1, p2, data):
    +
    +        if data[0:2] != "\xff\xff":
    +            raise SwError(SW["ERR_INCORRECTPARAMETERS"])
    +
    +        args = {
    +                "parent": None,
    +                "filedescriptor": 0,
    +                "fid": stringtoint(data[4:6]),
    +                }
    +        if data[6] == "\x01":
    +            args["data"] = chr(0)*stringtoint(data[2:4])
    +            args["filedescriptor"] = FDB["EFSTRUCTURE_TRANSPARENT"]
    +            new_file = TransparentStructureEF(**args)
    +        elif data[6] == "\x02":
    +            if len(data) > 16:
    +                args["maxrecordsize"] = stringtoint(data[16])
    +            elif p2:
    +                # if given a number of records
    +                args["maxrecordsize"] = (stringtoint(data[2:4]) / p2)
    +            args["filedescriptor"] = FDB["EFSTRUCTURE_LINEAR_FIXED_"
    +                                         "NOFURTHERINFO"]
    +            new_file = RecordStructureEF(**args)
    +        elif data[6] == "\x03":
    +            args["filedescriptor"] = FDB["EFSTRUCTURE_LINEAR_VARIABLE_"
    +                                         "NOFURTHERINFO"]
    +            new_file = RecordStructureEF(**args)
    +        elif data[6] == "\x04":
    +            args["filedescriptor"] = FDB["EFSTRUCTURE_CYCLIC_NOFURTHERINFO"]
    +            new_file = RecordStructureEF(**args)
    +        elif data[6] == "\x38":
    +            if data[12] != "\x03":
    +                raise SwError(SW["ERR_INCORRECTPARAMETERS"])
    +            new_file = DF(**args)
    +        else:
    +            logging.error("unknown type: 0x%x" % ord(data[6]))
    +            raise SwError(SW["ERR_INCORRECTPARAMETERS"])
    +
    +        return [new_file]
    +
    +

    As you can see it is quite simple to extend the virtual smart card to your requirements. Simply overwrite those functions, that differ from ISO 78166. But as said before, the virtual smart card is quite complex and you might have to diff --git a/docs/virtualsmartcard/api/virtualsmartcard.CardGenerator.html b/docs/virtualsmartcard/api/virtualsmartcard.CardGenerator.html index 33ff2e5..0d3a615 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.CardGenerator.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.CardGenerator.html @@ -5,7 +5,7 @@ - CardGenerator Module — vsmartcard 2017-01-05 documentation + CardGenerator Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html b/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html index d7453a1..4c0b8a0 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.ConstantDefinitions.html @@ -5,7 +5,7 @@ - ConstantDefinitions Module — vsmartcard 2017-01-05 documentation + ConstantDefinitions Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.CryptoUtils.html b/docs/virtualsmartcard/api/virtualsmartcard.CryptoUtils.html index bdefe6d..ea407b0 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.CryptoUtils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.CryptoUtils.html @@ -5,7 +5,7 @@ - CryptoUtils Module — vsmartcard 2017-01-05 documentation + CryptoUtils Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.SEutils.html b/docs/virtualsmartcard/api/virtualsmartcard.SEutils.html index feace11..3546430 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.SEutils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.SEutils.html @@ -5,7 +5,7 @@ - SEutils Module — vsmartcard 2017-01-05 documentation + SEutils Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.SWutils.html b/docs/virtualsmartcard/api/virtualsmartcard.SWutils.html index e10bf82..bd4dcd5 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.SWutils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.SWutils.html @@ -5,7 +5,7 @@ - SWutils Module — vsmartcard 2017-01-05 documentation + SWutils Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.html b/docs/virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.html index 673c529..45c692c 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.SmartcardFilesystem.html @@ -5,7 +5,7 @@ - SmartcardFilesystem Module — vsmartcard 2017-01-05 documentation + SmartcardFilesystem Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.SmartcardSAM.html b/docs/virtualsmartcard/api/virtualsmartcard.SmartcardSAM.html index 662bea2..d84584b 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.SmartcardSAM.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.SmartcardSAM.html @@ -5,7 +5,7 @@ - SmartcardSAM Module — vsmartcard 2017-01-05 documentation + SmartcardSAM Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.TLVutils.html b/docs/virtualsmartcard/api/virtualsmartcard.TLVutils.html index 76c17ce..aae5555 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.TLVutils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.TLVutils.html @@ -5,7 +5,7 @@ - TLVutils Module — vsmartcard 2017-01-05 documentation + TLVutils Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.html b/docs/virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.html index 3eebd59..36ff54e 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.VirtualSmartcard.html @@ -5,7 +5,7 @@ - VirtualSmartcard Module — vsmartcard 2017-01-05 documentation + VirtualSmartcard Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.HandlerTest.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.HandlerTest.html index 392f0b9..f7b0499 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.HandlerTest.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.HandlerTest.html @@ -5,7 +5,7 @@ - HandlerTest Module — vsmartcard 2017-01-05 documentation + HandlerTest Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.Relay.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.Relay.html index 1b73abd..f88bf45 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.Relay.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.Relay.html @@ -5,7 +5,7 @@ - Relay Module — vsmartcard 2017-01-05 documentation + Relay Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.html index e71ac7b..85e4cd4 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.cryptoflex.html @@ -5,7 +5,7 @@ - cryptoflex Module — vsmartcard 2017-01-05 documentation + cryptoflex Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.ePass.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.ePass.html index d58261b..8717838 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.ePass.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.ePass.html @@ -5,7 +5,7 @@ - ePass Module — vsmartcard 2017-01-05 documentation + ePass Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.html index 09c440d..c0c04ad 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.html @@ -5,7 +5,7 @@ - cards Package — vsmartcard 2017-01-05 documentation + cards Package — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.cards.nPA.html b/docs/virtualsmartcard/api/virtualsmartcard.cards.nPA.html index f6f29df..b6b1aba 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.cards.nPA.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.cards.nPA.html @@ -5,7 +5,7 @@ - nPA Module — vsmartcard 2017-01-05 documentation + nPA Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.html b/docs/virtualsmartcard/api/virtualsmartcard.html index bc69754..470eb9f 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.html @@ -5,7 +5,7 @@ - virtualsmartcard Package — vsmartcard 2017-01-05 documentation + virtualsmartcard Package — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.tests.CardGenerator_test.html b/docs/virtualsmartcard/api/virtualsmartcard.tests.CardGenerator_test.html index e4aef96..5073f2d 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.tests.CardGenerator_test.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.tests.CardGenerator_test.html @@ -5,7 +5,7 @@ - CardGenerator_test Module — vsmartcard 2017-01-05 documentation + CardGenerator_test Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.tests.CryptoUtils_test.html b/docs/virtualsmartcard/api/virtualsmartcard.tests.CryptoUtils_test.html index 68c36b2..a495d91 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.tests.CryptoUtils_test.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.tests.CryptoUtils_test.html @@ -5,7 +5,7 @@ - CryptoUtils_test Module — vsmartcard 2017-01-05 documentation + CryptoUtils_test Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.tests.SmartcardSAM_test.html b/docs/virtualsmartcard/api/virtualsmartcard.tests.SmartcardSAM_test.html index 1f3e7c7..ed1d11e 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.tests.SmartcardSAM_test.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.tests.SmartcardSAM_test.html @@ -5,7 +5,7 @@ - SmartcardSAM_test Module — vsmartcard 2017-01-05 documentation + SmartcardSAM_test Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.tests.html b/docs/virtualsmartcard/api/virtualsmartcard.tests.html index 25bf782..375c02b 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.tests.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.tests.html @@ -5,7 +5,7 @@ - tests Package — vsmartcard 2017-01-05 documentation + tests Package — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.tests.utils_test.html b/docs/virtualsmartcard/api/virtualsmartcard.tests.utils_test.html index 0e5251a..35e7681 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.tests.utils_test.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.tests.utils_test.html @@ -5,7 +5,7 @@ - utils_test Module — vsmartcard 2017-01-05 documentation + utils_test Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/docs/virtualsmartcard/api/virtualsmartcard.utils.html b/docs/virtualsmartcard/api/virtualsmartcard.utils.html index 62d9a9b..264f5c9 100644 --- a/docs/virtualsmartcard/api/virtualsmartcard.utils.html +++ b/docs/virtualsmartcard/api/virtualsmartcard.utils.html @@ -5,7 +5,7 @@ - utils Module — vsmartcard 2017-01-05 documentation + utils Module — vsmartcard 2017-01-08 documentation @@ -15,7 +15,7 @@ - + diff --git a/virtualsmartcard/doc/api.txt b/virtualsmartcard/doc/api.txt index 1328fdc..d95d0dd 100644 --- a/virtualsmartcard/doc/api.txt +++ b/virtualsmartcard/doc/api.txt @@ -96,7 +96,7 @@ completely different when creating a file on the smart card. So we derive :class:`~virtualsmartcard.cards.cryptoflex.CryptoflexMF.create` to our needs. .. literalinclude:: virtualsmartcard/cards/cryptoflex.py - :pyobject: CryptoflexMF.create + :lines: 190-228 As you can see it is quite simple to extend the virtual smart card to your requirements. Simply overwrite those functions, that differ from ISO 78166. But