CardServer V2.02
Transcription
CardServer V2.02
CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 CardServer V2.02 Technische Dokumentation SmartCard Manager, SCARD Interface, Delphi Komponente Release 02.03.98 © '98 TOWITOKO electronics GmbH - 1/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 Versionsverzeichnis V2.01 • Delphi Komponente erweitert: Properties: ConfigMenuItem, ConfigPopupMenu, ConfigMaxPort V2.02 • Kommando "Device,Select " wurde erweitert, so daß neben dem Index des Geräts in der Terminalliste auch der Gerätenamen (Kurzname oder Gerätebezeichnung wie unter "Device,Info ") und/oder der COM Port angegeben werden kann. • Der CardServer Task SCARDSRV.EXE bzw. SCARDS32.EXE muß im Windows-Verzeichnis stehen. Der Aufruf erfolgt bei allen Interfaces (z.B. SCARD.DLL) mit expliziter Pfadangabe. • Versionskontrolle der Interfaces gegen den ServerTask • Messages für Gerätesuche und Listenverwaltung (Tasks, Geräte) ergänzt • Delphi Komponente erweitert: Ereignisse: OnDeviceListChange, OnTaskListChange, OnCardInfoChange, OnDeviceSearch Properties: Enabled • neue Memorychips von XICOR werden unterstützt • volle Funktionalität auch unter Windows NT™ 4.0 • Probleme mit "KartenZwerg" und "CHIPDRIVE extern II" behoben • kleinere Korrekturen - 2/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 CardServer - Überblick Es gibt viele Hersteller von Chipkarten, Terminals und Treibern. Dazu kommen eine Reihe von Industrie-Standards, Kartenprotokollen und umfangreiche Normen. Wir haben es uns zum Ziel gesetzt, Ihnen die Einbindung von Chipkarten und Terminals so einfach wie möglich zu gestalten. Der CardServer nimmt Ihnen eine Reihe von Aufgaben ab: Management der angeschlossenen Terminals: • Verwaltung einer Liste der angeschlossenen Chipkartenterminals, ähnlich der Auswahlliste in einem Druckerdialog (z.B. 'CHIPDRIVE extern an COM1') • Status zu jedem Gerät: Zustand der Chipkarte, Seriennummer, Geräteinformationen • Die letzte Konfiguration wird in einer INI-Datei abgelegt (z.B. COM-Port Belegung) Management der verbundenen Anwendungen: • Verwaltung einer Liste aller Anwendungen die derzeit mit dem CardServer verbunden sind • Der CardServer übergibt die Kontrolle über eine Karte immer genau an eine Anwendung. Wenn die Anwendung die Bearbeitung der Chipkarte beendet hat, übergibt der CardServer die Karte der nächsten Anwendung. • Der CardServer kann in Abhängigkeit der gesteckten Karte bestimmte Anwendungen starten, wenn sich die Anwendung für diese Karte registriert hat. Dabei kann als Kriterium der z.B. die Kartenapplikation (z.B. GSM oder EC-Karte) oder der AID der Karte verwendet werden (ab V2.10). Management von Memory-Chipkarten: • Automatische Erkennung des Kartentyps und verschiedener Kartenparameter inkl. notwendiger PINs, Schreibschutz und sogar der Pagegrößen für I2C Karten • Automatische Erkennung der Applikationen auf der Karte • Zugriff über einheitliche Funktionen, unabhängig vom Kartentyp, z.B. "Card,MemWrite" oder "Card,ISOAPDU" • direkter Schreib- und Lesezugriff auf TLV-Felder (Tag Length Value Codierung) • Caches für Schreib- und Lesezugriffe • PIN-Verwaltung • über 50 Chiptypen werden unterstützt! Management von Prozessor-Chipkarten: • Automatische Erkennung des Kartentyps und Auswertung des ATR • Kommandos im Transparentmode (1:1 zur Karte ohne Protokoll-Overhead) • T0 und T1 sind komplett nach ISO7816-3 implementiert inkl. Errorhandling, Chaining und allen S-Blocks • T0 und T1 Protokollparameter werden aus dem ATR voreingestellt • APDU alternativ nach ISO7816-4, GSM11.11 oder CT-API Zugriff auf Standardapplikationen: • GSM-Karten nach GSM11.11 werden erkannt und können über Makrofunktionen bearbeitet werden, d.h. Sie können z.B. mit dem Kommando 'Apps,Gsm,ReadAdn,17' direkt die Kurzwahlrufnummer 17 lesen. Gleichzeitig können Sie natürlich T0-Kommandos direkt verarbeiten. Das GSM-Modul unterstützt folgende Kartenbereiche: ADN, FDN, MSISDN, LDN, BDN, SMS, SMSP, CBMI, PUCT, PLMN u.v.m. • Die deutsche Krankenversichertenkarte • Die deutsche Telefonwertkarte • Die deutsche EC-Karte mit Chip • Über PlugINs können weitere Applikationsmodule selbst erstellt werden! (ab V2.10) - 3/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 Schnittstellen zum CardServer Der CardServer läuft unter Windows® 95, Windows NT™ und Windows® 3.11 als eigenständiger Task im Hintergrund. Die Applikationen können auf den CardServer über eines der folgenden Interfaces zugreifen. Alle Interfaces sind kompatibel zu den o.g. Betriebssystemen. TDEV Schnittstelle - TDEV.DLL, TDEV32.DLL Die TDEV Schnittstelle ist aus Kompatibilitätsgründen zu früheren Version unserer Treiberunterstützung weiterhin verfügbar. Wir empfehlen die Verwendung der neuen SCARD Schnittstelle, da Sie damit vollen Zugriff auf die neuen Features des CardServers erhalten. Als 16- und 32 Bit Version unter Windows® 95, Windows NT™ und Windows® 3.11. CT-API Schnittstelle - CTAPIW16.DLL, CTAPIW32.DLL CT-API Schnittstelle, kompatible zur CT-API V1.1 (Herausgeber: Deutsche Telekom AG / PZ Telesec, GMD Forschungszentrum Informationstechnik GmbH, TÜV Informationstechnik GmbH und TeleTrustT Deutschland e.V.) Näheres zu diesen Spezifikationen finden Sie auch im Internet unter: http://www.darmstadt.gmd.de/~eckstein/CT/mkt.html#SPEK. Der Befehlssatz ist nach MKT implementiert (Multifunktionale Kartenterminals für das Gesundheitswesen, Herausgeber: GMD Arbeitsgemeinschaft 'Karten im Gesundheitswesen'). Auch diese Schnittstelle bietet nur einen Bruchteil der CardServer Funktionalität. Als 16- und 32 Bit Version unter Windows® 95, Windows NT™ und Windows® 3.11. SCARD Schnittstelle - SCARD.DLL, SCARD32.DLL Die SCARD Schnittstelle kapselt die volle CardServer Funktionalität. Dabei ist die Einbindung extrem einfach. Alle Aufrufe laufen über eine DLL-Funktion. Fensterbotschaften dienen der Ereigniss-Steuerung Ihrer Anwendung. Als 16- und 32 Bit Version unter Windows® 95, Windows NT™ und Windows® 3.11. Delphi 1/2/3 Komponente - SCARDCMP.PAS Unter DELPHI steht eine Komponente zur Verfügung, die die Einbindung weiter vereinfacht. Alle Ereignisse sind umgesetzt und diverse Listen (Terminals, Anwendungen, Terminalinformationen, Karteninformationen) stehen als Stringlisten zur Verfügung. Als 16- und 32 Bit Version unter Windows® 95, Windows NT™ und Windows® 3.11. - 4/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 Die SCARD Schnittstelle Alle Aufrufe dieser Schnittstelle werden direkt an den CardServer weitergegeben. Die Funktion kehrt erst nach Bearbeitung des Kommandos durch den CardServer zurück. Während das Kommando ausgeführt wird, werden weiterhin Windows-Botschaften verarbeitet. Die SCARD Schnittstelle kann rekursiv aufgerufen werden (in maximal 4 Ebenen). Beide DLLs 16/32 BIT (SCARD.DLL / SCARD32.DLL) exportieren die folgende Funktion: SCardComand (Handle, Cmd, CmdLen, DataIn, DataInLen, DataOut, DataOutLen) LPINT LPSTR LPINT LPSTR LPINT LPSTR LPINT Handle Cmd CmdLen DataIn DataInLen DataOut DataOutLen /* pointer auf einen 32 Bit signed integer */ /* pointer auf einen null terminierten string */ /* pointer auf einen 32 Bit signed integer */ /* pointer auf ein array of byte oder string */ /* pointer auf einen 32 Bit signed integer */ /* pointer auf ein array of byte oder string */ /* pointer auf einen 32 Bit signed integer */ Handle Falls mehrere Instanzen der DLL in einer Applikation benötigt werden, kann dieses Handle benutzt werden, um entsprechende Objektinstanzen zu unterscheiden. Der Wert kann auf null gesetzt werden, wenn nur eine Instanz benötigt wird, der CardServer übernimmt die Zuordnung dann über das Thread-/Taskhandle Ihrer Anwendung Cmd CardServer Kommando (nullterminierter String) CmdLen Gibt die Länge des Kommandostrings an, wenn die Übertragung zum CardServer verschlüsselt abläuft. Bei unverschlüsselter Übertragung muß null übergeben werden. DataIn Pointer auf Eingabedaten DataInLen Gibt die Länge der Eingabedaten an DataOut Pointer auf Ausgabedaten DataOutLen Gibt die maximale Länge der Rückgabedaten vor und wird auf die tatsächliche Länge der Rückgabedaten gesetzt response globaler Returncode, bei erfolgreicher Ausführung wird null zurückgegeben - 5/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 Beispiel zur Einbindung unter VB4/5, Access Declare Function SCardComand Lib "SCARD32.dll" ( Handle As Long, ByVal Cmd As String, CmdLen As Long, ByVal DataIn As String, DataInLen As Long, ByVal DataOut As String, DataOutLen As Long ) As Long HINWEIS: Wenn Sie eine 16-BIT Version von VB verwenden, müssen Sie auch die 16 BIT DLL einbinden: ... Lib "SCARD.DLL" ... Beispiel zur Einbindung unter PASCAL / DELPHI function SCardComand ( var Handle: LongInt; Cmd: Pointer; var CmdLen: LongInt; DataIn: Pointer; var DataInLen: LongInt; DataOut: Pointer; var DataOutLen: LongInt): LongInt; stdcall; external "SCARD32.DLL"; HINWEIS: Unter DELPHI 1 (16-BIT Version), müssen Sie auch die 16 BIT DLL einbinden: ... LongInt); LongInt; external "SCARD"; - 6/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 Die DELPHI Komponente Unter DELPHI vereinfacht sich die Einbindung weiter. Im wesentlichen übernimmt die Komponente TSmartCard folgende Aufgaben: • Lädt die SCARD Library (16/32) dynamisch und importiert die Funktion SCardComand • Richtet eine Objektinstanz zum CardServer ein • Erzeugt ein Fensterhandle und registriert es zum Empfang der CardServer-Ereignisse • Führt eine neue Exception "ESmartCard" ein, und leitet Fehlermeldungen so weiter Im folgenden werden die Methoden, Eigenschaften und Ereignisse der Komponente TSmartCard kurz erläutert. Näheres finden Sie im Referenzteil der CardServer Kommandos: TSmartCard - METHODEN function Comand (const Cmd: string; DataIn: pointer; DataInLen: longint; DataOut: pointer; DataOutMax longint): longint Die Methode kapselt die SCardComand Funktion zur Kommunikation mit dem CardServer. In Cmd wird der Kommandostring übergeben. DataOutMax gibt die max. Größe der Datenstruktur DataOut an. Beide Pointer können mit NIL übergeben werden, wenn keine Daten benötigt werden. Der Rückgabewert enthält die Anzahl der nach DataOut kopierten Bytes. Wenn ein Fehler auftritt, wird eine ESmartCard Exception ausgelöst. function ComandStr (const Cmd, DataIn: string): string; Entspricht Comand, benutzt aber statt Pointern auch zur Datenübertragung Strings. Der Rückgabewert entspricht DataOut. procedure ComandList (const Cmd: string; Lines: TStrings); Entspricht Comand ohne Eingabeparameter (DataIn := NIL). Das Ergebnis wird als Stringliste interpretiert und in Lines abgelegt (z.B. benutzt von DeviceList). TSmartCard - PROPERTIES Active: Boolean; Wird diese Eigenschaft auf TRUE gesetzt, lädt die Komponente die SCARD Library und startet damit den CardServer. FALSE entlädt die Library. Enabled: Boolean; Sperrt alle Ereignissroutinen. Die Library wird nicht ge- oder entladen. Wenn der CardServer der Komponente die Karte zuteilt, wird sofort das Kommando "Card,Unlock" aufgerufen, um die Bearbeitung an die nächste Anwendung bzw. die nächste Delphi Komponente in Ihrer Anwendung weiterzugeben (unabhängig von der Eigenschaft AutoUnlock). DeviceInfo: TStringList Liste der Terminalinformationen des aktuell gewählten Terminals DeviceList: TStringList Liste der verfügbaren Terminals TaskList: TStringList Liste der mit dem CardServer verbundenen Applikationen/Tasks CardInfo: TStringList Liste der Informationen über die eingesteckte Karte AutoUnlock: Boolean Diese Eigenschaft bewirkt die automatische Freigabe des Terminals (Befehl 'Device,Unlock'), nachdem das Ereignis OnActiveCard beendet wurde. ConfigPopupMenu: TPopupMenu Wird dieser Eigenschaft ein PopupMenü zugewiesen, trägt die Komponente die erforderlichen Einträge zur Konfiguration des CardServers und zur Terminalauswahl ein. ConfigMenuItem wird gelöscht, wenn diese Eigenschaft verwendet wird. ConfigMenuItem: TMenuItem Wird dieser Eigenschaft ein Menüeintrag zugewiesen, trägt die Komponente die erforderlichen - 7/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 Einträge zur Konfiguration des CardServers und zur Terminalauswahl ein. ConfigPopupMenu wird gelöscht, wenn diese Eigenschaft verwendet wird. ConfigMaxPort: Integer Die Eigenschaft gibt die Anzahl der zur Auswahl stehenden COM-Ports im ConfigMenü an. TSmartCard - EVENTS OnDeviceError: TCardEvent Das Terminal ist ausgefallen / die Verbindung zum PC wurde getrennt! OnCardWait: TCardEvent Es ist keine Karte im Terminal / die Karte wurde aus dem Terminal genommen OnCardDetect: TCardEvent Eine Karte wurde ins Terminal gesteckt. Die Karte kann noch nicht bearbeitet werden! OnCardInvalid: TCardEvent Die Erkennung ist fehlgeschlagen / keine gültige Karte! OnCardActive: TCardEvent Die Karte wurde erkannt und aktiviert. Die Karte kann jetzt bearbeiten werden. OnCardLock: TCardLockEvent Eine andere Applikation hat die Bearbeitung der Karte begonnen OnCardValid: TCardEvent Alle Applikationen haben die Bearbeitung der Karte abgeschlossen (über das Kommando 'Card,Unlock'). Es ist jetzt wieder möglich die Karte erneut zu bearbeiten. OnProgress: TProgressEvent Ereignis zur Fortschrittsanzeige bei Memorykartenzugriffe OnDeviceSearch: TSearchEvent Ereignis zur Fortschrittsanzeige während der Suche nach einem Terminal (über Kommando "Device,SearchComPort" oder beim ersten Start des CardServers) OnCardInfoChange: TNotifyEvent Ereignis zur Anzeige neuer Daten in der Liste CardInfo OnTaskListChange: TNotifyEvent Ereignis zur Anzeige neuer Daten in der Liste TaskList OnDeviceListChange: TNotifyEvent Ereignis zur Anzeige neuer Daten in der Liste DeviceList - 8/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 CardServer Referenz Um die Einbindung des CardServers so einfach wie möglich zu gestalten, wird für jedes Kommando der gleiche Syntax verwendet. Die Selektion der Funktionen und die Übergabe evtl. notwendige Parameter werden über einen Kommandostring realisiert. Eingabe- und Ausgabedaten sind optional. Ein Kommandostring ist immer aus Schlüsselwörtern und Parametern aufgebaut, die durch Komma getrennt werden. Bsp.1 Kommando Str( " Device,Info,Type " ) DataIn nil DataOut Str( " CHIPDRIVE extern " ) Das Kommando gibt den aktuellen Gerätetyp aus. Mögliche Returncodes: 0 = OK Bsp.2 Kommando Str( " Card,MemWrite,16,8 " ) DataIn Str( " TOWITOKO" ) DataOut nil Das Kommando schreibt 8 Zeichen ab Adresse 16 auf eine Memorykarte Mögliche Returncodes: 0='OK', 4000='Keine Karte im Leser', 1009='Lesegerät ist gesperrt' Einfach starten Bei der Entwicklung des CardServers war die einfache Einbindung einer der wichtigsten Punkte. Der CardServer bietet alle Funktionalitäten des PC/SC Standards (und mehr), ist aber dennoch so aufgebaut, daß Sie auch mit einem Minimum an Aufwand sofort starten können. Um die oben genannten Beispiele auszuführen müssen Sie keine weiteren Parameter initialisieren oder andere (administrative) Kommandos ausführen - einfach starten! Dennoch haben Sie Zugriff auf eine Vielzahl von leistungsstarken Funktionen, die besonders professionelle Anwender begeistern. Der Kartenstatus Der CardServer übernimmt das Management der Karte. Für jede Anwendung wird der Status der Karte und des Terminals wie folgt geführt: • es wird geprüft, ob das Terminal angeschlossen und ansprechbar ist. Ist das nicht der Fall, wird der Status ERROR gesetzt. • es wird geprüft, ob sich eine Karte im Leser befindet. Ist das nicht der Fall, wird der Status WAIT gesetzt. • wird eine Karte eingesteckt, beginnt die 'Erkennungsphase', d.h. es wird der genaue Kartentyp (Chiptyp) ermittelt und anschließend wird geprüft, ob die Karte bestimmte Applikationen enthält. Während der 'Erkennungsphase' wird der Status DETECT gesetzt. Kartenzugriffe sind noch nicht möglich (Fehlermeldung 'Keine Karte im Leser')! • ist die Karte nicht lesbar oder unbekannt, wird der Status INVALID gesetzt • andernfalls wird die Karte genau einer Anwendung zugänglich gemacht. Für diese Anwendung wird der Status ACTIVE gesetzt, für alle anderen Anwendungen der Status LOCKED. • An diesem Zustand ändert sich nichts, bis: a) die Karte entfernt wird. Der Status WAIT wird gesetzt. b) die aktive Anwendung das Kommando 'Card,Unlock' aufruft. • Im Fall b) teilt der CardServer die Karte der nächsten Anwendung zu, die wiederum die Kontrolle weitergeben kann (über 'Card,Unlock'). • Haben alle Anwendungen die Karte wieder freigegeben, wird der Status VALID gesetzt, d.h. die Karte ist gültig und derzeit keiner Anwendung zugeordnet. - 9/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 • Sollte eine Anwendung die Karte erneut bearbeiten(z.B. aufgrund einer Benutzeraktion), muß die Kontrolle über das Kommando "Card,Lock" wieder angefordert werden. Der Status ACTIVE wird für die Anwendung, die das Kommando erfolgreich ausgeführt hat, gesetzt, für alle anderen Anwendungen gilt der Status LOCKED. • Die aktive Anwendung kann wiederum über 'Card,Unlock' die Kontrolle abgeben, d.h. Status VALID für alle Anwendungen. Der Status kann jederzeit abgefragt (gepollt) werden. Hierzu dient das Kommando "Card,Info,Status" oder "Card,Info". Windows Messaging Unter Windows ist es wesentlich vorteilhafter, Statusänderungen über Fensterbotschaften zu übermitteln. Dies entlastet das System, da ein ständiges pollen nicht notwendig ist. Ihre Anwendung kann über die Befehle "System,AddHWndMsg" und "System,DelHWnd" beliebig viele Fenster zum Empfang von CardServer Botschaften registrieren bzw. wieder entfernen. Eine Botschaft wird an Ihre Anwendung in folgenden Fällen geschickt: • Im Fall einer Statusänderung (z.B. WAIT -> DETECT) • Innerhalb des Status LOCKED, wenn eine neue Anwendung die Kontrolle übernimmt Bei folgender Statusänderung wird keine Botschaft geschickt: • wenn Sie die Bearbeitung der Karte über 'Card,Lock' erneut anfordern, d.h. der Status für Ihre Anwendung von VALID auf ACTIVE wechselt, wird keine Botschaft geschickt. Für alle anderen Anwendungen wechselt der Status von VALID auf LOCKED, eine entsprechende Botschaft wird geschickt. Sinn dieser Ausnahme ist es, daß die Botschaft ACTIVE nur bei der ersten Aktivierung nach dem Einstecken gesendet wird. Der Aufbau der Botschaft Die Windows Botschaft wird über "PostMessage" an das übergebene Fensterhandle geschickt. Den Message ID (MsgID) können Sie ebenfalls bei der Registrierung des Fensterhandles angeben (vgl. "System,AddHWndMsg,[HWND],[MsgID]"). Der W-Parameter gibt den Botschaftstyp an: • MsgError = dezimal 100 bei Statusänderung nach ERROR • MsgWait = dezimal 110 bei Statusänderung nach WAIT • MsgDetect = dezimal 120 bei Statusänderung nach DETECT • MsgInvalid = dezimal 130 bei Statusänderung nach INVALID • MsgValid = dezimal 140 bei Statusänderung nach VALID • MsgActive = dezimal 150 bei Statusänderung nach ACTIVE • MsgLocked = dezimal 160 bei Statusänderung nach LOCKED und bei jedem Wechsel der aktiven Anwendung • MsgProgress = dezimal 200 zur Fortschrittsanzeige bei Memorycard-Zugriffen • MsgDeviceList = dezimal 300 zeigt Änderungen in der Geräteliste an • MsgDeviceSearch = dezimal 301 Fortschrittsanzeige während der Gerätesuche • MsgTaskList = dezimal 310 zeigt Änderungen in der Taskliste an • MsgCardInfo = dezimal 320 zeigt Änderungen der Liste CardInfo an - 10/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 Das niederwertige Word des L-Parameters gibt den Index des aktiven Terminals innerhalb der Terminalliste an (mit null beginnend). Ausnahme: • MsgDeviceSearch: COM-Port, an dem gesucht wird Das höherwertige Word des L-Parameter ist botschaftsabhängig: • MsgLocked Index der aktiven Anwendung innerhalb der Taskliste (mit null beginnend) • MsgProgress Fortschrittswert von 0 bis 100 in Prozent • MsgDeviceSearch Fortschrittswert von 0 bis 100 in Prozent, Sonderwerte: 254: Gerät OK; 255: Kein Gerät gefunden - 11/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 Reihenfolge der Aktivierung von Anwendungen Der CardServer bestimmt die Reihenfolge, in der den Anwendungen die Karte zugeteilt wird. Die Priorität wird nach den folgenden Kriterien (in der Reihenfolge der Listung) festgelegt (ab V2.10). Es wird untersucht, ob • eine Anwendung sich für eine bestimmte Kartenapplikation registriert hat (z.B. SIM-Surf für GSM-Karten). • eine Prozessorkarte die Selektion über einen der registrierten Namen zuläßt (ISO7816-4). • eine Memorykarte einer registrierten Maske (byteweiser Vergleich beliebiger Speicherbereiche) entspricht • eine Anwendung einen AID registriert hat (in den Historybytes des ATR von Prozessorkarten, oder im ATR (TLV-Kodierung) einer Memorykarte Ergibt sich keine eindeutige Zuordnung, d.h. haben mehrere Anwendungen gleichrangige Kriterien erfüllt, oder wurden keine Kriterien erfüllt, entscheidet die Tabulatorreihenfolge des Windows-Desktops über die Aktivierung. Regeln zum einwandfreien Betrieb mit mehreren Anwendungen Die automatische Auswahl der passenden Anwendung und v.a. die Weitergabe der Aktivierung an die nächste Anwendung können Sie optimieren. Beachten Sie dazu folgende Punkte: • Registrieren Sie zuverlässige Kriterien • Erlauben Sie dem CardServer Ihre Anwendung bei Bedarf zu starten • Öffnen Sie keine modalen Dialogboxen, solange Ihre Anwendung nicht die aktive Anwendung ist. Es könnten sonst gleichzeitig mehrere modale Dialoge geöffnet werden! • Nutzen Sie insbesondere das Ereignis DETECT nicht, um Dialoge oder Fenster zu öffnen, sondern blenden Sie besser einen Text in einer Statuszeile ein, z.B. 'Karte wird untersucht, bitte warten'. • Nutzen Sie das Ereignis INVALID (ungültige Karte) nicht für modale Dialoge! • Rufen Sie die Funktion 'Card,Unlock' auf, wenn Sie die Karte nicht bearbeiten können oder die Bearbeitung abgeschlossen haben. • Führen Sie vor dem Befehl 'Card,Unlock' den Befehl 'Card,Reset' aus, wenn Sie erworbene Kartenrechte löschen möchten. Sie sollten andere Möglichkeiten der Karte vorziehen, da auch alle Caches des CardServers gelöscht werden. • Unsere Empfehlung zur Terminalauswahl ist ein Windowsmenü mit folgenden Einträgen: - "COM1" bis "COM8" - Trennlinie, - "automatische Terminalwahl" - Trennlinie - Auflistung der angeschlossenen Terminals ("Device,List"). Auf diese Weise kann der Benutzer auf übersichtliche Weise: a) neue Terminals anmelden - Kommando "Device,SearchComPort,[Port]" b) die "automatische Terminalwahl" aktivieren - Kommando "Device,Select,-1" c) explizit ein bestimmtes Terminal bestimmen - Kommando "Device,Select,[Index]" - 12/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 CardServer - gobale Returncodes Ein wesentliches Merkmal des CardServers ist seine einheitliche Fehlerbehandlung über die globalen Returncodes. In der Datei SCARD.ERR sind alle Werte mit entsprechenden Texten gelistet. Übersetzungen sind einfach möglich, erweitern Sie dazu die Datei entsprechend dem INI-Format. Code Fehlermeldungstext Beschreibung 0000 OK Kommando erfolgreich ausgeführt 1001 Serielle Schnittstelle ist Die Suche an dem gewählten COM-Port ist nicht nicht verfügbar möglich, weil die Schnittstelle unter Windows nicht verfügbar ist. Der COM-Port muß unter Systemsteuerung/Anschlüsse bzw. mit dem Gerätemanager eingerichtet werden. 1002 Serielle Schnittstelle ist Der COM-Port wird von einer anderen Anwendung von einer anderen genutzt (z.B. der Maus oder einem Modem) Anwendung belegt 1008 Kein Lesegerät am Anschluß gefunden Der COM-Port ist richtig installiert, aber es wurde kein Terminal gefunden (Verbindung prüfen) 1009 Lesegerät ist gesperrt von - Im Moment ist der Zugriff auf das Terminal nicht möglich, weil eine andere Anwendung die Karte bearbeitet oder noch nicht freigegeben hat. 1010 Die Anwendung ist mit TOWITOKO vertreibt OEM-Terminals, die nicht mit der diesem Lesegerät nicht TOWITOKO Standardsoftware kompatibel sind. Die Geräte lassen sich Upgraden (vgl. www.towitoko.de) kompatibel 4000 Keine Karte im Lesegerät 4001 Karte wurde während des Zugriffs entfernt 4002 Ungültige Karte im Lesegerät 4004 Karte konnte nicht ausgeworfen werden Reserviert für zukünftige Lesegeräte mit automatischem Kartenauswurf 1200 Befehl unbekannt Der Kommandostring konnte nicht interpretiert werden 1201 Befehl mit dieser Karte Nicht alle Kommandos sind mit allen Karten kompatibel, nicht möglich insbesondere Memorykarten und Prozessorkarten 1202 Befehl mit diesem Terminal nicht möglich Wird z.B. von Terminals ohne Prozessorkartenunterstützung ausgelöst, wenn ein T0 Kommando geschickt wird 1203 Befehlsparameter ungültig z.B. ungültiger Adressbereich beim Befehl 'Card,MemRead' 1310 Kartenzugriff fehlgeschlagen nicht reparabler Fehler bei der Kommunikation mit der Chipkarte 1311 PIN-Fehler! Noch #1 Versuch(e) PIN-Fehler bei Memorykarten; #1 wird durch die Anzahl der restlichen Versuche ersetzt, wenn der Fehlertext abgerufen wird 2000 Server nicht verfügbar Der CardServer konnte nicht gestartet werden - 13/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 CardServer - Kommandobereich SYSTEM Im Bereich System finden Sie alle Befehle zur Administration und Taskverwaltung: System,Info Ermittelt Informationen zum CardServer und zum Status der Kommandoausführung. Folgende Werte werden können abgefragt werden: VersionCode : Version des CardServers (4 stellig BCD codiert) VersionText : Version als String ErrText: Text der letzten Fehlermeldung ErrCode: Fehlercode (globaler Returncode) des letzten fehlerhaften Kommandos Lng: eingestellte Sprache für die aufrufende Applikation Handle: Handle, daß der aufrufenden Objektinstanz zugeordnet ist Der Aufruf "System,Info " liefert alle Werte zurück (getrennt durch CR/LF = #13#10). Wird der Kommandostring um ein Keywort erweitert wird nur der entsprechende Parameter zurückgegeben. Bsp.1: Kommando Str( " System,Info " ) DataIn nil DataOut Str( " Handle=3 Lng=GERMAN VersionCode=0200 VersionText=TDEV-Server V2.00 ErrCode=4002 ErrText=Ungültige Karte im Lesegerät " ) Bsp.2: Kommando Str( " System,Info,Lng " ) DataIn nil DataOut Str( " GERMAN" ) System,TaskList Gibt die Liste der aktuell mit dem CardServer verbundenen Applikationen zurück: Bsp. Kommando Str( " System,TaskList " ) DataIn nil DataOut Str( " Delphi,'CHIPDRIVE micro' an COM2 Testgo,'CHIPDRIVE micro' an COM2 " ) System,Create Der CardServer erzeugt für jede verbundene Anwendung eine Instanz. Dazu wird das Taskhandle der Applikation benutzt. Es ist also nicht notwendig, eine Objektinstanz zu erzeugen, wenn nur eine Instanz benötigt wird. Wenn mehrere Instanzen in einer Anwendung benötigt werden, müssen diese über das Kommando "System,Create" eingerichtet werden. Wichtig: Beim Aufruf muß der Parameter Handle auf -1 gesetzt werden Bsp. Kommando Str( " System,Create " ) DataIn nil DataOut Str( " Handle=5" ) - 14/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 System,Destroy Gibt eine Objektinstanz, die mit Create erzeugt wurde wieder frei. Der CardServer führt diese Funktion auch selbsttätig aus, sobald das Taskhandle der Anwendung ungültig wird, d.h. Ihre Anwendung beendet wurde. Bsp. Kommando Str( " System,Destroy,[handle] " ) DataIn nil DataOut nil handle Handle, daß zuvor mit "System,Create " erstellt wurde System,AddHWndMsg Registriert ein Fensterhandle und einen Messagewert zur Benachrichtigung Ihrer Anwendung bei Statusänderungen. Es können bis zu 8 Fenster eingetragen werden. Bsp. Kommando Str( " System,AddHWndMsg,[hwnd],[msgID] " ) DataIn nil DataOut nil hwnd msgID Fensterhandle an das die Nachrichten geschickt werden Botschaftswert für die Benachrichtigungen (Message ID) System,DelHWnd Löscht ein Fensterhandle aus der Liste. Bsp. Kommando Str( " System,DelHWnd,[hwnd] " ) DataIn nil DataOut nil hwnd Fensterhandle an das die Nachrichten geschickt wurden System,SetLng Legt die Sprache für die aktuelle Anwendung fest. Die Fehlermeldungstexte werden aus der Datei SCARD.ERR geladen, die Sie einfach erweitern/übersetzen können. Bsp. Kommando Str( " System,SetLng,[lngstr] " ) DataIn nil DataOut nil lngStr Sprache (= Sectionstring in der Datei SCARD.ERR) z.B. 'ENGLISH' System,ConvertErrCode Gibt zu einem globalen Returncode (= ErrCode) den Fehlermeldungstext zurück: Bsp. Kommando Str( " System,ConvertErrCode,4002 " ) DataIn nil DataOut Str( " Ungültige Karte im Lesegerät " ) - 15/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 System,Comands Gibt eine Liste aller verfügbaren Kommandos aus. Der Kommandobaum kann rekursiv gelistet werden, indem der Kommandostring um weitere Schlüsselwörter erweitert wird: Bsp.1: Kommando Str( " System,Comands " ) DataIn nil DataOut Str( " System Device Card Apps" ) Bsp.2: Kommando Str( " System,Comands,Apps " ) DataIn nil DataOut Str( " List Info ... SetLedCard" ) System,CryptKey Mit diesem Kommando aktivieren Sie die verschlüsselte Kommunikation mit dem CardServer. Kommandostring und DataIn müssen nach erfolgreicher Ausführung dieses Kommandos verschlüsselt übergeben werden, DataOut wird vom CardServer verschlüsselt zurückgegeben. Der Algorithmus ist ein standard DES. Wichtig: Da die Länge der Daten beim DES Verfahren immer ein Vielfaches von 8 ist, beachten Sie bitte folgende Punkte: 1. Kommando, DataIn und DataOut haben immer eine durch 8 teilbare Länge 2. Das Kommando muß mit einem Nullzeichen abgeschlossen werden, bevor es verschlüsselt wird. 3. DataIn und DataOut wird ein 16 Bit Integer vorangestellt, der die tatsächliche Länge der entschlüsselten Daten angibt. Bsp. Kommando Str( " System,CryptKey,DES " ) DataIn KeyID (8 Byte) DataOut nil KeyID übergeben. Der DES-Schlüssel wird nicht direkt, sondern in verschlüsselter Form Näheres finden Sie unter GenCryptKey System,GenCryptKey Natürlich macht die Verschlüsselung der Kommunikation nur Sinn, wenn der Schlüssel selbst nicht übertragen wird. Daher muß in gesicherter Umgebung mit Hilfe dieses Kommandos ein KeyID berechnet werden, der dann in der Anwendungsphase dazu dient, den tatsächlichen DES-Schlüssel zu verbergen. Bsp. Kommando Str( " System,GenCryptKey,DES " ) DataIn DES-Key (8 Byte) DataOut KeyID (8 Byte) DES-Key KeyID DES-Schlüssel, der tatsächlich zum verschlüsseln der Daten verwendet wird Dieser Wert wird in der Anwendungsphase benötigt (vgl. CryptKey) - 16/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 System,Upgrade Ein Upgrade der Terminalhardware (OEM-Geräte) ermöglicht die volle Kompatibilität zu der von TOWITOKO angebotenen Standardsoftware. Näheres finden Sie unter www.towitoko.de. Der Upgradecode wird in der INI-Datei des CardServers gespeichert. Falls eine Neuinstallation der Software notwendig wird, muß daher auch der Upgradecode erneut mitgeteilt werden. Bsp. Kommando Str( " System,Upgrade,[Lizenz] " ) DataIn nil DataOut nil Lizenz Lizenznummer System,OemRegister Wenn Sie eine Anwendung für ein OEM-Terminal entwickeln, erhalten Sie ein eindeutiges Treiberzertifikat, das Sie mit diesem Kommando registrieren müssen, bevor Sie auf das Terminal zugreifen können. Bsp. Kommando Str( " System,OemRegister,OemID " ) DataIn nil DataOut nil OemID Treiberzertifikat - 17/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 CardServer - Kommandobereich DEVICE Device,Info Gibt eine Liste aller Geräteparameter aus. Die Informationen beziehen sich auf das Terminal, daß der Anwendung derzeit zugeordnet ist (vgl. 'Device,Select'): gibt den Gerätestatus an: error Terminal nicht ansprechbar valid Terminal bereit Port: COM-Port mit dem das Terminal verbunden ist Type: Gerätename z.B. 'CHIPDRIVE twin Slot 1' ShortName: Kurzname des Gerätetyps CDX CHIPDRIVE extern CDM CHIPDRIVE micro CDI CHIPDRIVE intern CDD CHIPDRIVE extern II CD1 / CD2 CHIPDRIVE twin slot 1 / 2 KTZ KartenZwerg (OEM Version) CCR CardReader (OEM Version) Serial: Seriennumer des Geräts innerhalb der LotNr LotNr: Losnummer des Geräts Version: Hardware-Version Baudrate: COM-Port Übertragungsrate Led: Statusanzeige (vgl 'Device,SetLed') Status: Der Aufruf "Device,Info " liefert alle Werte zurück (getrennt durch CR/LF = #13#10). Wird der Kommandostring um ein Keywort erweitert, wird nur der entsprechende Parameter zurückgegeben. Bsp.1 Kommando Str( " Device,Info " ) DataIn nil DataOut Str( " Status=valid Port=COM2 Type=CHIPDRIVE micro ShortName=CDM Version=1.1 LotNr=9805 Serial=861 Baudrate=9600 " ) Bsp.2 Kommando Str( " Device,Info,LotNr " ) DataIn nil DataOut Str( " 9805" ) Device,InfoDeviceID Kommando wie 'Device,Info', aber mit Bezug auf ein bestimmtes Terminal innerhalb der Terminalliste ('Device,List') Bsp. Kommando Str( "Device,InfoDeviceID,[DevID],Serial " ) DataIn nil DataOut Str( " 861" ) DevID Terminalindex (null = erster Eintrag in der Geräteliste) - 18/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 Device,List Gibt die Liste der aktuell mit dem CardServer verbundenen Terminals zurück: Bsp. Kommando Str( " Device,List " ) DataIn nil DataOut Str( " 'CHIPDRIVE micro' an COM2 'CHIPDRIVE twin Slot 2' an COM3 'CHIPDRIVE twin Slot 1' an COM3 " ) Device,Select Mit diesem Kommando selektieren Sie ein spezielles Terminal aus der Terminalliste oder aktivieren die automatische Terminalauswahl. Bsp. Kommando Str( "Device,Select,[DevID] " ) DataIn nil DataOut nil DevID Terminalindex (null = erster Eintrag in der Geräteliste) oder Name Wird DevID auf -1 gesetzt oder der Befehl 'Device,Select' nicht explizit ausgeführt, ist die automatische Terminalauswahl aktiv. Dabei werden folgende Kriterien berücksichtigt: - sind keine gültigen, aktiven Karten vorhanden, wird das erste gültige Terminal in der Terminalliste ausgewählt - sobald eine gültige Karte in einem der Terminals steckt, wird dieses Terminal zum aktiven Terminal der Anwendung und bleibt solange zugeordnet, bis die Karte wieder abgezogen wird Alternativ kann über das Kommando auch ein Terminal über sein Namen, Kurznamen oder COM-Port selektiert werden. Dies ist vorzuziehen, wenn Sie die Auswahl der Terminals in einer eigenen INI-Datei speichern müssen, da sich die Reihenfolge der Geräte in der Liste ändern kann. Gültige Beispiele für DevID: "CHIPDRIVE twin Slot 1 an COM1" "COM1" "CHIPDRIVE extern" "CDX" "CD1 COM3" "2" Selektion über Name und COM-Port (eindeutig) Selektion über COM-Port Selektion über Name Selektion über Kurzname Selektion über Kurzname und COM-Port (eindeutig) Selektion Index (eindeutig) Wenn die Auswahl nicht eindeutig ist, wird das erste Gerät in der Liste, das den Angaben entspricht, verwendet. Device,Remove Mit diesem Kommando entfernen Sie ein Terminal aus der Terminalliste, d.h. der zugehörige COM-Port wird wieder freigegeben. Das Terminal kann über 'Device,SearchComPort' wieder eingerichtet werden. Bsp. Kommando Str( "Device,Select,[DevID] " ) DataIn nil DataOut nil DevID Terminalindex (null = erster Eintrag in der Geräteliste) - 19/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 Device,SearchComPort Über dieses Kommando veranlassen Sie die Suche nach einem Terminal am angegebenen COM-Port. Wird ein Terminal gefunden, ermittelt der CardServer alle zugehörigen Daten wie z.B. Gerätetyp und Seriennummer. Betriebsbereite Geräte werden in der INI-Datei des CardServers gespeichert. Beim nächsten Start des CardServers werden die Geräte erneut gesucht und installiert. Bsp. Kommando Str( "Device,SearchComPort,[Port] " ) DataIn nil DataOut nil Port Nummer des COM-Ports, an dem nach einem Terminal gesucht werden soll Wenn der Parameter nicht angegeben wird, sucht das Kommando an allen freien COM-Ports des PC. Device,SetLed Das Kommando steuert die Statusanzeige der Terminals. Das Kommando bezieht sich auf das aktive Terminal Ihrer Anwendung. Bsp. Kommando Str( "Device,SetLed,[ColorStr] " ) DataIn nil DataOut nil ColorStr Der String enthält max. 8 Zeichen, die jeweils einer Farbe zugeordnet sind: 0=aus, 1=rot, 2=grün, 3=gelb. Beipiele: "01" rotes blinken "0011" langsames rotes blinken "2" grünes Dauersignal "123" rot grün gelb im Wechsel - 20/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 CardServer - Kommandobereich CARD Card,Info Gibt eine Liste an Informationen über die eingesteckte Karte zurück: Status Gibt den Status der Karte an: error Terminal nicht ansprechbar wait Keine Karte im Terminal detect Karte wurde eingesteckt, und wird untersucht invalid Karte ist ungültig / Karte wurde nicht erkannt valid Karte ist gültig und wird von keiner Anwendung bearbeitet active Karte ist gültig und wird von Ihrer Anwendung bearbeitet locked Karte ist gültig und wird von einer anderen Anwendung bearbeitet LockedBy: Index der aktiven Anwendung innerhalb der Anwendungsliste ("System,Tasklist") und der Anwendungsname (als String, durch Komma getrennt). Type gibt die genaue Chipbezeichnung unterstützter Memorykarten an. Im folgenden finden Sie eine Liste der bisher implementierten Chips. Die Liste wird ständig erweitert. Eine aktuelle Liste finden Sie im Internet unter http://www.towitoko.de: SLE4404, SLE4406, SLE4436 SLE4432, SLE4442, SLE4428, SLE4418, SLE4418K SC152, GPM896 I2C 2K, I2C 4K, I2C 8K, I2C 16K I2C 32K, I2C 64K, I2C 128K, I2C 256K, I2C 512K X24165, X24645, X76F041, X76F100, X76F128, X76F640 MCM2814ATR CPU Protocol gibt das gewählte Protokoll der Karte an: ATR Karten mit speziellen Bitprotokollen wie z.B. 4406/4436 2W 2-Wire Protokoll 3W 3-Wire Protokoll I2C I2C-Bus Protokoll I2CX I2C-Bus Protokoll mit 2 Byte Adressierung XC... Spezielle I2C-Bus Protokolle für XICOR Chips T0, T1, T14 Prozessorkartenprotokolle Apps gibt eine Liste der gefundenen Applikationsmodule an (durch Komma getrennt): KVK gültige deutsche Krankenversichertenkarte TWK deutsche Telefonwertkarte GSM GSM Karte nach GSM11.11 ECB deutsche EC-Karte mit Chip TRP TripleCard Multifunktionskarte PAY deutsche PAY-Card TLV gültige TLV Struktur MemSize PinSize PinCnt PageSize ErrMem ErrMemPB nur Memorykarten: größe des nutzbaren Datenspeichers in Byte nur Memorykarten: größe des PINs in Byte nur Memorykarten: Anzahl der verbleibenden PIN Eingabe nur Memorykarten I2C: Pagegröße für Schreibbefehle nur Memorykarten: Anzahl der Fehler bei Schreib- und Verifyzugriffen nur Memorykarten: Anzahl der Fehler bei Schreib- und Verifyzugriffen (nur Protection Bits) - 21/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 AtrBinary ATR in binärer Form AtrBinarySize Länge des ATR in Byte AtrHistory nur Prozessorkarten: Historybytes nach ISO7813-3 AtrHistorySize Länge der History in Byte TS, T0, TA1..8, TB1..8, TC1..8, TD1..8 aufgeschlüsselter ATR entsprechend ISO7816-3 SAD, DAD nur Prozessorkarten T1: Source- und Destination adress IFSC, IFSD nur Prozessorkarten T1: Puffergrößen der Karte und des Terminals CWT, BWT nur Prozessorkarten: Character- und Block Waiting Time Der Aufruf "Card,Info" liefert alle Werte zurück (getrennt durch CR/LF = #13#10). Wird der Kommandostring um ein Keywort erweitert, wird nur der entsprechende Parameter zurückgegeben. Bsp.1 Kommando Str( " Card,Info" ) DataIn nil DataOut Str( " Status=active LockedBy=0,Value Card Station Type=CPU Protocol=T0 CWT=1000 AtrBinarySize=8 AtrBinary=3B 85 00 54 53 2D 32 10 AtrHistorySize=5 AtrHistory=54 53 2D 32 10 TS=3B T0=85 TD1=00" ) Bsp.2 Kommando Str( " Card,Info,Type " ) DataIn nil DataOut Str( " CPU" ) Bsp.3 Kommando Str( " Card,Info " ) DataIn nil DataOut Str( " Status=active LockedBy=0,Value Card Station Type=SLE4432 Protocol=2W Apps=TLV,KVK MemSize=256 AtrBinarySize=4 AtrBinary=A2 13 10 91 " ) - 22/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 Card,Lock Sperrt eine Karte für Zugriffe durch andere Anwendungen. Das Kommando kann nur ausgeführt werden, wenn sich eine gültige Karte im Terminal befindet, die derzeit von keiner anderen Anwendung bearbeitet wird (Status = VALID). Das Kommando muß nur aufgerufen werden, wenn die Karte erneut bearbeitet werden soll, nachdem Sie bereits über 'Card,Unlock' für andere Anwendungen freigegeben wurden. Bsp. Kommando Str( "Card,Lock" ) DataIn nil DataOut nil Card,Unlock Das Kommando gibt die Karte nach der Bearbeitung durch Ihre Anwendung wieder frei. Der CardServer teilt die Karte der nächsten Anwendungen zu. Bsp. Kommando Str( "Card,Unlock " ) DataIn nil DataOut nil Card,APDU Das Kommando schickt ein APDU zur Karte und empfängt die Antwort der Karte. Die Umsetzung auf das T0- bzw. T1-Protokoll wird nach ISO7816-4 vorgenommen. Es werden "Case 1", "Case 2 short" bis "Case 4 short" mit maximaler Datenlänge von 254 Byte unterstützt. Beispiel 1, ISO CASE 1, Kommando ohne Daten Kommando Str( " Card,APDU" ) DataIn CLA, INS, P1, P2 DataOut SW1, SW2 Beipiel 2, ISO CASE 2, Kommando mit Datenblock von der Karte (0 <= Le <= 255) Kommando Str( " Card,APDU" ) DataIn CLA, INS, P1, P2, Le DataOut SW1, SW2, Datenblock Beipiel 3, ISO CASE 3, Kommando mit Datenblock zur Karte (Lc > 0!) Kommando Str( " Card,APDU" ) DataIn CLA, INS, P1, P2, Lc, Datenblock DataOut SW1, SW2 Beipiel 4, ISO CASE 4, Kommando mit Datenblock zur und von der Karte (Lc > 0!) Kommando Str( " Card,APDU" ) DataIn CLA, INS, P1, P2, Lc, Datenblock, Le DataOut SW1, SW2, Datenblock Lc Le Anzahl der zur Karte zu übertragenden Datenbytes Anzahl der von der Karte erwarteten Datenbytes, oder null für alle Datenbytes (Karte gibt die Länge der Antwort vor) Die Returncodes 9Fxx (GSM Response data), 61xx, 6Cxx werden nicht interpretiert. Dies entspricht der CT-API Spezifikation eines APDU und ist nicht komform zur ISO7816-4. - 23/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 Card,ISOAPDU Das Kommando entspricht "Card,APDU" aber die Returncodes 61xx, 6Cxx werden interpretiert und führen zum GetResponse Kommando, d.h. T0- und T1-Karten verhalten sich auf APDU Ebene identisch. Dies entspricht der exakten ISO7816-4 Vorgabe und ermöglicht ein T0/T1 unabhängiges APDU. HINWEIS: GSM-Karten arbeiten mit dem T0-Protokoll, sind aber in Hinsicht auf das APDU nicht kompatibel mit dem ISO-Standard (leider), da der Returncode 9Fxx statt 61xx benutzt wird. Im Kommandobereich "Apps,GSM,APDU" finden Sie die korrekte APDU Umsetzung für GSM-Karten. Card,Reset Das Kommando führt einen Hardwarereset der Karte durch. Evtl. erworbene Rechte werden gelöscht. Bsp. Kommando Str( " Card,Reset" ) DataIn nil DataOut nil Card,T0TX Das Kommando schickt ein T0-Kommando inkl. Daten zur Karte: Bsp. Kommando Str( " Card,T0TX" ) DataIn CLA, INS, P1, P2, P3, Datenblock DataOut SW1, SW2 Card,T0RX Das Kommando schickt ein T0-Kommando zur Karte und empfängt Daten von der Karte: Bsp. Kommando Str( " Card,T0RX" ) DataIn CLA, INS, P1, P2, P3 DataOut SW1, SW2, Datenblock Card,T1 Das Kommando führt ein T1-Kommando aus (inkl. Chaining falls erforderlich): Bsp. Kommando Str( " Card,T1" ) DataIn CLA, INS, P1, P2, Datenblock DataOut SW1, SW2, Datenblock Die Eingabedaten werden transparent zur Karte geschickt. Die genannten Bezeichnungen (CLA, INS ...) entsprechen der Norm ISO7816-3. Lc und Le sind entsprechend der "Cases 1 bis 4" der ISO7816-4 kodiert, bzw. der Spezifikation der Karte zu entnehmen. Card,TspTxRxLen Das Kommando schickt einen String zur Karte und empfängt eine vorgegebene Zahl an Zeichen von der Karte. Das Kommando umgeht alle Protokolle, d.h. schickt und empfängt absolut transparent auf Zeichenebene. Die Timeout CWT und BWT gelten auch hier. Bsp. Kommando Str( " Card,TspRxLen,[RxLen] " ) DataIn Datenblock zur Karte DataOut Datenblock von der Karte RxLen Der Parameter gibt die Anzahl der erwarteten Antwortbytes der Karte an. - 24/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 Card,InitBwtCwt Block Waiting Time und Character Waiting Time können überschrieben, d.h. manuell gesetzt werden. Die Initialwerte werden dem ATR der Karte entnommen. Bsp. Kommando Str( " Card,InitBwtCwt,[Bwt],[Cwt] " ) DataIn nil DataOut nil Bwt Cwt Block Waiting Time, Timeout des ersten Zeichens eines Blocks in [ms] Character Waiting Time, Timeout der folgenden Zeichen in [ms] Gültiger Wertebereich: 1 bis 60.000 (1 ms bis 60 Sek.) Card,InitSadDad Initialisiert SAD (Source Adress) und DAD (Destination Adress) für das T1 Protokoll. Initial werden beide Werte auf null gesetzt. Der Syntax entspricht dem Kommando "Card,InitBwtCwt". Wertebereich: 0 bis 255. Card,InitIfsdIfsc Initialisiert IFSD (Puffergröße Terminal) und IFSC (Puffergröße Chipkarte) für das T1 Protokoll. Die Initialwerte werden dem ATR der Karte entnommen. Der Syntax entspricht dem Kommando "Card,InitBwtCwt". Wertebereich: 0 bis 255. - 25/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 Card,MemDisableCache Das Kommando sperrt die Cache-Funktion für Memorykarten, d.h. auch bereits gelesene Bereiche werden ggf. wiederholt gelesen. Bsp. Kommando Str( " Card,MemDisableCache " ) DataIn nil DataOut nil Card,MemEnableCache Gibt die Cache-Funktion für Memorycards frei. Dies ist die Standardeinstellung. Card,MemRead Liest einen Bereich aus dem Datenspeicher einer Memorykarte, unabhängig vom Chiptyp: Bsp. Kommando Str( " Card,MemRead,[Adr],[Len] " ) DataIn nil DataOut gelesene Daten Adr Len Offsetadresse der Chipkarte ab der gelesen wird Anzahl der zu lesenden Bytes Card,MemWrite Beschreibt einen Bereich des Datenspeicher einer Memorykarte, unabhängig vom Chiptyp: Bsp. Kommando Str( " Card,MemWrite,[Adr],[Len] " ) DataIn zu schreibende Daten DataOut nil Adr Len Offsetadresse der Chipkarte ab der gelesen wird Anzahl der zu lesenden Bytes HINWEIS: Einem Schreibzugiff folgt (intern) immer von einem Verify-Kommando. Sie können daher über das Kommando "Card, MemReadStatus" das bytegenaue Ergebnis des Schreibzugriffs abfragen (bei fehlerhafter Ausführung). HINWEIS: Wenn die Cache-Funktion aktiv ist (default), werden nur Datenbytes geschrieben, die sich tatsächlich geändert haben (Vorraussetzung: die Bereiche müssen vorher gelesen worden sein). Card,MemVerify Führt einen byteweisen Vergleich zwischen den übergebenen Daten und dem Datenspeicher der Chipkarte durch: Bsp. Kommando Str( " Card,MemVerify,[Adr],[Len] " ) DataIn Datenbytes, die mit denen der Chipkarte verglichen werden sollen DataOut nil Adr Len Offsetadresse der Chipkarte, ab der gelesen wird Anzahl der zu lesenden Bytes HINWEIS: Die Anzahl der Fehler an Datenbytes und Schreibschutzbits kann über "Card,Info" abgefragt werden. Tritt ein Verifyfehler auf wird der Fehlercode 1310 "Kartenzugriff fehlgeschlagen" zurückgegeben. Über das Kommando "Card,MemReadStatus" kann das bytegenaue Ergebnis des Vergleichs abgefragt werden. Card,MemReadPB / Card,MemWritePB / Card,MemVerifyPB Die drei Kommandos entsprechen in Funktion und Syntax den vorangegangenen Kommandos, jedoch beziehen sie sich auf den Speicher für die Schreibschutzinformation der Karte. Einige Karten erlauben die Aktivierung des Schreibschutz für jedes (oder einen Teil) der Bytes im Adressraum der Karte. - 26/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 Jedes Byte, das Sie in DataIn übergeben bzw. über DataOut empfangen, entspricht der Information über den Schreibschutz von einem Byte im Datenspeicher der Karte. Folgende Werte sind definiert: 00 hex Schreibschutz nicht aktiviert 01 hex Schreibschutz aktiviert Card,MemSetPB Aktiviert den Schreibschutz innerhalb eines Adressbereichs der Karte. Die selbe Funktion können Sie auch über 'Card,MemWritePB' erzielen, wenn Sie einen entsprechenden Datenbereich übergeben. Dieses Kommando ist einfacher anzuwenden. Bsp. Kommando Str( " Card,MemSetPB,[Adr],[Len] " ) DataIn nil DataOut nil Der Schreibschutz für Len Bytes ab Offsetadresse Adr der Karte werden aktiviert. Card,MemReadStatus Liest Statusinformationen zum Cache, Schreibschutz und Verifyfehlern: Bsp. Kommando Str( " Card,MemVerify,[Adr],[Len] " ) DataIn Statusbytes DataOut nil Die Statusinformationen sind wie folgt codiert: Bit 7 (MSB) 1: Verifyfehler des Datenbytes Bit 6 1: Verifyfehler des Schreibschutzbits Bit 3 1: Datenbyte ist bereits im Cache Bit 2 1: Schreibschutzbit ist bereits im Cache Bit 0 (LSB) 1: Schreibschutz des Datenbytes aktiv Card,MemVerifyPin Führt einen PIN Test der Karte aus, der u.U. vor Schreib- bzw. Lesezugriffen durchgeführt werden muß: Bsp. Kommando Str( " Card,MemVerifyPin,[PIN],[Nr] " ) DataIn nil DataOut nil PIN Nr Die BCD-kodierte PIN (z.B. 4 Ziffern entsprechen 2 Byte) Auswahl der PIN, falls eine Karte mehrere PINs unterstützt Der Parameter ist optional Card,MemChangePin Ändert einen PIN der Karte: Bsp. Kommando Str( " Card,MemChangePin,[PIN],[NewPIN],[Nr] " ) DataIn nil DataOut nil PIN NewPIN Nr Die BCD-kodierte, aktuelle PIN Die BCD-kopierte, neue PIN Auswahl der PIN, falls eine Karte mehrere PINs unterstützt Der Parameter ist optional - 27/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 CardServers - Bereich APPS Apps,TLV,List Gibt ein Verzeichnis aller TLV Tags mit vollständigem Pfad zurück (nur mit Speicherkarten möglich). Bsp. Kommando Str( " Apps,TLV,List " ) DataIn nil DataOut Str( " 61,11 614f,6 6153,1" ) Der Ausgabestring listet alle Tags der Karte (getrennt durch CR/LF). Jede Zeile enthält ein Tag (hex) und dessen Länge (dezimal), durch Komma getrennt. Dem Tag ist sein Pfad vorangestellt. Apps,TLV,ReadTag Liest den Inhalt eines Tags (nur mit Speicherkarten möglich). Bsp. Kommando Str( " Apps,TLV,ReadTag,[Tag] " ) DataIn nil oder quelle DataOut Inhalt des Datensatzes ohne Tag und Length Tag Tag inkl. Pfad wie unter Kommando "Apps,TLV,List" Apps,TLV,WriteTag Schreibt den Inhalt eines Tags und erzeugt das Tag, falls erforderlich. Wenn die Länge des neuen Tags sich von der alten unterscheidet müssen u.U. große Bereiche der Karte neu geschrieben werden (nur mit Speicherkarten möglich). Bsp. Kommando Str( " Apps,TLV,WriteTag,[Tag] " ) DataIn neuer Inhalt des Datensatzes ohne Tag und Length DataOut nil Tag Tag inkl. Pfad wie unter Kommando "Apps,TLV,List" - 28/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 Apps,ISO In Vorbereitung. Hier werden Befehle nach ISO7816-4 direkt abrufbar sein. Apps,ECB In Vorbereitung. Hier werden die Datenfelder einer EC-Karte mit Chip direkt abrufbar sein. Buchungskommandos sind ebenfalls vorgesehen. Apps,TRP In Vorbereitung. Öffnet das TripleCard System für eigene Anwendungen. Apps,GSM In Vorbereitung. Direkte Zugriffe auf: ADN,FDN,MSISDN,BDN,LDN,SMS,SMSP,CBMI,PLMN PUCT etc. Apps,TWK,Read Stellt die Datenfelder einer Telefonwertkarte der deutschen Telekom in dekodierter Form bereit: Seriennummer 9 stellen der 11 stelligen Seriennummer der Karte Hersteller Kartenhersteller Datum Datum der Chipherstellung Orginalwert Originalwert der Karte Restwert Restwert der Karte Der Aufruf "Apps,TWK,Read " liefert alle Werte zurück (getrennt durch CR/LF = #13#10). Wird der Kommandostring um ein Keywort erweitert, wird nur der entsprechende Parameter zurückgegeben. Bsp.1 Kommando Str( " Apps,TWK,Read " ) DataIn nil DataOut Str( " Seriennummer=131212752xx Hersteller=Giesecke & Devrient, München Datum=DEZ 19x3 Orginalwert=50,00 DM Restwert= 0,00 DM " ) Bsp.2 Kommando Str( " Apps,TWK,Read, Restwert " ) DataIn nil DataOut Str( " 0,00 DM " ) Apps,KVK,Read Stellt die Datenfelder einer deutschen Krankenversichertenkarte in dekodierter und geprüfter Form bereit: Krankenkasse , KNummer, VkNr, VNummer, Status, StatusExt Titel, Vorname, Zusatz, Name, GebDatum Strasse, Land, PLZ, Ort, Gultigkeit Der Aufruf "Apps,KVK,Read " liefert alle Werte zurück (getrennt durch CR/LF = #13#10). Wird der Kommandostring um ein Keywort erweitert, wird nur der entsprechende Parameter zurückgegeben (vgl. "Apps,Read,TWK"). - 29/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 CardServer Kommandobaum Im folgenden finden Sie eine Aufstellung der CardServer Kommandos im Baumform: Card Reset Lock Unlock T0TX T0RX T1 TspRxLen InitBwtCwt InitSadDad InitIfsdIfsc MemDisableCache MemEnableCache MemRead MemWrite MemVerify MemReadPB MemWritePB MemSetPB MemVerifyPB MemReadStatus MemVerifyPin MemChangePin Apps TLV List ReadTag WriteTag Apps TWK Read Seriennummer Hersteller Datum Orginalwert Restwert Apps Status LockedBy Apps Type Protocol MemSize PinSize PinCnt PageSize ErrMem ErrMemPB AtrBinary, AtrBinarySize AtrHistory, AtrHistorySize SAD, DAD, CWT, BWT IFSC, IFSD TS, T0, TA1-8, TB1-8, TC1-8, TD1-8 KVK Read Krankenkasse KNummer, VkNr VNummer Status, StatusExt Titel, Vorname Zusatz, Name GebDatum Strasse, Land, PLZ, Ort Gultigkeit System Info VersionCode VersionText ErrText ErrCode Lng Handle System Comands ConvertErrCode TaskList Destroy AddHWndMsg DelHWnd SetLng CryptKey GenCryptKey Upgrade OemRegister Device Info Device Card Status Port Type ShortName Serial LotNr Version Baudrate Led InfoDeviceID List Select Remove SearchComPort SetLed Info - 30/31 - © TOWITOKO electronics GmbH CardServer Dokumentation - Release 02.03.98 CARDSERVER V2.02 ChipDrive™ ist ein Warenzeichen von TOWITOKO KartenZwerg® ist ein eingetragenes Warenzeichen von TOWITOKO Windows® ist ein eingetragenes Warenzeichen von Microsoft Windows® 95 ist ein eingetragenes Warenzeichen von Microsoft Windows NT™ ist ein Warenzeichen von Microsoft Windows® 3.11 ist ein eingetragenes Warenzeichen von Microsoft - 31/31 - © TOWITOKO electronics GmbH