mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-07-05 12:36:04 -07:00
text
Some checks failed
MacOS Build and Test / macos-make-btaddon (push) Has been cancelled
MacOS Build and Test / macos-cmake (push) Has been cancelled
Ubuntu Build and Test / ubuntu-make (push) Has been cancelled
Ubuntu Build and Test / ubuntu-make-btaddon (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
MacOS Build and Test / macos-make (push) Has been cancelled
Ubuntu Build and Test / ubuntu-cmake (push) Has been cancelled
Windows Build and Test / proxspace (push) Has been cancelled
Windows Build and Test / wsl (push) Has been cancelled
Some checks failed
MacOS Build and Test / macos-make-btaddon (push) Has been cancelled
MacOS Build and Test / macos-cmake (push) Has been cancelled
Ubuntu Build and Test / ubuntu-make (push) Has been cancelled
Ubuntu Build and Test / ubuntu-make-btaddon (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
MacOS Build and Test / macos-make (push) Has been cancelled
Ubuntu Build and Test / ubuntu-cmake (push) Has been cancelled
Windows Build and Test / proxspace (push) Has been cancelled
Windows Build and Test / wsl (push) Has been cancelled
This commit is contained in:
parent
488f7aa01e
commit
5de4dd68e5
15 changed files with 107 additions and 66 deletions
|
@ -238,9 +238,9 @@ static int sam_send_request_iso15(const uint8_t *const request, const uint8_t re
|
|||
}
|
||||
}
|
||||
|
||||
if (sam_rx_buf[6] == 0x81 && sam_rx_buf[8] == 0x8a && sam_rx_buf[9] == 0x81 ){ //check if the response is an SNMP message
|
||||
if (sam_rx_buf[6] == 0x81 && sam_rx_buf[8] == 0x8a && sam_rx_buf[9] == 0x81) { //check if the response is an SNMP message
|
||||
*response_len = sam_rx_buf[5 + 2] + 3;
|
||||
}else{ //if not, use the old logic
|
||||
} else { //if not, use the old logic
|
||||
*response_len = sam_rx_buf[5 + 1] + 2;
|
||||
}
|
||||
|
||||
|
|
|
@ -5971,10 +5971,10 @@ static int CmdHFiClassSAM(const char *Cmd) {
|
|||
}
|
||||
|
||||
if (snmp_data) {
|
||||
uint8_t header[4] = {0xa0, cmdlen+2 , 0x94, cmdlen };
|
||||
memmove(data + 4, data, cmdlen+1);
|
||||
uint8_t header[4] = {0xa0, cmdlen + 2, 0x94, cmdlen };
|
||||
memmove(data + 4, data, cmdlen + 1);
|
||||
data[0] = flags;
|
||||
memcpy(data+1, header, 4);
|
||||
memcpy(data + 1, header, 4);
|
||||
cmdlen += 4;
|
||||
}
|
||||
|
||||
|
@ -6049,21 +6049,21 @@ static int CmdHFiClassSAM(const char *Cmd) {
|
|||
} else {
|
||||
//if it is an error decode it
|
||||
if (memcmp(d, "\xBE\x07\x80\x01", 4) == 0) { //if it the string is 0xbe 0x07 0x80 0x01 the next byte will indicate the error code
|
||||
PrintAndLogEx(ERR,_RED_("Sam Error Code: %02x"), d[4]);
|
||||
PrintAndLogEx(ERR, _RED_("Sam Error Code: %02x"), d[4]);
|
||||
print_hex(d, resp.length);
|
||||
}else if (match_with_wildcard(d, snmp_pattern, snmp_mask, 6)){
|
||||
} else if (match_with_wildcard(d, snmp_pattern, snmp_mask, 6)) {
|
||||
is_snmp = true;
|
||||
PrintAndLogEx(SUCCESS, _YELLOW_("[samSNMPMessageResponse] ")"%s", sprint_hex(d + 6, resp.length - 6));
|
||||
}else if (match_with_wildcard(d,ok_pattern, ok_mask, 3)){
|
||||
} else if (match_with_wildcard(d, ok_pattern, ok_mask, 3)) {
|
||||
PrintAndLogEx(SUCCESS, _YELLOW_("[samResponseAcknowledge] ")"%s", sprint_hex(d + 4, resp.length - 4));
|
||||
}else{
|
||||
} else {
|
||||
print_hex(d, resp.length);
|
||||
}
|
||||
}
|
||||
|
||||
if (decodeTLV && is_snmp == false) {
|
||||
asn1_print(d, d[1] + 2, " ");
|
||||
} else if (decodeTLV && is_snmp){
|
||||
} else if (decodeTLV && is_snmp) {
|
||||
asn1_print(d + 6, resp.length - 6, " ");
|
||||
}
|
||||
|
||||
|
|
|
@ -433,9 +433,10 @@ static int mf_read_uid(uint8_t *uid, int *uidlen, int *nxptype) {
|
|||
}
|
||||
|
||||
static char *GenerateFilename(const char *prefix, const char *suffix) {
|
||||
if (! IfPm3Iso14443a()) {
|
||||
if (IfPm3Iso14443a() == false) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
uint8_t uid[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||
int uidlen = 0;
|
||||
char *fptr = calloc(sizeof(char) * (strlen(prefix) + strlen(suffix)) + sizeof(uid) * 2 + 1, sizeof(uint8_t));
|
||||
|
@ -924,7 +925,7 @@ static int mfc_read_tag(iso14a_card_select_t *card, uint8_t *carddata, uint8_t n
|
|||
|
||||
size_t alen = 0, blen = 0;
|
||||
uint8_t *keyA = NULL, *keyB = NULL;
|
||||
if (loadFileBinaryKey(keyfn, "", (void **)&keyA, (void **)&keyB, &alen, &blen) != PM3_SUCCESS) {
|
||||
if (loadFileBinaryKey(keyfn, "", (void **)&keyA, (void **)&keyB, &alen, &blen, true) != PM3_SUCCESS) {
|
||||
free(fptr);
|
||||
return PM3_ESOFT;
|
||||
}
|
||||
|
@ -1565,7 +1566,7 @@ static int FastDumpWithEcFill(uint8_t numsectors) {
|
|||
}
|
||||
|
||||
if (resp.status != PM3_SUCCESS) {
|
||||
PrintAndLogEx(FAILED, "fast dump reported back failure w KEY A, swapping to KEY B");
|
||||
PrintAndLogEx(FAILED, "fast dump reported back failure w KEY A. Swapping to KEY B");
|
||||
|
||||
// ecfill key B
|
||||
payload.keytype = MF_KEY_B;
|
||||
|
@ -1823,12 +1824,10 @@ static int CmdHF14AMfRestore(const char *Cmd) {
|
|||
//
|
||||
size_t alen = 0, blen = 0;
|
||||
uint8_t *keyA, *keyB;
|
||||
if (loadFileBinaryKey(keyfilename, "", (void **)&keyA, (void **)&keyB, &alen, &blen) != PM3_SUCCESS) {
|
||||
if (loadFileBinaryKey(keyfilename, "", (void **)&keyA, (void **)&keyB, &alen, &blen, true) != PM3_SUCCESS) {
|
||||
return PM3_ESOFT;
|
||||
}
|
||||
|
||||
PrintAndLogEx(INFO, "Using key file `" _YELLOW_("%s") "`", keyfilename);
|
||||
|
||||
// try reading card uid and create filename
|
||||
if (datafnlen == 0) {
|
||||
char *fptr = GenerateFilename("hf-mf-", "-dump.bin");
|
||||
|
@ -7311,12 +7310,10 @@ int CmdHFMFNDEFFormat(const char *Cmd) {
|
|||
//
|
||||
size_t alen = 0, blen = 0;
|
||||
uint8_t *tmpA, *tmpB;
|
||||
if (loadFileBinaryKey(keyFilename, "", (void **)&tmpA, (void **)&tmpB, &alen, &blen) != PM3_SUCCESS) {
|
||||
if (loadFileBinaryKey(keyFilename, "", (void **)&tmpA, (void **)&tmpB, &alen, &blen, true) != PM3_SUCCESS) {
|
||||
goto skipfile;
|
||||
}
|
||||
|
||||
PrintAndLogEx(INFO, "Using `" _YELLOW_("%s") "`", keyFilename);
|
||||
|
||||
for (int i = 0; i < numSectors; i++) {
|
||||
memcpy(keyA[i], tmpA + (i * MIFARE_KEY_SIZE), MIFARE_KEY_SIZE);
|
||||
memcpy(keyB[i], tmpB + (i * MIFARE_KEY_SIZE), MIFARE_KEY_SIZE);
|
||||
|
|
|
@ -1059,7 +1059,7 @@ static int AuthCheckDesfire(DesfireContext_t *dctx,
|
|||
DesfireSetKeyNoClear(dctx, keyno, T_3DES, aeskeyList[curkey]);
|
||||
res = DesfireAuthenticate(dctx, secureChannel, false);
|
||||
if (res == PM3_SUCCESS) {
|
||||
PrintAndLogEx(SUCCESS, "AID 0x%06X, Found 2TDEA Key %02u : " _GREEN_("%s"), curaid, keyno, sprint_hex(aeskeyList[curkey], 16));
|
||||
PrintAndLogEx(SUCCESS, "AID 0x%06X, Found 2TDEA Key %02u... " _GREEN_("%s"), curaid, keyno, sprint_hex_inrow(aeskeyList[curkey], 16));
|
||||
foundKeys[1][keyno][0] = 0x01;
|
||||
*result = true;
|
||||
memcpy(&foundKeys[1][keyno][1], aeskeyList[curkey], 16);
|
||||
|
@ -1091,7 +1091,7 @@ static int AuthCheckDesfire(DesfireContext_t *dctx,
|
|||
DesfireSetKeyNoClear(dctx, keyno, T_AES, aeskeyList[curkey]);
|
||||
res = DesfireAuthenticate(dctx, secureChannel, false);
|
||||
if (res == PM3_SUCCESS) {
|
||||
PrintAndLogEx(SUCCESS, "AID 0x%06X, Found AES Key %02u : " _GREEN_("%s"), curaid, keyno, sprint_hex(aeskeyList[curkey], 16));
|
||||
PrintAndLogEx(SUCCESS, "AID 0x%06X, Found AES Key %02u... " _GREEN_("%s"), curaid, keyno, sprint_hex_inrow(aeskeyList[curkey], 16));
|
||||
foundKeys[2][keyno][0] = 0x01;
|
||||
*result = true;
|
||||
memcpy(&foundKeys[2][keyno][1], aeskeyList[curkey], 16);
|
||||
|
@ -1123,7 +1123,7 @@ static int AuthCheckDesfire(DesfireContext_t *dctx,
|
|||
DesfireSetKeyNoClear(dctx, keyno, T_3K3DES, k3kkeyList[curkey]);
|
||||
res = DesfireAuthenticate(dctx, secureChannel, false);
|
||||
if (res == PM3_SUCCESS) {
|
||||
PrintAndLogEx(SUCCESS, "AID 0x%06X, Found 3TDEA Key %02u : " _GREEN_("%s"), curaid, keyno, sprint_hex(k3kkeyList[curkey], 24));
|
||||
PrintAndLogEx(SUCCESS, "AID 0x%06X, Found 3TDEA Key %02u... " _GREEN_("%s"), curaid, keyno, sprint_hex_inrow(k3kkeyList[curkey], 24));
|
||||
foundKeys[3][keyno][0] = 0x01;
|
||||
*result = true;
|
||||
memcpy(&foundKeys[3][keyno][1], k3kkeyList[curkey], 16);
|
||||
|
|
|
@ -508,7 +508,7 @@ static void init_bitflip_bitarrays(void) {
|
|||
{
|
||||
char progress_text[100];
|
||||
memset(progress_text, 0, sizeof(progress_text));
|
||||
snprintf(progress_text, sizeof(progress_text), "Loaded " _YELLOW_("%u") " RAW / " _YELLOW_("%u") " LZ4 / " _YELLOW_("%u") " BZ2 in %"PRIu64" ms"
|
||||
snprintf(progress_text, sizeof(progress_text), "Loaded " _YELLOW_("%u") " RAW / " _YELLOW_("%u") " LZ4 / " _YELLOW_("%u") " BZ2 in %4"PRIu64" ms"
|
||||
, nraw
|
||||
, nlz4
|
||||
, nbz2
|
||||
|
|
|
@ -231,7 +231,7 @@ static int execute_system_command(const char *command) {
|
|||
|
||||
int ret;
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(_WIN32)
|
||||
char wrapped_command[255];
|
||||
strncat(wrapped_command, "cmd /C \"", 9);
|
||||
strncat(wrapped_command, command, strlen(command));
|
||||
|
|
|
@ -181,7 +181,7 @@ static uint16_t extractChallenges(uint16_t tracepos, uint16_t traceLen, uint8_t
|
|||
}
|
||||
*/
|
||||
|
||||
// extract MFU-C KEY when written.
|
||||
// extract UL-C KEY when written.
|
||||
switch (frame[0]) {
|
||||
|
||||
case MIFARE_ULC_AUTH_1: {
|
||||
|
|
|
@ -2353,7 +2353,7 @@ int loadFileDICTIONARY_safe_ex(const char *preferredName, const char *suffix, vo
|
|||
keylen = 6;
|
||||
}
|
||||
|
||||
size_t block_size = 10 * keylen;
|
||||
size_t block_size = 1000 * keylen;
|
||||
|
||||
// double up since its chars
|
||||
keylen <<= 1;
|
||||
|
@ -2428,10 +2428,9 @@ int loadFileDICTIONARY_safe_ex(const char *preferredName, const char *suffix, vo
|
|||
continue;
|
||||
}
|
||||
|
||||
if (hex_to_bytes(
|
||||
line,
|
||||
(uint8_t *)*pdata + (*keycnt * (keylen >> 1)),
|
||||
keylen >> 1) != (keylen >> 1)) {
|
||||
int ret = hex_to_bytes(line, (uint8_t *)*pdata + (*keycnt * (keylen >> 1)), keylen >> 1);
|
||||
if (ret != (keylen >> 1)) {
|
||||
PrintAndLogEx(INFO, "hex to bytes wrong %i", ret);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -2450,16 +2449,16 @@ out:
|
|||
return retval;
|
||||
}
|
||||
|
||||
int loadFileBinaryKey(const char *preferredName, const char *suffix, void **keya, void **keyb, size_t *alen, size_t *blen) {
|
||||
int loadFileBinaryKey(const char *preferredName, const char *suffix, void **keya, void **keyb, size_t *alen, size_t *blen, bool verbose) {
|
||||
|
||||
char *path;
|
||||
int res = searchFile(&path, RESOURCES_SUBDIR, preferredName, suffix, false);
|
||||
if (res != PM3_SUCCESS) {
|
||||
return PM3_EFILE;
|
||||
return PM3_ENOFILE;
|
||||
}
|
||||
|
||||
FILE *f = fopen(path, "rb");
|
||||
if (!f) {
|
||||
if (f == NULL) {
|
||||
PrintAndLogEx(WARNING, "file not found or locked `" _YELLOW_("%s") "`", path);
|
||||
free(path);
|
||||
return PM3_EFILE;
|
||||
|
@ -2502,7 +2501,9 @@ int loadFileBinaryKey(const char *preferredName, const char *suffix, void **keya
|
|||
*blen = fread(*keyb, 1, fsize, f);
|
||||
fclose(f);
|
||||
|
||||
PrintAndLogEx(SUCCESS, "Loaded binary key file `" _YELLOW_("%s") "`", path);
|
||||
if (verbose) {
|
||||
PrintAndLogEx(SUCCESS, "Loaded binary key file `" _YELLOW_("%s") "`", path);
|
||||
}
|
||||
free(path);
|
||||
return PM3_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -307,7 +307,7 @@ int loadFileDICTIONARY_safe_ex(const char *preferredName, const char *suffix, vo
|
|||
*/
|
||||
int loadFileXML_safe(const char *preferredName, const char *suffix, void **pdata, size_t *datalen);
|
||||
|
||||
int loadFileBinaryKey(const char *preferredName, const char *suffix, void **keya, void **keyb, size_t *alen, size_t *blen);
|
||||
int loadFileBinaryKey(const char *preferredName, const char *suffix, void **keya, void **keyb, size_t *alen, size_t *blen, bool verbose);
|
||||
|
||||
/**
|
||||
* @brief Utility function to check and convert plain mfu dump format to new mfu binary format.
|
||||
|
|
|
@ -64,7 +64,7 @@ int mf_dark_side(uint8_t blockno, uint8_t key_type, uint64_t *key) {
|
|||
//flush queue
|
||||
while (kbd_enter_pressed()) {
|
||||
SendCommandNG(CMD_BREAK_LOOP, NULL, 0);
|
||||
PrintAndLogEx(WARNING, "Aborted via keyboard");
|
||||
PrintAndLogEx(WARNING, "aborted via keyboard");
|
||||
return PM3_EOPABORTED;
|
||||
}
|
||||
|
||||
|
@ -90,7 +90,7 @@ int mf_dark_side(uint8_t blockno, uint8_t key_type, uint64_t *key) {
|
|||
//TODO: Not really stopping the command in time.
|
||||
if (kbd_enter_pressed()) {
|
||||
SendCommandNG(CMD_BREAK_LOOP, NULL, 0);
|
||||
PrintAndLogEx(WARNING, "\nAborted via keyboard");
|
||||
PrintAndLogEx(WARNING, "\naborted via keyboard");
|
||||
return PM3_EOPABORTED;
|
||||
}
|
||||
|
||||
|
|
|
@ -18,38 +18,38 @@ typedef int pthread_spinlock_t;
|
|||
#endif
|
||||
|
||||
static inline int pthread_spin_init(pthread_spinlock_t *lock, int pshared) {
|
||||
__asm__ __volatile__ ("" ::: "memory");
|
||||
*lock = 0;
|
||||
return 0;
|
||||
__asm__ __volatile__("" ::: "memory");
|
||||
*lock = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int pthread_spin_destroy(pthread_spinlock_t *lock) {
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int pthread_spin_lock(pthread_spinlock_t *lock) {
|
||||
while (1) {
|
||||
int i;
|
||||
for (i=0; i < 10000; i++) {
|
||||
if (__sync_bool_compare_and_swap(lock, 0, 1)) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
sched_yield();
|
||||
}
|
||||
while (1) {
|
||||
int i;
|
||||
for (i = 0; i < 10000; i++) {
|
||||
if (__sync_bool_compare_and_swap(lock, 0, 1)) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
sched_yield();
|
||||
}
|
||||
}
|
||||
|
||||
static inline int pthread_spin_trylock(pthread_spinlock_t *lock) {
|
||||
if (__sync_bool_compare_and_swap(lock, 0, 1)) {
|
||||
return 0;
|
||||
}
|
||||
return 16; // EBUSY;
|
||||
if (__sync_bool_compare_and_swap(lock, 0, 1)) {
|
||||
return 0;
|
||||
}
|
||||
return 16; // EBUSY;
|
||||
}
|
||||
|
||||
static inline int pthread_spin_unlock(pthread_spinlock_t *lock) {
|
||||
__asm__ __volatile__ ("" ::: "memory");
|
||||
*lock = 0;
|
||||
return 0;
|
||||
__asm__ __volatile__("" ::: "memory");
|
||||
*lock = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -450,6 +450,43 @@ void lslx(uint8_t *d, size_t n, uint8_t shifts) {
|
|||
}
|
||||
}
|
||||
|
||||
// right shift an array of length one bit
|
||||
void rsl(uint8_t *d, size_t n) {
|
||||
|
||||
uint8_t carry = 0;
|
||||
|
||||
for (size_t i = 0; i < n; i++) {
|
||||
|
||||
// Save the LSB before shifting
|
||||
uint8_t new_carry = d[i] & 0x1;
|
||||
|
||||
// Shift current byte right and incorporate previous carry
|
||||
d[i] = (d[i] >> 1) | (carry ? 0x80 : 0);
|
||||
|
||||
// Update carry for next byte
|
||||
carry = new_carry;
|
||||
}
|
||||
}
|
||||
|
||||
void rslx(uint8_t *d, size_t n, uint8_t shifts) {
|
||||
|
||||
uint8_t carry = 0;
|
||||
for (uint8_t j = 0; j < shifts; j++) {
|
||||
|
||||
for (size_t i = 0; i < n; i++) {
|
||||
|
||||
// Save the LSB before shifting
|
||||
uint8_t new_carry = d[i] & 0x1;
|
||||
|
||||
// Shift current byte right and incorporate previous carry
|
||||
d[i] = (d[i] >> 1) | (carry ? 0x80 : 0);
|
||||
|
||||
// Update carry for next byte
|
||||
carry = new_carry;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// BSWAP24 of array[3]
|
||||
uint32_t le24toh(const uint8_t data[3]) {
|
||||
|
|
|
@ -135,6 +135,9 @@ void xor(uint8_t *dest, const uint8_t *src, size_t n);
|
|||
void lsl(uint8_t *d, size_t n);
|
||||
void lslx(uint8_t *d, size_t n, uint8_t shifts);
|
||||
|
||||
void rsl(uint8_t *d, size_t n);
|
||||
void rslx(uint8_t *d, size_t n, uint8_t shifts);
|
||||
|
||||
uint32_t le24toh(const uint8_t data[3]);
|
||||
void htole24(uint32_t val, uint8_t data[3]);
|
||||
|
||||
|
|
|
@ -3686,9 +3686,10 @@
|
|||
"-p, --prevent fake epurse update",
|
||||
"--shallow shallow mod",
|
||||
"-d, --data <hex> DER encoded command to send to SAM",
|
||||
"-s, --snmp data is in snmp format without headers",
|
||||
"--info get SAM infos (version, serial number)"
|
||||
],
|
||||
"usage": "hf iclass sam [-hvkntp] [--break] [--shallow] [-d <hex>]... [--info]"
|
||||
"usage": "hf iclass sam [-hvkntps] [--break] [--shallow] [-d <hex>]... [--info]"
|
||||
},
|
||||
"hf iclass sim": {
|
||||
"command": "hf iclass sim",
|
||||
|
@ -12123,7 +12124,7 @@
|
|||
},
|
||||
"mem load": {
|
||||
"command": "mem load",
|
||||
"description": "Loads binary file into flash memory on device Warning: mem area to be written must have been wiped first ( dictionaries are serviced as files in spiffs so no wipe is needed )",
|
||||
"description": "Loads binary file into flash memory on device Warning! - mem area to be written must have been wiped first OBS! - dictionaries are serviced as files in spiffs so no wipe is needed",
|
||||
"notes": [
|
||||
"mem load -f myfile -> upload file myfile values at default offset 0",
|
||||
"mem load -f myfile -o 1024 -> upload file myfile values at offset 1024",
|
||||
|
@ -12136,14 +12137,14 @@
|
|||
"options": [
|
||||
"-h, --help This help",
|
||||
"-o, --offset <dec> offset in memory",
|
||||
"-m, --mifare, --mfc upload 6 bytes keys (mifare key dictionary)",
|
||||
"-i, --iclass upload 8 bytes keys (iClass key dictionary)",
|
||||
"-t, --t55xx upload 4 bytes keys (password dictionary)",
|
||||
"--ulc upload 16 bytes keys (mifare UL-C key dictionary)",
|
||||
"--ulaes upload 16 bytes keys (mifare UL-AES key dictionary)",
|
||||
"-m, --mfc upload 6 bytes keys (MIFARE Classic dictionary)",
|
||||
"-i, --iclass upload 8 bytes keys (iClass dictionary)",
|
||||
"-t, --t55xx upload 4 bytes keys (T55xx dictionary)",
|
||||
"--ulc upload 16 bytes keys (MIFARE UL-C dictionary)",
|
||||
"--aes upload 16 bytes keys (MIFARE UL-AES dictionary)",
|
||||
"-f, --file <fn> file name"
|
||||
],
|
||||
"usage": "mem load [-hmit] [-o <dec>] [--ulc] [--ulaes] -f <fn>"
|
||||
"usage": "mem load [-hmit] [-o <dec>] [--ulc] [--aes] -f <fn>"
|
||||
},
|
||||
"mem spiffs check": {
|
||||
"command": "mem spiffs check",
|
||||
|
@ -13374,6 +13375,6 @@
|
|||
"metadata": {
|
||||
"commands_extracted": 768,
|
||||
"extracted_by": "PM3Help2JSON v1.00",
|
||||
"extracted_on": "2025-06-19T15:01:51"
|
||||
"extracted_on": "2025-06-22T18:30:29"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -964,6 +964,8 @@ typedef struct {
|
|||
// Cryptographic error client/pm3: cryptographic operation failed
|
||||
#define PM3_ECRYPTO -29
|
||||
|
||||
// File error client: error related to file does not exist in search paths
|
||||
#define PM3_ENOFILE -30
|
||||
// No data client/pm3: no data available, no host frame available (not really an error)
|
||||
#define PM3_ENODATA -98
|
||||
// Quit program client: reserved, order to quit the program
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue