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;
}
Example #2
0
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;
}
Example #4
0
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;
		}
	}
Example #5
0
static char tohex(char c1, char c2)
{
    char out = (hexdig(c1) << 4) | hexdig(c2);
    return out;
}