#include "os.h" #include #include "dat.h" /* convert a big-endian byte array (most significant byte first) to an mpint */ mpint* betomp(uchar *p, uint n, mpint *b) { int m, s; mpdigit x; if(b == nil) b = mpnew(0); /* dump leading zeros */ while(*p == 0 && n > 1){ p++; n--; } /* get the space */ mpbits(b, n*8); b->top = DIGITS(n*8); m = b->top-1; /* first digit might not be Dbytes long */ s = ((n-1)*8)%Dbits; x = 0; for(; n > 0; n--){ x |= ((mpdigit)(*p++)) << s; s -= 8; if(s < 0){ b->p[m--] = x; s = Dbits-8; x = 0; } } return b; }