Hallo, Ich habe mich gerade mit Libchipard beschäftigt und festgestellt, dass sich mein Leser anders verhält, wie es das Programm erwartet.
Folgender Code ist in ct_card.c if (LC_Card_GetLastSW1(hcard)==0x63) { switch (LC_Card_GetLastSW2(hcard)) { case 0xc0: /* no error left */ return GWEN_ERROR_BAD_PIN_0_LEFT; case 0xc1: /* one left */ return GWEN_ERROR_BAD_PIN_1_LEFT; case 0xc2: /* two left */ return GWEN_ERROR_BAD_PIN_2_LEFT; default: /* unknown error */ return GWEN_ERROR_BAD_PIN; } // switch } else if (LC_Card_GetLastSW1(hcard)==0x69 && LC_Card_GetLastSW2(hcard)==0x83) { DBG_ERROR(LC_LOGDOMAIN, "Card unusable"); return GWEN_ERROR_IO; } else if (LC_Card_GetLastSW1(hcard)==0x64 && LC_Card_GetLastSW2(hcard)==0x01) { DBG_ERROR(LC_LOGDOMAIN, "Aborted by user"); return GWEN_ERROR_USER_ABORTED; } Das Programm geht also davon aus, dass bei einer fehlerhaften Pin Eingabe SW1 = 63 SW2 = C0, C1, C2 zurückgeliefert wird. Ich hab ein falsch PIN ausprobiert. Mein Kobil Kaan Pro liefert bei falsch eingegebener PIN SW1 = 6a SW2 = 80 Im Kobil Handbuch steht folgendes: Nach der Eingabeaufforderung am Display wird die einzugebende PIN (üblicherweise zwischen vier und acht Ziffern) mit einem Sternchen pro eingegebener Ziffer angezeigt. Die Länge der PIN ist dem Control Byte zu entnehmen. Die PIN wird dann in das Datenfeld des ICC-Kommandos eingetragen, das sich im Datenfeld des PERFORM VERIFICATION-Kommandos befindet (Command-to-perform; falls dort nur der Command Header angegeben,wird vor der PIN das Lc-Feld eingetragen). Anschließend wird das ICC-Kommando zur Chipkarte übertragen. Die in der Antwort des ICC-Kommandos zurückgelieferten Status-Bytes (bei korrekter PIN-Eingabe ist SW1-SW2 = '9000') werden als Status-Bytes des PERFORM VERIFICATION-Kommandos an das Anwendungssystem weitergereicht, und am Display wird der Standard-Anzeigetext ´Aktion erfolgreich´ ausgegeben. Wenn die an die Chipkarte übergebene PIN nicht korrekt war, ist der Returncode von der Chipkarte SW1-SW2 verschieden von '9000'. In diesem Fall wird der Standard-Anzeigetext 'Geheimzahl falsch / gesperrt' ausgegeben und der Returncode an das Anwendungssystem zurückgeliefert. Drückt der Benutzer vor Abschluß der PIN-Eingabe die Abbruch-Taste, dann wird kein Kommando zur Chipkarte geschickt, am Display der Standard-Anzeigetext 'Abbruch' ausgegeben, der Eingabepuffer gelöscht und als Returncode SW1-SW2 = '6401' zurückgegeben. Erfolgt nach Eingabeaufforderung nicht innerhalb von 15 sec (Default-Wert) die Eingabe der ersten Ziffer oder verstreichen mehr als 5 sec bis zur Eingabe der jeweils nächsten Ziffer, dann wird kein Kommando zur Chipkarte geschickt, am Display der Standard-Anzeigetext 'Abbruch' ausgegeben und als Returncode SW1-SW2 = '6400' zurückgegeben. Hat der Benutzer bei variabler PIN-Länge nur das Drücken der Bestätigungstaste vergessen, dann zeigt das Chipkartenterminal 'Bitte Eingabe bestätigen' an und wartet auf die Bestätigung der eingegebenen Geheimzahl durch den Benutzer auffordern. Nach einer weiteren Timeout-Zeit wird dieser Vorgang abgebrochen. Es steht also nur, dass SW1-SW2 verschieden von '9000' ist Mein Versuch zeigt: SW1 = 6a SW2 = 80 Gruß Herbert ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Aqbanking-devel mailing list Aqbanking-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/aqbanking-devel