From b2ba09b8b4d21429647d9b9be6bae4db1cbaa3d7 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sat, 23 Jan 2021 22:37:25 +0100 Subject: [PATCH 1/2] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 323774a34..868fe6877 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac ## [unreleased][unreleased] - Added support for bidirectional communication for `lf em 4x50 sim` (@tharexde) + - Change `PLATFORM=PM3OTHER` to `PLATFORM=PM3GENERIC` (@iceman1001) - Added `tools/hitag2crack/crack5opencl`, an optimized version of `crack5gpu` (@matrix) - Fixed Makefile to account for changes when running on Apple Silicon (@tcprst) - Added support for debugging ARM with JTAG & VSCode (@Gator96100) From 0fee0c97cb7526f58f279e43a91dc0a06e450738 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sat, 23 Jan 2021 22:38:07 +0100 Subject: [PATCH 2/2] make style --- armsrc/em4x50.c | 80 +++++------ client/src/cmdlfem4x50.c | 6 +- doc/commands.md | 27 ++-- .../crack5opencl/ht2crack5opencl.c | 19 ++- tools/hitag2crack/crack5opencl/opencl.c | 134 +++++++++--------- tools/hitag2crack/crack5opencl/opencl.h | 2 +- tools/hitag2crack/crack5opencl/threads.c | 5 +- 7 files changed, 135 insertions(+), 138 deletions(-) diff --git a/armsrc/em4x50.c b/armsrc/em4x50.c index f27a21367..a9eea7ad2 100644 --- a/armsrc/em4x50.c +++ b/armsrc/em4x50.c @@ -185,7 +185,7 @@ static void em4x50_setup_sim(void) { AT91C_BASE_PIOA->PIO_PER = GPIO_SSC_DOUT | GPIO_SSC_CLK; AT91C_BASE_PIOA->PIO_OER = GPIO_SSC_DOUT; AT91C_BASE_PIOA->PIO_ODR = GPIO_SSC_CLK; - + AT91C_BASE_PMC->PMC_PCER |= (1 << AT91C_ID_TC0); AT91C_BASE_PIOA->PIO_BSR = GPIO_SSC_FRAME; AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS; @@ -194,7 +194,7 @@ static void em4x50_setup_sim(void) { // Watchdog hit WDT_HIT(); - + LEDsoff(); } @@ -1118,7 +1118,7 @@ static void em4x50_sim_send_bit(uint8_t bit) { // wait until SSC_CLK goes HIGH // used as a simple detection of a reader field? while ((timeout--) && !(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); - + if (timeout <= 0) { return; } @@ -1194,19 +1194,19 @@ static void wait_cycles(int maxperiods) { int period = 0, timeout = EM4X50_T_SIMULATION_TIMEOUT_WAIT; while (period < maxperiods) { - + while ((timeout--) && !(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); if (timeout <= 0) { return; } timeout = EM4X50_T_SIMULATION_TIMEOUT_WAIT; - + while ((timeout--) && (AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); if (timeout <= 0) { return; } timeout = EM4X50_T_SIMULATION_TIMEOUT_WAIT; - + period++; } } @@ -1232,7 +1232,7 @@ static int em4x50_sim_read_bit(void) { // gap detected; wait until reader field is switched on again while ((timeout--) && (AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)); - + if (timeout <= 0) { return PM3_ETIMEOUT; } @@ -1259,12 +1259,12 @@ static int em4x50_sim_read_bit(void) { // read byte in simulation mode either with or without parity check (even) static bool em4x50_sim_read_byte(uint8_t *byte, bool paritycheck) { - + for (int i = 0; i < 8; i++) { *byte <<= 1; *byte |= em4x50_sim_read_bit(); } - + if (paritycheck) { int pval = em4x50_sim_read_bit(); @@ -1280,12 +1280,12 @@ static bool em4x50_sim_read_byte(uint8_t *byte, bool paritycheck) { } return true; - + } // read complete word in simulation mode static bool em4x50_sim_read_word(uint32_t *word) { - + uint8_t stop_bit = 0; uint8_t parities = 0, parities_calculated = 0; uint8_t bytes[4] = {0}; @@ -1306,20 +1306,20 @@ static bool em4x50_sim_read_word(uint32_t *word) { parities_calculated ^= (bytes[j] >> (7 - i)) & 1; } } - + *word = BYTES2UINT32(bytes); - + // check parities if ((parities == parities_calculated) && (stop_bit == 0)) { return true; } - + return false; } // check if reader requests receive mode (rm) by sending two zeros static int check_rm_request(uint32_t *tag) { - + // look for first zero int bit = em4x50_sim_read_bit(); if (bit == 0) { @@ -1340,13 +1340,13 @@ static int check_rm_request(uint32_t *tag) { } } } - + return (bit != PM3_ETIMEOUT) ? PM3_SUCCESS : PM3_ETIMEOUT; } // send single listen window in simulation mode static int em4x50_sim_send_listen_window(uint32_t *tag) { - + SHORT_COIL(); wait_cycles(EM4X50_T_TAG_HALF_PERIOD); @@ -1388,7 +1388,7 @@ static void em4x50_sim_send_ack(void) { OPEN_COIL(); wait_cycles(EM4X50_T_TAG_HALF_PERIOD); - + SHORT_COIL(); } @@ -1419,7 +1419,7 @@ static void em4x50_sim_send_nak(void) { // standard read mode process (simulation mode) static int em4x50_sim_handle_standard_read_command(uint32_t *tag) { - + int command = 0; // extract control data @@ -1462,11 +1462,11 @@ static int em4x50_sim_handle_standard_read_command(uint32_t *tag) { static int em4x50_sim_handle_selective_read_command(uint32_t *tag) { int command = 0; - + // read password uint32_t address = 0; bool addr = em4x50_sim_read_word(&address); - + // processing pause time (corresponds to a "1" bit) em4x50_sim_send_bit(1); @@ -1486,7 +1486,7 @@ static int em4x50_sim_handle_selective_read_command(uint32_t *tag) { int fwrp = reflect32(tag[EM4X50_PROTECTION]) & 0xFF; // last word read protected int lwrp = (reflect32(tag[EM4X50_PROTECTION]) >> 8) & 0xFF; - + while ((BUTTON_PRESS() == false) && (data_available() == false)) { WDT_HIT(); @@ -1521,7 +1521,7 @@ static int em4x50_sim_handle_login_command(uint32_t *tag) { // read password uint32_t password = 0; bool pwd = em4x50_sim_read_word(&password); - + // processing pause time (corresponds to a "1" bit) em4x50_sim_send_bit(1); @@ -1548,10 +1548,10 @@ static int em4x50_sim_handle_reset_command(uint32_t *tag) { em4x50_sim_send_ack(); gLogin = false; LED_A_OFF(); - + // wait for initialization (tinit) wait_cycles(EM4X50_T_TAG_TINIT); - + // continue with standard read mode return EM4X50_COMMAND_STANDARD_READ; } @@ -1565,7 +1565,7 @@ static int em4x50_sim_handle_write_command(uint32_t *tag) { // read data uint32_t data = 0; bool word = em4x50_sim_read_word(&data); - + // write access time wait_cycles(EM4X50_T_TAG_TWA); @@ -1634,7 +1634,7 @@ static int em4x50_sim_handle_write_command(uint32_t *tag) { } break; } - + // EEPROM write time // strange: need some sort of 'waveform correction', otherwise ack signal // will not be detected; sending a single "1" as last "bit" of Twee @@ -1666,18 +1666,18 @@ static int em4x50_sim_handle_write_command(uint32_t *tag) { static int em4x50_sim_handle_writepwd_command(uint32_t *tag) { bool pwd = false; - + if (gWritePasswordProcess == false) { - + gWritePasswordProcess = true; // read password uint32_t act_password = 0; pwd = em4x50_sim_read_word(&act_password); - + // processing pause time (corresponds to a "1" bit) em4x50_sim_send_bit(1); - + if (pwd && (act_password == reflect32(tag[EM4X50_DEVICE_PASSWORD]))) { em4x50_sim_send_ack(); gLogin = true; @@ -1710,7 +1710,7 @@ static int em4x50_sim_handle_writepwd_command(uint32_t *tag) { em4x50_sim_send_ack(); return EM4X50_COMMAND_STANDARD_READ; } - + // EEPROM write time // strange: need some sort of 'waveform correction', otherwise ack signal // will not be detected; sending a single "1" as last part of Twee @@ -1722,7 +1722,7 @@ static int em4x50_sim_handle_writepwd_command(uint32_t *tag) { // continue with standard read mode return EM4X50_COMMAND_STANDARD_READ; } - + // call writepwd function again for else branch return EM4X50_COMMAND_WRITE_PASSWORD; } @@ -1732,15 +1732,15 @@ static int em4x50_sim_handle_writepwd_command(uint32_t *tag) { // LED B -> standard read mode is active // LED C -> command has been transmitted by reader void em4x50_sim(uint32_t *password) { - + int command = PM3_ENODATA; - + uint8_t *em4x50_mem = BigBuf_get_EM_addr(); uint32_t tag[EM4X50_NO_WORDS] = {0x0}; for (int i = 0; i < EM4X50_NO_WORDS; i++) tag[i] = bytes_to_num(em4x50_mem + (i * 4), 4); - + // via eload uploaded dump usually does not contain a password if (tag[EM4X50_DEVICE_PASSWORD] == 0) { tag[EM4X50_DEVICE_PASSWORD] = reflect32(*password); @@ -1790,25 +1790,25 @@ void em4x50_sim(uint32_t *password) { LED_C_ON(); command = em4x50_sim_handle_selective_read_command(tag); break; - + case EM4X50_COMMAND_STANDARD_READ: LED_B_ON(); LED_C_OFF(); command = em4x50_sim_handle_standard_read_command(tag); break; - + // bit errors during reading may lead to unknown commands // -> continue with standard read mode default: command = EM4X50_COMMAND_STANDARD_READ; break; } - + // stop if key (pm3 button or enter key) has been pressed if (command == PM3_EOPABORTED) { break; } - + // if timeout (e.g. no reader field) continue with standard read // mode and reset former authentication if (command == PM3_ETIMEOUT) { diff --git a/client/src/cmdlfem4x50.c b/client/src/cmdlfem4x50.c index 84c331337..ae99bd8a6 100644 --- a/client/src/cmdlfem4x50.c +++ b/client/src/cmdlfem4x50.c @@ -1129,10 +1129,10 @@ int CmdEM4x50Restore(const char *Cmd) { } int CmdEM4x50Sim(const char *Cmd) { - + int status = PM3_EFAILED; uint32_t password = 0; - + CLIParserContext *ctx; CLIParserInit(&ctx, "lf em 4x50 sim", "Simulates a EM4x50 tag.\n" @@ -1168,7 +1168,7 @@ int CmdEM4x50Sim(const char *Cmd) { clearCommandBuffer(); SendCommandNG(CMD_LF_EM4X50_SIM, (uint8_t *)&password, sizeof(password)); PacketResponseNG resp; - + PrintAndLogEx(INFO, "Press pm3-button to abort simulation"); bool keypress = kbd_enter_pressed(); while (keypress == false) { diff --git a/doc/commands.md b/doc/commands.md index 33b47f975..3c55c5368 100644 --- a/doc/commands.md +++ b/doc/commands.md @@ -38,6 +38,7 @@ Check column "offline" for their availability. |`analyse nuid `|Y |`create NUID from 7byte UID` |`analyse demodbuff `|Y |`Load binary string to demodbuffer` |`analyse freq `|Y |`Calc wave lengths` +|`analyse foo `|Y |`muxer` ### data @@ -883,25 +884,25 @@ Check column "offline" for their availability. |`lf t55xx help `|Y |`This help` |`lf t55xx clonehelp `|N |`Shows the available clone commands` |`lf t55xx config `|Y |`Set/Get T55XX configuration (modulation, inverted, offset, rate)` -|`lf t55xx dangerraw `|N |`Sends raw bitstream. Dangerous, do not use!! b t ` -|`lf t55xx detect `|Y |`[1] Try detecting the tag modulation from reading the configuration block.` -|`lf t55xx deviceconfig `|N |`Set/Get T55XX device configuration (startgap, writegap, write0, write1, readgap` -|`lf t55xx dump `|N |`[password] [o] Dump T55xx card Page 0 block 0-7. Optional [password], [override]` -|`lf t55xx info `|Y |`[1] Show T55x7 configuration data (page 0/ blk 0)` -|`lf t55xx p1detect `|N |`[1] Try detecting if this is a t55xx tag by reading page 1` -|`lf t55xx read `|N |`b p [password] [o] [1] -- Read T55xx block data. Optional [p password], [override], [page1]` +|`lf t55xx dangerraw `|N |`Sends raw bitstream. Dangerous, do not use!!` +|`lf t55xx detect `|Y |`Try detecting the tag modulation from reading the configuration block` +|`lf t55xx deviceconfig `|N |`Set/Get T55XX device configuration` +|`lf t55xx dump `|N |`Dump T55xx card Page 0 block 0-7` +|`lf t55xx info `|Y |`Show T55x7 configuration data (page 0/ blk 0)` +|`lf t55xx p1detect `|N |`Try detecting if this is a t55xx tag by reading page 1` +|`lf t55xx read `|N |`Read T55xx block data` |`lf t55xx resetread `|N |`Send Reset Cmd then lf read the stream to attempt to identify the start of it (needs a demod and/or plot after)` -|`lf t55xx restore `|N |`f [p ] Restore T55xx card Page 0 / Page 1 blocks` -|`lf t55xx trace `|Y |`[1] Show T55x7 traceability data (page 1/ blk 0-1)` +|`lf t55xx restore `|N |`Restore T55xx card Page 0 / Page 1 blocks` +|`lf t55xx trace `|Y |`Show T55x7 traceability data (page 1/ blk 0-1)` |`lf t55xx wakeup `|N |`Send AOR wakeup command` -|`lf t55xx write `|N |`b d p [password] [1] -- Write T55xx block data. Optional [p password], [page1]` -|`lf t55xx bruteforce `|N |` Simple bruteforce attack to find password` +|`lf t55xx write `|N |`Write T55xx block data` +|`lf t55xx bruteforce `|N |`Simple bruteforce attack to find password` |`lf t55xx chk `|N |`Check passwords from dictionary/flash` |`lf t55xx protect `|N |`Password protect tag` -|`lf t55xx recoverpw `|N |`[password] Try to recover from bad password write from a cloner. Only use on PW protected chips!` +|`lf t55xx recoverpw `|N |`Try to recover from bad password write from a cloner` |`lf t55xx sniff `|Y |`Attempt to recover T55xx commands from sample buffer` |`lf t55xx special `|N |`Show block changes with 64 different offsets` -|`lf t55xx wipe `|N |`[q] Wipe a T55xx tag and set defaults (will destroy any data on tag)` +|`lf t55xx wipe `|N |`Wipe a T55xx tag and set defaults (will destroy any data on tag)` ### lf viking diff --git a/tools/hitag2crack/crack5opencl/ht2crack5opencl.c b/tools/hitag2crack/crack5opencl/ht2crack5opencl.c index 87fb2c765..924932b2c 100644 --- a/tools/hitag2crack/crack5opencl/ht2crack5opencl.c +++ b/tools/hitag2crack/crack5opencl/ht2crack5opencl.c @@ -454,12 +454,11 @@ int main(int argc, char **argv) { if (show) verbose = true; // now discover and set up compute device(s) - if ((err = discoverDevices(profile_selected, device_types_selected, &ocl_platform_cnt, &selected_platforms_cnt, &selected_devices_cnt, &cd_ctx, plat_sel, plat_cnt, dev_sel, dev_cnt, verbose, show)) != 0) - { - printf ("Error: discoverDevices() failed\n"); - if (err < -5) free (cd_ctx); - MEMORY_FREE_ALL - exit (2); + if ((err = discoverDevices(profile_selected, device_types_selected, &ocl_platform_cnt, &selected_platforms_cnt, &selected_devices_cnt, &cd_ctx, plat_sel, plat_cnt, dev_sel, dev_cnt, verbose, show)) != 0) { + printf("Error: discoverDevices() failed\n"); + if (err < -5) free(cd_ctx); + MEMORY_FREE_ALL + exit(2); } if (verbose) printf("\n"); @@ -776,7 +775,7 @@ int main(int argc, char **argv) { err = clGetProgramBuildInfo(ctx.programs[z], cd_ctx[w].device[q].device_id, CL_PROGRAM_BUILD_LOG, len, buffer, 0); if (err != CL_SUCCESS) { printf("[%zu] clGetProgramBuildInfo() failed (%d)\n", z, err); - free (buffer); + free(buffer); continue; } @@ -787,7 +786,7 @@ int main(int argc, char **argv) { printf("[%zu] Build log (len %zu):\n--------\n%s\n--------\n", z, len, buffer); } - free (buffer); + free(buffer); build_logs++; #if DEBUGME == 0 @@ -832,7 +831,7 @@ int main(int argc, char **argv) { } // setup, phase 2 (select lower profile) - unsigned int profile = get_smallest_profile (cd_ctx, ocl_platform_cnt); + unsigned int profile = get_smallest_profile(cd_ctx, ocl_platform_cnt); // setup, phase 3 (finis him) @@ -1126,7 +1125,7 @@ int main(int argc, char **argv) { } // Hokuto Hyakuretsu Ken - ret = thread_start_scheduler (&th_ctx, t_arg, &ctx.queue_ctx); + ret = thread_start_scheduler(&th_ctx, t_arg, &ctx.queue_ctx); if (ret < 0) { printf("Error: thread_start_scheduler() failed (%d): %s\n", ret, thread_strerror(ret)); error = true; diff --git a/tools/hitag2crack/crack5opencl/opencl.c b/tools/hitag2crack/crack5opencl/opencl.c index ecee691b7..98b85714e 100644 --- a/tools/hitag2crack/crack5opencl/opencl.c +++ b/tools/hitag2crack/crack5opencl/opencl.c @@ -40,8 +40,7 @@ bool plat_dev_enabled(unsigned int id, unsigned int *sel, unsigned int cnt, unsi return false; } -unsigned int get_smallest_profile (compute_platform_ctx_t *cd_ctx, size_t ocl_platform_cnt) -{ +unsigned int get_smallest_profile(compute_platform_ctx_t *cd_ctx, size_t ocl_platform_cnt) { unsigned int profile = 0xff; size_t x = 0, y = 0; @@ -68,8 +67,7 @@ unsigned int get_smallest_profile (compute_platform_ctx_t *cd_ctx, size_t ocl_pl return profile; } -int discoverDevices(unsigned int profile_selected, uint32_t device_types_selected, cl_uint *platform_detected_cnt, size_t *selected_platforms_cnt, size_t *selected_devices_cnt, compute_platform_ctx_t **cd_ctx, unsigned int *plat_sel, unsigned int plat_cnt, unsigned int *dev_sel, unsigned int dev_cnt, bool verbose, bool show) -{ +int discoverDevices(unsigned int profile_selected, uint32_t device_types_selected, cl_uint *platform_detected_cnt, size_t *selected_platforms_cnt, size_t *selected_devices_cnt, compute_platform_ctx_t **cd_ctx, unsigned int *plat_sel, unsigned int plat_cnt, unsigned int *dev_sel, unsigned int dev_cnt, bool verbose, bool show) { int err = 0; unsigned int ocl_platform_max = MAX_OPENCL_DEVICES; // 16 cl_uint ocl_platform_cnt; @@ -84,13 +82,13 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte err = clGetPlatformIDs(ocl_platform_max, ocl_platforms, &ocl_platform_cnt); if (err != CL_SUCCESS) { printf("Error: clGetPlatformIDs() failed (%d)\n", err); - free (ocl_platforms); + free(ocl_platforms); return -3; } if (ocl_platform_cnt == 0) { printf("No platforms found, exit\n"); - free (ocl_platforms); + free(ocl_platforms); return -4; } @@ -98,7 +96,7 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte *cd_ctx = (compute_platform_ctx_t *) calloc(ocl_platform_cnt, sizeof(compute_platform_ctx_t)); if (*cd_ctx == NULL) { printf("Error: calloc (compute_platform_ctx_t) failed (%d): %s\n", errno, strerror(errno)); - free (ocl_platforms); + free(ocl_platforms); return -5; } @@ -120,7 +118,7 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte (*cd_ctx)[platform_idx].platform_id = ocl_platforms[platform_idx]; (*cd_ctx)[platform_idx].selected = plat_dev_enabled(platform_idx, plat_sel, plat_cnt, 0, 0); - if ((*cd_ctx)[platform_idx].selected) (*selected_platforms_cnt)++; + if ((*cd_ctx)[platform_idx].selected)(*selected_platforms_cnt)++; if (verbose) printf("\n-- Platform ID: %d\n", platform_idx + 1); @@ -130,33 +128,33 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte err = clGetPlatformInfo((*cd_ctx)[platform_idx].platform_id, ocl_info, 0, NULL, &tmp_len); if (err != CL_SUCCESS) { printf("Error: clGetPlatformInfo(param size) failed (%d)\n", err); - free (*cd_ctx); - free (ocl_platforms); + free(*cd_ctx); + free(ocl_platforms); return -6; } if (tmp_len > 0) { if (!(tmp_buf = (char *) calloc(tmp_len, sizeof(char)))) { printf("Error: calloc (ocl_info %u) failed (%d): %s\n", info_idx, errno, strerror(errno)); - free (*cd_ctx); - free (ocl_platforms); + free(*cd_ctx); + free(ocl_platforms); return -7; } err = clGetPlatformInfo((*cd_ctx)[platform_idx].platform_id, ocl_info, tmp_len, tmp_buf, 0); if (err != CL_SUCCESS) { printf("Error: clGetPlatformInfo(param) failed (%d)\n", err); - free (tmp_buf); - free (*cd_ctx); - free (ocl_platforms); + free(tmp_buf); + free(*cd_ctx); + free(ocl_platforms); return -8; } } else { tmp_len = 4; if (!(tmp_buf = (char *) calloc(tmp_len, sizeof(char)))) { printf("Error: calloc (ocl_info %u) failed (%d): %s\n", info_idx, errno, strerror(errno)); - free (*cd_ctx); - free (ocl_platforms); + free(*cd_ctx); + free(ocl_platforms); return -7; } @@ -182,13 +180,13 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte } if (info_idx == 1) { - if (!strncmp(tmp_buf, "NVIDIA", 6)) (*cd_ctx)[platform_idx].is_nv = true; + if (!strncmp(tmp_buf, "NVIDIA", 6))(*cd_ctx)[platform_idx].is_nv = true; else if (!strncmp(tmp_buf, "Apple", 5)) { (*cd_ctx)[platform_idx].is_apple = true; (*cd_ctx)[platform_idx].warning = true; } - else if (!strncmp(tmp_buf, "Intel", 5)) (*cd_ctx)[platform_idx].is_intel = true; - else if (!strncmp(tmp_buf, "The pocl project", 16)) (*cd_ctx)[platform_idx].is_pocl = true; + else if (!strncmp(tmp_buf, "Intel", 5))(*cd_ctx)[platform_idx].is_intel = true; + else if (!strncmp(tmp_buf, "The pocl project", 16))(*cd_ctx)[platform_idx].is_pocl = true; } - free (tmp_buf); + free(tmp_buf); } if (!show && verbose) { @@ -203,8 +201,8 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte cl_device_id *ocl_devices = (cl_device_id *) calloc(ocl_device_max, sizeof(cl_device_id)); if (!ocl_devices) { printf("Error: calloc (ocl_devices) failed (%d): %s\n", errno, strerror(errno)); - free (*cd_ctx); - free (ocl_platforms); + free(*cd_ctx); + free(ocl_platforms); return -7; } @@ -217,9 +215,9 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte if (err != CL_SUCCESS) { printf("Error: clGetDeviceIDs(cnt) failed (%d)\n", err); - free (ocl_devices); - free (*cd_ctx); - free (ocl_platforms); + free(ocl_devices); + free(*cd_ctx); + free(ocl_platforms); return -9; } @@ -243,13 +241,13 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte err = clGetDeviceInfo(ocl_device, ocl_dev_info, sizeof(cl_device_type), &device_type, 0); if (err != CL_SUCCESS) { printf("Error: clGetDeviceInfo(device_type) failed (%d)\n", err); - free (ocl_devices); - free (*cd_ctx); - free (ocl_platforms); + free(ocl_devices); + free(*cd_ctx); + free(ocl_platforms); return -10; } - if (device_type & CL_DEVICE_TYPE_GPU) (*cd_ctx)[platform_idx].device[device_idx].is_gpu = 1; + if (device_type & CL_DEVICE_TYPE_GPU)(*cd_ctx)[platform_idx].device[device_idx].is_gpu = 1; else if ((device_type & CL_DEVICE_TYPE_CPU) && (*cd_ctx)[platform_idx].is_pocl) { (*cd_ctx)[platform_idx].device[device_idx].profile = (profile_selected > 1) ? 0 : profile_selected; } @@ -258,7 +256,7 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte (*cd_ctx)[platform_idx].device[device_idx].selected = plat_dev_enabled(global_device_id, dev_sel, dev_cnt, (unsigned int) device_type, device_types_selected); global_device_id++; - if ((*cd_ctx)[platform_idx].device[device_idx].selected) (*selected_devices_cnt)++; + if ((*cd_ctx)[platform_idx].device[device_idx].selected)(*selected_devices_cnt)++; continue; } else if (info_idx == 5) { cl_device_local_mem_type local_mem_type; @@ -266,9 +264,9 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte err = clGetDeviceInfo(ocl_device, ocl_dev_info, sizeof(cl_device_local_mem_type), &local_mem_type, 0); if (err != CL_SUCCESS) { printf("Error: clGetDeviceInfo(local_mem_type) failed (%d)\n", err); - free (ocl_devices); - free (*cd_ctx); - free (ocl_platforms); + free(ocl_devices); + free(*cd_ctx); + free(ocl_platforms); return -10; } @@ -279,9 +277,9 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte (*cd_ctx)[platform_idx].device[device_idx].have_local_memory = true; if ((*cd_ctx)[platform_idx].device[device_idx].is_gpu) { - if (profile_selected > 2) (*cd_ctx)[platform_idx].device[device_idx].profile = PROFILE_DEFAULT; // Apple-Intel GPU's + if (profile_selected > 2)(*cd_ctx)[platform_idx].device[device_idx].profile = PROFILE_DEFAULT; // Apple-Intel GPU's } else { - if (profile_selected > 3) (*cd_ctx)[platform_idx].device[device_idx].profile = PROFILE_DEFAULT; // Apple-Intel CPU's + if (profile_selected > 3)(*cd_ctx)[platform_idx].device[device_idx].profile = PROFILE_DEFAULT; // Apple-Intel CPU's } } } else if ((*cd_ctx)[platform_idx].is_nv) { @@ -299,9 +297,9 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte err = clGetDeviceInfo(ocl_device, ocl_dev_info, sizeof(size_t) * 3, wis, 0); if (err != CL_SUCCESS) { printf("Error: clGetDeviceInfo(work_items_size) failed (%d)\n", err); - free (ocl_devices); - free (*cd_ctx); - free (ocl_platforms); + free(ocl_devices); + free(*cd_ctx); + free(ocl_platforms); return -10; } @@ -318,9 +316,9 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte err = clGetDeviceInfo(ocl_device, ocl_dev_info, sizeof(cl_uint), &cores, 0); if (err != CL_SUCCESS) { printf("Error: clGetDeviceInfo(compute_units) failed (%d)\n", err); - free (ocl_devices); - free (*cd_ctx); - free (ocl_platforms); + free(ocl_devices); + free(*cd_ctx); + free(ocl_platforms); return -10; } @@ -336,37 +334,37 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte err = clGetDeviceInfo(ocl_device, ocl_dev_info, 0, NULL, &tmp_len); if (err != CL_SUCCESS) { printf("Error: clGetDeviceInfo(param size) failed (%d)\n", err); - free (ocl_devices); - free (*cd_ctx); - free (ocl_platforms); + free(ocl_devices); + free(*cd_ctx); + free(ocl_platforms); return -10; } if (tmp_len > 0) { if (!(tmp_buf = (char *) calloc(tmp_len, sizeof(char)))) { printf("Error: calloc (ocl_dev_info %u) failed (%d): %s\n", info_idx, errno, strerror(errno)); - free (ocl_devices); - free (*cd_ctx); - free (ocl_platforms); + free(ocl_devices); + free(*cd_ctx); + free(ocl_platforms); return -7; } err = clGetDeviceInfo(ocl_device, ocl_dev_info, tmp_len, tmp_buf, 0); if (err != CL_SUCCESS) { printf("Error: clGetDeviceInfo(param) failed (%d)\n", err); - free (tmp_buf); - free (ocl_devices); - free (*cd_ctx); - free (ocl_platforms); + free(tmp_buf); + free(ocl_devices); + free(*cd_ctx); + free(ocl_platforms); return -10; } } else { tmp_len = 4; if (!(tmp_buf = (char *) calloc(tmp_len, sizeof(char)))) { printf("Error: calloc (ocl_dev_info %u) failed (%d): %s\n", info_idx, errno, strerror(errno)); - free (ocl_devices); - free (*cd_ctx); - free (ocl_platforms); + free(ocl_devices); + free(*cd_ctx); + free(ocl_platforms); return -7; } @@ -395,10 +393,10 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte } if (info_idx == 1) { - // force profile to 0-1 with Jetson Nano - if (strstr(tmp_buf, "Tegra") && (*cd_ctx)[platform_idx].is_pocl) { - (*cd_ctx)[platform_idx].device[device_idx].profile = (profile_selected > 1) ? 0 : profile_selected; - } + // force profile to 0-1 with Jetson Nano + if (strstr(tmp_buf, "Tegra") && (*cd_ctx)[platform_idx].is_pocl) { + (*cd_ctx)[platform_idx].device[device_idx].profile = (profile_selected > 1) ? 0 : profile_selected; + } } else if (info_idx == 4) { if (!strncmp(tmp_buf, "Intel", 5)) { if ((*cd_ctx)[platform_idx].is_apple) { @@ -410,7 +408,7 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte if ((*cd_ctx)[platform_idx].device[device_idx].is_gpu) { (*cd_ctx)[platform_idx].device[device_idx].profile = 0; // Intel GPU's, work better with a very slow profile } else { - (*cd_ctx)[platform_idx].device[device_idx].profile = (profile_selected > 2) ? PROFILE_DEFAULT : profile_selected; // Intel CPU's + (*cd_ctx)[platform_idx].device[device_idx].profile = (profile_selected > 2) ? PROFILE_DEFAULT : profile_selected; // Intel CPU's } } } @@ -423,10 +421,10 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte if (err != CL_SUCCESS) { printf("Error: clGetDeviceInfo(sm_maj/sm_min) failed (%d)\n", err); - free (tmp_buf); - free (ocl_devices); - free (*cd_ctx); - free (ocl_platforms); + free(tmp_buf); + free(ocl_devices); + free(*cd_ctx); + free(ocl_platforms); return -10; } @@ -456,7 +454,7 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte } } - free (tmp_buf); + free(tmp_buf); } if (!show && verbose) printf("%14s: %s\n", "Selected", ((*cd_ctx)[platform_idx].device[device_idx].selected) ? "yes" : "no"); @@ -472,16 +470,16 @@ int discoverDevices(unsigned int profile_selected, uint32_t device_types_selecte (*cd_ctx)[platform_idx].device[device_idx].device_id = ocl_device; } - free (ocl_devices); + free(ocl_devices); ocl_devices = NULL; } - free (ocl_platforms); + free(ocl_platforms); ocl_platforms = NULL; *platform_detected_cnt = ocl_platform_cnt; - if (show) free (*cd_ctx); + if (show) free(*cd_ctx); return 0; } diff --git a/tools/hitag2crack/crack5opencl/opencl.h b/tools/hitag2crack/crack5opencl/opencl.h index 462dbbb4f..76e9857bc 100644 --- a/tools/hitag2crack/crack5opencl/opencl.h +++ b/tools/hitag2crack/crack5opencl/opencl.h @@ -122,7 +122,7 @@ typedef struct opencl_ctx { } opencl_ctx_t; bool plat_dev_enabled(unsigned int id, unsigned int *sel, unsigned int cnt, unsigned int cur_type, unsigned int allow_type); -unsigned int get_smallest_profile (compute_platform_ctx_t *cd_ctx, size_t ocl_platform_cnt); +unsigned int get_smallest_profile(compute_platform_ctx_t *cd_ctx, size_t ocl_platform_cnt); int discoverDevices(unsigned int profile_selected, uint32_t device_types_selected, cl_uint *ocl_platform_cnt, size_t *selected_platforms_cnt, size_t *selected_devices_cnt, compute_platform_ctx_t **cd_ctx, unsigned int *plat_sel, unsigned int plat_cnt, unsigned int *dev_sel, unsigned int dev_cnt, bool verbose, bool show); int runKernel(opencl_ctx_t *ctx, uint32_t cand_base, uint64_t *matches, uint32_t *matches_found, size_t id); diff --git a/tools/hitag2crack/crack5opencl/threads.c b/tools/hitag2crack/crack5opencl/threads.c index ff79a4c74..963425cff 100644 --- a/tools/hitag2crack/crack5opencl/threads.c +++ b/tools/hitag2crack/crack5opencl/threads.c @@ -176,8 +176,7 @@ int thread_init(thread_ctx_t *ctx, short type, size_t thread_count) { return 0; } -int thread_start_scheduler (thread_ctx_t *ctx, thread_args_t *t_arg, wu_queue_ctx_t *queue_ctx) -{ +int thread_start_scheduler(thread_ctx_t *ctx, thread_args_t *t_arg, wu_queue_ctx_t *queue_ctx) { size_t z = 0; bool found = false; bool done = false; @@ -775,7 +774,7 @@ void *computing_process_async(void *arg) { pthread_cond_signal(&a->thread_ctx->thread_cond_usleep); // unlock master/TH_PROCESSING cond #if TDEBUG >= 1 printf("[%s][%zu] after pthread_cond_signal TH_END\n", __func__, z); - fflush (stdout); + fflush(stdout); #endif pthread_mutex_unlock(&a->thread_ctx->thread_mutex_usleep); }