ref: 6a51a03b801b21f42e2eb3dfa02c99e96c86b10c
dir: /3rd/mp/mprand.c/
#include "platform.h"
#include "mp.h"
mpint *
mprand(int bits, void (*gen)(uint8_t*, int), mpint *b)
{
mpdigit mask;
if(b == nil)
b = mpnew(bits);
else
mpbits(b, bits);
b->sign = 1;
b->top = DIGITS(bits);
(*gen)((uint8_t*)b->p, b->top*Dbytes);
mask = ((mpdigit)1 << (bits%Dbits))-1;
if(mask != 0)
b->p[b->top-1] &= mask;
return mpnorm(b);
}