A whole bunch of changes to eventually support
[libgcrypt.git] / random / random-fips.c
1 /* random-fips.c - FIPS style random number generator
2  * Copyright (C) 2008  Free Software Foundation, Inc.
3  *
4  * This file is part of Libgcrypt.
5  *
6  * Libgcrypt is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser General Public License as
8  * published by the Free Software Foundation; either version 2.1 of
9  * the License, or (at your option) any later version.
10  *
11  * Libgcrypt is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19
20 /*
21   FIXME:  Explain
22
23
24  */
25
26 #include <config.h>
27 #include <stdio.h>
28 #include <stdlib.h>
29 #include <assert.h>
30 #include <errno.h>
31
32 #include "g10lib.h"
33 #include "random.h"
34 #include "rand-internal.h"
35 #include "ath.h"
36
37
38
39
40 \f
41 /* ---  Functions  --- */
42
43
44 /* Initialize this random subsystem.  If FULL is false, this function
45    merely calls the basic initialization of the module and does not do
46    anything more.  Doing this is not really required but when running
47    in a threaded environment we might get a race condition
48    otherwise. */
49 void
50 _gcry_rngfips_initialize (int full)
51 {
52 }
53
54
55 void
56 _gcry_rngfips_dump_stats (void)
57 {
58 }
59
60
61 /* This function returns true if no real RNG is available or the
62    quality of the RNG has been degraded for test purposes.  */
63 int
64 _gcry_rngfips_is_faked (void)
65 {
66   return 0;  /* Faked random is not allowed.  */
67 }
68
69
70 /* Add BUFLEN bytes from BUF to the internal random pool.  QUALITY
71    should be in the range of 0..100 to indicate the goodness of the
72    entropy added, or -1 for goodness not known.  */
73 gcry_error_t
74 _gcry_rngfips_add_bytes (const void *buf, size_t buflen, int quality)
75 {
76   return 0;
77 }   
78
79     
80 /* Public function to fill the buffer with LENGTH bytes of
81    cryptographically strong random bytes.  Level GCRY_WEAK_RANDOM is
82    here mapped to GCRY_STRING_RANDOM, GCRY_STRONG_RANDOM is strong
83    enough for most usage, GCRY_VERY_STRONG_RANDOM is good for key
84    generation stuff but may be very slow.  */
85 void
86 _gcry_rngfips_randomize (void *buffer, size_t length,
87                          enum gcry_random_level level)
88 {
89   BUG ();
90 }
91
92
93 /* Create an unpredicable nonce of LENGTH bytes in BUFFER. */
94 void
95 _gcry_rngfips_create_nonce (void *buffer, size_t length)
96 {
97   /* No special nonce support here; divert to the standard random
98      function.  */
99   _gcry_rngfips_randomize (buffer, length, GCRY_WEAK_RANDOM);
100 }
101
102