155714Skris/* crypto/rand/rand.h */
255714Skris/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
355714Skris * All rights reserved.
455714Skris *
555714Skris * This package is an SSL implementation written
655714Skris * by Eric Young (eay@cryptsoft.com).
755714Skris * The implementation was written so as to conform with Netscapes SSL.
8296465Sdelphij *
955714Skris * This library is free for commercial and non-commercial use as long as
1055714Skris * the following conditions are aheared to.  The following conditions
1155714Skris * apply to all code found in this distribution, be it the RC4, RSA,
1255714Skris * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
1355714Skris * included with this distribution is covered by the same copyright terms
1455714Skris * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15296465Sdelphij *
1655714Skris * Copyright remains Eric Young's, and as such any Copyright notices in
1755714Skris * the code are not to be removed.
1855714Skris * If this package is used in a product, Eric Young should be given attribution
1955714Skris * as the author of the parts of the library used.
2055714Skris * This can be in the form of a textual message at program startup or
2155714Skris * in documentation (online or textual) provided with the package.
22296465Sdelphij *
2355714Skris * Redistribution and use in source and binary forms, with or without
2455714Skris * modification, are permitted provided that the following conditions
2555714Skris * are met:
2655714Skris * 1. Redistributions of source code must retain the copyright
2755714Skris *    notice, this list of conditions and the following disclaimer.
2855714Skris * 2. Redistributions in binary form must reproduce the above copyright
2955714Skris *    notice, this list of conditions and the following disclaimer in the
3055714Skris *    documentation and/or other materials provided with the distribution.
3155714Skris * 3. All advertising materials mentioning features or use of this software
3255714Skris *    must display the following acknowledgement:
3355714Skris *    "This product includes cryptographic software written by
3455714Skris *     Eric Young (eay@cryptsoft.com)"
3555714Skris *    The word 'cryptographic' can be left out if the rouines from the library
3655714Skris *    being used are not cryptographic related :-).
37296465Sdelphij * 4. If you include any Windows specific code (or a derivative thereof) from
3855714Skris *    the apps directory (application code) you must include an acknowledgement:
3955714Skris *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40296465Sdelphij *
4155714Skris * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
4255714Skris * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
4355714Skris * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
4455714Skris * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
4555714Skris * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
4655714Skris * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
4755714Skris * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4855714Skris * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
4955714Skris * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
5055714Skris * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
5155714Skris * SUCH DAMAGE.
52296465Sdelphij *
5355714Skris * The licence and distribution terms for any publically available version or
5455714Skris * derivative of this code cannot be changed.  i.e. this code cannot simply be
5555714Skris * copied and put under another distribution licence
5655714Skris * [including the GNU Public Licence.]
5755714Skris */
5855714Skris
5955714Skris#ifndef HEADER_RAND_H
60296465Sdelphij# define HEADER_RAND_H
6155714Skris
62296465Sdelphij# include <stdlib.h>
63296465Sdelphij# include <openssl/ossl_typ.h>
64296465Sdelphij# include <openssl/e_os2.h>
6576866Skris
66296465Sdelphij# if defined(OPENSSL_SYS_WINDOWS)
67296465Sdelphij#  include <windows.h>
68296465Sdelphij# endif
69109998Smarkm
7055714Skris#ifdef  __cplusplus
7155714Skrisextern "C" {
7255714Skris#endif
7355714Skris
74296465Sdelphij# if defined(OPENSSL_FIPS)
75296465Sdelphij#  define FIPS_RAND_SIZE_T int
76296465Sdelphij# endif
77142425Snectar
78160814Ssimon/* Already defined in ossl_typ.h */
79160814Ssimon/* typedef struct rand_meth_st RAND_METHOD; */
80160814Ssimon
81296465Sdelphijstruct rand_meth_st {
82296465Sdelphij    void (*seed) (const void *buf, int num);
83296465Sdelphij    int (*bytes) (unsigned char *buf, int num);
84296465Sdelphij    void (*cleanup) (void);
85296465Sdelphij    void (*add) (const void *buf, int num, double entropy);
86296465Sdelphij    int (*pseudorand) (unsigned char *buf, int num);
87296465Sdelphij    int (*status) (void);
88296465Sdelphij};
8955714Skris
90296465Sdelphij# ifdef BN_DEBUG
9159191Skrisextern int rand_predictable;
92296465Sdelphij# endif
9359191Skris
94109998Smarkmint RAND_set_rand_method(const RAND_METHOD *meth);
95109998Smarkmconst RAND_METHOD *RAND_get_rand_method(void);
96296465Sdelphij# ifndef OPENSSL_NO_ENGINE
97109998Smarkmint RAND_set_rand_engine(ENGINE *engine);
98296465Sdelphij# endif
9955714SkrisRAND_METHOD *RAND_SSLeay(void);
100296465Sdelphijvoid RAND_cleanup(void);
101296465Sdelphijint RAND_bytes(unsigned char *buf, int num);
102296465Sdelphijint RAND_pseudo_bytes(unsigned char *buf, int num);
103296465Sdelphijvoid RAND_seed(const void *buf, int num);
104296465Sdelphijvoid RAND_add(const void *buf, int num, double entropy);
105296465Sdelphijint RAND_load_file(const char *file, long max_bytes);
106296465Sdelphijint RAND_write_file(const char *file);
107296465Sdelphijconst char *RAND_file_name(char *file, size_t num);
10859191Skrisint RAND_status(void);
109109998Smarkmint RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes);
11059191Skrisint RAND_egd(const char *path);
111296465Sdelphijint RAND_egd_bytes(const char *path, int bytes);
11268651Skrisint RAND_poll(void);
113296465Sdelphij# ifndef OPENSSL_NO_ENGINE
114296465Sdelphij#  ifdef OPENSSL_FIPS
115194206Ssimonvoid int_RAND_init_engine_callbacks(void);
116296465Sdelphijvoid int_RAND_set_callbacks(int (*set_rand_func) (const RAND_METHOD *meth,
117296465Sdelphij                                                  const RAND_METHOD **pmeth),
118296465Sdelphij                            const RAND_METHOD *(*get_rand_func) (const
119296465Sdelphij                                                                 RAND_METHOD
120296465Sdelphij                                                                 **pmeth));
121296465Sdelphij#  endif
122296465Sdelphij# endif
12368651Skris
124296465Sdelphij# if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32)
12568651Skris
12655714Skrisvoid RAND_screen(void);
12759191Skrisint RAND_event(UINT, WPARAM, LPARAM);
12868651Skris
129296465Sdelphij# endif
13059191Skris
13159191Skris/* BEGIN ERROR CODES */
132296465Sdelphij/*
133296465Sdelphij * The following lines are auto generated by the script mkerr.pl. Any changes
13459191Skris * made after this point may be overwritten when the script is next run.
13559191Skris */
13689837Skrisvoid ERR_load_RAND_strings(void);
13759191Skris
13859191Skris/* Error codes for the RAND functions. */
13959191Skris
14059191Skris/* Function codes. */
141296465Sdelphij# define RAND_F_ENG_RAND_GET_RAND_METHOD                  108
142296465Sdelphij# define RAND_F_FIPS_RAND                                 103
143296465Sdelphij# define RAND_F_FIPS_RAND_BYTES                           102
144296465Sdelphij# define RAND_F_FIPS_RAND_GET_RAND_METHOD                 109
145296465Sdelphij# define RAND_F_FIPS_RAND_SET_DT                          106
146296465Sdelphij# define RAND_F_FIPS_SET_DT                               104
147296465Sdelphij# define RAND_F_FIPS_SET_PRNG_SEED                        107
148296465Sdelphij# define RAND_F_FIPS_SET_TEST_MODE                        105
149296465Sdelphij# define RAND_F_RAND_GET_RAND_METHOD                      101
150296465Sdelphij# define RAND_F_SSLEAY_RAND_BYTES                         100
15159191Skris
15259191Skris/* Reason codes. */
153296465Sdelphij# define RAND_R_NON_FIPS_METHOD                           105
154296465Sdelphij# define RAND_R_NOT_IN_TEST_MODE                          106
155296465Sdelphij# define RAND_R_NO_KEY_SET                                107
156296465Sdelphij# define RAND_R_PRNG_ASKING_FOR_TOO_MUCH                  101
157296465Sdelphij# define RAND_R_PRNG_ERROR                                108
158296465Sdelphij# define RAND_R_PRNG_KEYED                                109
159296465Sdelphij# define RAND_R_PRNG_NOT_REKEYED                          102
160296465Sdelphij# define RAND_R_PRNG_NOT_RESEEDED                         103
161296465Sdelphij# define RAND_R_PRNG_NOT_SEEDED                           100
162296465Sdelphij# define RAND_R_PRNG_SEED_MUST_NOT_MATCH_KEY              110
163296465Sdelphij# define RAND_R_PRNG_STUCK                                104
16459191Skris
16589837Skris#ifdef  __cplusplus
16689837Skris}
16755714Skris#endif
16889837Skris#endif
169