1/*
2 * Copyright (c) 2006 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice, this list of conditions and the following disclaimer.
12 *
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 *
17 * 3. Neither the name of the Institute nor the names of its contributors
18 *    may be used to endorse or promote products derived from this software
19 *    without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33
34/*
35 * $Id$
36 */
37
38#ifndef _HEIM_RAND_H
39#define _HEIM_RAND_H 1
40
41typedef struct RAND_METHOD RAND_METHOD;
42
43#include <hcrypto/engine.h>
44
45/* symbol renaming */
46#define RAND_bytes hc_RAND_bytes
47#define RAND_pseudo_bytes hc_RAND_pseudo_bytes
48#define RAND_seed hc_RAND_seed
49#define RAND_cleanup hc_RAND_cleanup
50#define RAND_add hc_RAND_add
51#define RAND_set_rand_method hc_RAND_set_rand_method
52#define RAND_get_rand_method hc_RAND_get_rand_method
53#define RAND_set_rand_engine hc_RAND_set_rand_engine
54#define RAND_file_name hc_RAND_file_name
55#define RAND_load_file hc_RAND_load_file
56#define RAND_write_file hc_RAND_write_file
57#define RAND_status hc_RAND_status
58#define RAND_egd hc_RAND_egd
59#define RAND_egd_bytes hc_RAND_egd_bytes
60#define RAND_fortuna_method hc_RAND_fortuna_method
61#define RAND_egd_method hc_RAND_egd_method
62#define RAND_unix_method hc_RAND_unix_method
63#define RAND_cc_method hc_RAND_cc_method
64#define RAND_w32crypto_method hc_RAND_w32crypto_method
65
66/*
67 *
68 */
69
70struct RAND_METHOD
71{
72    void (*seed)(const void *, int);
73    int (*bytes)(unsigned char *, int);
74    void (*cleanup)(void);
75    void (*add)(const void *, int, double);
76    int (*pseudorand)(unsigned char *, int);
77    int (*status)(void);
78};
79
80/*
81 *
82 */
83
84int	RAND_bytes(void *, size_t num);
85int	RAND_pseudo_bytes(void *, size_t);
86void	RAND_seed(const void *, size_t);
87void	RAND_cleanup(void);
88void	RAND_add(const void *, size_t, double);
89
90int	RAND_set_rand_method(const RAND_METHOD *);
91const RAND_METHOD *
92	RAND_get_rand_method(void);
93int	RAND_set_rand_engine(ENGINE *);
94
95const char *
96	RAND_file_name(char *, size_t);
97int	RAND_load_file(const char *, size_t);
98int	RAND_write_file(const char *);
99int	RAND_status(void);
100int	RAND_egd(const char *);
101int	RAND_egd_bytes(const char *, int);
102
103
104const RAND_METHOD *	RAND_fortuna_method(void);
105const RAND_METHOD *	RAND_unix_method(void);
106const RAND_METHOD *	RAND_cc_method(void);
107const RAND_METHOD *	RAND_egd_method(void);
108const RAND_METHOD *	RAND_w32crypto_method(void);
109
110#endif /* _HEIM_RAND_H */
111