#include "legicrfsim.h"
#include "hitag2.h"
#include "hitagS.h"
+#include "iclass.h"
+#include "iso14443b.h"
+#include "iso15693.h"
#include "lfsampling.h"
#include "BigBuf.h"
+#include "mifarecmd.h"
#include "mifareutil.h"
+#include "mifaresim.h"
#include "pcf7931.h"
#include "i2c.h"
+#include "hfsnoop.h"
+#include "fpgaloader.h"
#ifdef WITH_LCD
#include "LCD.h"
#endif
+static uint32_t hw_capabilities;
// Craig Young - 14a stand-alone code
#ifdef WITH_ISO14443a
// Let the FPGA drive the high-frequency antenna around 13.56 MHz.
LED_A_ON();
FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
- FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR);
+ FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER);
SpinDelay(20);
*vHf = AvgAdc_Voltage_HF();
LED_A_OFF();
// Let the FPGA drive the high-frequency antenna around 13.56 MHz.
FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
- FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR);
+ FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER);
for (;;) {
SpinDelay(500);
extern char *_bootphase1_version_pointer, _flash_start, _flash_end, _bootrom_start, _bootrom_end, __data_src_start__;
+void set_hw_capabilities(void)
+{
+ if (I2C_is_available()) {
+ hw_capabilities |= HAS_SMARTCARD_SLOT;
+ }
+
+ if (false) { // TODO: implement a test
+ hw_capabilities |= HAS_EXTRA_FLASH_MEM;
+ }
+}
+
+
void SendVersion(void)
{
+ set_hw_capabilities();
+
char temp[USB_CMD_DATA_SIZE]; /* Limited data payload in USB packets */
char VersionString[USB_CMD_DATA_SIZE] = { '\0' };
// Send Chip ID and used flash memory
uint32_t text_and_rodata_section_size = (uint32_t)&__data_src_start__ - (uint32_t)&_flash_start;
uint32_t compressed_data_section_size = common_area.arg1;
- cmd_send(CMD_ACK, *(AT91C_DBGU_CIDR), text_and_rodata_section_size + compressed_data_section_size, 0, VersionString, strlen(VersionString));
+ cmd_send(CMD_ACK, *(AT91C_DBGU_CIDR), text_and_rodata_section_size + compressed_data_section_size, hw_capabilities, VersionString, strlen(VersionString));
}
// measure the USB Speed by sending SpeedTestBufferSize bytes to client and measuring the elapsed time.
/* need this delay to prevent catching some weird data */
SpinDelay(500);
- CopyHIDtoT55x7(tops[selected] & 0x000FFFFF, high[selected], low[selected], (tops[selected] != 0 && ((high[selected]& 0xFFFFFFC0) != 0)));
+ CopyHIDtoT55x7(tops[selected] & 0x000FFFFF, high[selected], low[selected], (tops[selected] != 0 && ((high[selected]& 0xFFFFFFC0) != 0)), 0x1D);
if (tops[selected] > 0)
Dbprintf("Cloned %x %x%08x%08x", selected, tops[selected], high[selected], low[selected]);
else
switch(c->cmd) {
#ifdef WITH_LF
case CMD_SET_LF_SAMPLING_CONFIG:
- setSamplingConfig((sample_config *) c->d.asBytes);
+ setSamplingConfig(c->d.asBytes);
break;
case CMD_ACQUIRE_RAW_ADC_SAMPLES_125K:
cmd_send(CMD_ACK,SampleLF(c->arg[0], c->arg[1]),0,0,0,0);
CmdPSKsimTag(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
break;
case CMD_HID_CLONE_TAG:
- CopyHIDtoT55x7(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes[0]);
+ CopyHIDtoT55x7(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes[0], 0x1D);
+ break;
+ case CMD_PARADOX_CLONE_TAG:
+ // Paradox cards are the same as HID, with a different preamble, so we can reuse the same function
+ CopyHIDtoT55x7(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes[0], 0x0F);
break;
case CMD_IO_DEMOD_FSK:
CmdIOdemodFSK(c->arg[0], 0, 0, 1);
case CMD_PCF7931_WRITE:
WritePCF7931(c->d.asBytes[0],c->d.asBytes[1],c->d.asBytes[2],c->d.asBytes[3],c->d.asBytes[4],c->d.asBytes[5],c->d.asBytes[6], c->d.asBytes[9], c->d.asBytes[7]-128,c->d.asBytes[8]-128, c->arg[0], c->arg[1], c->arg[2]);
break;
+ case CMD_PCF7931_BRUTEFORCE:
+ BruteForcePCF7931(c->arg[0], (c->arg[1] & 0xFF), c->d.asBytes[9], c->d.asBytes[7]-128,c->d.asBytes[8]-128);
+ break;
case CMD_EM4X_READ_WORD:
EM4xReadWord(c->arg[0], c->arg[1],c->arg[2]);
break;
case CMD_EM4X_WRITE_WORD:
EM4xWriteWord(c->arg[0], c->arg[1], c->arg[2]);
break;
+ case CMD_EM4X_PROTECT:
+ EM4xProtect(c->arg[0], c->arg[1], c->arg[2]);
+ break;
case CMD_AWID_DEMOD_FSK: // Set realtime AWID demodulation
CmdAWIDdemodFSK(c->arg[0], 0, 0, 1);
break;
SimulateHitagSTag((bool)c->arg[0],(byte_t*)c->d.asBytes);
break;
case CMD_TEST_HITAGS_TRACES:// Tests every challenge within the given file
- check_challenges((bool)c->arg[0],(byte_t*)c->d.asBytes);
+ check_challenges_cmd((bool)c->arg[0], (byte_t*)c->d.asBytes, (uint8_t)c->arg[1]);
break;
case CMD_READ_HITAG_S://Reader for only Hitag S tags, args = key or challenge
- ReadHitagS((hitag_function)c->arg[0],(hitag_data*)c->d.asBytes);
+ ReadHitagSCmd((hitag_function)c->arg[0], (hitag_data*)c->d.asBytes, (uint8_t)c->arg[1], (uint8_t)c->arg[2], false);
+ break;
+ case CMD_READ_HITAG_S_BLK:
+ ReadHitagSCmd((hitag_function)c->arg[0], (hitag_data*)c->d.asBytes, (uint8_t)c->arg[1], (uint8_t)c->arg[2], true);
break;
case CMD_WR_HITAG_S://writer for Hitag tags args=data to write,page and key or challenge
if ((hitag_function)c->arg[0] < 10) {
case CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_15693:
AcquireRawAdcSamplesIso15693();
break;
- case CMD_RECORD_RAW_ADC_SAMPLES_ISO_15693:
- RecordRawAdcSamplesIso15693();
+
+ case CMD_SNOOP_ISO_15693:
+ SnoopIso15693();
break;
case CMD_ISO_15693_COMMAND:
case CMD_READER_ISO_15693:
ReaderIso15693(c->arg[0]);
break;
+
case CMD_SIMTAG_ISO_15693:
SimTagIso15693(c->arg[0], c->d.asBytes);
break;
+
+ case CMD_CSETUID_ISO_15693:
+ SetTag15693Uid(c->d.asBytes);
+ break;
#endif
#ifdef WITH_LEGICRF
case CMD_MIFARE_WRITEBL:
MifareWriteBlock(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
break;
+ case CMD_MIFARE_PERSONALIZE_UID:
+ MifarePersonalizeUID(c->arg[0], c->arg[1], c->d.asBytes);
+ break;
//case CMD_MIFAREU_WRITEBL_COMPAT:
//MifareUWriteBlockCompat(c->arg[0], c->d.asBytes);
//break;
MifareChkKeys(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
break;
case CMD_SIMULATE_MIFARE_CARD:
- Mifare1ksim(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ MifareSim(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
break;
// emulator
case CMD_ICLASS_WRITEBLOCK:
iClass_WriteBlock(c->arg[0], c->d.asBytes);
break;
- case CMD_ICLASS_READCHECK: // auth step 1
- iClass_ReadCheck(c->arg[0], c->arg[1]);
- break;
case CMD_ICLASS_READBLOCK:
iClass_ReadBlk(c->arg[0]);
break;
iClass_Clone(c->arg[0], c->arg[1], c->d.asBytes);
break;
#endif
+
#ifdef WITH_HFSNOOP
case CMD_HF_SNIFFER:
HfSnoop(c->arg[0], c->arg[1]);
break;
+ case CMD_HF_PLOT:
+ HfPlot();
+ break;
#endif
+
#ifdef WITH_SMARTCARD
case CMD_SMART_ATR: {
SmartCardAtr();
break;
case CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K:
-
LED_B_ON();
uint8_t *BigBuf = BigBuf_get_addr();
for(size_t i=0; i<c->arg[1]; i += USB_CMD_DATA_SIZE) {
}
common_area.flags.osimage_present = 1;
- LED_D_OFF();
- LED_C_OFF();
- LED_B_OFF();
- LED_A_OFF();
-
+ LEDsoff();
+
// Init USB device
usb_enable();