More changes.
[libgcrypt.git] / cipher / random-daemon.c
1 /* random-daemon.c  - Access to the external random daemon
2  * Copyright (C) 2006  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, write to the Free Software
18  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19  */
20
21 /*
22    The functions here are used by random.c to divert calls to an
23    external random number daemon.  The actual daemon we use is
24    gcryptrnd.  Such a daemon is useful to keep a persistent pool in
25    memory over invocations of a single application and to allow
26    prioritizing access to the actual entropy sources.  The drawback is
27    that we need to use IPC (i.e. unxi domain socket) to convey
28    sensitive data.
29  */
30
31
32 #include <config.h>
33 #include <stdio.h>
34 #include <stdlib.h>
35 #include <assert.h>
36
37 #include "g10lib.h"
38 #include "random.h"
39 #include "ath.h"
40
41
42 /* The lock taken while talking to the daemon.  */
43 static ath_mutex_t daemon_lock = ATH_MUTEX_INITIALIZER;
44
45
46
47 /* Initialize basics of this module. This should be viewed as a
48    constroctur to prepare locking. */
49 void
50 _gcry_daemon_initialize_basics (void)
51 {
52   static int initialized;
53   int err;
54
55   if (!initialized)
56     {
57       initialized = 1;
58       err = ath_mutex_init (&daemon_lock);
59       if (err)
60         log_fatal ("failed to create the daemon lock: %s\n", strerror (err) );
61     }
62 }
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 /* Internal function to fill BUFFER with LENGTH bytes of random.  We
81    support GCRY_STRONG_RANDOM and GCRY_VERY_STRONG_RANDOM here.
82    Return 0 on success. */
83 int
84 _gcry_daemon_randomize (void *buffer, size_t length,
85                         enum gcry_random_level level)
86 {
87   return -1;
88 }
89
90 /* Internal function to return a pointer to a randomized buffer of
91    LEVEL and NBYTES length.  Caller must free the buffer. With SECURE
92    passed as TRUE, allocate the rwanom in secure memory - however note
93    that the IPC mechanism might have not stored it there.  Return a
94    pointer to a newly alloced memory or NULL if it failed.  */
95 void *
96 _gcry_daemon_get_random_bytes (ize_t nbytes, int level, int secure)
97 {
98   return NULL;
99 }
100
101
102 /* Internal function to fill BUFFER with NBYTES of data usable for a
103    nonce.  Returns 0 on success. */
104 int
105 _gcry_daemon_create_nonce (void *buffer, size_t length)
106 {
107   return -1;
108 }