コード例 #1
0
ファイル: simpleprng.c プロジェクト: ahqmhjk/amanda
gboolean simpleprng_verify_buffer(
    simpleprng_state_t *state,
    gpointer buf,
    size_t len)
{
    guint8 *p = buf;
    while (len--) {
	guint64 count = state->count;
	guint8 expected = simpleprng_rand_byte(state);
	guint8 got = *p;
	if (expected != got) {
	    int remaining = MIN(len, 16);
	    guint8 expbytes[16] = { expected };
	    char *gotstr = hexstr(p, remaining);
	    char *expstr;
	    int i;

	    for (i = 1; i < remaining; i++)
		expbytes[i] = simpleprng_rand_byte(state);
	    expstr = hexstr(expbytes, remaining);

	    g_fprintf(stderr,
		    "random value mismatch at offset %ju: got %s, expected %s\n",
		    (uintmax_t)count, gotstr, expstr);
	    g_free(gotstr);
	    g_free(expstr);
	    return FALSE;
	}
	p++;
    }

    return TRUE;
}
コード例 #2
0
ファイル: hexencode-test.c プロジェクト: malclocke/amanda
static int
test_roundtrip_rand(void)
{
    int i, ret;
    simpleprng_state_t state;
    char *in, *tmp_enc = NULL, *tmp_dec = NULL;
    size_t size;
    GError *err = NULL;
    
    simpleprng_seed(&state, 0xface);
    ret = TRUE;
    for (i = 0; i < 100; i++) {
        size = simpleprng_rand_byte(&state);
        in = g_malloc0(size+1);
        simpleprng_fill_buffer(&state, in, size);
        tmp_enc = hexencode_string(in);
        tmp_dec = tmp_enc? hexdecode_string(tmp_enc, &err) : NULL;
        if (!tmp_enc || !tmp_dec || strcmp(in, tmp_dec) || err) {
            ret = FALSE;
            tu_dbg("roundtrip failure:\n")
            tu_dbg("input:      \"%s\"\n", in);
            tu_dbg("enc output: \"%s\"\n", tmp_enc? tmp_enc : "(null)");
            tu_dbg("dec output: \"%s\"\n", tmp_dec? tmp_dec : "(null)");
            tu_dbg("error msg:  %s\n", err? err->message : "(none)");
        }
        g_clear_error(&err);
        amfree(tmp_enc);
        amfree(tmp_dec);
        g_free(in);
    }
    return ret;
}
コード例 #3
0
ファイル: simpleprng.c プロジェクト: samco/amanda
void simpleprng_fill_buffer(
    simpleprng_state_t *state,
    gpointer buf,
    size_t len)
{
    guint8 *p = buf;
    while (len--) {
	*(p++) = simpleprng_rand_byte(state);
    }
}
コード例 #4
0
ファイル: simpleprng.c プロジェクト: samco/amanda
gboolean simpleprng_verify_buffer(
    simpleprng_state_t *state,
    gpointer buf,
    size_t len)
{
    guint8 *p = buf;
    while (len--) {
	guint8 expected = simpleprng_rand_byte(state);
	guint8 got = *p;
	if (expected != got) {
	    g_fprintf(stderr,
		    "random value mismatch in buffer %p, offset %zd: got 0x%02x, expected 0x%02x\n", 
		    buf, (size_t)(p-(guint8*)buf), (int)got, (int)expected);
	    return FALSE;
	}
	p++;
    }

    return TRUE;
}