/**
* 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
*/
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
*
* 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 */
* 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. */
* 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 */
/*