]> jfr.im git - solanum.git/blobdiff - libratbox/src/nossl.c
libratbox sync - r25796
[solanum.git] / libratbox / src / nossl.c
index eed302e125ec4a5ddb95c2fcd13b3073e24a5fbe..f3758c5ec93ac4d9b2a8c41f97c186bf980e98c2 100644 (file)
 
 #include <libratbox_config.h>
 #include <ratbox_lib.h>
-
 #if !defined(HAVE_OPENSSL) && !defined(HAVE_GNUTLS)
 
+#include "arc4random.h"
+
 #include <commio-int.h>
 #include <commio-ssl.h>
 
@@ -54,17 +55,43 @@ rb_ssl_listen(rb_fde_t *F, int backlog)
        return -1;
 }
 
+static void
+rb_stir_arc4random(void *unused)
+{
+       arc4random_stir();
+}
+        
+
 int rb_init_prng(const char *path, prng_seed_t seed_type)
 {
-       return -1;
+       /* xxx this ignores the parameters above */
+       arc4random_stir();
+       rb_event_addish("rb_stir_arc4random", rb_stir_arc4random, NULL, 300);
+       return 1;
 }
 
 int
 rb_get_random(void *buf, size_t length)
 {
-       return -1;
+       uint32_t rnd = 0, i;
+       uint8_t *xbuf = buf;    
+       for (i = 0; i < sizeof(length); i++) 
+       {
+               if(i % 4 == 0)
+                       rnd = arc4random();
+               xbuf[i] = rnd;
+               rnd >>= 8;
+       }
+       return 1;
+}
+
+int
+rb_get_pseudo_random(void *buf, size_t length)
+{
+       return rb_get_random(buf, length);  
 }
 
+
 const char *
 rb_get_ssl_strerror(rb_fde_t *F)
 {
@@ -104,7 +131,7 @@ rb_ssl_shutdown(rb_fde_t * F)
 }        
 
 void
-rb_ssl_accept_setup(rb_fde_t * F, int new_fd, struct sockaddr *st, int addrlen)
+rb_ssl_accept_setup(rb_fde_t * F, rb_fde_t *new_F, struct sockaddr *st, int addrlen)
 {
        return;
 }