ref: 17f7f6be4e1a316c0f5f26ff70e047aece4de2bc
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; }