STATIC uint8_t * get_bignumval(uint8_t *buf, negotiation_parameter_t *par) { int val; char c; uint8_t *dp = buf; par->val.sval = buf; if (buf[0] == '0' && (buf[1] == 'x' || buf[1] == 'X')) { buf += 2; while ((c = *buf) != 0x0) { buf++; val = (hexdig(c) << 4) | hexdig(*buf); if (val < 0) { return NULL; } *dp++ = (uint8_t) val; if (*buf) { buf++; } } buf++; par->list_num = dp - par->val.sval; } else if (buf[0] == '0' && (buf[1] == 'b' || buf[1] == 'B')) { buf = base64_decode(&buf[2], par->val.sval, &par->list_num); } else { DEBOUT(("Ill-formatted large number <%s>\n", buf)); return NULL; } return buf; }
int main(int argc, char **argv) { if (argc != 3 || (nthreads = atoi(argv[1])) <= 0 || strlen(argv[2]) != 16*2) usage(); assert(nthreads > 0); // Decode the MD5 hash from hex unsigned char hash[16]; int i; for (i = 0; i < 16; i++) { int hi = hexdig(argv[2][i*2+0]); int lo = hexdig(argv[2][i*2+1]); if (hi < 0 || lo < 0) usage(); hash[i] = (hi << 4) | lo; } // Search all strings of length 1, then of length 2, ... int len; for (len = 1; len < MAXLEN; len++) { cprintf("Searching strings of length %d\n", len); uint8_t str[len+1]; str[len] = 0; // Null terminate for printing match memset(str, MINCHR, len); if (psearch(str, len, hash)) { printf("Match: '%s'\n", out); exit(0); } } cprintf("not found\n"); return 1; }
STATIC uint8_t * get_numval(uint8_t *buf, uint32_t *pval) { uint32_t val = 0; char c; if (buf[0] == '0' && (buf[1] == 'x' || buf[1] == 'X')) { buf += 2; while (*buf && *buf != '~') { int n; if ((n = hexdig(*buf++)) < 0) return NULL; val = (val << 4) | n; } } else while (*buf && *buf != '~') { c = *buf++; if (!isdigit(c)) return NULL; val = val * 10 + (c - '0'); } *pval = val; return buf + 1; }
void my_log_data(char *mydata, int mylen) { char obuf[65]; char *hdigs = "0123456789ABCDEF"; char *oo1, *oo2; int i, v, x, z; while(mylen > 0) { oo1 = obuf; oo2 = obuf+48; z = mylen < 16 ? mylen : 16; for (i=0; i<16; i++) { if (v = (i<mylen)) x = *(mydata++); *(oo1++) = v ? hexdig(x>>4) : '_'; *(oo1++) = v ? hexdig(x) : '_'; *(oo1++) = ' '; *(oo2++) = v ? (x < ' ' || x > '~') ? '.' : x : '\0'; } obuf[48+z] = '\n'; write(2, obuf, z+49); mylen -= 16; } }
static char tohex(char c1, char c2) { char out = (hexdig(c1) << 4) | hexdig(c2); return out; }