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)); }
/* * 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)); }