xref: /nrf52832-nimble/rt-thread/components/net/lwip-1.4.1/src/netif/ppp/randm.h (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /*****************************************************************************
2*10465441SEvalZero * randm.h - Random number generator header file.
3*10465441SEvalZero *
4*10465441SEvalZero * Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc.
5*10465441SEvalZero * Copyright (c) 1998 Global Election Systems Inc.
6*10465441SEvalZero *
7*10465441SEvalZero * The authors hereby grant permission to use, copy, modify, distribute,
8*10465441SEvalZero * and license this software and its documentation for any purpose, provided
9*10465441SEvalZero * that existing copyright notices are retained in all copies and that this
10*10465441SEvalZero * notice and the following disclaimer are included verbatim in any
11*10465441SEvalZero * distributions. No written agreement, license, or royalty fee is required
12*10465441SEvalZero * for any of the authorized uses.
13*10465441SEvalZero *
14*10465441SEvalZero * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR
15*10465441SEvalZero * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16*10465441SEvalZero * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17*10465441SEvalZero * IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
18*10465441SEvalZero * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19*10465441SEvalZero * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20*10465441SEvalZero * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21*10465441SEvalZero * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22*10465441SEvalZero * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23*10465441SEvalZero * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24*10465441SEvalZero *
25*10465441SEvalZero ******************************************************************************
26*10465441SEvalZero * REVISION HISTORY
27*10465441SEvalZero *
28*10465441SEvalZero * 03-01-01 Marc Boucher <[email protected]>
29*10465441SEvalZero *   Ported to lwIP.
30*10465441SEvalZero * 98-05-29 Guy Lancaster <[email protected]>, Global Election Systems Inc.
31*10465441SEvalZero *   Extracted from avos.
32*10465441SEvalZero *****************************************************************************/
33*10465441SEvalZero 
34*10465441SEvalZero #ifndef RANDM_H
35*10465441SEvalZero #define RANDM_H
36*10465441SEvalZero 
37*10465441SEvalZero /***********************
38*10465441SEvalZero *** PUBLIC FUNCTIONS ***
39*10465441SEvalZero ***********************/
40*10465441SEvalZero /*
41*10465441SEvalZero  * Initialize the random number generator.
42*10465441SEvalZero  */
43*10465441SEvalZero void avRandomInit(void);
44*10465441SEvalZero 
45*10465441SEvalZero /*
46*10465441SEvalZero  * Churn the randomness pool on a random event.  Call this early and often
47*10465441SEvalZero  * on random and semi-random system events to build randomness in time for
48*10465441SEvalZero  * usage.  For randomly timed events, pass a null pointer and a zero length
49*10465441SEvalZero  * and this will use the system timer and other sources to add randomness.
50*10465441SEvalZero  * If new random data is available, pass a pointer to that and it will be
51*10465441SEvalZero  * included.
52*10465441SEvalZero  */
53*10465441SEvalZero void avChurnRand(char *randData, u32_t randLen);
54*10465441SEvalZero 
55*10465441SEvalZero /*
56*10465441SEvalZero  * Randomize our random seed value.  To be called for truely random events
57*10465441SEvalZero  * such as user operations and network traffic.
58*10465441SEvalZero  */
59*10465441SEvalZero #if MD5_SUPPORT
60*10465441SEvalZero #define avRandomize() avChurnRand(NULL, 0)
61*10465441SEvalZero #else  /* MD5_SUPPORT */
62*10465441SEvalZero void avRandomize(void);
63*10465441SEvalZero #endif /* MD5_SUPPORT */
64*10465441SEvalZero 
65*10465441SEvalZero /*
66*10465441SEvalZero  * Use the random pool to generate random data.  This degrades to pseudo
67*10465441SEvalZero  * random when used faster than randomness is supplied using churnRand().
68*10465441SEvalZero  * Thus it's important to make sure that the results of this are not
69*10465441SEvalZero  * published directly because one could predict the next result to at
70*10465441SEvalZero  * least some degree.  Also, it's important to get a good seed before
71*10465441SEvalZero  * the first use.
72*10465441SEvalZero  */
73*10465441SEvalZero void avGenRand(char *buf, u32_t bufLen);
74*10465441SEvalZero 
75*10465441SEvalZero /*
76*10465441SEvalZero  * Return a new random number.
77*10465441SEvalZero  */
78*10465441SEvalZero u32_t avRandom(void);
79*10465441SEvalZero 
80*10465441SEvalZero 
81*10465441SEvalZero #endif /* RANDM_H */
82