// Standard Data via GET void ChangeData(struct one_wire_query *owq) { struct parsedname *pn = PN(owq); ASCII *value_string = OWQ_buffer(owq); /* Do command processing and make changes to 1-wire devices */ LEVEL_DETAIL("New data path=%s value=%s", pn->path, value_string); switch (pn->selected_filetype->format) { case ft_binary: hex_only(value_string); OWQ_size(owq) = hex_convert(value_string); break; default: OWQ_size(owq) = strlen(value_string); break; } FS_write_postparse(owq); }
static int mp_gen_css (hashcat_ctx_t *hashcat_ctx, char *mask_buf, size_t mask_len, cs_t *mp_sys, cs_t *mp_usr, cs_t *css_buf, u32 *css_cnt) { const user_options_t *user_options = hashcat_ctx->user_options; u32 mask_pos; u32 css_pos; for (mask_pos = 0, css_pos = 0; mask_pos < mask_len; mask_pos++, css_pos++) { char p0 = mask_buf[mask_pos]; if (p0 == '?') { mask_pos++; if (mask_pos == mask_len) break; char p1 = mask_buf[mask_pos]; u32 chr = (u32) p1; int rc = 0; switch (p1) { case 'l': rc = mp_add_cs_buf (hashcat_ctx, mp_sys[0].cs_buf, mp_sys[0].cs_len, css_buf, css_pos); break; case 'u': rc = mp_add_cs_buf (hashcat_ctx, mp_sys[1].cs_buf, mp_sys[1].cs_len, css_buf, css_pos); break; case 'd': rc = mp_add_cs_buf (hashcat_ctx, mp_sys[2].cs_buf, mp_sys[2].cs_len, css_buf, css_pos); break; case 's': rc = mp_add_cs_buf (hashcat_ctx, mp_sys[3].cs_buf, mp_sys[3].cs_len, css_buf, css_pos); break; case 'a': rc = mp_add_cs_buf (hashcat_ctx, mp_sys[4].cs_buf, mp_sys[4].cs_len, css_buf, css_pos); break; case 'b': rc = mp_add_cs_buf (hashcat_ctx, mp_sys[5].cs_buf, mp_sys[5].cs_len, css_buf, css_pos); break; case 'h': rc = mp_add_cs_buf (hashcat_ctx, mp_sys[6].cs_buf, mp_sys[6].cs_len, css_buf, css_pos); break; case 'H': rc = mp_add_cs_buf (hashcat_ctx, mp_sys[7].cs_buf, mp_sys[7].cs_len, css_buf, css_pos); break; case '1': if (mp_usr[0].cs_len == 0) { event_log_error (hashcat_ctx, "Custom-charset 1 is undefined."); return -1; } rc = mp_add_cs_buf (hashcat_ctx, mp_usr[0].cs_buf, mp_usr[0].cs_len, css_buf, css_pos); break; case '2': if (mp_usr[1].cs_len == 0) { event_log_error (hashcat_ctx, "Custom-charset 2 is undefined."); return -1; } rc = mp_add_cs_buf (hashcat_ctx, mp_usr[1].cs_buf, mp_usr[1].cs_len, css_buf, css_pos); break; case '3': if (mp_usr[2].cs_len == 0) { event_log_error (hashcat_ctx, "Custom-charset 3 is undefined."); return -1; } rc = mp_add_cs_buf (hashcat_ctx, mp_usr[2].cs_buf, mp_usr[2].cs_len, css_buf, css_pos); break; case '4': if (mp_usr[3].cs_len == 0) { event_log_error (hashcat_ctx, "Custom-charset 4 is undefined."); return -1; } rc = mp_add_cs_buf (hashcat_ctx, mp_usr[3].cs_buf, mp_usr[3].cs_len, css_buf, css_pos); break; case '?': rc = mp_add_cs_buf (hashcat_ctx, &chr, 1, css_buf, css_pos); break; default: event_log_error (hashcat_ctx, "Syntax error: %s", mask_buf); return -1; } if (rc == -1) return -1; } else { if (user_options->hex_charset == true) { mask_pos++; // if there is no 2nd hex character, show an error: if (mask_pos == mask_len) { event_log_error (hashcat_ctx, "The hex-charset option expects exactly 2 hexadecimal chars. Failed mask: %s", mask_buf); return -1; } char p1 = mask_buf[mask_pos]; // if they are not valid hex character, show an error: if ((is_valid_hex_char ((u8) p0) == false) || (is_valid_hex_char ((u8) p1) == false)) { event_log_error (hashcat_ctx, "Invalid hex character detected in mask %s", mask_buf); return -1; } u32 chr = 0; chr |= (u32) hex_convert ((u8) p1) << 0; chr |= (u32) hex_convert ((u8) p0) << 4; const int rc = mp_add_cs_buf (hashcat_ctx, &chr, 1, css_buf, css_pos); if (rc == -1) return -1; } else { u32 chr = (u32) p0; const int rc = mp_add_cs_buf (hashcat_ctx, &chr, 1, css_buf, css_pos); if (rc == -1) return -1; } } } if (css_pos == 0) { event_log_error (hashcat_ctx, "Invalid mask length (0)."); return -1; } *css_cnt = css_pos; return 0; }
static int mp_expand (hashcat_ctx_t *hashcat_ctx, const char *in_buf, size_t in_len, cs_t *mp_sys, cs_t *mp_usr, u32 mp_usr_offset, int interpret) { const user_options_t *user_options = hashcat_ctx->user_options; size_t in_pos; for (in_pos = 0; in_pos < in_len; in_pos++) { u32 p0 = in_buf[in_pos] & 0xff; if (interpret == 1 && p0 == '?') { in_pos++; if (in_pos == in_len) break; u32 p1 = in_buf[in_pos] & 0xff; int rc = 0; switch (p1) { case 'l': rc = mp_add_cs_buf (hashcat_ctx, mp_sys[0].cs_buf, mp_sys[0].cs_len, mp_usr, mp_usr_offset); break; case 'u': rc = mp_add_cs_buf (hashcat_ctx, mp_sys[1].cs_buf, mp_sys[1].cs_len, mp_usr, mp_usr_offset); break; case 'd': rc = mp_add_cs_buf (hashcat_ctx, mp_sys[2].cs_buf, mp_sys[2].cs_len, mp_usr, mp_usr_offset); break; case 's': rc = mp_add_cs_buf (hashcat_ctx, mp_sys[3].cs_buf, mp_sys[3].cs_len, mp_usr, mp_usr_offset); break; case 'a': rc = mp_add_cs_buf (hashcat_ctx, mp_sys[4].cs_buf, mp_sys[4].cs_len, mp_usr, mp_usr_offset); break; case 'b': rc = mp_add_cs_buf (hashcat_ctx, mp_sys[5].cs_buf, mp_sys[5].cs_len, mp_usr, mp_usr_offset); break; case 'h': rc = mp_add_cs_buf (hashcat_ctx, mp_sys[6].cs_buf, mp_sys[6].cs_len, mp_usr, mp_usr_offset); break; case 'H': rc = mp_add_cs_buf (hashcat_ctx, mp_sys[7].cs_buf, mp_sys[7].cs_len, mp_usr, mp_usr_offset); break; case '1': if (mp_usr[0].cs_len == 0) { event_log_error (hashcat_ctx, "Custom-charset 1 is undefined."); return -1; } rc = mp_add_cs_buf (hashcat_ctx, mp_usr[0].cs_buf, mp_usr[0].cs_len, mp_usr, mp_usr_offset); break; case '2': if (mp_usr[1].cs_len == 0) { event_log_error (hashcat_ctx, "Custom-charset 2 is undefined."); return -1; } rc = mp_add_cs_buf (hashcat_ctx, mp_usr[1].cs_buf, mp_usr[1].cs_len, mp_usr, mp_usr_offset); break; case '3': if (mp_usr[2].cs_len == 0) { event_log_error (hashcat_ctx, "Custom-charset 3 is undefined."); return -1; } rc = mp_add_cs_buf (hashcat_ctx, mp_usr[2].cs_buf, mp_usr[2].cs_len, mp_usr, mp_usr_offset); break; case '4': if (mp_usr[3].cs_len == 0) { event_log_error (hashcat_ctx, "Custom-charset 4 is undefined."); return -1; } rc = mp_add_cs_buf (hashcat_ctx, mp_usr[3].cs_buf, mp_usr[3].cs_len, mp_usr, mp_usr_offset); break; case '?': rc = mp_add_cs_buf (hashcat_ctx, &p0, 1, mp_usr, mp_usr_offset); break; default: event_log_error (hashcat_ctx, "Syntax error: %s", in_buf); return -1; } if (rc == -1) return -1; } else { if (user_options->hex_charset == true) { in_pos++; if (in_pos == in_len) { event_log_error (hashcat_ctx, "The hex-charset option expects exactly 2 hexadecimal chars. Failed mask: %s", in_buf); return -1; } u32 p1 = in_buf[in_pos] & 0xff; if ((is_valid_hex_char ((u8) p0) == false) || (is_valid_hex_char ((u8) p1) == false)) { event_log_error (hashcat_ctx, "Invalid hex character detected in mask %s", in_buf); return -1; } u32 chr = 0; chr = (u32) hex_convert ((u8) p1) << 0; chr |= (u32) hex_convert ((u8) p0) << 4; const int rc = mp_add_cs_buf (hashcat_ctx, &chr, 1, mp_usr, mp_usr_offset); if (rc == -1) return -1; } else { u32 chr = p0; const int rc = mp_add_cs_buf (hashcat_ctx, &chr, 1, mp_usr, mp_usr_offset); if (rc == -1) return -1; } } } return 0; }
int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) { u32 *digest = (u32 *) digest_buf; agilekey_t *agilekey = (agilekey_t *) esalt_buf; token_t token; token.token_cnt = 3; token.len_min[0] = 1; token.len_max[0] = 6; token.sep[0] = ':'; token.attr[0] = TOKEN_ATTR_VERIFY_LENGTH; token.len_min[1] = 16; token.len_max[1] = 16; token.sep[1] = ':'; token.attr[1] = TOKEN_ATTR_VERIFY_LENGTH | TOKEN_ATTR_VERIFY_HEX; token.len_min[2] = 2080; token.len_max[2] = 2080; token.sep[2] = ':'; token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH | TOKEN_ATTR_VERIFY_HEX; const int rc_tokenizer = input_tokenizer ((const u8 *) line_buf, line_len, &token); if (rc_tokenizer != PARSER_OK) return (rc_tokenizer); /** * pbkdf2 iterations */ const u8 *iter_pos = token.buf[0]; salt->salt_iter = hc_strtoul ((const char *) iter_pos, NULL, 10) - 1; /** * handle salt encoding */ const u8 *salt_pos = token.buf[1]; const int salt_len = token.len[1]; u8 *saltbuf_ptr = (u8 *) salt->salt_buf; for (int i = 0; i < salt_len; i += 2) { const u8 p0 = salt_pos[i + 0]; const u8 p1 = salt_pos[i + 1]; *saltbuf_ptr++ = hex_convert (p1) << 0 | hex_convert (p0) << 4; } salt->salt_len = salt_len / 2; /** * handle cipher encoding */ const u8 *cipher_pos = token.buf[2]; const int cipher_len = token.len[2]; u32 tmp[32] = { 0 }; u8 *cipherbuf_ptr = (u8 *) tmp; for (int i = 2016; i < cipher_len; i += 2) { const u8 p0 = cipher_pos[i + 0]; const u8 p1 = cipher_pos[i + 1]; *cipherbuf_ptr++ = hex_convert (p1) << 0 | hex_convert (p0) << 4; } // iv is stored at salt_buf 4 (length 16) // data is stored at salt_buf 8 (length 16) salt->salt_buf[ 4] = byte_swap_32 (tmp[0]); salt->salt_buf[ 5] = byte_swap_32 (tmp[1]); salt->salt_buf[ 6] = byte_swap_32 (tmp[2]); salt->salt_buf[ 7] = byte_swap_32 (tmp[3]); salt->salt_buf[ 8] = byte_swap_32 (tmp[4]); salt->salt_buf[ 9] = byte_swap_32 (tmp[5]); salt->salt_buf[10] = byte_swap_32 (tmp[6]); salt->salt_buf[11] = byte_swap_32 (tmp[7]); for (int i = 0, j = 0; i < 1040; i += 1, j += 2) { const u8 p0 = cipher_pos[j + 0]; const u8 p1 = cipher_pos[j + 1]; agilekey->cipher[i] = hex_convert (p1) << 0 | hex_convert (p0) << 4; } /** * digest buf */ digest[0] = 0x10101010; digest[1] = 0x10101010; digest[2] = 0x10101010; digest[3] = 0x10101010; return (PARSER_OK); }
static int handle_tdtp_connection(struct tdtp_state *t) { char *p, *tmp, *to_free = NULL; // char version[32]; u8_t new_motor = 0, new_direction = 0, new_pwm = 0, new_time = 0; U8 *mac = NULL; PSOCK_BEGIN(&t->p); if(uip_connected() && !(uip_timedout()) && !(uip_closed()) && !(uip_aborted())) { #ifdef MOG_DEBUG printf("connectedr\n"); #endif mac = zg_get_mac(); /* sprintf(version, "dialadong-001|%02X:%02X:%02X:%02X:%02X:%02X", */ /* mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]); */ /* uip_send(version, strlen(version)); */ uip_send("dialadong-001|",15); uip_send(hex_convert(mac[0]),3); uip_send(hex_convert(mac[1]),3); uip_send(hex_convert(mac[2]),3); uip_send(hex_convert(mac[3]),3); uip_send(hex_convert(mac[4]),3); uip_send(hex_convert(mac[5]),3); uip_send("dialadong-001|00:1E:C0:00:0B:DB", 32); } else if(uip_newdata()) { memset(&t->inputbuffer, 0, sizeof(t->inputbuffer)); PSOCK_READTO(&t->p, '\n'); #ifdef MOG_DEBUG printf("hello %d:%s:\r\n", uip_datalen(), t->inputbuffer); #endif tmp = to_free = strdup(t->inputbuffer); if(tmp) { p = strsep(&tmp, ","); if(p) { new_motor = atoi(p); p = strsep(&tmp, ","); } if(p) { new_direction = atoi(p); p = strsep(&tmp, ","); } if(p) { new_pwm = atoi(p); p = strsep(&tmp, ","); } if(p) { new_time = atoi(p); #ifdef MOG_DEBUG printf("hello :%d:%d:%d:%d:\r\n", new_motor, new_direction, new_pwm, new_time); #endif uip_send(t->inputbuffer,sizeof(t->inputbuffer)); //do stuff here } } } else if(uip_closed()) { #ifdef MOG_DEBUG printf("failure closed\r\n"); #endif uip_abort(); tdtp_state = 1; } else if(uip_aborted()) { #ifdef MOG_DEBUG printf("failure aborted\r\n"); #endif uip_abort(); tdtp_state = 1; } else if(uip_timedout()) { #ifdef MOG_DEBUG printf("failure timedout\r\n"); #endif uip_abort(); tdtp_state = 1; } if(to_free) free(to_free); PSOCK_END(&t->p); return 0; }