Blob
1 #include "os.h"2 #include <mp.h>3 #include "dat.h"5 /* convert a big-endian byte array (most significant byte first) to an mpint */6 mpint*7 betomp(uchar *p, uint n, mpint *b)8 {9 int m, s;10 mpdigit x;12 if(b == nil)13 b = mpnew(0);15 /* dump leading zeros */16 while(*p == 0 && n > 1){17 p++;18 n--;19 }21 /* get the space */22 mpbits(b, n*8);23 b->top = DIGITS(n*8);24 m = b->top-1;26 /* first digit might not be Dbytes long */27 s = ((n-1)*8)%Dbits;28 x = 0;29 for(; n > 0; n--){30 x |= ((mpdigit)(*p++)) << s;31 s -= 8;32 if(s < 0){33 b->p[m--] = x;34 s = Dbits-8;35 x = 0;36 }37 }39 return b;40 }