1 /**********************************************************************
2 * Copyright (c) 2013, 2014 Pieter Wuille *
3 * Distributed under the MIT software license, see the accompanying *
4 * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
5 **********************************************************************/
7 #ifndef _SECP256K1_TESTRAND_H_
8 #define _SECP256K1_TESTRAND_H_
10 #if defined HAVE_CONFIG_H
11 #include "libsecp256k1-config.h"
14 /* A non-cryptographic RNG used only for test infrastructure. */
16 /** Seed the pseudorandom number generator for testing. */
17 SECP256K1_INLINE static void secp256k1_rand_seed(const unsigned char *seed16);
19 /** Generate a pseudorandom number in the range [0..2**32-1]. */
20 static uint32_t secp256k1_rand32(void);
22 /** Generate a pseudorandom number in the range [0..2**bits-1]. Bits must be 1 or
24 static uint32_t secp256k1_rand_bits(int bits);
26 /** Generate a pseudorandom number in the range [0..range-1]. */
27 static uint32_t secp256k1_rand_int(uint32_t range);
29 /** Generate a pseudorandom 32-byte array. */
30 static void secp256k1_rand256(unsigned char *b32);
32 /** Generate a pseudorandom 32-byte array with long sequences of zero and one bits. */
33 static void secp256k1_rand256_test(unsigned char *b32);
35 /** Generate pseudorandom bytes with long sequences of zero and one bits. */
36 static void secp256k1_rand_bytes_test(unsigned char *bytes, size_t len);