Refactor crypto RNG; add getrandom() support
[tinc] / src / crypto.h
index c9abddd..ac96ea8 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef TINC_CRYPTO_H
 #define TINC_CRYPTO_H
 
+#include "system.h"
+
 /*
     crypto.h -- header for crypto.c
     Copyright (C) 2007-2013 Guus Sliepen <guus@tinc-vpn.org>
     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 
-extern void crypto_init();
-extern void crypto_exit();
-extern void randomize(void *, size_t);
+extern void crypto_init(void);
+extern uint64_t xoshiro(void);
+extern void prng_init(void);
+extern void prng_randomize(void *buf, size_t buflen);
+
+static inline uint32_t prng(uint32_t limit) {
+       uint64_t bins = UINT64_MAX / limit;
+       uint64_t reject_after = bins * limit;
+       uint64_t value;
+
+       do {
+               value = xoshiro();
+       } while(value >= reject_after);
+
+       return value / bins;
+}
 
 #endif