letomp.c 432 B

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