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

Similar documents