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