xref: /freebsd/crypto/openssl/doc/man3/RAND_set_rand_method.pod (revision ec0ea6efa1ad229d75c394c1a9b9cac33af2b1d3)
1=pod
2
3=head1 NAME
4
5RAND_set_rand_method, RAND_get_rand_method, RAND_OpenSSL - select RAND method
6
7=head1 SYNOPSIS
8
9 #include <openssl/rand.h>
10
11 RAND_METHOD *RAND_OpenSSL(void);
12
13 int RAND_set_rand_method(const RAND_METHOD *meth);
14
15 const RAND_METHOD *RAND_get_rand_method(void);
16
17=head1 DESCRIPTION
18
19A B<RAND_METHOD> specifies the functions that OpenSSL uses for random number
20generation.
21
22RAND_OpenSSL() returns the default B<RAND_METHOD> implementation by OpenSSL.
23This implementation ensures that the PRNG state is unique for each thread.
24
25If an B<ENGINE> is loaded that provides the RAND API, however, it will
26be used instead of the method returned by RAND_OpenSSL().
27
28RAND_set_rand_method() makes B<meth> the method for PRNG use.  If an
29ENGINE was providing the method, it will be released first.
30
31RAND_get_rand_method() returns a pointer to the current B<RAND_METHOD>.
32
33=head1 THE RAND_METHOD STRUCTURE
34
35 typedef struct rand_meth_st {
36     int (*seed)(const void *buf, int num);
37     int (*bytes)(unsigned char *buf, int num);
38     void (*cleanup)(void);
39     int (*add)(const void *buf, int num, double entropy);
40     int (*pseudorand)(unsigned char *buf, int num);
41     int (*status)(void);
42 } RAND_METHOD;
43
44The fields point to functions that are used by, in order,
45RAND_seed(), RAND_bytes(), internal RAND cleanup, RAND_add(), RAND_pseudo_rand()
46and RAND_status().
47Each pointer may be NULL if the function is not implemented.
48
49=head1 RETURN VALUES
50
51RAND_set_rand_method() returns 1 on success and 0 on failure.
52RAND_get_rand_method() and RAND_OpenSSL() return pointers to the respective
53methods.
54
55=head1 SEE ALSO
56
57L<RAND_bytes(3)>,
58L<ENGINE_by_id(3)>,
59L<RAND(7)>
60
61=head1 COPYRIGHT
62
63Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
64
65Licensed under the OpenSSL license (the "License").  You may not use
66this file except in compliance with the License.  You can obtain a copy
67in the file LICENSE in the source distribution or at
68L<https://www.openssl.org/source/license.html>.
69
70=cut
71