예제 #1
0
int
main (int argc, char** argv) {

/*
	uint8 data[1024];
	unsigned len = 18;
	
	for (int i=0;i<len;i++) {
		printf("%i\n",(int)data[i]);
	}
	return(0);

}

*/

	PX_MD *md;
	uint8 rnd[16];
	char data[1024];
	int i;

	strcpy(data,"This is a test");

	if (px_get_random_bytes(rnd, 16) < 0) {
		printf("No random bytes\n");
		exit(1);
	}
	if (px_find_digest("sha1", &md) < 0) {
		printf("No sha\n");
		exit(1);
	} 

	for (i=0;i<16;i++) {
		printf("%i ",rnd[i]);
	}
	printf("\n");

	/*
	 * Try to make the feeding unpredictable.
	 *
	 * Prefer data over keys, as it's rather likely that key is same in
	 * several calls.
	*/

	
	if (data && rnd[0] >= 32) {
		add_block_entropy(md, data);
	}
	if (data && rnd[1] >= 160) {
		add_block_entropy(md, data);
	}
	if (data && rnd[2] >= 160)
		add_block_entropy(md, data);
	px_md_free(md);
	memset(rnd, 0, sizeof(rnd));

}
예제 #2
0
/*
 * Mix user data into RNG.	It is for user own interests to have
 * RNG state shuffled.
 */
static void
add_entropy(text *data1, text *data2, text *data3)
{
	PX_MD	   *md;
	uint8		rnd[3];

	if (!data1 && !data2 && !data3)
		return;

	if (px_get_random_bytes(rnd, 3) < 0)
		return;

	if (px_find_digest("sha1", &md) < 0)
		return;

	/*
	 * Try to make the feeding unpredictable.
	 *
	 * Prefer data over keys, as it's rather likely that key is same in
	 * several calls.
	 */

	/* chance: 7/8 */
	if (data1 && rnd[0] >= 32)
		add_block_entropy(md, data1);

	/* chance: 5/8 */
	if (data2 && rnd[1] >= 160)
		add_block_entropy(md, data2);

	/* chance: 5/8 */
	if (data3 && rnd[2] >= 160)
		add_block_entropy(md, data3);

	px_md_free(md);
	memset(rnd, 0, sizeof(rnd));
}