9e3a5a052b09d78237a781a76b17112e2cdd14dc
[openssl.git] / doc / crypto / rand.pod
1 =pod
2
3 =head1 NAME
4
5 rand - pseudo-random number generator
6
7 =head1 SYNOPSIS
8
9  #include <openssl/rand.h>
10
11  int  RAND_set_rand_engine(ENGINE *engine);
12
13  int  RAND_bytes(unsigned char *buf, int num);
14  int  RAND_pseudo_bytes(unsigned char *buf, int num);
15
16  void RAND_seed(const void *buf, int num);
17  void RAND_add(const void *buf, int num, int entropy);
18  int  RAND_status(void);
19
20  int  RAND_load_file(const char *file, long max_bytes);
21  int  RAND_write_file(const char *file);
22  const char *RAND_file_name(char *file, size_t num);
23
24  int  RAND_egd(const char *path);
25
26  void RAND_set_rand_method(const RAND_METHOD *meth);
27  const RAND_METHOD *RAND_get_rand_method(void);
28  RAND_METHOD *RAND_OpenSSL(void);
29
30  /* For Win32 only */
31  int RAND_event(UINT, WPARAM, LPARAM);
32
33 Deprecated:
34
35  #if OPENSSL_API_COMPAT < 0x10100000L
36  void RAND_cleanup(void)
37  #endif
38
39 =head1 DESCRIPTION
40
41 Since the introduction of the ENGINE API, the recommended way of controlling
42 default implementations is by using the ENGINE API functions. The default
43 B<RAND_METHOD>, as set by RAND_set_rand_method() and returned by
44 RAND_get_rand_method(), is only used if no ENGINE has been set as the default
45 "rand" implementation. Hence, these two functions are no longer the recommended
46 way to control defaults.
47
48 If an alternative B<RAND_METHOD> implementation is being used (either set
49 directly or as provided by an ENGINE module), then it is entirely responsible
50 for the generation and management of a cryptographically secure PRNG stream. The
51 mechanisms described below relate solely to the software PRNG implementation
52 built in to OpenSSL and used by default.
53
54 These functions implement a cryptographically secure pseudo-random
55 number generator (PRNG). It is used by other library functions for
56 example to generate random keys, and applications can use it when they
57 need randomness.
58
59 A cryptographic PRNG must be seeded with unpredictable data such as
60 mouse movements or keys pressed at random by the user. This is
61 described in L<RAND_add(3)>. Its state can be saved in a seed file
62 (see L<RAND_load_file(3)>) to avoid having to go through the
63 seeding process whenever the application is started.
64
65 L<RAND_bytes(3)> describes how to obtain random data from the
66 PRNG.
67
68 =head1 SEE ALSO
69
70 L<BN_rand(3)>, L<RAND_add(3)>,
71 L<RAND_load_file(3)>, L<RAND_egd(3)>,
72 L<RAND_bytes(3)>,
73 L<RAND_set_rand_method(3)>,
74 L<RAND_cleanup(3)>
75
76 =head1 COPYRIGHT
77
78 Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
79
80 Licensed under the OpenSSL license (the "License").  You may not use
81 this file except in compliance with the License.  You can obtain a copy
82 in the file LICENSE in the source distribution or at
83 L<https://www.openssl.org/source/license.html>.
84
85 =cut