У меня есть считыватель смарт-карт Grabba. Я пытаюсь получить информацию о карте с помощью команд APDU. Я много читал о стандартах EMV и связанных с ними стандартах ISO 7816-4, но я не могу успешно выполнить команду простого выбора. Вот некоторые детали:
Я успешно включил свою карту VISA и получил ее атрибуты:
NSError *error = nil;
GRGrabbaSmartcardSession *session = [GRGrabba.sharedGrabba.smartcard startSession:&error];
NSLog(@"EMV : smartCardInsertedEvent : Attribute : %@", [session getATR]);
Результат: 3b690000 8072a445 6400ff00 10
Когда я анализирую этот атрибут на здесь , я получаю эту информацию для своей карты:
Моя бесконтактная карта - это кредитная карта от Akbank из Турции, но она указана как карта Denizbank из Турции в этом списке .
Теперь я пытаюсь выполнить команду выбора на карте следующим образом:
NSError *error = nil;
GRGrabbaSmartcardSession *session = [GRGrabba.sharedGrabba.smartcard startSession:&error];
NSLog(@"EMV : smartCardInsertedEvent : Attribute : %@", [session getATR]);
session.protocol = 1;
uint8_t aid[] = {'2', 'P', 'A', 'Y', '.', 'S', 'Y', 'S', '.', 'D', 'D', 'F', '0', '1'};
NSData *data = [NSData dataWithBytes:aid length:sizeof(aid)];
NSError *err = nil;
GRGrabbaCommandAPDU *apduCMD =
[[GRGrabbaCommandAPDU alloc]
initWithCLA:0x00
INS:0xA4
P1:0x04
P2:0x00
Data:data
Le:0x00
Error:&err];
GRGrabbaResponseAPDU *response = [[GRGrabbaResponseAPDU alloc] initWithData:nil SW1:0 SW2:0];
BOOL success = [session exchangeAPDUCommand:apduCMD withResponse:response error:&error];
if (!success) {
NSLog(@"EMV : smartCardInsertedEvent : ERROR: Could not read ADF");
return;
}
Но он не может прочитать ошибку ADF. Может кто-нибудь показать мне, что я делаю не так?
UPDATE:
Я пробовал следующие комбинации, но все еще не смог выполнить команду выбора с успехом:
PROTOCOL DATA CLA LE STATUS
0 1PAY.SYS.DDF01 0x00 - unrecognised SW in response: SW1 = 61, SW2 = 52
0 1PAY.SYS.DDF01 0x00 0x00 Smartcard protocol error.
0 2PAY.SYS.DDF01 0x00 - unrecognised SW in response: SW1 = 61, SW2 = 66
0 2PAY.SYS.DDF01 0x00 0x00 Smartcard protocol error.
0 1PAY.SYS.DDF01 0x80 - card returned Incorrect application CLA - SW1 = 6E, SW2 = 00
0 1PAY.SYS.DDF01 0x80 0x00 card returned Incorrect application CLA - SW1 = 6E, SW2 = 00
0 2PAY.SYS.DDF01 0x80 - card returned Incorrect application CLA - SW1 = 6E, SW2 = 00
0 2PAY.SYS.DDF01 0x80 0x00 card returned Incorrect application CLA - SW1 = 6E, SW2 = 00
1 1PAY.SYS.DDF01 0x00 - unrecognised SW in response: SW1 = 00, SW2 = 00
1 1PAY.SYS.DDF01 0x00 0x00 unrecognised SW in response: SW1 = 00, SW2 = 00
1 2PAY.SYS.DDF01 0x00 - unrecognised SW in response: SW1 = 00, SW2 = 00
1 2PAY.SYS.DDF01 0x00 0x00 unrecognised SW in response: SW1 = 00, SW2 = 00
1 1PAY.SYS.DDF01 0x80 - unrecognised SW in response: SW1 = 00, SW2 = 00
1 1PAY.SYS.DDF01 0x80 0x00 unrecognised SW in response: SW1 = 00, SW2 = 00
1 2PAY.SYS.DDF01 0x80 - unrecognised SW in response: SW1 = 00, SW2 = 00
1 2PAY.SYS.DDF01 0x80 0x00 unrecognised SW in response: SW1 = 00, SW2 = 00