+ if (htf == RHT2F_UID_ONLY){
+ PrintAndLog("Valid Hitag2 tag found - UID: %08x",id);
+ } else {
+ char filename[FILE_PATH_SIZE];
+ FILE* f = NULL;
+ sprintf(filename,"%08x_%04x.ht2",id,(rand() & 0xffff));
+ f = fopen(filename,"wb");
+ if (!f) {
+ PrintAndLog("Error: Could not open file [%s]",filename);
+ return 1;
+ }
+
+ // Write the 48 tag memory bytes to file and finalize
+ fwrite(resp.d.asBytes, 1, 48, f);
+ fclose(f);
+ PrintAndLog("Succesfully saved tag memory to [%s]",filename);
+ }
+ return 0;
+}
+
+int CmdLFHitagSimS(const char *Cmd) {
+ UsbCommand c = { CMD_SIMULATE_HITAG_S };
+ char filename[FILE_PATH_SIZE] = { 0x00 };
+ FILE* f;
+ bool tag_mem_supplied;
+ int len = strlen(Cmd);
+ if (len > FILE_PATH_SIZE)
+ len = FILE_PATH_SIZE;
+ memcpy(filename, Cmd, len);
+
+ if (strlen(filename) > 0) {
+ f = fopen(filename, "rb+");
+ if (!f) {
+ PrintAndLog("Error: Could not open file [%s]", filename);
+ return 1;
+ }
+ tag_mem_supplied = true;
+ size_t bytes_read = fread(c.d.asBytes, 4*64, 1, f);
+ if ( bytes_read == 0) {
+ PrintAndLog("Error: File reading error");
+ fclose(f);
+ return 1;
+ }
+ fclose(f);
+ } else {
+ tag_mem_supplied = false;
+ }
+
+ // Does the tag comes with memory
+ c.arg[0] = (uint32_t) tag_mem_supplied;
+ clearCommandBuffer();
+ SendCommand(&c);
+ return 0;
+}
+
+int CmdLFHitagCheckChallenges(const char *Cmd) {
+ UsbCommand c = { CMD_TEST_HITAGS_TRACES };
+ char filename[FILE_PATH_SIZE] = { 0x00 };
+ FILE* f;
+ bool file_given;
+ int len = strlen(Cmd);
+ if (len > FILE_PATH_SIZE) len = FILE_PATH_SIZE;
+ memcpy(filename, Cmd, len);
+
+ if (strlen(filename) > 0) {
+ f = fopen(filename,"rb+");
+ if( !f ) {
+ PrintAndLog("Error: Could not open file [%s]", filename);
+ return 1;
+ }
+ file_given = true;
+ size_t bytes_read = fread(c.d.asBytes, 8*60, 1, f);
+ if ( bytes_read == 0) {
+ PrintAndLog("Error: File reading error");
+ fclose(f);
+ return 1;
+ }
+ fclose(f);
+ } else {
+ file_given = false;