X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/6e49717b5e025b6ac7139b00f2f39d3b22b424a1..75e42ef5dfc6868e696cbc13ef373d97a3040ada:/armsrc/iso14443a.c

diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c
index a3367036..987d29ad 100644
--- a/armsrc/iso14443a.c
+++ b/armsrc/iso14443a.c
@@ -185,7 +185,7 @@ void iso14a_set_trigger(bool enable) {
 }
 
 
-static void iso14a_set_timeout(uint32_t timeout) {
+void iso14a_set_timeout(uint32_t timeout) {
 	iso14a_timeout = timeout;
 	if(MF_DBGLEVEL >= 3) Dbprintf("ISO14443A Timeout set to %ld (%dms)", iso14a_timeout, iso14a_timeout / 106);
 }
@@ -1698,6 +1698,13 @@ int iso14443a_select_card(byte_t *uid_ptr, iso14a_card_select_t *p_hi14a_card, u
 	int cascade_level = 0;
 	int len;
 
+	// init card struct
+	if(p_hi14a_card) {
+		p_hi14a_card->uidlen = 0;
+		memset(p_hi14a_card->uid, 0, 10);
+		p_hi14a_card->ats_len = 0;
+	}
+
 	// Broadcast for a card, WUPA (0x52) will force response from all cards in the field
     ReaderTransmitBitsPar(wupa, 7, NULL, NULL);
 	
@@ -1706,8 +1713,6 @@ int iso14443a_select_card(byte_t *uid_ptr, iso14a_card_select_t *p_hi14a_card, u
 
 	if(p_hi14a_card) {
 		memcpy(p_hi14a_card->atqa, resp, 2);
-		p_hi14a_card->uidlen = 0;
-		memset(p_hi14a_card->uid,0,10);
 	}
 
 	if (anticollision) {
@@ -1813,10 +1818,9 @@ int iso14443a_select_card(byte_t *uid_ptr, iso14a_card_select_t *p_hi14a_card, u
 
 	if(p_hi14a_card) {
 		p_hi14a_card->sak = sak;
-		p_hi14a_card->ats_len = 0;
 	}
 
-	// non iso14443a compliant tag
+	// PICC compilant with iso14443a-4 ---> (SAK & 0x20 != 0)
 	if( (sak & 0x20) == 0) return 2; 
 
 	if (!no_rats) {
@@ -1908,7 +1912,7 @@ void ReaderIso14443a(UsbCommand *c)
 	size_t lenbits = c->arg[1] >> 16;
 	uint32_t timeout = c->arg[2];
 	uint32_t arg0 = 0;
-	byte_t buf[USB_CMD_DATA_SIZE];
+	byte_t buf[USB_CMD_DATA_SIZE] = {0};
 	uint8_t par[MAX_PARITY_SIZE];
   
 	if(param & ISO14A_CONNECT) {