rsc | b3f6179 | 2004-03-21 14:06:38 +0000 | [diff] [blame] | 1 | #include "os.h" |
2 | #include <mp.h> | ||||
3 | #include "dat.h" | ||||
4 | |||||
5 | // convert a little endian byte array (least significant byte first) to an mpint | ||||
6 | mpint* | ||||
7 | letomp(uchar *s, uint n, mpint *b) | ||||
8 | { | ||||
9 | int i=0, m = 0; | ||||
10 | mpdigit x=0; | ||||
11 | |||||
12 | if(b == nil) | ||||
13 | b = mpnew(0); | ||||
14 | mpbits(b, 8*n); | ||||
15 | for(; n > 0; n--){ | ||||
16 | x |= ((mpdigit)(*s++)) << i; | ||||
17 | i += 8; | ||||
18 | if(i == Dbits){ | ||||
19 | b->p[m++] = x; | ||||
20 | i = 0; | ||||
21 | x = 0; | ||||
22 | } | ||||
23 | } | ||||
24 | if(i > 0) | ||||
25 | b->p[m++] = x; | ||||
26 | b->top = m; | ||||
27 | return b; | ||||
28 | } |