85#define MD5_HASH_SIZE 16
86static char magic_randpool[MD5_HASH_SIZE];
87static long magic_randcount;
88static u32_t magic_randomseed;
100static void magic_churnrand(
char *rand_data,
u32_t rand_len) {
106 lwip_md5_update(&
md5_ctx, (
u_char *)magic_randpool,
sizeof(magic_randpool));
119 sys_data.jiffies = magic_randomseed;
121 sys_data.rand = LWIP_RAND();
123 lwip_md5_update(&
md5_ctx, (
u_char *)&sys_data,
sizeof(sys_data));
133void magic_init(
void) {
134 magic_churnrand(
NULL, 0);
140void magic_randomize(
void) {
141 magic_churnrand(
NULL, 0);
162void magic_random_bytes(
unsigned char *
buf,
u32_t buf_len) {
164 u_char tmp[MD5_HASH_SIZE];
167 while (buf_len > 0) {
170 lwip_md5_update(&
md5_ctx, (
u_char *)magic_randpool,
sizeof(magic_randpool));
171 lwip_md5_update(&
md5_ctx, (
u_char *)&magic_randcount,
sizeof(magic_randcount));
172 lwip_md5_finish(&
md5_ctx, tmp);
188 magic_random_bytes((
unsigned char *)&new_rand,
sizeof(new_rand));
195static int magic_randomized;
197static u32_t magic_randomseed;
213void magic_init(
void) {
217 srand((
unsigned)magic_randomseed);
228void magic_randomize(
void) {
230 if (!magic_randomized) {
231 magic_randomized = !0;
257 return (LWIP_RAND() << 16) + LWIP_RAND() + magic_randomseed;
266void magic_random_bytes(
unsigned char *
buf,
u32_t buf_len) {
269 while (buf_len > 0) {
283 return magic() & ~(~0
UL<<
pow);
double pow(double x, double y)
GLenum GLuint GLenum GLsizei const GLchar * buf
void __cdecl srand(_In_ unsigned int _Seed)
_Check_return_ int __cdecl rand(void)
#define MEMCPY(DST, SRC, BYTES)