update docs with descriptions and deprecation
[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 Deprecated:
31
32  #if OPENSSL_API_COMPAT < 0x10100000L
33  void RAND_cleanup(void)
34  #endif
35
36 /* For Win32 only */
37
38  #if OPENSSL_API_COMPAT < 0x10100000L
39  void RAND_screen(void);
40  int RAND_event(UINT, WPARAM, LPARAM);
41  #endif
42
43
44 =head1 DESCRIPTION
45
46 Since the introduction of the ENGINE API, the recommended way of controlling
47 default implementations is by using the ENGINE API functions. The default
48 B<RAND_METHOD>, as set by RAND_set_rand_method() and returned by
49 RAND_get_rand_method(), is only used if no ENGINE has been set as the default
50 "rand" implementation. Hence, these two functions are no longer the recommended
51 way to control defaults.
52
53 If an alternative B<RAND_METHOD> implementation is being used (either set
54 directly or as provided by an ENGINE module), then it is entirely responsible
55 for the generation and management of a cryptographically secure PRNG stream. The
56 mechanisms described below relate solely to the software PRNG implementation
57 built in to OpenSSL and used by default.
58
59 These functions implement a cryptographically secure pseudo-random
60 number generator (PRNG). It is used by other library functions for
61 example to generate random keys, and applications can use it when they
62 need randomness.
63
64 A cryptographic PRNG must be seeded with unpredictable data such as
65 mouse movements or keys pressed at random by the user. This is
66 described in L<RAND_add(3)>. Its state can be saved in a seed file
67 (see L<RAND_load_file(3)>) to avoid having to go through the
68 seeding process whenever the application is started.
69
70 L<RAND_bytes(3)> describes how to obtain random data from the
71 PRNG.
72
73 =head1 SEE ALSO
74
75 L<BN_rand(3)>, L<RAND_add(3)>,
76 L<RAND_load_file(3)>, L<RAND_egd(3)>,
77 L<RAND_bytes(3)>,
78 L<RAND_set_rand_method(3)>,
79 L<RAND_cleanup(3)>
80
81 =head1 COPYRIGHT
82
83 Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
84
85 Licensed under the OpenSSL license (the "License").  You may not use
86 this file except in compliance with the License.  You can obtain a copy
87 in the file LICENSE in the source distribution or at
88 L<https://www.openssl.org/source/license.html>.
89
90 =cut