diff options
author | あく <alleteam@gmail.com> | 2021-11-01 16:11:25 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-01 16:11:25 +0300 |
commit | 22a4bac44881dab3d290c487df403c12bd7f7660 (patch) | |
tree | 10ac035d989d9882b344768df6130dbda27b0e3e /applications/subghz/subghz_cli.c | |
parent | 3f93a0ae46048fc90c447a0f49f038acd1eddf77 (diff) |
[FL-1934] Core: wipe memory after free. SubGhz: key encryption tool. (#797)
* Core: wipe memory after free. RFID,iButton: fix iterator use after invalidation.
* Debug: support unix wildcards for register matching in svd, update MCU description file and minify it.
* Toolbox: getter for File in FlipperFile.
* Makefile: conditional flashing
* SubGhz: keeloq_mfcodes encryption tool.
* FuriHal: proper IV handling on CBC in crypto. SubGhz: add support for encrypted keeloq keys. Makefile: move formatting to top Makefile.
* SubGhz: rename some function names to match naming scheme.
* SubGhz: encryption tool, fix windows line endings
Co-authored-by: DrZlo13 <who.just.the.doctor@gmail.com>
Diffstat (limited to 'applications/subghz/subghz_cli.c')
-rw-r--r-- | applications/subghz/subghz_cli.c | 100 |
1 files changed, 87 insertions, 13 deletions
diff --git a/applications/subghz/subghz_cli.c b/applications/subghz/subghz_cli.c index 94c2cd03..4a2f06c0 100644 --- a/applications/subghz/subghz_cli.c +++ b/applications/subghz/subghz_cli.c @@ -3,26 +3,15 @@ #include <furi.h> #include <furi-hal.h> #include <stream_buffer.h> +#include <lib/toolbox/args.h> #include <lib/subghz/subghz_parser.h> +#include <lib/subghz/subghz_keystore.h> #include <lib/subghz/protocols/subghz_protocol_common.h> #include <lib/subghz/protocols/subghz_protocol_princeton.h> #define SUBGHZ_FREQUENCY_RANGE_STR \ "299999755...348000000 or 386999938...464000000 or 778999847...928000000" -void subghz_cli_init() { - Cli* cli = furi_record_open("cli"); - - cli_add_command( - cli, "subghz_tx_carrier", CliCommandFlagDefault, subghz_cli_command_tx_carrier, NULL); - cli_add_command( - cli, "subghz_rx_carrier", CliCommandFlagDefault, subghz_cli_command_rx_carrier, NULL); - cli_add_command(cli, "subghz_tx", CliCommandFlagDefault, subghz_cli_command_tx, NULL); - cli_add_command(cli, "subghz_rx", CliCommandFlagDefault, subghz_cli_command_rx, NULL); - - furi_record_close("cli"); -} - void subghz_cli_command_tx_carrier(Cli* cli, string_t args, void* context) { uint32_t frequency = 433920000; @@ -267,3 +256,88 @@ void subghz_cli_command_rx(Cli* cli, string_t args, void* context) { vStreamBufferDelete(instance->stream); free(instance); } + +void subghz_cli_command_print_usage() { + printf("Usage:\r\n"); + printf("subghz_crypto <cmd> <args>\r\n"); + printf("Cmd list:\r\n"); + printf( + "\tkeeloq <plain_text_file> <encrypted_file> <IV:16 bytes in hex>\t - Encrypt keeloq manufacture keys\r\n"); +} + +void subghz_cli_command_encrypt_keeloq(Cli* cli, string_t args) { + uint8_t iv[16]; + + string_t source; + string_t destination; + string_init(source); + string_init(destination); + + SubGhzKeystore* keystore = subghz_keystore_alloc(); + + do { + if(!args_read_string_and_trim(args, source)) { + subghz_cli_command_print_usage(); + break; + } + + if(!args_read_string_and_trim(args, destination)) { + subghz_cli_command_print_usage(); + break; + } + + if(!args_read_hex_bytes(args, iv, 16)) { + subghz_cli_command_print_usage(); + break; + } + + if(!subghz_keystore_load(keystore, string_get_cstr(source))) { + printf("Failed to load Keystore"); + break; + } + + if(!subghz_keystore_save(keystore, string_get_cstr(destination), iv)) { + printf("Failed to save Keystore"); + break; + } + } while(false); + + subghz_keystore_free(keystore); + string_clear(destination); + string_clear(source); +} + +void subghz_cli_command(Cli* cli, string_t args, void* context) { + string_t cmd; + string_init(cmd); + + do { + if(!args_read_string_and_trim(args, cmd)) { + subghz_cli_command_print_usage(); + break; + } + + if(string_cmp_str(cmd, "encrypt_keeloq") == 0) { + subghz_cli_command_encrypt_keeloq(cli, args); + break; + } + + subghz_cli_command_print_usage(); + } while(false); + + string_clear(cmd); +} + +void subghz_cli_init() { + Cli* cli = furi_record_open("cli"); + + cli_add_command( + cli, "subghz_tx_carrier", CliCommandFlagDefault, subghz_cli_command_tx_carrier, NULL); + cli_add_command( + cli, "subghz_rx_carrier", CliCommandFlagDefault, subghz_cli_command_rx_carrier, NULL); + cli_add_command(cli, "subghz_tx", CliCommandFlagDefault, subghz_cli_command_tx, NULL); + cli_add_command(cli, "subghz_rx", CliCommandFlagDefault, subghz_cli_command_rx, NULL); + cli_add_command(cli, "subghz", CliCommandFlagDefault, subghz_cli_command, NULL); + + furi_record_close("cli"); +} |