ref: 5efe85a961d95f1b7935fe830933c84b5bf7c7b3
dir: /sys/src/libmp/port/mpnrand.c/
#include "os.h"
#include <mp.h>
#include "dat.h"
/* return uniform random [0..n-1] */
mpint*
mpnrand(mpint *n, void (*gen)(uchar*, int), mpint *b)
{
int bits;
bits = mpsignif(n);
if(bits == 0)
abort();
if(b == nil){
b = mpnew(bits);
setmalloctag(b, getcallerpc(&n));
}
do {
mprand(bits, gen, b);
} while(mpmagcmp(b, n) >= 0);
return b;
}