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