83 #if LWIP_INCLUDED_POLARSSL_MD5 89 #define MD5_HASH_SIZE 16 90 static char magic_randpool[MD5_HASH_SIZE];
91 static long magic_randcount;
92 static u32_t magic_randomseed;
104 static void magic_churnrand(
char *rand_data,
u32_t rand_len) {
108 md5_starts(&md5_ctx);
109 md5_update(&md5_ctx, (u_char *)magic_randpool,
sizeof(magic_randpool));
111 md5_update(&md5_ctx, (u_char *)rand_data, rand_len);
121 sys_data.jiffies = magic_randomseed;
126 md5_update(&md5_ctx, (u_char *)&sys_data,
sizeof(sys_data));
128 md5_finish(&md5_ctx, (u_char *)magic_randpool);
135 void magic_init(
void) {
136 magic_churnrand(
NULL, 0);
142 void magic_randomize(
void) {
143 magic_churnrand(
NULL, 0);
164 void magic_random_bytes(
unsigned char *buf,
u32_t buf_len) {
166 u_char tmp[MD5_HASH_SIZE];
169 while (buf_len > 0) {
170 md5_starts(&md5_ctx);
171 md5_update(&md5_ctx, (u_char *)magic_randpool,
sizeof(magic_randpool));
172 md5_update(&md5_ctx, (u_char *)&magic_randcount,
sizeof(magic_randcount));
173 md5_finish(&md5_ctx, tmp);
175 n =
LWIP_MIN(buf_len, MD5_HASH_SIZE);
188 magic_random_bytes((
unsigned char *)&new_rand,
sizeof(new_rand));
199 static int magic_randomized;
201 static u32_t magic_randomseed;
222 void magic_init(
void) {
226 srand((
unsigned)magic_randomseed);
239 void magic_randomize(
void) {
241 if (!magic_randomized) {
242 magic_randomized = !0;
267 return ((
u32_t)rand() << 16) + (
u32_t)rand() + magic_randomseed;
274 void magic_random_bytes(
unsigned char *buf,
u32_t buf_len) {
277 while (buf_len > 0) {
279 n =
LWIP_MIN(buf_len,
sizeof(new_rand));
280 MEMCPY(buf, &new_rand, n);
291 return magic() & ~(~0UL<<pow);
#define MEMCPY(dst, src, len)