X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/d9cc4e1ae29f3fdad933e631076efe9ac0ac4e70..2589bb2c2187559dfd9e2acbccc16962198bf569:/client/cmdhf.c?ds=sidebyside

diff --git a/client/cmdhf.c b/client/cmdhf.c
index caae08e5..dcfb1bdd 100644
--- a/client/cmdhf.c
+++ b/client/cmdhf.c
@@ -8,11 +8,16 @@
 // High frequency commands
 //-----------------------------------------------------------------------------
 
+#include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 #include "proxmark3.h"
-#include "graph.h"
+#include "util.h"
+#include "data.h"
 #include "ui.h"
+#include "iso14443crc.h"
+#include "parity.h"
+#include "cmdmain.h"
 #include "cmdparser.h"
 #include "cmdhf.h"
 #include "cmdhf14a.h"
@@ -477,14 +482,8 @@ uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, ui
 
 	for (int j = 0; j < data_len && j/16 < 16; j++) {
 
-		int oddparity = 0x01;
-		int k;
-
-		for (k=0 ; k<8 ; k++) {
-			oddparity ^= (((frame[j] & 0xFF) >> k) & 0x01);
-		}
 		uint8_t parityBits = parityBytes[j>>3];
-		if (protocol != ISO_14443B && (isResponse || protocol == ISO_14443A) && (oddparity != ((parityBits >> (7-(j&0x0007))) & 0x01))) {
+		if (protocol != ISO_14443B && (isResponse || protocol == ISO_14443A) && (oddparity8(frame[j]) != ((parityBits >> (7-(j&0x0007))) & 0x01))) {
 			snprintf(line[j/16]+(( j % 16) * 4),110, "%02x! ", frame[j]);
 		} else {
 			snprintf(line[j/16]+(( j % 16) * 4), 110, " %02x ", frame[j]);
@@ -669,14 +668,14 @@ int CmdHFSearch(const char *Cmd){
 		PrintAndLog("\nValid ISO14443A Tag Found - Quiting Search\n");
 		return ans;
 	}
-	ans = HF14BInfo(false);
+	ans = HFiClassReader("", false, false);
 	if (ans) {
-		PrintAndLog("\nValid ISO14443B Tag Found - Quiting Search\n");
+		PrintAndLog("\nValid iClass Tag (or PicoPass Tag) Found - Quiting Search\n");
 		return ans;
 	}
-	ans = HFiClassReader("", false, false);
+	ans = HF14BInfo(false);
 	if (ans) {
-		PrintAndLog("\nValid iClass Tag (or PicoPass Tag) Found - Quiting Search\n");
+		PrintAndLog("\nValid ISO14443B Tag Found - Quiting Search\n");
 		return ans;
 	}
 	ans = HF15Reader("", false);
@@ -688,6 +687,14 @@ int CmdHFSearch(const char *Cmd){
 	return 0;
 }
 
+int CmdHFSnoop(const char *Cmd)
+{
+	char * pEnd;
+	UsbCommand c = {CMD_HF_SNIFFER, {strtol(Cmd, &pEnd,0),strtol(pEnd, &pEnd,0),0}};
+	SendCommand(&c);
+	return 0;
+}
+
 static command_t CommandTable[] = 
 {
 	{"help",	CmdHelp,		1, "This help"},
@@ -703,6 +710,7 @@ static command_t CommandTable[] =
 	{"tune",	CmdHFTune,		0, "Continuously measure HF antenna tuning"},
 	{"list",	CmdHFList,		1, "List protocol data in trace buffer"},
 	{"search",	CmdHFSearch,	1, "Search for known HF tags [preliminary]"},
+	{"snoop",   CmdHFSnoop,     0, "<samples to skip (10000)> <triggers to skip (1)> Generic HF Snoop"},
 	{NULL,		NULL,			0, NULL}
 };