summaryrefslogtreecommitdiff
path: root/src/include/skalibs/unirandom.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/skalibs/unirandom.h')
-rw-r--r--src/include/skalibs/unirandom.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/include/skalibs/unirandom.h b/src/include/skalibs/unirandom.h
new file mode 100644
index 0000000..fc87886
--- /dev/null
+++ b/src/include/skalibs/unirandom.h
@@ -0,0 +1,57 @@
+/* ISC license. */
+
+#ifndef UNIRANDOM_H
+#define UNIRANDOM_H
+
+#include <skalibs/buffer.h>
+#include <skalibs/surf.h>
+
+#define RANDOMBUF_BUFSIZE 257
+
+struct randombuf_s
+{
+ char buf[RANDOMBUF_BUFSIZE] ;
+ buffer b ;
+ unsigned int nb : 1 ;
+} ;
+#define RANDOMBUF_ZERO { .buf = "", .b = BUFFER_INIT(0, -1, 0, 0), .nb = 0 }
+
+struct randomegd_s
+{
+ int fd ;
+} ;
+
+union unirandominfo
+{
+ SURFSchedule surf_ctx ;
+ struct randombuf_s device ;
+ struct randomegd_s egd ;
+} ;
+
+#define UNIRANDOMINFO_ZERO { .surf_ctx = SURFSCHEDULE_ZERO }
+
+typedef struct unirandom unirandom, *unirandom_ref, **unirandom_ref_ref ;
+struct unirandom
+{
+ unsigned int (*readb) (union unirandominfo *, char *, unsigned int) ;
+ unsigned int (*readnb) (union unirandominfo *, char *, unsigned int) ;
+ int (*init) (union unirandominfo *) ;
+ int (*finish) (union unirandominfo *) ;
+ union unirandominfo data ;
+ unsigned int initted : 1 ;
+} ;
+
+#define UNIRANDOM_ZERO { .readb = 0, .readnb = 0, .init = 0, .finish = 0, .data = UNIRANDOMINFO_ZERO, .initted = 0 }
+
+extern int unirandom_register_devrandom (unirandom_ref) ;
+extern int unirandom_register_devurandom (unirandom_ref) ;
+extern int unirandom_register_hasegd (unirandom_ref) ;
+extern int unirandom_register_surf (unirandom_ref) ;
+
+extern int unirandom_init (unirandom_ref) ;
+extern unsigned int unirandom_readb (unirandom_ref, char *, unsigned int) ;
+extern unsigned int unirandom_readnb (unirandom_ref, char *, unsigned int) ;
+extern int unirandom_finish (unirandom_ref) ;
+
+
+#endif