1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
|
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
|
-
+
-
+
|
xmit_buf[xmit_len++] = instruction;
xmit_buf[xmit_len++] = p1;
xmit_buf[xmit_len++] = p2;
if (data) {
if (lc > 255) {
CACKEY_DEBUG_PRINTF("CAUTION! Using an Lc greater than 255 is untested. Lc = %u", lc);
xmit_buf[xmit_len++] = 0x80; /* XXX UNTESTED */
xmit_buf[xmit_len++] = 0x82; /* XXX UNTESTED */
xmit_buf[xmit_len++] = (lc & 0xff00) >> 8;
xmit_buf[xmit_len++] = lc & 0xff;
} else {
xmit_buf[xmit_len++] = lc;
}
for (idx = 0; idx < lc; idx++) {
xmit_buf[xmit_len++] = data[idx];
}
}
if (le != 0x00) {
if (le > 256) {
CACKEY_DEBUG_PRINTF("CAUTION! Using an Le greater than 256 is untested. Le = %u", le);
xmit_buf[xmit_len++] = 0x80; /* XXX UNTESTED */
xmit_buf[xmit_len++] = 0x82; /* XXX UNTESTED */
xmit_buf[xmit_len++] = (le & 0xff00) >> 8;
xmit_buf[xmit_len++] = le & 0xff;
} else if (le == 256) {
xmit_buf[xmit_len++] = 0x00;
} else {
xmit_buf[xmit_len++] = le;
}
|
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
|
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
|
+
|
max_offset = count;
max_count = CACKEY_APDU_MTU;
cmd[2] = oid[0];
cmd[3] = oid[1];
cmd[4] = oid[2];
/* 256 to indicate the largest message size -- not clear if this will work with all messages */
send_ret = cackey_send_apdu(slot, GSCIS_CLASS_ISO7816, NISTSP800_73_3_INSTR_GET_DATA, 0x3F, 0xFF, sizeof(cmd), cmd, 256, &respcode, buffer, &count);
if (send_ret == CACKEY_PCSC_E_RETRY) {
CACKEY_DEBUG_PRINTF("ADPU Sending failed, retrying read buffer");
return(cackey_get_data(slot, buffer, init_count, oid));
}
|