ref: a9b51fb3ace7e855670e737257fd4e15344cd5ca
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); }