Commit 219ad639 authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

r8825@totoro: nickm | 2006-10-01 17:41:27 -0400

 Add function to return a random uint64_t.


svn:r8570
parent f6e165ea
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -1645,6 +1645,28 @@ crypto_rand_int(unsigned int max)
  }
}

/** Return a pseudorandom integer, chosen uniformly from the values
 * between 0 and max-1. */
uint64_t
crypto_rand_uint64(uint64_t max)
{
  uint64_t val;
  uint64_t cutoff;
  tor_assert(max < UINT64_MAX);
  tor_assert(max > 0); /* don't div by 0 */

  /* We ignore any values that are >= 'cutoff,' to avoid biasing the
   * distribution with clipping at the upper end of unsigned int's
   * range.
   */
  cutoff = UINT64_MAX - (UINT64_MAX%max);
  while (1) {
    crypto_rand((char*)&val, sizeof(val));
    if (val < cutoff)
      return val % max;
  }
}

/** Return a randomly chosen element of sl; or NULL if sl is empty.
 */
void *
+2 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
#define CRYPTO_H_ID "$Id$"

#include <stdio.h>
#include "torint.h"

/** Length of the output of our message digest. */
#define DIGEST_LEN 20
@@ -152,6 +153,7 @@ int crypto_expand_key_material(const char *key_in, size_t in_len,
int crypto_seed_rng(void);
int crypto_rand(char *to, size_t n);
int crypto_rand_int(unsigned int max);
uint64_t crypto_rand_uint64(uint64_t max);

struct smartlist_t;
void *smartlist_choose(const struct smartlist_t *sl);