X-Git-Url: https://www.tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fcrypto.h;h=ac96ea88e1a676b4bdc902f5641709b7b4f41081;hb=0fe69908838248c28624beb540257892db6bdcbd;hp=c9abddd52cf3d63be39ec62a162caf3b97704fe6;hpb=5822f817aa802c2c5a83e9d99a8ae78cb822799b;p=tinc diff --git a/src/crypto.h b/src/crypto.h index c9abddd5..ac96ea88 100644 --- a/src/crypto.h +++ b/src/crypto.h @@ -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 @@ -20,8 +22,21 @@ 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