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; }
/* create an element of this class; prototype is in xfer-element.h */ XferElement * xfer_source_random( guint64 length, guint32 prng_seed) { XferSourceRandom *xsr = (XferSourceRandom *)g_object_new(XFER_SOURCE_RANDOM_TYPE, NULL); XferElement *elt = XFER_ELEMENT(xsr); xsr->length = length; xsr->limited_length = (length != 0); simpleprng_seed(&xsr->prng, prng_seed); return elt; }
/* create an element of this class; prototype is in xfer-element.h */ XferElement * xfer_dest_null( guint32 prng_seed) { XferDestNull *self = (XferDestNull *)g_object_new(XFER_DEST_NULL_TYPE, NULL); XferElement *elt = XFER_ELEMENT(self); if (prng_seed) { self->do_verify = TRUE; simpleprng_seed(&self->prng, prng_seed); } else { self->do_verify = FALSE; } crc32_init(&elt->crc); return elt; }