Exemplo n.º 1
0
static inline void ev_debug(enum ev_type type, union ev_val *val, uint32_t count)
{
    switch (type) {
	case ev_string:
	    cli_dbgmsg("\t(%u): %s\n", count, val->v_string);
	    break;
	case ev_data:
	{
	    char *d = cli_str2hex(val->v_data, count);
	    cli_dbgmsg("\t%d bytes\n", count);
	    cli_dbgmsg("\t%s\n", d);
	    free(d);
	    break;
	}
	case ev_data_fast:
	    cli_dbgmsg("\t%08x checksum, %u bytes\n", (uint32_t)val->v_int, count);
	    break;
	case ev_int:
	    cli_dbgmsg("\t(%u): 0x%llx\n", count, (long long)val->v_int);
	    break;
	case ev_time:
	    cli_dbgmsg("\t(%u): %d.%06us\n", count, (signed)(val->v_int / 1000000),
		       (unsigned)(val->v_int % 1000000));
	    break;
    }
}
Exemplo n.º 2
0
int cli_versig(const char *md5, const char *dsig)
{
	mp_int n, e;
	char *pt, *pt2;


    if(strlen(md5) != 32 || !isalnum(md5[0])) {
	/* someone is trying to fool us with empty/malformed MD5 ? */
	cli_errmsg("SECURITY WARNING: MD5 basic test failure.\n");
	return CL_EVERIFY;
    }

    mp_init(&n);
    mp_read_radix(&n, CLI_NSTR, 10);
    mp_init(&e);
    mp_read_radix(&e, CLI_ESTR, 10);

    if(!(pt = (char *) cli_decodesig(dsig, 16, e, n))) {
	mp_clear(&n);
	mp_clear(&e);
	return CL_EVERIFY;
    }

    pt2 = cli_str2hex(pt, 16);
    free(pt);

    cli_dbgmsg("cli_versig: Decoded signature: %s\n", pt2);

    if(strncmp(md5, pt2, 32)) {
	cli_dbgmsg("cli_versig: Signature doesn't match.\n");
	free(pt2);
	mp_clear(&n);
	mp_clear(&e);
	return CL_EVERIFY;
    }

    free(pt2);
    mp_clear(&n);
    mp_clear(&e);

    cli_dbgmsg("cli_versig: Digital signature is correct.\n");
    return CL_SUCCESS;
}