1
mirror of https://github.com/rapid7/metasploit-payloads synced 2025-04-18 07:11:12 +02:00

49 lines
965 B
C

#include <stdlib.h>
// http://burtleburtle.net/bob/rand/smallprng.html
// random modifications just for fun ;p
#define rot(x,k) (((x)<<(k))|((x)>>(32-(k))))
struct __prng_ctx {
unsigned long int a, b, c, d;
};
struct __prng_ctx __prng_state; // XXX< mark as private visibility
int rand(void)
{
int ret;
unsigned long int e = __prng_state.a - rot(__prng_state.b, 23);
__prng_state.a = __prng_state.b ^ rot(__prng_state.c, 16);
__prng_state.b = __prng_state.c + rot(__prng_state.d, 11);
__prng_state.c = __prng_state.d + e;
__prng_state.d = e + __prng_state.a;
ret = __prng_state.d;
if(ret < 0) ret = -ret;
return ret;
}
void srand(unsigned int seed)
{
int i;
__prng_state.a = 0xdea110c8 * seed;
__prng_state.b = seed ^ 0xcafebabe;
__prng_state.c = seed - 0x41414141;
__prng_state.d = ~seed;
for(i = 0; i < 128; i++) rand();
}
long random(void)
{
return rand() ^ 0x5a5aa5a5;
}
void srandom(unsigned int seed)
{
return srand(~seed);
}