@@ -194,7 +194,7 @@ ISO7816 nfc_select_applet(uint8_t expected_family_id[],
194
194
ISO7816 status_word ;
195
195
uint8_t send_apdu [255 ], recv_apdu [255 ] = {0 },
196
196
_version [CARD_VERSION_SIZE ] = {0 };
197
- uint16_t send_len = 5 , recv_len = 236 ;
197
+ uint16_t send_len = 5 , recv_len = 255 ;
198
198
199
199
send_len = create_apdu_select_applet (send_apdu );
200
200
@@ -262,7 +262,7 @@ ISO7816 nfc_pair(uint8_t *data_inOut, uint8_t *length_inOut) {
262
262
263
263
ISO7816 status_word = CLA_ISO7816 ;
264
264
uint8_t send_apdu [255 ], recv_apdu [255 ] = {0 };
265
- uint16_t send_len = 5 , recv_len = 236 ;
265
+ uint16_t send_len = 5 , recv_len = 255 ;
266
266
267
267
send_len = create_apdu_pair (data_inOut , * length_inOut , send_apdu );
268
268
@@ -293,7 +293,7 @@ ISO7816 nfc_pair(uint8_t *data_inOut, uint8_t *length_inOut) {
293
293
ISO7816 nfc_unpair () {
294
294
ISO7816 status_word = CLA_ISO7816 ;
295
295
uint8_t send_apdu [255 ], recv_apdu [255 ] = {0 };
296
- uint16_t send_len = 5 , recv_len = 236 ;
296
+ uint16_t send_len = 5 , recv_len = 255 ;
297
297
298
298
hex_string_to_byte_array ("00130000" , 8 , send_apdu );
299
299
nfc_secure_comm = true;
@@ -321,7 +321,7 @@ ISO7816 nfc_list_all_wallet(wallet_list_t *wallet_list) {
321
321
322
322
// recv_len receives the length of response APDU. It also
323
323
// acts as expected length of response APDU.
324
- uint16_t recv_len = 236 ;
324
+ uint16_t recv_len = 300 ;
325
325
326
326
send_len = create_apdu_list_wallet (send_apdu );
327
327
@@ -367,7 +367,7 @@ ISO7816 nfc_add_wallet(const struct Wallet *wallet) {
367
367
// Call nfc_select_card() before
368
368
ISO7816 status_word = CLA_ISO7816 ;
369
369
uint8_t send_apdu [600 ] = {0 }, * recv_apdu = send_apdu ;
370
- uint16_t send_len = 0 , recv_len = 236 ;
370
+ uint16_t send_len = 0 , recv_len = 600 ;
371
371
372
372
calculate_checksum (wallet , (uint8_t * )wallet -> checksum );
373
373
if (WALLET_IS_ARBITRARY_DATA (wallet -> wallet_info ))
@@ -437,7 +437,7 @@ ISO7816 nfc_delete_wallet(const struct Wallet *wallet) {
437
437
438
438
ISO7816 status_word = CLA_ISO7816 ;
439
439
uint8_t send_apdu [600 ] = {0 }, * recv_apdu = send_apdu ;
440
- uint16_t send_len = 0 , recv_len = 236 ;
440
+ uint16_t send_len = 0 , recv_len = 600 ;
441
441
442
442
send_len = create_apdu_delete_wallet (wallet , send_apdu );
443
443
@@ -466,7 +466,7 @@ ISO7816 nfc_ecdsa(uint8_t data_inOut[ECDSA_SIGNATURE_SIZE],
466
466
467
467
ISO7816 status_word = CLA_ISO7816 ;
468
468
uint8_t send_apdu [600 ] = {0 }, * recv_apdu = send_apdu ;
469
- uint16_t send_len = 0 , recv_len = 236 ;
469
+ uint16_t send_len = 0 , recv_len = 600 ;
470
470
471
471
send_len = create_apdu_ecdsa (data_inOut , * length_inOut , send_apdu );
472
472
@@ -507,7 +507,7 @@ ISO7816 nfc_verify_challenge(const uint8_t name[NAME_SIZE],
507
507
508
508
ISO7816 status_word = CLA_ISO7816 ;
509
509
uint8_t send_apdu [600 ] = {0 }, * recv_apdu = send_apdu ;
510
- uint16_t send_len = 0 , recv_len = 236 ;
510
+ uint16_t send_len = 0 , recv_len = 600 ;
511
511
512
512
send_len = create_apdu_verify_challenge (name , nonce , password , send_apdu );
513
513
@@ -537,7 +537,7 @@ ISO7816 nfc_get_challenge(const uint8_t name[NAME_SIZE],
537
537
538
538
ISO7816 status_word = CLA_ISO7816 ;
539
539
uint8_t send_apdu [600 ] = {0 }, * recv_apdu = send_apdu ;
540
- uint16_t send_len = 0 , recv_len = 236 ;
540
+ uint16_t send_len = 0 , recv_len = 600 ;
541
541
542
542
send_len = create_apdu_get_challenge (name , send_apdu );
543
543
@@ -575,7 +575,7 @@ ISO7816 nfc_encrypt_data(const uint8_t name[NAME_SIZE],
575
575
#if USE_SIMULATOR == 0
576
576
ISO7816 status_word = CLA_ISO7816 ;
577
577
uint8_t send_apdu [600 ] = {0 }, * recv_apdu = send_apdu ;
578
- uint16_t send_len = 0 , recv_len = 236 ;
578
+ uint16_t send_len = 0 , recv_len = 600 ;
579
579
580
580
send_len = create_apdu_inheritance (name ,
581
581
plain_data ,
@@ -628,7 +628,7 @@ ISO7816 nfc_decrypt_data(const uint8_t name[NAME_SIZE],
628
628
629
629
ISO7816 status_word = CLA_ISO7816 ;
630
630
uint8_t send_apdu [600 ] = {0 }, * recv_apdu = send_apdu ;
631
- uint16_t send_len = 0 , recv_len = 236 ;
631
+ uint16_t send_len = 0 , recv_len = 600 ;
632
632
633
633
send_len = create_apdu_inheritance (name ,
634
634
encrypted_data ,
@@ -670,7 +670,7 @@ ret_code_t nfc_exchange_apdu(uint8_t *send_apdu,
670
670
ASSERT (recv_len != NULL );
671
671
ASSERT (send_len != 0 );
672
672
673
- uint16_t expected_recv_len = MAX_EXPECTED_RECV_LEN ;
673
+ uint16_t expected_recv_len = * recv_len ;
674
674
* recv_len = 0 ;
675
675
676
676
ret_code_t err_code = adafruit_diagnose_card_presence ();
@@ -697,8 +697,11 @@ ret_code_t nfc_exchange_apdu(uint8_t *send_apdu,
697
697
698
698
total_packets = ceil (send_len / (1.0 * SEND_PACKET_MAX_LEN ));
699
699
for (int packet = 1 ; packet <= total_packets ;) {
700
- recv_pkt_len = RECV_PACKET_MAX_ENC_LEN ; /* On every request set acceptable
701
- packet length */
700
+ recv_pkt_len =
701
+ RECV_PACKET_MAX_ENC_LEN <= expected_recv_len
702
+ ? RECV_PACKET_MAX_ENC_LEN
703
+ : expected_recv_len ; /* On every request set acceptable
704
+ packet length */
702
705
703
706
/**
704
707
* Sets appropriate CLA byte for each packet. CLA byte (first byte of
0 commit comments