diff --git a/src/include/lwip/opt.h b/src/include/lwip/opt.h index 52f19b8d..359a0c26 100644 --- a/src/include/lwip/opt.h +++ b/src/include/lwip/opt.h @@ -2159,16 +2159,11 @@ /** * PPP_MD5_RANDM==1: Use MD5 for better randomness. - * Automatically enabled if CHAP or L2TP AUTH support is enabled. + * Enabled by default if CHAP, EAP, or L2TP AUTH support is enabled. */ #ifndef PPP_MD5_RANDM -#define PPP_MD5_RANDM 0 +#define PPP_MD5_RANDM (CHAP_SUPPORT || EAP_SUPPORT || PPPOL2TP_AUTH_SUPPORT) #endif -#if CHAP_SUPPORT || PPPOL2TP_AUTH_SUPPORT -/* MD5 Random is required for CHAP and L2TP AUTH */ -#undef PPP_MD5_RANDM -#define PPP_MD5_RANDM 1 -#endif /* CHAP_SUPPORT || PPPOL2TP_AUTH_SUPPORT */ /** * PolarSSL library, used if necessary and not previously disabled diff --git a/src/include/netif/ppp/magic.h b/src/include/netif/ppp/magic.h index 1c9b96d0..dd99e483 100644 --- a/src/include/netif/ppp/magic.h +++ b/src/include/netif/ppp/magic.h @@ -100,12 +100,6 @@ void magic_randomize(void); */ u32_t magic(void); /* Returns the next magic number */ -/* - * Return a new random number between 0 and (2^pow)-1 included. - */ -u32_t magic_pow(u8_t pow); - -#if PPP_MD5_RANDM /* * Fill buffer with random bytes * @@ -116,8 +110,12 @@ u32_t magic_pow(u8_t pow); * least some degree. Also, it's important to get a good seed before * the first use. */ -void random_bytes(unsigned char *buf, u32_t len); -#endif /* PPP_MD5_RANDM */ +void random_bytes(unsigned char *buf, u32_t buf_len); + +/* + * Return a new random number between 0 and (2^pow)-1 included. + */ +u32_t magic_pow(u8_t pow); #endif /* MAGIC_H */ diff --git a/src/netif/ppp/magic.c b/src/netif/ppp/magic.c index 66a1c3cd..591dbbbf 100644 --- a/src/netif/ppp/magic.c +++ b/src/netif/ppp/magic.c @@ -209,7 +209,7 @@ static u32_t magic_randomseed = 0; /* Seed used for random number generatio * operational. Thus we call it again on the first random * event. */ -void magic_init() { +void magic_init(void) { magic_randomseed += sys_jiffies(); /* Initialize the Borland random number generator. */ @@ -249,10 +249,24 @@ void magic_randomize(void) { * operator or network events in which case it will be pseudo random * seeded by the real time clock. */ -u32_t magic() { +u32_t magic(void) { return ((((u32_t)rand() << 16) + rand()) + magic_randomseed); } +/* + * random_bytes - Fill a buffer with random bytes. + */ +void random_bytes(unsigned char *buf, u32_t buf_len) { + u32_t new_rand, n; + + while (buf_len > 0) { + new_rand = magic(); + n = LWIP_MIN(buf_len, sizeof(new_rand)); + MEMCPY(buf, &new_rand, n); + buf += n; + buf_len -= n; + } +} #endif /* PPP_MD5_RANDM */ /*