PCSC Framework truncates bytes

Hello! Got some troubles with pcsc framework on Monterey 12.2.1

makavity@makbook ~ $ system_profiler SPSmartCardsDataType

SmartCards:



    Readers:



      #01: NXP PN7462AU CCID (ATR:{length = 15, bytes = 0x3b8a800180641211111073c0c1801f})



    Reader Drivers:



      #01: fr.apdu.ccid.smartcardccid:1.4.34 (/usr/libexec/SmartCardServices/drivers/ifd-ccid.bundle)

      #02: fr.apdu.ccid.smartcardccid:1.5.0 (/usr/local/libexec/SmartCardServices/drivers/ifd-ccid.bundle)



    SmartCard Drivers:



      #01: com.apple.CryptoTokenKit.pivtoken:1.0(disabled) (/System/Library/Frameworks/CryptoTokenKit.framework/PlugIns/pivtoken.appex)



    Available SmartCards (keychain):



        com.apple.setoken:



        com.apple.setoken:aks:



    Available SmartCards (token):



        com.apple.setoken:



        com.apple.setoken:aks:


Have tried 1.5.0 version of CCID, and default version. No luck.

Trying to get binary data from my smartcard, and some bytes are truncated:

[16] -> [04, CB, 51, 10, 0A, 8E, 08, 5D, 7D, 90, 12, 55, 1C, DF, F6, 00]
[252] <- [87, 81, F3, 02, BF, 95, CD, 53, 2B, 9C, 40, 16, B3, 1E, 32, EF, 63, 9C, F9, 63, E9, FD, C8, 77, C0, 70, 71, F5, E3, B0, B6, 6D, 4D, 41, B4, 4F, 89, C0, D2, C4, 96, 0E, 4E, 4E, BA, A8, DB, 99, D5, 47, FF, 1A, BB, D3, DF, 64, B2, 0D, D2, 92, 4C, 1A, 7F, 53, 16, 68, EF, A2, C0, 53, D9, 01, CF, 82, E0, 2D, 1D, DC, 66, 5D, CF, E7, 97, 94, B6, A5, 06, 8F, 12, 3A, B4, B5, BF, D9, 2D, 99, 8A, 57, 21, 2A, C3, 51, D2, 3F, 80, 3B, A7, 16, C2, 21, 56, 12, BE, 2D, EF, 91, 7A, D8, E6, 80, 1E, 3D, 86, 5A, 2A, 7B, 70, D0, B5, 11, 76, 5B, 6C, F6, 8D, C8, F0, 71, 94, 0A, 28, 1A, 7D, F9, 3F, C1, D8, C9, 75, 90, 79, D2, B2, 79, 8C, B5, D0, D5, 6A, 21, EB, 57, E3, DA, 8A, CE, EE, D2, 74, CA, 20, BF, BE, 33, 21, B8, AD, 53, 6B, BF, 93, 3A, E2, 2E, 10, 8E, 82, AF, 01, 9F, 71, C4, CE, AE, 45, 41, C0, 22, FA, 4C, 57, 54, BD, 22, 83, F1, 6F, 38, 23, 45, 99, 5B, A0, F3, AD, CA, 16, EC, 34, E3, 50, 7D, FA, 3D, 2B, E7, 7A, 0B, E1, E6, 53, CB, 66, AA, 6B, 6C, B5, A8, 74, 02, B8, E5, 3B, 77, 9B, C1, 8E, 08, 97, D9, 1E, FF]
ERR: NoSwBytes

No matter what I do, I get only 252 bytes in response, there are no SW bytes at the end.

I am using pcsc-rust 2.7.0 library and code is:

fn transmit(&self, data: &[u8]) -> Result<Vec<u8>, CardError> {
        log::trace!("[{}] -> {data:02X?}", data.len());
        let mut rapdu_buf = [0; MAX_BUFFER_SIZE + 2];
        let transmit_result = self.transmit(data, &mut rapdu_buf)?;
        log::trace!("[{}] <- {transmit_result:02X?}", transmit_result.len());
        Ok(transmit_result.to_vec())
    }

transmit() funcition is the ffi SCardTransmit

System log is attached. Also, windows and linux, the same code, works fine.

Is there any solution for that problem?

Replies

9823