SmartCardAPI Version History

This section contains important information about SmartCardAPI core DLL and SDK version history.  Minor releases and hot fixes are not listed here.

The current version of SmartCard API SDK G2 is v 24.7.1 (library version

Lib Version G2 (SDK rev 01JUL2024)

This is the first public release of SmartCardAPI G2.  It is built against .NET Standard 2.0 and therefore can be used for .NET Framework and .NET Core.

  • new: all libraries based on .NET standard 2.0
  • change: removed all visual software components (SPE dialog removed)
  • tested with .NET Framework and .NET Core 
  • new: online API documentation at
  • change: namespace CardWerk replaces Subsembly namespace
  • change: all CardModule share a set of common methods 
  • new: time restricted trial SDK
  • new: HelloCard explores card and available CardModules using new CardModule.AnyCard
  • fix: DESFire change PICC key from AES to TDES fails
  • fix: iCLASS calling GetRawData() multiple times fails
  • new: support Feitian 502 contactless card reader
  • new: DESFire DeleteApplication() DeleteFile() methods
  • new: generic contactless card support (ATR.Length < 20)
  • new: Elatec reader support for DESFire, iCLASS, SEOS and Prox cards
  • change: registry data stored in SmartCardApi.json in local application (environment) folder
  • fix: iCLASS PACS access fails with OK5022 on multi/single page cards
  • change: remove support for CT-API
  • fix: Reiner SCT secure PIN entry causes exception (port fix from G1)

Lib Version G1 (rev 09JUL2023)

  • fix: Reiner SCT reader: new driver triggers invalid buffer size
  • fix: stack imbalance accessing SLE4428 synchronous cards
  • fix: internal crypto module: with invalid zero key block size triggers exception
  • change: Reiner SCT reader: Class2 access only uses DIRECT VERIFY PIN (no more MCT legacy calls)
  • change: GetPacsData returns byte[] instead of null
  • new: CardModule.eCard (upon request)
  • new: SPE sample code (upon request)
  • new: DESFire.DeleteFile() method
  • new: access PACS data on HID-issued DESFire EV1 and EV3 cards

Lib Version G1 (rev.17JAN2021)

  • faster reader detection
  • binaries signed with SHA1 and SHA2
  • change: improve Windows error code processing
  • change: remove wait time after terminal detection
  • new: PIV FASC-N decoder class
  • new: DESFire: Value processing
  • new: Picopass read/write
  • fix: Startup(false) overwrites card terminal registry
  • fix: DESFire: writing over 256 bytes fails
  • fix: DESFire: invalid MAC when reading multiple frames
  • fix: DESFire: Read() plain file after AES authentication fails
  • fix: de/reconnecting reader may trigger unhandled exception

Lib Version G1 (rev 04MAR2020)

  • new: PIVcrypto implementation
  • new: PIV SHA256 signature
  • added SDK documentation CardModule.PIV and CardModule.CAC
  • removed installer; all distributions ZIP-based
  • builds for .NET framweork version 3.5, 4.5, 4.6.1
  • sample code used binaries built against .NET 4.5
  • changed main reference binaries and sample code from 4.6.2 due to
  • incompatibility with some Windows 10 images
  • all binaries digitally signed by CardWerk Technologies
  • smartcard.dll file properties reflect .NET framework version

Lib Version G1 (rev 04DEC2019)

  • built against .NET 4.6.2
  • change: removed installer; all distributions ZIP-based
  • change: SDK distribution to ZIP-file only for easier installation to any local folder
  • new: DESFire EV1 sample code to SDK distribution 
  • new: ReaderModule.Omnikey.dll (supports HID OMNIKEY xchip, Aviator and Apollo chipsets)
  • sample code now shows usage of lost/found terminal
  • new: DESFire EV1 in legacy mode: DES with weak crypto keys supported; TDES support
  • change: renamed sample code – only one “Hello” sample remaining and that’s HelloCard
  • new: DESFire EV1 Authenticate() FormatPICC(), CreateApplication() via CardModule.DESFire
  • new: DESFire EV1 AES encrypted read/write
  • fix: Windows 2008 Server RDP session dis/reconnect triggers PC/SC Win32 error
  • new: MemoryCard: access to SLE4442 protected memory
  • fix: CardModule.ICLASS GetRawPacsBit() does not close secure session
  • new: CardModule.ICLASS SEOS support on OMNIKEY 5023 and OMNIKEY 5x27CK readers
  • fix: pcsc-level error “access denied” during establish context 
  • new: CardModule.MemoryCard supports OMNIKEY 5122/5422 
  • each sample code folder contains its local copy of libraries necessary for this sample

Version G1 (rev 02JUN2017)

  • replaces public release
  • new: all assemblies are built against .NET framework version 4
  • new: HelloCard.Console sample to make it even easier to become familiar with SmartCardAPI
  • new: CardModule.MemoryCard to access synchronous cards on HID OMNIKEY readers (Xchip and Aviator support)
  • new: CardModule.NfcTag to access Mifare Ultralight, NTAG
  • new: HID iCLASS support via OMNIKEY 5022 and OMNIKEY 5×27 CK readers (avail. upon request)
  • new: move CAC specific sample code to HelloCAC sample code
  • new: Windows Help file now also available as PDF document “SmartCardApi.ApiDoc.pdf”
  • new: version info reflects year, month and day it was built; stands for version 5.0 built 02JUN2017

Lib Version (rev.18AUG2015)

  • replaces public release
  • fix: broken links to CardModule and SmartCardAPI references in HelloPIV sample code
  • fix: introduce ReaderModules, DataModules, SecurityModules for better code separation
  • new: ReaderModule.Omnikey to support memory cards and iCLASS cards via OMNIKEY proprietary DLLs & APDUs
  • new: DataModule.Wiegand for greatly improved PACS card decoding of raw Wiegand data
  • new: CardModule.HID.PROX to access HID PROX cards on HID OMNIKEY readers
  • new: CardModule.HID.ICLASS to access HID iCLASS cards on HID OMNIKEY 5×21 readers (upon request)
  • new: CardModule.Mifare to access NXP Mifare classic cards on PC/SC part 3 compliant contactless card readers
  • fix: introduce 0x648x SW for readers that respond with I/O errors to unsupported commands
  • new: all modules are built with strong names
  • new: sample: HelloiCLASS (upon request)
  • new: GetInstructionName() supports PC/SC part 3 instruction name
  • change: HelloSyncAPI renamed to HelloMemoryCard
  • change: new installer
  • new: using Doxygen to generate API documentation
  • new: API documentation available in PDF format

Lib Version (rev.30OCT2014)

  • replaces public release
  • fix: support card terminals that return unexpected PC/SC errors with some attribute requests
  • new: built with strong names

Lib Version (rev.02JAN2014)

  • replaces public release
  • fix: EndTransaction accepts if card or reader handle are already null (no more exception thrown)
  • new: iCLASS PACS bit access via OMNIKEY 5×21 and sync API
  • new: sample code with transaction protection
  • new: sample programs handle reader, smart card service recovery
  • new: HelloProx support for OMNIKEY 5427 CK multi frequency reader

Lib Version (rev.21NOV2013)

  • replaces public release
  • new: Smartcard.dll with new terminal found event
  • new: Smartcard.dll terminal polling after singleton start until at least one terminal found
  • new: Smartcard.dll offers transaction protection
  • new: HelloPIV with protected card access
  • new: HelloProx support for OMNIKEY 5025 PROX card reader in CCID mode

Lib Version (rev.05AUG2013)

  • replaces public release
  • fix: Smartcard.dll: CardHex.FromArray() truncates LSB bytes causing invalid raw Wiegand data
  • new: HelloProx with CardModule.CLICS integration for PC/SC Part 3 compliant reader access

Lib Version (rev.15MAY2013)

  • replaces public release
  • new: Smartcard.dll: CardPcscPart3 and PCSC_PART3_XYZ constants for PC/SC 2.01 Part 3 compliant card system access
  • new: HelloPIV: GetData() now supports T=1 cards that don’t return data with the first response APDU
  • new: CardModule.CLICS with card edge for PC/SC compliant contactless storage cards. Ideal for Mifare Classic, Ultralight
  • new: HelloMifare: sample code for Mifare card now accesses care reader via CardModule.CLICS

Lib Version (rev.06FEB2013)

  • replaces public release
  • HelloPIV: add X509 certificate access, card capability container
  • CardModule.PIV: add PivCardCertificate() class to read and display X509 certificates
  • CardModule.PIV: add PivCardCapability() class to read and display card capability container
  • CardModule.PIV: add BER-TLV tags for PIV data all containers

Lib Version

  • replaces public release
  • smartcard.dll: supports systems that don’t allow creation of registry.xml configuration file

Lib Version

  • replaces public release
  • HelloPIV: DoD CACv2 support
  • CardModule.PIV/CAC: change SelectCardApplication() to SelectApplet() to be in line with PIV/CAC specs
  • setup: add HelloProx
  • setup: add link to run HelloProx
  • setup: smartcard.dll: add method to extract bit sequence from byte array to support cards with Wiegand data

Lib Version

  • replaces public release
  • HelloPIV: DoD CAC support
  • SmartCard.dll: move PIV related code to CardModule.PIV
  • CardModule.PIV: introduce SelectCardApplication() to allow PIV module to explore TWIC/CAC cards
  • setup: fix link to SmartCardAPI documentation
  • setup: add link to run HelloCard

Lib Version

  • replaces public release 4.7
  • HelloPIV: demonstrate PIN and printed info access
  • SmartCard.dll: stopping scardsvr triggers terminal lost event
  • HelloXYZ: SmartCard.dll reference to lib fo

Lib Version 4.7

  • replaces public release 4.6
  • PIV card support: CHUID, FASCN, GUID,GUID
  • Sample names start with Hello
  • Add HelloCard Sample (C#, VB.NET)
  • Rename MctTrivial to HelloMct
  • Rename SimTrivial to HelloSim
  • Rename Taschenkartenleser to HelloGeldkarte

Lib Version 4.6

No major changes. Copyrights transferred to CardWerk Technologies.

  • replaces public release 4.5

Lib Version 4.5

  • replaces public release 4.3
  • Extended the MctTrivia sample application to also handle the new German eGK Gesundheitskarte.

Lib Version 4.3

  • replaces public release 4.2
  • Added CardPcScTerminalBase.ATR property for easier access to the connected card’s ATR.
  • Removed methods that launch the CardTerminalConfigurator.exe.
  • Fixed problems wit MCARD API 4.0 and later.

Lib Version 4.2

  • Ireplaces public release 4.1
  • new: property CardPcScTerminal.SharedAccess controls whether the native PC/SC card connection will be Shared or Exclusive.
  • new: REG_SZ registry value [HKLM] SharedAccess controls the default access mode. If, and only if, this registry value is “1”, then the default access mode is Shared access.

Lib Version 4.1

  • replaces public release 4.0
  • improved: Greatly simplified the CardTerminalSlot state tracking. Now the CardTerminalSlotState enumeration only has the states Empty, Inserted and Accepted. This improves the realiability of the Card Inserted and Card Removed events. Now these events are also reliably fired when a card reader is physically disconnected or connected.
  • removed: fRetryCards parameter from CardTerminalManager.RequestCard method as this is no longer needed by the simplified card reader state tracking.
  • improved: ATR handling and added CardHandle.GetHistoricalBytes method.
  • new: CardHandle.SelectDirectory method.
  • new: overloaded CardCommandAPDU.AddData(byte) method.
  • Improved automatic GET RESPONSE handling in CardHandle class in order to deal with GSM SIM cards.
  • fix: GSM SIM status codes are correctly interpreted in CardResponseAPDU class.
  • improved CardTerminalRegistry.AutoRegisterPcSc method such that it now also automatically eliminates any entries of smart card readers that no longer exist in the system.

Lib Version 4.0

This is a major update which new features a complete rework of the code base. The most prominent new feature is the support for PC/SC Workgroup specification 2.0.1 part 10, which includes Secure PIN Entry (SPE).

  • replaces public release 3.3
  • Support for secure PIN entry according to the PC/SC Workgroup specification 2.0.1 part 10. Secure PIN entry is supported through all means defined in this specification.
  • The previously internal class CardTerminalSlot is now public and is now the primary means for acquiring a CardHandle. Events have been changed to supply a CardTerminalSlot reference instead of a ICardTerminal reference and a slot number. Generally this makes handling card insertions and removals much more convenient and straightforward.
  • The CardCriteria class has been removed completely. Instead the CardTypes value is passed to AcquireCard and RequestCard.
  • Proprietary ACR-80 support has been removed completely. Instead it is recommended to use the standard PC/SC interface for it.
  • The CardHandle methods ReadBinary and ReadRecord now handle the SW codes 0x61xx and 0x6Cxx automatically by issuing a GET RESPONSE or re-issuing the command with the correct length byte.
  • All DLLs that make up the SmartCard API (Professional) have now been merged into a single SmartCard.dll. This eases deployment and development.
  • Many small improvements that increase the robustness.

Lib Version 3.3

For release 3.3 the SmartCard API was made security aware. This means that it is no longer required to always have a fully trusted caller in order to access the SmartCard API. To achive this goal the following individual changes have been made:

  • replaces public release 3.2
  • new: Added AllowPartiallyTrustedCallers attribute to all assemblies and also added security permission assertions for the following permissions wherever these permissions are needed: UnmanagedCode; Reflection; FileIO access to the card terminal configuration XML file. As a result it is now possible to use the SmartCard API from .NET applications that have been deployed through the Intranet or Internet, and even from applications that are hosted inside the Internet Explorer. To make this work all assemblies of the SmartCard API must be either added to the Global Assembly Cache, or must be granted full trust based on their string name using the Microsoft .NET Configuration tool.
  • new: The card terminal registry file has been moved from the LocalApplicationData to the CommonApplicationData folder. This means that all settings are now applicable to all users. This also means that a system administrator can now set up the card readers for his users.
  • new: SmartCard API itself now only demands and asserts read access to the card terminal registry file. Only the CardTerminalConfigurator demands and asserts write access. This means that the configuration can now be protected by appropriate security policies.
  • new: CardTerminalConfigurator logging is now directed to the CommonApplicationData folder instead of “C:\”. Also, if the logging file yould not be created, then the CardTerminalConfigurator simply continues without logging.
  • fix: MCardHandle.Connect method leaves MCardHandle in an unusable state when the connection failed.
  • fix: CardTerminalRegistry.LoadRegistry does not work with empty files – XML errors in the registry file are ignored for more robust code
  • fix: The SCardException now maps the Windows error code ERROR_UNRECOGNIZED_MEDIA to SCardResponseCode.UnresponsiveCard. The error code ERROR_UNRECOGNIZED_MEDIA is returned by some readers when a card is inserted the wrong way.
  • new: CT-API card terminal number (CTN) can now be configured in the CardTerminalConfigurator.

Lib Version 3.2

  •  replaces last public release
  • Improved compatibility with .NET Framework 2.0.
  • new: support for additional memory cards.
  • Improved CardDataObject
  • new: add CardDataObjectList for better and easier parsing of BER-TLV encoded card data.
  • Improved MctTrivia sample application.